ОперацияБух в БП 3.0

1. Snus71 233 02.08.21 15:00 Сейчас в теме +0.47 $m
Не могу понять как в цикле добалять проводки к документу ОперацияБух в БП 3.0. Ведь табличной части в нем нет. Делаю так: создаю пустой документ, записываю. Потом в цикле пытаюсь добавить к нему проводки, вызывая процедуру

&НаСервере
Процедура СоздатьПроводкуБух(Струк)
	ДокСсылка = Документы.ОперацияБух.НайтиПоНомеру(Струк.НомерДока, Струк.ДатаДока);
	Если НЕ ДокСсылка.Пустая() Тогда
		Док = ДокСсылка.ПолучитьОбъект();
		Проводка = Док.Движения.Хозрасчетный.Добавить();
		Проводка.Активность = Истина;
		Проводка.Сумма = Струк.Сумма;
		Проводка.Регистратор = Док.Ссылка;
		Проводка.Организация = Док.Организация;
		Проводка.Период = Струк.ДатаДока;
		Проводка.Содержание = Струк.Содержание;
		Проводка.СчетДт = ОпределитьСчет(Струк.СчетДт);
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,0,Струк.СубконтоДт));
        Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,1,Струк.СубконтоДт));		
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,2,Струк.СубконтоДт));
		Проводка.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеДт);
		Проводка.СчетКт = ОпределитьСчет(Струк.СчетКт);
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,0,Струк.СубконтоКт));
        Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,1,Струк.СубконтоКт));		
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,2,Струк.СубконтоКт));
		Проводка.ПодразделениеКт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеКт);
		Док.Движения.Хозрасчетный.Записать();
		Док.Записать(РежимЗаписиДокумента.Запись);
	Иначе
		Сообщить("Не найден документ "+Струк.НомерДока+" от "+Струк.ДатаДока, СтатусСообщения.Важное);
	КонецЕсли;
КонецПроцедуры		

Показать


в результате получаю только одну последнюю проводку и всё.
Что я делаю не так?

ЗЫ. На определение счета и субконт внимания не обращайте - там всё так.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. Snus71 233 02.08.21 15:38 Сейчас в теме
вопрос снят
решил вот таким кодом
&НаСервере
Процедура СоздатьПроводкуБух(Струк)
	Док = Документы.ОперацияБух.НайтиПоНомеру(Струк.НомерДока, Струк.ДатаДока);
	Если НЕ Док.Пустая() Тогда
		Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		Набор.Отбор.Регистратор.Установить(Док.Ссылка);
		Набор.Прочитать();
		Проводка = Набор.Добавить();
		Проводка.Активность = Истина;
		Проводка.Сумма = Струк.Сумма;
		Проводка.Организация = Струк.Организация;
		Проводка.Период = Струк.ДатаДока;
		Проводка.Содержание = Струк.Содержание;
		Проводка.СчетДт = ОпределитьСчет(Струк.СчетДт);
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,0,Струк.СубконтоДт));
        Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,1,Струк.СубконтоДт));		
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,2,Струк.СубконтоДт));
		Проводка.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеДт);
		Проводка.СчетКт = ОпределитьСчет(Струк.СчетКт);
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,0,Струк.СубконтоКт));
        Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,1,Струк.СубконтоКт));		
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,2,Струк.СубконтоКт));
		Проводка.ПодразделениеКт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеКт);
		Набор.Записать(Истина);
	Иначе
		Сообщить("Не найден документ "+Струк.НомерДока+" от "+Струк.ДатаДока, СтатусСообщения.Важное);
	КонецЕсли;
КонецПроцедуры		
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 02.08.21 15:10 Сейчас в теме
(1)
1. зачем вы ищите документ? У вас есть ссылка на него после записи.

2. Необходимо в цикле выполнять весь код, начинающийся на "Проводка".

3. Док.Движения.Хозрасчетный.Записать() необходимо вынести за переделы цикла из п.2

4. Повторно записывать сам документ после записи проводок нет необходимости.
3. AlexandrSmith 69 02.08.21 15:24 Сейчас в теме
Как пример, абсолютно точно работающие обработки и тестировались на последних версиях БУХ 3.0...
Прикрепленные файлы:
ЗакрытиеСчета 1602.epf
ЗаполнениеОперацииБух.epf
4. user856012 13 02.08.21 15:28 Сейчас в теме
Еще примеры, но уже не совсем бесплатные (за $m):
https://infostart.ru/public/994326/
https://infostart.ru/public/630456/

Бесплатно - обсуждения:
https://forum.infostart.ru/forum9/topic116963/
https://forum.infostart.ru/forum9/topic193075/

И так далее...
5. Snus71 233 02.08.21 15:38 Сейчас в теме
вопрос снят
решил вот таким кодом
&НаСервере
Процедура СоздатьПроводкуБух(Струк)
	Док = Документы.ОперацияБух.НайтиПоНомеру(Струк.НомерДока, Струк.ДатаДока);
	Если НЕ Док.Пустая() Тогда
		Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
		Набор.Отбор.Регистратор.Установить(Док.Ссылка);
		Набор.Прочитать();
		Проводка = Набор.Добавить();
		Проводка.Активность = Истина;
		Проводка.Сумма = Струк.Сумма;
		Проводка.Организация = Струк.Организация;
		Проводка.Период = Струк.ДатаДока;
		Проводка.Содержание = Струк.Содержание;
		Проводка.СчетДт = ОпределитьСчет(Струк.СчетДт);
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,0,Струк.СубконтоДт));
        Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,1,Струк.СубконтоДт));		
		Проводка.СубконтоДт.Вставить(Проводка.СчетДт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетДт,2,Струк.СубконтоДт));
		Проводка.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеДт);
		Проводка.СчетКт = ОпределитьСчет(Струк.СчетКт);
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(0).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,0,Струк.СубконтоКт));
        Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(1).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,1,Струк.СубконтоКт));		
		Проводка.СубконтоКт.Вставить(Проводка.СчетКт.ВидыСубконто.Получить(2).ВидСубконто, ЗаполнитьСубконто(Струк,Проводка.СчетКт,2,Струк.СубконтоКт));
		Проводка.ПодразделениеКт = Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Струк.ПодразделениеКт);
		Набор.Записать(Истина);
	Иначе
		Сообщить("Не найден документ "+Струк.НомерДока+" от "+Струк.ДатаДока, СтатусСообщения.Важное);
	КонецЕсли;
КонецПроцедуры		
Показать
Оставьте свое сообщение

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