Программное заполнение ТЧ документа СверкаВзаиморасчетов

1. M_A_D 184 01.03.21 15:05 Сейчас в теме
Всем привет!
Пишу процедуру для выгрузки в EXCEL Сверки с контрагентом, и есть у меня условие, если за текущий день нет сверки по контрагенту, то создать новую сверку.
Создать сам документ это совсем не сложно, но вот как заставить документ заполниться данными по взаиморасчетам.... НЕПОНИМАЮ....

Зашел в модуль посмотрел что там есть.
нашел:
Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(ДокументОбъект);
Но не отрабатывает...
По теме из базы знаний
Найденные решения
6. oleg-x 26 01.03.21 16:44 Сейчас в теме
Ну вот и ошибка
Документ.Записать(РежимЗаписиДокумента.Запись);//Зачем записывать документ перед заполнением?
                //Документ уже и есть объект и его получать не нужно
		Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(Документ);//Так правильно
		Документ.Записать(РежимЗаписиДокумента.Проведение);
7. oleg-x 26 01.03.21 16:47 Сейчас в теме
А до этого Вы получали по ссылке новый объект
То есть
Документ - это объект1
Документ.Ссылка.ПолучитьОбъект() - вы получаете второй экземпляр объекта по ссылке, который записан в базу данных объект2
Заполняете объект2, после чего записываете объект1, который был не заполнен.
Все отрабатывается, но вызывается и записывается не корректно.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. oleg-x 26 01.03.21 15:40 Сейчас в теме
(1) В модуль чего? Формы или документа?
В зависимости от конфигурации, процедуры могут располагаться в модуле формы документа, в модуле объекта (в модуле формы будет вызов модуля объекта) и в общих модулях (вызов так же будет в модуле формы).
Вообщем открывайте конфигуратор и на форме смотрите кнопку заполнения документа.
3. M_A_D 184 01.03.21 16:01 Сейчас в теме
(2)
Я выше написал вот это:
Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(ДокументОбъект);

Это отрабатывает если пишу во внешней обработке, и выбираю уже созданный документ...
Но в процедуре создания документа, почему-то не отрабатывает....
Не могу понять почему....
4. oleg-x 26 01.03.21 16:20 Сейчас в теме
(3) Тогда стоит сделать отладку.
Что за процедура создания документа? пример кода в студию.
Принципиальной разницы где выполняется код не важен (имею виду форму, модуль документа или общий модуль и прочее), главное как вызывается процедура заполнения.
5. M_A_D 184 01.03.21 16:27 Сейчас в теме
(4)
Документ = Документы.СверкаВзаиморасчетов.СоздатьДокумент();
		Документ.Дата = ТекущаяДата();	
		Запрос = Новый Запрос;
		Запрос.Текст = 
			"ВЫБРАТЬ
			|	КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент
			|ИЗ
			|	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
			|ГДЕ
			|	КонтрагентыКонтактнаяИнформация.НомерТелефона = &НомерТелефона";
		
		Запрос.УстановитьПараметр("НомерТелефона", СтрЗаменить(НомерТелефона.НастройкаПользователя1,"+",""));
		РезультатЗап = Запрос.Выполнить();
		Выборка = РезультатЗап.Выбрать();
		Если Выборка.Следующий() тогда
		Документ.Контрагент = Выборка.Контрагент;	
		КонецЕсли;
		Документ.Организация = Справочники.Организации.НайтиПоНаименованию("Металл-Сервис", ИСТИНА);
		Документ.НачалоПериода = НачалоГода(ТекущаяДата());
		Документ.КонецПериода = ТекущаяДата();
		Документ.Статус = Перечисления.СтатусыСверокВзаиморасчетов.Создана;
		Документ.ОтветственноеЛицо = Пользователи.ТекущийПользователь();

		Документ.Записать(РежимЗаписиДокумента.Запись);
		Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(Документ.Ссылка.ПолучитьОбъект());
		Документ.Записать(РежимЗаписиДокумента.Проведение);
Показать


Я думаю, что т.к. все отработало в обработке заполнения СУЩЕСТВУЮЩЕГО документа, проблема у меня именно с получением объекта...
8. user636433_prog 01.03.21 16:48 Сейчас в теме
как советовали выше,
Документ.Записать(РежимЗаписиДокумента.Запись);

переносите ниже
Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(Документ.Ссылка.ПолучитьОбъект());

только вместо этого
Документ.Ссылка.ПолучитьОбъект()
передавайте Документ, у это и есть документобъект, Вы же его создаете
6. oleg-x 26 01.03.21 16:44 Сейчас в теме
Ну вот и ошибка
Документ.Записать(РежимЗаписиДокумента.Запись);//Зачем записывать документ перед заполнением?
                //Документ уже и есть объект и его получать не нужно
		Документы.СверкаВзаиморасчетов.ЗаполнитьДанныеПоРасчетам(Документ);//Так правильно
		Документ.Записать(РежимЗаписиДокумента.Проведение);
7. oleg-x 26 01.03.21 16:47 Сейчас в теме
А до этого Вы получали по ссылке новый объект
То есть
Документ - это объект1
Документ.Ссылка.ПолучитьОбъект() - вы получаете второй экземпляр объекта по ссылке, который записан в базу данных объект2
Заполняете объект2, после чего записываете объект1, который был не заполнен.
Все отрабатывается, но вызывается и записывается не корректно.
9. M_A_D 184 01.03.21 16:49 Сейчас в теме
(7)да, видать уже мозг припотел....
Огромное спасибо!
Оставьте свое сообщение

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