Часто программистам приходится программно заполнять различные документы, однако в современных конфигурациях есть огромное количество полей, которые непонятно - надо заполнять или нет. Над каждым таким полем приходится задумываться, иногда искать код заполнения. При этом, часто, в базе уже имеется похожий заполненный документ.
Поэтому была написана данная обработка, ей указывается документ, для которого надо создать Код заполнения и в ответ в Окно сообщений или в Текстовый документ выдается программный код для программного создания и заполнения этого Документа.
Единственное, с чем не хотелось разбираться - это с Хранилищем, поэтому такие поля обработкой игнорируются.
Обратите на это внимание!
Сначала выдаются все реквизиты Документа ( на примере документа Авансовый отчет из УТ 10)
Объект = Документы.АвансовыйОтчет.СоздатьДокумент();
Объект.УстановитьНовыйНомер();
Объект.Дата="02.03.2019 16:11:42";
Объект.ВалютаДокумента=XMLЗначение(ИзXMLТипа("CatalogRef.Валюты",""),"0b8cc73b-1c5b-11df-8c7f-0019dbb74c8d");
Объект.Комментарий= "";
Объект.КурсДокумента=1;
Объект.КратностьДокумента=1;
Объект.Организация=XMLЗначение(ИзXMLТипа("CatalogRef.Организации",""),"0b8cc73f-1c5b-11df-8c7f-0019dbb74c8d");
Объект.ОтражатьВУправленческомУчете=true;
Объект.ОтражатьВБухгалтерскомУчете=true;
Объект.ОтражатьВНалоговомУчете=true;
Объект.Подразделение= "";
Объект.СкладОрдер=XMLЗначение(ИзXMLТипа("CatalogRef.Склады",""),"6697310c-1c5d-11df-8c7f-0019dbb74c8d");
Объект.СуммаВключаетНДС=true;
Объект.СуммаДокумента=9994.98;
Объект.ТипЦен= "";
Потом для каждой Табличной части выполняется следующее:
подготавливается Таблица Значений с нужными Типами в колонках
ТЗ = Новый ТаблицаЗначений;
Массив = Новый Массив;
Массив.Добавить(ИзXMLТипа("string",""));
ТипВидДокВходящий=Новый ОписаниеТипов(Массив,,,);
ТЗ.Колонки.Добавить("ВидДокВходящий",ТипВидДокВходящий);
...
в том числе и с составными типами
Массив = Новый Массив;
Массив.Добавить(ИзXMLТипа("DocumentRef.ВозвратТоваровПоставщикуИзНТТ",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ВозвратТоваровОтПокупателя",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ЗаказПокупателя",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПриходныйКассовыйОрдер",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ИнкассовоеПоручениеПолученное",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежноеПоручениеИсходящее",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПоступлениеДопРасходов",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.РасходныйКассовыйОрдер",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежноеТребованиеВыставленное",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ЗаказПоставщику",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.АккредитивПереданный",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПоступлениеТоваровУслугВНТТ",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ОтчетКомитентуОПродажах",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ИнкассовоеПоручениеПереданное",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.КорректировкаДолгаПоВозвратнойТаре",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежныйОрдерСписаниеДенежныхСредств",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ВозвратТоваровПоставщику",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежноеПоручениеВходящее",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.АккредитивПолученный",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПоступлениеТоваровУслуг",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежноеТребованиеПолученное",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ОтчетКомиссионераОПродажах",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.РеализацияТоваровУслуг",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.АвансовыйОтчет",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.СчетНаОплатуПоставщика",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.ПлатежныйОрдерПоступлениеДенежныхСредств",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.СчетНаОплатуПокупателю",""));
Массив.Добавить(ИзXMLТипа("DocumentRef.КорректировкаДолга",""));
ТипСделка=Новый ОписаниеТипов(Массив,,,);
ТЗ.Колонки.Добавить("Сделка",ТипСделка);
Далее заполняется эта Таблица Значений данными из документа-шаблона:
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.ДатаВходящегоДокумента=XMLЗначение(Тип("Дата"),"2019-02-05T00:00:00");
НоваяСтрока.Сумма=105;
НоваяСтрока.Контрагент=XMLЗначение(ИзXMLТипа("CatalogRef.Контрагенты",""),"e92ffee7-50be-11e2-b8ab-5404a6efe539");
НоваяСтрока.ДоговорКонтрагента=XMLЗначение(ИзXMLТипа("CatalogRef.ДоговорыКонтрагентов",""),"e2e49b78-0438-11e5-a57b-1c6f6523ee30");
НоваяСтрока.Содержание="Выезд на место";
НоваяСтрока.СуммаВзаиморасчетов=105;
НоваяСтрока.КурсВзаиморасчетов=1;
НоваяСтрока.КратностьВзаиморасчетов=1;
...
И, наконец, по данным этой Таблицы значений заполняется сама Табличная часть
Для каждого Элем Из ТЗ Цикл
НоваяСтрока = Объект.ОплатаПоставщикам.Добавить();
НоваяСтрока.ВидДокВходящий= Элем.ВидДокВходящий;
НоваяСтрока.ДатаВходящегоДокумента= Элем.ДатаВходящегоДокумента;
НоваяСтрока.НомерВходящегоДокумента= Элем.НомерВходящегоДокумента;
НоваяСтрока.Сумма= Элем.Сумма;
НоваяСтрока.Контрагент= Элем.Контрагент;
НоваяСтрока.ДоговорКонтрагента= Элем.ДоговорКонтрагента;
НоваяСтрока.Сделка= Элем.Сделка;
НоваяСтрока.Содержание= Элем.Содержание;
НоваяСтрока.СуммаВзаиморасчетов= Элем.СуммаВзаиморасчетов;
НоваяСтрока.КурсВзаиморасчетов= Элем.КурсВзаиморасчетов;
НоваяСтрока.КратностьВзаиморасчетов= Элем.КратностьВзаиморасчетов;
НоваяСтрока.ДокументРасчетовСКонтрагентом= Элем.ДокументРасчетовСКонтрагентом;
НоваяСтрока.Проект= Элем.Проект;
КонецЦикла;
Так сделано специально, чтобы, если у программиста уже есть данные, по которым надо заполнять Документ, то можно удалить из полученного текста код, связанный с созданием и заполнением Таблицы значений, и поменять только конечный цикл на работу со своими данными.
Разработка сделана универсальной, работает и для Обычного приложения и в Управляемых формах.
Работа обработки проверена в УТ 10.3.10.4 и в ЗУП Базовая 3.1.11.133, а также в демо-базе УНФ от 1С: https://unf.demo.1c.ru/unf/