Сторно в операции

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. maurita23 11.11.21 10:23 Сейчас в теме
В документе Операция сторно нужно вместо одного документа автоматически выбрать несколько (они копятся на опредеелнном счете) и их автоматически сторникровать. Конфа доработана, много субконто добавлены в счете и не программно тоже.
Выбор, заполнение - всё сдлелано. ЧТобы было видно все субконта использую типовую процедуру СформироватьДвиженияСторноНаСервере, но в табличную часть выводятся только проводки последнего документа.
Очистку я убрала.
Затык в этой процедуре, как я понимаю, ПрочитатьДвиженияДокумента.
АктивностьДвижений = Истина;
	
	Для каждого СтрокаРегистра Из Регистры Цикл
		
		Если ЗначениеЗаполнено(ДокументДвижений)
			И ДокументДвижений <> Объект.Ссылка Тогда
			Если НЕ СтрокаРегистра.ПравоНаИзменение Тогда
				Продолжить;
			КонецЕсли;
		КонецЕсли;
		
		Если СтрокаРегистра.Отображение Тогда
			ИмяРеквизита = СтрокаРегистра.Имя + "НаборЗаписей";
			НаборЗаписей = РеквизитФормыВЗначение(ИмяРеквизита);
			НаборЗаписей.Отбор.Регистратор.Установить(ДокументДвижений);
			НаборЗаписей.Прочитать();
			ЗначениеВРеквизитФормы(НаборЗаписей, ИмяРеквизита);
			Если ДокументДвижений = Объект.Ссылка Тогда
				СтрокаРегистра.Записывать = ЭтотОбъект[ИмяРеквизита].Количество() > 0;
				Если СтрокаРегистра.Записывать Тогда
					АктивностьДвижений = АктивностьДвижений И ЭтотОбъект[ИмяРеквизита][0].Активность;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
Как-то можно сделать, чтобы движения не удалялись, а добавлялись?

Вот процедура 
Процедура СформироватьДвиженияСторноНаСервере1(СторДок, Объект)
	
	Если НЕ ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	//ОчиститьДвижения();
	//Объект.ТаблицаРегистровНакопления.Очистить();
	//Объект.ТаблицаРегистровСведений.Очистить();
	
	РегистрыИсключения = Новый Структура;
	Для каждого Регистр Из Метаданные.РегистрыСведений Цикл
		РегистрыИсключения.Вставить(Регистр.Имя); // Регистры сведений не сторнируются
	КонецЦикла;
	УстановитьПривилегированныйРежим(Истина);
	РегистрыСДвижениями = ПроведениеСервер.ПолучитьМассивИспользуемыхРегистров(
		СторДок, СторДок.Метаданные().Движения, РегистрыИсключения);
	УстановитьПривилегированныйРежим(Ложь);
	УстановитьОтображениеВТаблицеРегистров(РегистрыСДвижениями);
	СоздатьРеквизитыФормы();
	ПрочитатьДвиженияДокумента(СторДок);
	СторнироватьДвижения();
	СоздатьЭлементыФормы();
	
	ПересчитатьСуммуОперации(ЭтотОбъект);
	Попытка
	Объект.Содержание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'Сторно документа ""%1""'; en = '""%1"" Document Reversing Entry'"),
		Строка(СторДок));
	Исключение
	КонецПопытки;

    ЗаполнитьДобавленныеКолонкиТаблиц();
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 11.11.21 18:16 Сейчас в теме
(1)
НаборЗаписей.Отбор.Регистратор.Установить(ДокументДвижений);
НаборЗаписей.Прочитать();
ЗначениеВРеквизитФормы(НаборЗаписей, ИмяРеквизита);

Вот этот код надо переделать.
3. maurita23 16.11.21 16:43 Сейчас в теме
(2) Я поняла, что этот код надо переделать. Не могу найти как можно заменить ЗначениеВРеквизитФормы(). Пробовала всё выгрузить в таблицу. В таблицу выгружается, но не понятно, что дальше с этим делать.
Мне надо, чтобы всё, что я получаю десь обработалось в следующей процедуре:

Процедура СторнироватьДвижения()
	
	Для каждого СтрокаРегистра Из Регистры Цикл

		Если НЕ СтрокаРегистра.ЕстьРеквизит Тогда
			Продолжить;
		КонецЕсли;
		
		ИмяРеквизита       = СтрокаРегистра.Имя + "НаборЗаписей";
		МетаданныеРегистра = РеквизитФормыВЗначение(ИмяРеквизита).Метаданные();

		Для каждого Движение Из ЭтотОбъект[ИмяРеквизита] Цикл

			Если СтрокаРегистра.ТипРегистра = "РегистрБухгалтерии" Тогда
				Для каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл
					Если Ресурс.ПризнакУчета = Неопределено Тогда
						Движение[Ресурс.Имя] = - Движение[Ресурс.Имя];
					Иначе
						Если ЗначениеЗаполнено(Движение[Ресурс.Имя + "Дт"]) Тогда
							Движение[Ресурс.Имя + "Дт"] = - Движение[Ресурс.Имя + "Дт"];
						КонецЕсли;
						Если ЗначениеЗаполнено(Движение[Ресурс.Имя + "Кт"]) Тогда
							Движение[Ресурс.Имя + "Кт"] = - Движение[Ресурс.Имя + "Кт"];
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;
			Иначе
				Для каждого Ресурс Из МетаданныеРегистра.Ресурсы Цикл
					Движение[Ресурс.Имя] = - Движение[Ресурс.Имя];
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
КонецЦикла;
	
КонецПроцедуры
Показать
4. RustamZz 16.11.21 16:46 Сейчас в теме
(3) Надо набор собрать по нескольким регистраторам. Таблица значений и Набор записей разные объекты их нельзя заменить один на другой.
5. maurita23 16.11.21 16:51 Сейчас в теме
(4)т.е. для каждого регистратора в цикле надо создать набор вот так?
Для каждого ... Цикл            
ИмяРеквизита = СтрокаРегистра.Имя + "НаборЗаписей";
            НаборЗаписей = РеквизитФормыВЗначение(ИмяРеквизита);
            НаборЗаписей.Отбор.Регистратор.Установить(ДокументДвижений);
            НаборЗаписей.Прочитать();
Конецикла

Разве он не будет перезаписываться?
Или я не права?
6. RustamZz 16.11.21 17:55 Сейчас в теме
(5) Да так будет перезаписываться. Нужно построчно добавлять к существующим и желательно не гоняя наборы из формы в значения и обратно.
7. maurita23 17.11.21 08:43 Сейчас в теме
(6) Разве можно добавлять к уже существующему набору записей? На сколько я понимаю, это разные наборы записей. И я не понимаю, как их можно добавить к существующему.
8. RustamZz 17.11.21 11:04 Сейчас в теме
(7) Если есть сомнения можно проверить в синтакс-помошнике.
РегистрНакопленияНаборЗаписей.<Имя регистра накопления> (AccumulationRegisterRecordSet.<Accumulation register name>)
Добавить (Add)
Синтаксис:
Добавить()
Возвращаемое значение:
Тип: РегистрНакопленияЗапись.<Имя регистра накопления>.
Описание:
Добавляет новую запись в набор.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
9. maurita23 17.11.21 11:26 Сейчас в теме
(8) У меня регистр бухгалтерии хозрасчетный. Так не получится это сделать(
10. RustamZz 17.11.21 11:28 Сейчас в теме
(9) Синтакс-помощник украден?
11. maurita23 17.11.21 11:42 Сейчас в теме
(10) Почему? Я читала
Добавить (Add)
Синтаксис:
Добавить()
Возвращаемое значение:
Тип: РегистрБухгалтерииЗапись.<Имя регистра бухгалтерии>.
Описание:
Добавляет новую запись регистра в набор.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.

Но в итоге пишет, что такой метод не найден.
РегистрыБухгалтерии.Хозрасчетный.Добавить()
А, поняла, попробую переделать.
12. maurita23 17.11.21 11:58 Сейчас в теме
(10) Лучше, наверно, обработку создать и каждую проводку в свой документ гнать. Единственное, не знаю, как Регистры инициализировать(

Для каждого СтрокаРегистра Из Регистры Цикл
13. maurita23 17.11.21 12:45 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот