Синхронизация виртуальных документов¶
ℹ️ Виртуальный документ — это данные, которые формируются в 1С по определенному алгоритму и затем передаются в "Первую Форму". Описание виртуального документа — это, по сути, описание алгоритма отбора и обработки данных. Данные могут отбираться из документов, регистров, справочников и т.п.
Полученные данные выгружаются в одном из двух вариантов: либо в виде файла, вложенного в задачу (возможные расширения файла: pdf, xls, txt, docx, html, ods), либо в виде ДП "Таблица".
В приложении "1С:Предприятие" в справочнике "Виртуальные документы ("Первая форма")" создайте запись.
ℹ️ Имя виртуального документа не должно содержать пробелов. Имя документа желательно не менять, в противном случае при изменении имени необходимо изменить файл настроек синхронизации
ℹ️ Для виртуального реквизита в XML-конфиге должно быть указано PropertyUse="Виртуальный"
В шапке элемента укажите тип результата:
1. Алгоритм -- формирует табличный документ 1С, который согласно настройкам синхронизации будет сохранен в файл соответствующего формата и отправлен в "Первую Форму". Возможные расширения: pdf, xls, txt, docx, html, ods.
Для настройки расширения файла в настройках синхронизации в "Первой Форме" используется свойство BinFileProperty из блока Files:
<Files CatalogName = "НовыйОтчет" BinFileProperty = "pdf" FileNameProperty ="Отчет.pdf" />
В справочнике виртуальных документов "1С:Предприятие" напишите алгоритм на встроенном языке 1С для формирования данных. Для проверки правильности алгоритма используйте кнопку Выполнить алгоритм:
Алгоритм вычисляет значение переменной Результат и выводит его в таблицу справа. Для доступа к параметрам отчета используется соответствие ПараметрыАлгоритма. Параметры отчета указываются на закладке Параметры. Эти параметры выгружаются как реквизиты документа в "Первую Форму" и впоследствии приходят в 1С значениями для получения отчета.
Закладка "Реквизиты" не заполняется.
2.Запрос --- формирует таблицу данных. Для таких документов заполняется закладка "Реквизиты":
В "Первую Форму" выгружаются только указанные реквизиты из результата выполнения запроса в 1С. Значения ссылочных типов отравляются согласно общим настройка синхронизации.
Виртуальные документы могут быть использованы для обмена табличными частями либо файлами, которые программно формируются на стороне 1С.
Передачу Виртуальных документов можно совмещать с классической передачей реквизитов, т. е. внутри обмена для документа приемника на стороне первой формы будут прописаны два (или более) вариантов обмена.
Передача Отчета/Документа в виде файла¶
Пример настроек передачи макета отчета Торг-12 из 1С:
<Record OneCDocName="ВиртуальныйДокумент.Тест_вирт_файл" OneCSynonym="Склады (места хранения)" TCSubcatID="56490" TCSubcatName="Справочник.Склады" SmartFilterID="0" SyncSource="_TC" SyncDirections="FromTCto1C" DefaultActionOnError="NotAssigned" DefaultNotificationOnError="Both" DisableTaskTextSync="false" InboxQueueFlowId="">
<Files CatalogName="НовыйОтчет" BinFileProperty="pdf" FileNameProperty="Отчет.pdf" SendContent="false" SendFileMetaData="false" OwnerProperty="Тест" SyncDirections="TwoSided" ActionOnError="NotAssigned" NotificationsOnError="Both" />
<SyncProperties>
<Property ExtParamID="2808" ExtParamName="Наименование" RequisiteName="Наименование" Synonym="Наименование" Type="Text" IsRequired="false" RepresentAsReadonlyText="false" PropertyUse="ДляГруппыИЭлемента" OneCEvents="" TcEvents="">
<AllowedValues />
<TableColumns />
<Links />
</Property>
</SyncProperties>
<SyncEvents1C />
<SyncEventsTC>
<EventTC Event="CustomEvent" CustomEventID="591" Action="Modify" ActionOnError="AddToQuery" NotificationsOnError="Both" AddCommentOnSuccess="false" />
</SyncEventsTC>
</Record>
Значение параметра OneCDocName обязательно должно начинаться на "ВиртуальныйДокумент", а через точку имя справочника с типом виртуальные документы в 1С. В данном примере OneCDocName="ВиртуальныйДокумент.Тест_вирт_файл".
В 1С необходимо создать новый элемент справочника Виртуальные документы ("Первая форма").
Данная информация хранится только на стороне 1С и не отражается в общих настройках обмена XML. В качестве Тип результата указать Файл. Имя должно совпадать со значением параметры OneCDocName (после точки), в данном примере: Тест_вирт_файл.
На вкладке Алгоритм и результат можно написать любой код на языке 1С, который будет выполнен в процессе обмена. В данном примере указано получение макета товарной накладной:
Макет = ПолучитьОбщийМакет("ПФ_MXL_ТОРГ12");
Результат = Макет;
Пример формирования внешнего отчета:
ИсточникДанных = ПараметрыАлгоритма.Получить("Перевод");
ИсточникДанныхМас = Новый Массив;
ИсточникДанныхМас.Добавить(ИсточникДанных);
ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Дополнительное соглашение (Смена должности)");
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
ВнешняяОбработкаОбъект = МодульДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(ДополнительнаяОбработкаСсылка);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ДопСоглашениеМакет");
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("ЗаголовокФормы", "");
ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется
ПараметрыВывода.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка());
СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", "");
ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма);
ПараметрыВывода.Вставить("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка);
ВнешняяОбработкаОбъект.Печать(
ИсточникДанныхМас,
КоллекцияПечатныхФорм,
Новый СписокЗначений,
ПараметрыВывода);
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
Результат = ПечатнаяФорма.ТабличныйДокумент;
КонецЦикла;
Пример формирования отчета конфигурации на базе СКД:
ПараметрОтбора = ПараметрыАлгоритма.Получить("Отпуск");
Отчет = Отчеты.ПечатнаяФормаТ6.Создать();
ПараметрыОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("СсылкиНаОбъекты");
ПараметрыОтчета.Значение = ПараметрОтбора;
Сообщить(ПараметрыОтчета.Значение);
ПараметрыОтчета.Использование = Истина;
ТабДок = Новый ТабличныйДокумент;
Отчет.ИнициализироватьОтчет();
Отчет.СкомпоноватьРезультат(ТабДок);
Результат = Табдок;
Для теста можно нажать кнопку Выполнить алгоритм, при этом 1С произведет расчет и поместит результат выполнения в соседнее окно.
В случае обмена файлами вкладка Реквизиты не имеет значения.
Если в конфигурации обмена Виртуального документа указать список пропертей для обмена, то они будут переданы в качестве параметров, и их можно задействовать при формировании нашего файла. Например использовать некоторые реквизиты при формировании отчета. Чтобы протестировать это, вы можете вручную добавить параметры на соответствующей вкладке и указать там тестовые значения. В процессе обмена 1С получит все переданные property, и упакует их в параметры для дальнейшего использования при формировании отчета или документа. В нашем случае передается одна property Наименование из "Первой Формы".