В большинстве типовых конфигураций присутствует обмен «Синхронизация данных через универсальный формат»(EnterpriseData). Например для УТ11, КА2, ERP обмен с 1С:Бухгалтерией, 1С:Документооборотом прекрасно работает из коробки, и настройка обмена занимает немного времени. Материалов по такой настройки — в сети в достаточном количестве. Например https://habr.com/ru/articles/482986/ или https://rg-soft.ru/articles/nastroyka-sinkhronizatsii-dannykh-mezhdu-1s-upravlenie-tor-govley-red-11-5-i-1s-roznitsa-red-3-0-/
Однако, бывает необходимость доработки обмена и тогда приходится привлекать программиста 1С.
Логика обмена. Основы
В данной статье я кратко остановлюсь на базовых объектах обмена и расскажу о вариантах доработки и подробно расскажу о том варианте, которых предпочитаю в последних проектах
- Обмен настраивается между двумя базами — Источник и Приемник. В принципе, это условное ролевое обозначение баз . Но бывает настроен двухсторонний обмен, когда часть объектов формируются в одной базе и идут в другую базу, а другая часть объектов — формируется в другой базе, и данные идут в другую базу. Но это не меняет сути об настройки
- Объекты обмена — это объекты информационной базы -сущности — справочники, документы и т.д.
- Объекты обмена регистрируются к обмену в специальной сущности — в плане обмена «Синхронизация данных через универсальный формат»
- Регистрация объектов происходит обычно при записи объекта или в дополнительном алгоритме. Предусмотрен вариант ручной регистрации объектов к выгрузке.
- После связывания базы Источника и Приемника базы обмениваются нумерованными сообщениями. У каждого сообщения есть номер отправленного и номер полученного сообщения, сами объекты, а также прочаяслужебная информация об обмене.
- После подтверждения от Получателя ответного сообщения об успешном приеме сообщения в базе Источнике ранее отправленный объект снимается с регистрации в плане обмена
- Сам список выгружаемых объектов, логика их отбора определяется в модуле МенеджерРегистрации
- Логика выгрузки из Источника и загрузки объектов в Получателе определяется в модуле МенеджерОбменаЧерезУниверсальныйФормат
- Сами выгружаемые объекты выгружаются как объекты специального формата, описанного в конфигурации как XDTO-пакет EnterpriseData. Подробнее https://v8.1c.ru/tekhnologii/obmen-dannymi-i-integratsiya/standarty-i-formaty/format-enterprisedata/
- Каждый XDTO-пакет является фиксированной структурой, описывается как набор объектов и ссылок схемой
- По мере развития конфигураций в конфигурацию добавляются новые форматы, которые могут отличаться друг от друга
- Выгрузка объектов в принципе может использовать несколько форматов для разных объектов, но обычно используется один из форматов, например последний. Эта служебная информация находится в каждом пакете, какой формат используется для какого вида сущностей
- Транспорт сообщений можно использовать используется разнообразный: файлы в сети, ftp, REST-сервис, даже почтовые сообщения
Варианты доработки обмена
Собственно основную логику я описал, переходим к сути. Есть несколько подходов к доработке обмена.
Собственно основной код обмена (обработка входящих данных и упаковка отправляемых данных) находится в модуле МенеджерОбменаЧерезУниверсальныйФормат. Соответственно, возможно править как код базы Источника, так и базы Приемника.
- Самый простой способ- непосредственная правка модуля обмена «МенеджерОбменаЧерезУниверсальныйФормат»
- Другой способ — переопределить сам модуль в процедуре ОбменДаннымиУТ.ДоступныеВерсииУниверсальногоФормата(ВерсииФормата) и скопировать править его (или написать свой). Саму процедуру можно переопределить в расширении или прямо в основной конфигурации изменить

- Третий способ — использовать расширение и переопределять типовые процедуры и дорабатывать обмен в расширении
Доработка формата EnterpriseData в расширении
Я с практиковал все перечисленные варианты, и предпочитаю последний вариант, а именно доработку обмена в расширении
Перечислю плюсы
- Конфигурация Получатель (обычно это Бухгалтерия) остается полностью на поддержке. Конфигурация Источник — почти полностью (нужно снять с поддержки только сам план обмена, и то — если будут новые объекты для регистрации обмена)
- Все измененные процедуры должны идти с аннотацией &ИзмененениеИКонтроль, В таком случае мы не пропустим изменение логики типовых процедур. В отдельных случаях уместны аннотации &После, &Перед. Свои вставки кода обязательно помечать комментариями, в таком случае адаптация типовых процедур станет гораздо проще. Но это не так часто приходится делать, т.к 1С процедуры этого модуля годами не трогает.
- Мало нового кода, это тоже плюс.
- То есть прозрачность и управляемость -изменениями — очень хорошая, в отличие от других вариантов
При доработках есть два основных класса задач:
- Добавить новый объект регистрации и отправить его в Приемник
- Доработать существующий объект — например добавить реквизит и/или изменить логику его отправки/получения
Рассмотрим эти две задачи на примерах
Задача 1. Добавление нового объекта «Документ.Встреча»
Итак. Решаем следующую практическую задачу. Есть две конфигурации на поддержке между которыми уже есть настроенный обмена Синхронизация данных на основе универсального формата EnterpriseData. Возьмем, к примеру, последние конфигурации УТ11 и БП3 Демо По возможности, пытаемся всё оставить на поддержке.
Для целей иллюстрации выбрал документ «Встреча», который есть и в УТ11 и в БП3 и который мы и будем передавать из УТ11 в БП3. Важно, что во встрече есть табличная часть «Участники», которую мы и передадим из УТ11 в БП3.
Практического смысла в этой задаче особенно нет, а вот для демонстрации технологии- отличный пример. Объекта формата для данного документа Фирмой 1С для него не разработано на текущий момент. Это нам и нужно.
Разработаем синхронизацию данного документа в расширении
Регистрация объекта в плане обмена «СинхронизацияДанныхЧерезУниверсальныйФормат»
Несмотря на то, что в расширении потенциально есть возможность добавлять новые объекты регистрации- в коде типовой это не поддержано. Поэтому в данном случае, исключительно для регистрации нового документа в плане обмена – придется это сделать в основной конфигурации. Но это единственное место, где пришлось снять с поддержки и править основную конфигурацию (но только Источника).

Заимствуем также подписку на событие СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента
С регистрацией «Встречи» собственно все. Теперь можем видеть в дереве объектов для регистрации

Далее добавим расширение, в расширении нам понадобится расширить метод «ИнициализацияПравилРегистрации» модуля «МенеджерРегистрации»
&После(«ИнициализацияПравилРегистрации»)
Процедура EDИнициализацияПравилРегистрации(ПравилаРегистрацииОбъектов, ИмяМенеджераРегистрации)
ДобавитьEDДокументВстреча(ПравилаРегистрацииОбъектов, ИмяМенеджераРегистрации); КонецПроцедуры Процедура ДобавитьEDДокументВстреча(ПравилаРегистрацииОбъектов, ИмяМенеджераРегистрации)
НовоеПравило = ПравилаРегистрацииОбъектов.Добавить();
НовоеПравило.ИмяМенеджераРегистрации = ИмяМенеджераРегистрации; НовоеПравило.Идентификатор = «Документ_Встреча»; НовоеПравило.ОбъектМетаданныхИмя = «Документ.Встреча»; НовоеПравило.ИмяПланаОбмена = «СинхронизацияДанныхЧерезУниверсальныйФормат»; НовоеПравило.ИмяРеквизитаФлага = «РежимВыгрузкиДокументов»; НовоеПравило.ПравилоПоСвойствамОбъектаПустое = Ложь; НовоеПравило.ПакетноеВыполнениеОбработчиков = Ложь; НовоеПравило.ЕстьОбработчикПередОбработкой = Истина; НовоеПравило.ЕстьОбработчикПриОбработке = Ложь; НовоеПравило.ЕстьОбработчикПриОбработкеДополнительный = Ложь; НовоеПравило.ЕстьОбработчикПослеОбработки = Ложь; УстановитьОтборы(НовоеПравило, ПустойОтборПоСвойствамПланаОбмена(), ОтборПоСвойствамОбъекта_10());
Конфигурирование XDTO пакетов
На ИТС и на ИС уже есть несколько хороших статей по Конфигурированию настройке XDTO пакетов – например, https://its.1c.ru/db/metod8dev/content/6013/hdoc и https://infostart.ru/1c/articles/944359/. Довольно подробные. Поэтому я вкратце пробегусь в начальных настройках расширения. Эта часть у всех одинаковая.
1.Сначала заимствуем ExchangeMessage. Заимствуем Ref и Object

2.Далее заимствуем тот формат, который планируем использовать в качестве основы обмена. Пусть это будет самый последний формат EnterpriseData_1_20_2

3.Далее нам понадобится добавить XDTO пакет и указать произвольный (можно выдуманный)адрес для пространства имен. Этот адрес будет использоваться впоследствии в нашем пакете как адрес расширяемого пространства

4.Для документа Встреча понадобится тип значений ДокументСсылка.Встреча типа ExchangeMessage и данная ссылка будет использоваться в объектах

5. Далее делаем все по аналогии с типовыми форматами: Ключевые свойства, Реквизиты, Табличная часть, строки табличной части. Тут главное не торопиться и не путать ссылки и объекты или еще что-то.


С пакетом на этом все.
Инициализация XDTO пакета расширения
Тут главное просто не забыть. В наследуемом модуле ОбменДаннымиПереопределяемый добавляем
&После("ПриПолученииДоступныхРасширенийФормата")
Процедура EDПриПолученииДоступныхРасширенийФормата(РасширенияФормата)
РасширенияФормата.Вставить(МенеджерОбменаЧерезУниверсальныйФормат.EDПространствоИмен(), "1.20");
КонецПроцедуры
Доработка правил на стороне Источника
Доработку ведем с наследуемом модуле МенеджерОбменаЧерезУниверсальныйФормат
1.Тут все стандартно:Добавляем Правило ПОД, ПКО, дополнительные обработчики при обработке или выгрузке
2.Обратите внимание, по сравнению со стандартным методом Описания ПКО дополнительно вызывается инициализация расширения с «нашим» пространством имен ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации,EDПространствоИмен());
текст модуля(он небольшой)
Функция EDПространствоИмен() Экспорт
БПро_ПространствоИмен = "http://sstud.ru/EnterpriseData/1.20";
Возврат БПро_ПространствоИмен;
КонецФункции
&После("ЗаполнитьПравилаОбработкиДанных")
Процедура EDЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных)
Если НаправлениеОбмена = "Отправка" Тогда
EDДобавитьПОД_Документ_Встреча(ПравилаОбработкиДанных);
КонецЕсли;
КонецПроцедуры
&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура БПро_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации)
Если НаправлениеОбмена = "Отправка" Тогда
EDДобавитьПКО_Документ_Встреча_Отправка(ПравилаКонвертации);
КонецЕсли;
КонецПроцедуры
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура БПро_ВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры)
Если ИмяПроцедуры = "EDПОД_Документ_Встреча_Отправка_ПриОбработке" Тогда
EDПОД_Документ_Встреча_Отправка_ПриОбработке(
Параметры.ОбъектОбработки, Параметры.ИспользованиеПКО, Параметры.КомпонентыОбмена);
ИначеЕсли ИмяПроцедуры = "EDПКО_Документ_Встреча_Отправка_ПриОтправкеДанных" Тогда
EDПКО_Документ_Встреча_Отправка_ПриОтправкеДанных(
Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена, Параметры.СтекВыгрузки);
КонецЕсли;
КонецПроцедуры
#Область Документ_Встреча
Процедура EDДобавитьПОД_Документ_Встреча(ПравилаОбработкиДанных)
ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
ПравилоОбработки.Имя = "Документ_Встреча";
ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.Встреча;
ПравилоОбработки.ПриОбработке = "EDПОД_Документ_Встреча_Отправка_ПриОбработке";
ПравилоОбработки.ОчисткаДанных = Ложь;
ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_Встреча_Отправка");
КонецПроцедуры
Процедура EDПОД_Документ_Встреча_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
КонецПроцедуры
Процедура EDДобавитьПКО_Документ_Встреча_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_Встреча_Отправка";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.Встреча;
ПравилоКонвертации.ОбъектФормата = "Документ.Встреча"; //@NON-NLS-1
ПравилоКонвертации.ПриОтправкеДанных = "EDПКО_Документ_Встреча_Отправка_ПриОтправкеДанных";
ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации,EDПространствоИмен());
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "Дата", "Дата",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "ДатаНачала", "ДатаНачала",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "ДатаОкончания", "ДатаОкончания",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Номер", "Номер",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Тема", "Тема",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Описание", "Описание",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Ответственный", "Ответственный",1,"Справочник_Пользователи",EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "", "Контрагент",1,"Справочник_Контрагенты",EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "", "КонтактноеЛицо",1,"Справочник_КонтактныеЛицаПартнеров_Отправка",EDПространствоИмен());
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Участники",EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "ПредставлениеКонтакта", "ПредставлениеКонтакта",1,,EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "Контакт", "Контакт",1,,EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "Партнер", "Партнер",,,EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "КакСвязаться", "КакСвязаться",,,EDПространствоИмен());
КонецПроцедуры
Процедура EDПКО_Документ_Встреча_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли;
ТЗУчастники = ДанныеИБ.Участники.Выгрузить();
ТЗУчастники.Колонки.Добавить("Инструкция");
Для каждого Строка Из ТЗУчастники Цикл
Инструкция = Новый Структура("ИмяПКО,Значение","", Строка.Контакт);
Если ТипЗнч(Строка.Контакт) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
Инструкция.ИмяПКО = "Справочник_ФизическиеЛица_Отправка";
Строка.Инструкция = Инструкция;
ИначеЕсли ТипЗнч(Строка.Контакт) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда
Инструкция.ИмяПКО = "Справочник_КонтактныеЛицаПартнеров_Отправка";
Строка.Инструкция = Инструкция;
Если не ДанныеXDTO.Свойство("КонтактноеЛицо") Тогда
ДанныеXDTO.Вставить("КонтактноеЛицо", Строка.Контакт);
КонецЕсли;
ИначеЕсли ТипЗнч(Строка.Контакт) = Тип("СправочникСсылка.Партнеры") Тогда
Если не ДанныеXDTO.Свойство("Партнер") Тогда
КонтрагентВладелец = ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Строка.Контакт);
ДанныеXDTO.Вставить("Контрагент", КонтрагентВладелец);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТЗУчастники.Колонки.Удалить("Контакт");
ТЗУчастники.Колонки["Инструкция"].Имя = "Контакт";
ДанныеXDTO.Вставить("Участники", ТЗУчастники);
КонецПроцедуры
#КонецОбласти
XDTO –пакет и инициализация XDTO пакета расширения в Приёмнике
Тут очень важно: нужна полная идентичность пакетов Источника и Приемника: ExchangeMessage, Наследуемомого EnterpriseData_1_20_2 и добавленного EDEnterpriseData_1_20_2_Ext. Сделать это проще всего через сравнение объединение выгруженного расширения Источника . И делать надо так каждый раз при любом изменении пакетов

Опять –таки не забываем в наследуемом модуле ОбменДаннымиПереопределяемый добавляем
&После("ПриПолученииДоступныхРасширенийФормата")
Процедура EDПриПолученииДоступныхРасширенийФормата(РасширенияФормата)
РасширенияФормата.Вставить(МенеджерОбменаЧерезУниверсальныйФормат.EDПространствоИмен(), "1.20");
КонецПроцедуры
EDПространствоИмен()- просто отдает выдуманный адрес нашего пространства имен(писал выше)
Доработка правил на стороне Приемника
1.Тут все стандартно:Добавляем Правило ПОД, ПКО, дополнительные обработчики при конвертации XDTO и при записи объекта
Полный текст —
Функция EDПространствоИмен() Экспорт
EDПространствоИмен = "http://sstud.ru/EnterpriseData/1.20";
Возврат EDПространствоИмен;
КонецФункции
&После("ЗаполнитьПравилаОбработкиДанных")
Процедура EDЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных)
Если НаправлениеОбмена = "Получение" Тогда
EDДобавитьПОД_Документ_Встреча(ПравилаОбработкиДанных);
КонецЕсли;
КонецПроцедуры
&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура БПро_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации)
Если НаправлениеОбмена = "Получение" Тогда
EDДокумент_Встреча_Получение(ПравилаКонвертации);
КонецЕсли;
КонецПроцедуры
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура EDВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры)
//+Встреча
Если ИмяПроцедуры = "EDПКО_Документ_Встреча_Получение_ПриКонвертацииДанныхXDTO" Тогда
EDПКО_Документ_Встреча_Получение_ПриКонвертацииДанныхXDTO(
Параметры.ДанныеXDTO, Параметры.ПолученныеДанные, Параметры.КомпонентыОбмена);
ИначеЕсли ИмяПроцедуры = "EDПКО_Документ_Встреча_Получение_ПередЗаписьюПолученныхДанных" Тогда
EDПКО_Документ_Встреча_Получение_ПередЗаписьюПолученныхДанных(
Параметры.ПолученныеДанные, Параметры.ДанныеИБ, Параметры.КонвертацияСвойств, Параметры.КомпонентыОбмена);
ИначеЕсли ИмяПроцедуры = "EDОтложеннаяОбработка_Встреча" Тогда
EDОтложеннаяОбработка_Встреча(
Параметры.Объект, Параметры.КомпонентыОбмена.ПараметрыКонвертации, Параметры.ОбъектМодифицирован);
//--Встреча
КонецЕсли;
КонецПроцедуры
#Область Документ_Встреча
Процедура EDДобавитьПОД_Документ_Встреча(ПравилаОбработкиДанных)
ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
ПравилоОбработки.Имя = "Документ_Встреча";
ПравилоОбработки.ПриОбработке = "ПОД_EDДокумент_Встреча";
ПравилоОбработки.ОбъектВыборкиФормат = "Документ.Встреча";
ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_Встреча_Получение");
КонецПроцедуры
Процедура EDДокумент_Встреча_Получение(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_Встреча_Получение";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.Встреча;
ПравилоКонвертации.ОбъектФормата = "Документ.Встреча"; //@NON-NLS-1
ПравилоКонвертации.ПриКонвертацииДанныхXDTO = "EDПКО_Документ_Встреча_Получение_ПриКонвертацииДанныхXDTO";
ПравилоКонвертации.ПередЗаписьюПолученныхДанных = "EDПКО_Документ_Встреча_Получение_ПередЗаписьюПолученныхДанных";
ПравилоКонвертации.ПослеЗагрузкиВсехДанных = "EDОтложеннаяОбработка_Встреча";
ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору";
ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации,EDПространствоИмен());
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "Дата", "Дата",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "ДатаНачала", "ДатаНачала",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "ДатаОкончания", "ДатаОкончания",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Номер", "Номер",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка",EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Тема", "Тема",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Описание", "Описание",,,EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Ответственный", "Ответственный",1,"Справочник_Пользователи",EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "Контрагент", "Контрагент",1,"Справочник_Контрагенты_Получение",EDПространствоИмен());
ДобавитьПКС(СвойстваШапки, "КонтактноеЛицо", "КонтактноеЛицо",1,"Справочник_КонтактныеЛица_Получение",EDПространствоИмен());
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "Участники", "Участники");
ДобавитьПКС(СвойстваТЧ, "Контакт", "Контакт",1,,EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "ПредставлениеКонтакта", "ПредставлениеКонтакта",1,,EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "КакСвязаться", "КакСвязаться",1,,EDПространствоИмен());
КонецПроцедуры
Процедура EDПКО_Документ_Встреча_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
МассивСтрок = Новый Массив;
Если ДанныеXDTO.Свойство("Участники")
И ЗначениеЗаполнено(ДанныеXDTO.Участники) Тогда
ПравилаЗаполнения = Новый Соответствие;
ПравилаЗаполнения.Вставить("ПредставлениеКонтакта", "ПредставлениеКонтакта");
ПравилаЗаполнения.Вставить("КакСвязаться", "КакСвязаться");
ПравилаЗаполнения.Вставить("Контакт", "Контакт");
Для Каждого Строка Из ДанныеXDTO.Участники Цикл
СтруктураДанныхСтроки = ДанныеКоллекцииВВидеСтруктуры(Строка, ПравилаЗаполнения);
Если Строка.Контакт<>Неопределено Тогда
Если Строка.Контакт.ТипЗначения = "ФизическоеЛицо" Тогда
ФизическоеЛицо = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, Строка.Контакт,
ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_ФизическиеЛица_Получение"),"ПолучитьСсылку").Ссылка;
СтруктураДанныхСтроки.Вставить("Контакт",ФизическоеЛицо);
ИначеЕсли Строка.Контакт.ТипЗначения = "КонтактныеЛица" Тогда
КонтактноеЛицо = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, Строка.Контакт,
ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена, "Справочник_КонтактныеЛица_Получение"),"ПолучитьСсылку").Ссылка;
СтруктураДанныхСтроки.Вставить("Контакт",КонтактноеЛицо);
КонецЕсли;
КонецЕсли;
МассивСтрок.Добавить(СтруктураДанныхСтроки);
КонецЦикла;
Если МассивСтрок.Количество() > 0 Тогда
ПолученныеДанные.ДополнительныеСвойства.Вставить("Участники", МассивСтрок);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура EDПКО_Документ_Встреча_Получение_ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КонвертацияСвойств, КомпонентыОбмена)
Если ДанныеИБ = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДанныеИБ, ПолученныеДанные);
ДанныеИБ.Участники.Загрузить(ПолученныеДанные.Участники.Выгрузить());
КонецПроцедуры
Процедура EDОтложеннаяОбработка_Встреча(Объект, ПараметрыКонвертации, ОбъектМодифицирован)
КонецПроцедуры
#КонецОбласти
Проверка формата. Тестовый обмен.
Перед первой выгрузкой нужно провести тестовый обмен в обоих базах, чтобы базы инициализировали метаданные объектов Приемника и Источника. Если предыдущие шаги были сделаны правильно, то зайдя в регистр сведений НастройкиОбменаДаннымиXDTO в Источнике мы увидим наш новый объект как в текущей базе, так и в базе корреспонденте.
Рекомендую заглядывать сюда перед тестовом обменом, т.к. если своего объекта вы тут не увидите -как в этом «приложении, так и на стороне «базы корреспондента» -объект не попадет в обмен и вы будете с ума сходить пытаясь выяснить почему.


Выгрузка.
Зарегистрируем и выгрузим документ «Встреча» и посмотрим на файл выгрузки


обратим внимание, что в разделе msg:Header (описание возможных объектов) появился наш документ
И второе. объекты, добавленные в обмен через расширение маркированы префиксом «ext1», которое мы определили в расширении

Результат загрузки
Как выглядит исходный в УТ11

и загруженный объект в БП

К сожалению, форма объекта в БП3 не доделана и не видит ТЧ «Участники»- Посмотрим ТЧ редактором объекта. все данные на месте

Итак, подытожим по первой задаче «Добавление нового объекта «Документ.Встреча». Собственно, задача решена, вся доработка в расширении(кроме модификации в плане обмена Источника для целей регистрации)
Задача 2. Модификация существующего объекта «Документ.РеализацияТоваровУслуг»
Еще более распространённая задача — расширить формат существующего объекта формаа, добавить табличную часть с реквизитами или какой-либо реквизит в табличную часть. К примеру возьмём объект Метаданных Документ.РеализацияТоваровУслуг. В Формате присутствует уже одноименный объект формата, но в нем нет табличной части «ЭтапыГрафикаОплаты». Добавим данные этой ТЧ в формат.

- Наследуем из основного пакета (рис ниже) Документ.РеализацияТоваровУслуг,и удаляем реквизиты из него, чтоб не тащить связанные объекты с типами)




- Копируем этот объект в новое расширение Документ.РеализацияТоваровУслуг.
- Добавляем Документ.РеализацияТоваровУслуг.СтрокаЭтапыОплаты(с реквизитами)
- В реквизитах у нас был «заказ»- из типового пакета- его тоже наследуем из основного пакета (и тоже и удаляем реквизиты из него, чтоб не тащить связанное, см рис)
- В Документ.РеализацияТоваровУслуг добавляем реквизит с этим типом Документ.РеализацияТоваровУслуг.СтрокаЭтапыОплаты

- чуток правим процедуры ПКО(&ИзменениеИКонтроль(«ДобавитьПКОДокументРеализацияТоваровУслугОтправка») ) и при отправке(&ИзменениеИКонтроль(«ПКОДокументРеализацияТоваровУслугОтправка_ПриОтправкеДанных»)
&ИзменениеИКонтроль("ДобавитьПКО_Документ_РеализацияТоваровУслуг_Отправка")
Процедура EDДобавитьПКО_Документ_РеализацияТоваровУслуг_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_РеализацияТоваровУслуг_Отправка";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.РеализацияТоваровУслуг;
ПравилоКонвертации.ОбъектФормата = "Документ.РеализацияТоваровУслуг"; //@NON-NLS-1
ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных";
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "Автор", "Ответственный", , "Справочник_Пользователи");
ДобавитьПКС(СвойстваШапки, "АдресДоставки", "АдресДоставки");
ДобавитьПКС(СвойстваШапки, "БанковскийСчетОрганизации", "БанковскийСчетОрганизации", , "Справочник_БанковскиеСчетаОрганизаций_Отправка");
ДобавитьПКС(СвойстваШапки, "Валюта", "Валюта", , "Справочник_Валюты");
ДобавитьПКС(СвойстваШапки, "ВалютаВзаиморасчетов", "ВалютаВзаиморасчетов", , "Справочник_Валюты");
ДобавитьПКС(СвойстваШапки, "ВариантОформленияПродажи", "ВидЭД", , "ВидыЭД_Реализация_Отправка");
ДобавитьПКС(СвойстваШапки, "", "ГлавныйБухгалтер", 1, "Справочник_ФизическиеЛица_Отправка");
ДобавитьПКС(СвойстваШапки, "Грузоотправитель", "Грузоотправитель", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "Грузополучатель", "Грузополучатель", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "ГруппаФинансовогоУчета", "ГруппаНастроекФинансовогоУчетаРасчетов", , "Справочник_ГрФинансовогоУчетаРасчетов_Отправка");
ДобавитьПКС(СвойстваШапки, "Дата", "Дата");
ДобавитьПКС(СвойстваШапки, "ДатаПереходаПраваСобственности", "ДатаПереходаПраваСобственности");
ДобавитьПКС(СвойстваШапки, "", "ДисконтнаяКарта", 1);
ДобавитьПКС(СвойстваШапки, "ДоверенностьВыдана", "ДоверенностьКемВыдана");
ДобавитьПКС(СвойстваШапки, "ДоверенностьДата", "ДоверенностьДата");
ДобавитьПКС(СвойстваШапки, "ДоверенностьЛицо", "ДоверенностьКомуВыдана");
ДобавитьПКС(СвойстваШапки, "ДоверенностьНомер", "ДоверенностьНомер");
ДобавитьПКС(СвойстваШапки, "", "Договор", 1, "Справочник_ДоговорыКонтрагентов");
ДобавитьПКС(СвойстваШапки, "", "Заказ", 1, "Документ_ЗаказКлиента_Отправка");
ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий");
ДобавитьПКС(СвойстваШапки, "", "КомплектПечатныхДокументовПодписанПолучен", 1);
ДобавитьПКС(СвойстваШапки, "Контрагент", "Контрагент", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "", "КратностьВзаиморасчетов", 1);
ДобавитьПКС(СвойстваШапки, "", "КурсВзаиморасчетов", 1);
ДобавитьПКС(СвойстваШапки, "Менеджер", "Продавец", , "Справочник_Пользователи");
ДобавитьПКС(СвойстваШапки, "", "Налогообложение", 1);
ДобавитьПКС(СвойстваШапки, "Номер", "Номер");
ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка");
ДобавитьПКС(СвойстваШапки, "Отпустил", "ОтпускПроизвел", , "Справочник_ФизическиеЛица_Отправка");
ДобавитьПКС(СвойстваШапки, "", "Патент", 1, "СправочникСсылка_Патенты_Отправка");
ДобавитьПКС(СвойстваШапки, "", "Подразделение", 1, "Справочник_Подразделения_Отправка");
ДобавитьПКС(СвойстваШапки, "", "ПрограммаЛояльности", 1);
ДобавитьПКС(СвойстваШапки, "", "Руководитель", 1, "Справочник_ФизическиеЛица_Отправка");
ДобавитьПКС(СвойстваШапки, "СведенияОТранспортировкеИГрузе", "СведенияОТранспортировке");
ДобавитьПКС(СвойстваШапки, "", "Склад", 1, "Справочник_Склады_Отправка");
ДобавитьПКС(СвойстваШапки, "СопроводительныеДокументы", "ИныеСведенияОбОтгрузке");
ДобавитьПКС(СвойстваШапки, "СуммаДокумента", "Сумма");
ДобавитьПКС(СвойстваШапки, "ХозяйственнаяОперация", "ВидОперации", , "ВидыОперацийРеализацияТоваров_Отправка");
ДобавитьПКС(СвойстваШапки, "ЦенаВключаетНДС", "СуммаВключаетНДС");
ДобавитьПКС(СвойстваШапки, "ЭтапГосконтрактаЕИС", "ЭтапГосконтрактаЕИС");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "АкцизныеМарки");
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "НомерАкцизнойМарки", 1);
ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
ДобавитьПКС(СвойстваТЧ, "", "Серия", 1, "Справочник_СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "", "ТипАкцизнойМарки", 1, "ВидыПродукцииИС");
ДобавитьПКС(СвойстваТЧ, "", "Упаковка", 1, "Справочник_Упаковки");
ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ДополнительныеРеквизиты");
ДобавитьПКС(СвойстваТЧ, "", "ЗначениеСвойства", 1);
ДобавитьПКС(СвойстваТЧ, "", "Свойство", 1, "Справочник_ДополнительныеРеквизиты");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "МаркировкиУпаковок");
ДобавитьПКС(СвойстваТЧ, "", "МаркировкаУпаковки", 1, "Справочник_ШтрихкодыУпаковокТоваров_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ПогашениеЗадолженности");
ДобавитьПКС(СвойстваТЧ, "", "ДокументРасчетов", 1);
ДобавитьПКС(СвойстваТЧ, "", "ОбъектРасчетов", 1);
ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1);
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "СведенияРНПТ");
ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмеренияРНПТ", 1, "Справочник_ЕдиницыИзмерения");
ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1);
ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
ДобавитьПКС(СвойстваТЧ, "", "КоличествоРНПТ", 1);
ДобавитьПКС(СвойстваТЧ, "", "НаименованиеТовара", 1);
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "РНПТ", 1, "Справочник_НомераГТД_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "СуммаРНПТ", 1);
ДобавитьПКС(СвойстваТЧ, "", "Упаковка", 1, "Справочник_Упаковки");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1);
ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
ДобавитьПКС(СвойстваТЧ, "", "Серия", 1, "Справочник_СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Товары");
ДобавитьПКС(СвойстваТЧ, "", "ВидСкидки", 1);
ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмерения", 1, "Справочник_ЕдиницыИзмерения");
ДобавитьПКС(СвойстваТЧ, "", "ЕдиницаИзмеренияПрослеживаемости", 1, "Справочник_ЕдиницыИзмерения");
ДобавитьПКС(СвойстваТЧ, "", "Заказ", 1, "Документ_ЗаказКлиента_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1);
ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
ДобавитьПКС(СвойстваТЧ, "", "КоличествоРНПТ", 1);
ДобавитьПКС(СвойстваТЧ, "", "КоличествоУпаковок", 1);
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "НомерГТД", 1);
ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
ДобавитьПКС(СвойстваТЧ, "", "ПрослеживаемыйТовар", 1);
ДобавитьПКС(СвойстваТЧ, "", "ПроцентСкидки", 1);
ДобавитьПКС(СвойстваТЧ, "", "Серия", 1, "Справочник_СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "", "СтавкаНДС", 1);
ДобавитьПКС(СвойстваТЧ, "", "СтранаПроисхождения", 1, "Справочник_СтраныМира");
ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1);
ДобавитьПКС(СвойстваТЧ, "", "СуммаБонусныхБаллов", 1);
ДобавитьПКС(СвойстваТЧ, "", "СуммаНДС", 1);
ДобавитьПКС(СвойстваТЧ, "", "СуммаСкидки", 1);
ДобавитьПКС(СвойстваТЧ, "", "СуммаСУчетомСкидки", 1);
ДобавитьПКС(СвойстваТЧ, "", "СчетДоходов", 1);
ДобавитьПКС(СвойстваТЧ, "", "СчетРасходов", 1);
ДобавитьПКС(СвойстваТЧ, "", "ТипЗапасов", 1);
ДобавитьПКС(СвойстваТЧ, "", "Упаковка", 1, "Справочник_Упаковки");
ДобавитьПКС(СвойстваТЧ, "", "Характеристика", 1, "Справочник_ХарактеристикиНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "", "Цена", 1);
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Услуги");
ДобавитьПКС(СвойстваТЧ, "", "Заказ", 1, "Документ_ЗаказКлиента_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "ИдентификаторСтроки", 1);
ДобавитьПКС(СвойстваТЧ, "", "Количество", 1);
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "", "НомерСтрокиДокумента", 1);
ДобавитьПКС(СвойстваТЧ, "", "Принципал", 1, "Справочник_Контрагенты");
ДобавитьПКС(СвойстваТЧ, "", "Содержание", 1);
ДобавитьПКС(СвойстваТЧ, "", "СтавкаНДС", 1);
ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1);
ДобавитьПКС(СвойстваТЧ, "", "СуммаНДС", 1);
ДобавитьПКС(СвойстваТЧ, "", "ТипУслуги", 1);
ДобавитьПКС(СвойстваТЧ, "", "Цена", 1);
#Вставка
ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации,EDПространствоИмен());
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "ЭтапыГрафикаОплаты", "ЭтапыГрафикаОплаты",EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "Заказ", "Заказ", 1,"Документ_ЗаказКлиента_Отправка",EDПространствоИмен());
ДобавитьПКС(СвойстваТЧ, "", "Сумма", 1,,EDПространствоИмен());
#КонецВставки
КонецПроцедуры
&ИзменениеИКонтроль("ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных")
Процедура EDПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли;
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.10") Тогда
УстановитьПравилоДляПКСТабЧасти(КомпонентыОбмена,
"Документ_РеализацияТоваровУслуг_Отправка",
"Товары",
"НомерГТД",
Истина,
"Справочник_НомераГТД_Отправка");
КонецЕсли;
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.17") Тогда
УстановитьПравилоДляПКСТабЧасти(КомпонентыОбмена,
"Документ_РеализацияТоваровУслуг_Отправка",
"Товары",
"СтавкаНДС",
Истина,
"СправочникСсылка_СтавкиНДС_Отправка");
УстановитьПравилоДляПКСТабЧасти(КомпонентыОбмена,
"Документ_РеализацияТоваровУслуг_Отправка",
"Услуги",
"СтавкаНДС",
Истина,
"СправочникСсылка_СтавкиНДС_Отправка");
КонецЕсли;
ВидОперацииСтрокой = "";
Если Не ЗначениеЗаполнено(ДанныеИБ.ХозяйственнаяОперация) Тогда
ВидОперацииСтрокой = "РеализацияКлиенту";
ИначеЕсли ДанныеИБ.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности Тогда
Если ДанныеИБ.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.ВПути Тогда
ВидОперацииСтрокой = "ОтгрузкаБезПереходаПравСобственности_ВПути";
Иначе
ВидОперацииСтрокой = "ОтгрузкаБезПереходаПравСобственности_Реализовано";
КонецЕсли;
КонецЕсли;
Если ВидОперацииСтрокой <> "" Тогда
ДанныеXDTO.Вставить("ВидОперации", ВидОперацииСтрокой);
Иначе
ДанныеXDTO.Вставить("ВидОперации", "РеализацияКлиенту");
КонецЕсли;
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.15") Тогда
ДанныеXDTO.Вставить("ЭтапГосконтрактаЕИС", ДанныеИБ.ЭтапГосконтрактаЕИС);
КонецЕсли;
СкладДляВыгрузки = СкладДляВыгрузки(ДанныеИБ.Склад, КомпонентыОбмена.ПараметрыКонвертации, Истина);
ДанныеXDTO.Вставить("Склад", СкладДляВыгрузки);
ДанныеXDTO.Вставить("ГлавныйБухгалтер", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеИБ.ГлавныйБухгалтер, "ФизическоеЛицо"));
ДанныеXDTO.Вставить("Руководитель", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеИБ.Руководитель, "ФизическоеЛицо"));
Если ДанныеИБ.РеализацияПоЗаказам И ЗначениеЗаполнено(ДанныеИБ.ЗаказКлиента)
И ТипЗнч(ДанныеИБ.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ДанныеXDTO.Вставить("Заказ", ДанныеИБ.ЗаказКлиента);
Иначе
ДанныеXDTO.Вставить("Заказ", Неопределено);
КонецЕсли;
ВыгрузитьПодразделениеИзРеквизитаДокумента(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO, "Склад");
ВыгрузитьНалогообложениеНДС(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO, Ложь);
ВыгрузитьДополнительныеРеквизитыИСведения(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO);
ВыгрузитьПризнакКомплектПечатныхДокументовПодписан(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO);
ВалютаРеглУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(ДанныеИБ.Организация);
// Дополнительные свойства для договора
Если ЗначениеЗаполнено(ДанныеИБ.Договор) Тогда
ДанныеXDTO.Вставить("Договор", ДанныеИБ.Договор);
Иначе
ПараметрыПоУмолчанию = Новый Структура(ДоговорФиксированнаяСтруктураКлючей());
ЗаполнитьЗначенияСвойств(ПараметрыПоУмолчанию, ДанныеИБ);
ПараметрыПоУмолчанию.ВидДоговора =
?(ДанныеИБ.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию, "СКомиссионером", "СПокупателем");
Если ЗначениеЗаполнено(ДанныеИБ.Соглашение) Тогда
ДанныеРасчетаУЕ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеИБ.Соглашение, "ВалютаВзаиморасчетов, ОплатаВВалюте, Организация");
РасчетыВУсловныхЕдиницах = ВедетсяРасчетВУЕ(ДанныеРасчетаУЕ.ВалютаВзаиморасчетов, ДанныеРасчетаУЕ.ОплатаВВалюте, ДанныеРасчетаУЕ.Организация, КомпонентыОбмена);
Иначе
РасчетыВУсловныхЕдиницах = (ДанныеИБ.Валюта = ВалютаРеглУчета И ДанныеИБ.Валюта <> ДанныеИБ.ВалютаВзаиморасчетов);
КонецЕсли;
ПараметрыПоУмолчанию.РасчетыВУсловныхЕдиницах = РасчетыВУсловныхЕдиницах;
Заказ = Новый Структура("Заказ, Соглашение, Сделка", ДанныеИБ.ЗаказКлиента, ДанныеИБ.Соглашение, ДанныеИБ.Сделка);
Договор = ДоговорИнструкцияКонвертацииПоДаннымВзаиморасчетов(ПараметрыПоУмолчанию, КомпонентыОбмена, Заказ, ДанныеИБ);
ДанныеXDTO.Вставить("Договор", Договор);
КонецЕсли;
// Данные шапки документа необходимы для вычисления
// курса и кратности взаиморасчетов.
ШапкаДокумента =
"ВЫБРАТЬ
| ДанныеШапкиДокумента.Валюта КАК Валюта,
| ДанныеШапкиДокумента.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| ДанныеШапкиДокумента.КурсЧислитель КАК КурсВзаиморасчетов,
| ДанныеШапкиДокумента.КурсЗнаменатель КАК КратностьВзаиморасчетов
|ПОМЕСТИТЬ ДанныеШапкиДокумента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК ДанныеШапкиДокумента
|ГДЕ
| ДанныеШапкиДокумента.Ссылка = &Ссылка
|ИНДЕКСИРОВАТЬ ПО
| Валюта";
Если ДанныеИБ.Валюта = ВалютаРеглУчета
Или ДанныеИБ.ВалютаВзаиморасчетов = ВалютаРеглУчета Тогда
ДанныеОперации =
"ВЫБРАТЬ
| ДанныеШапкиДокумента.КурсВзаиморасчетов КАК КурсВзаиморасчетов,
| ДанныеШапкиДокумента.КратностьВзаиморасчетов КАК КратностьВзаиморасчетов
|ИЗ
| ДанныеШапкиДокумента КАК ДанныеШапкиДокумента";
Иначе
ДанныеОперации =
"ВЫБРАТЬ
| ЕСТЬNULL(КурсВалютыДокумента.КурсЧислитель, 1) КАК КурсВзаиморасчетов,
| ЕСТЬNULL(КурсВалютыДокумента.КурсЗнаменатель, 1) КАК КратностьВзаиморасчетов
|ИЗ
| ДанныеШапкиДокумента КАК ДанныеШапкиДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(
| &Дата,
| Валюта В
| (ВЫБРАТЬ
| Док.Валюта
| ИЗ
| ДанныеШапкиДокумента КАК Док)
| И БазоваяВалюта = &БазоваяВалюта) КАК КурсВалютыДокумента
| ПО ДанныеШапкиДокумента.Валюта = КурсВалютыДокумента.Валюта";
КонецЕсли;
ТоварыИУслугиДокумента =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА Товары.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| ТОГДА ВЫБОР
| КОГДА ХарактеристикаСпр.НаименованиеПолное = """"
| ТОГДА ХарактеристикаСпр.Наименование
| ИНАЧЕ ХарактеристикаСпр.НаименованиеПолное
| КОНЕЦ
| ИНАЧЕ """"
| КОНЕЦ КАК ХарактеристикаНаименование,
| ВЫБОР
| КОГДА НоменклатураСпр.НаименованиеПолное = """"
| ТОГДА НоменклатураСпр.Наименование
| ИНАЧЕ НоменклатураСпр.НаименованиеПолное
| КОНЕЦ КАК НоменклатураНаименование,
| Товары.Количество КАК Количество,
| Товары.Цена КАК Цена,
| Товары.Сумма КАК Сумма,
| Товары.СтавкаНДС КАК СтавкаНДС,
| Товары.СуммаНДС КАК СуммаНДС,
| Товары.Номенклатура.ТипНоменклатуры КАК НоменклатураТипНоменклатуры,
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.ПроцентРучнойСкидки КАК ПроцентСкидки,
| Товары.СуммаРучнойСкидки КАК СуммаСкидки,
| Товары.СуммаБонусныхБалловКСписанию КАК СуммаБонусныхБаллов,
| Товары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Товары.Серия КАК Серия,
| ВЫБОР
| КОГДА &РеализацияПоЗаказам
| И &РеализацияПоНесколькимЗаказам
| И Товары.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента
| ТОГДА Товары.ЗаказКлиента
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Заказ
|ПОМЕСТИТЬ ТаблицаТовары
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК НоменклатураСпр
| ПО (НоменклатураСпр.Ссылка = Товары.Номенклатура)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикаСпр
| ПО (ХарактеристикаСпр.Ссылка = Товары.Характеристика)
|ГДЕ
| Товары.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВидыЗапасов.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ВидыЗапасов.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| ВидыЗапасов.Упаковка КАК Упаковка,
| ВидыЗапасов.КоличествоУпаковок КАК КоличествоУпаковок,
| ВидыЗапасов.Количество КАК Количество,
| ВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ВидыЗапасов.СуммаНДС КАК СуммаНДС,
| ВидыЗапасов.НомерГТД КАК НомерГТД,
| ВидыЗапасов.КоличествоПоРНПТ КАК КоличествоПоРНПТ,
| ВидыЗапасов.Ссылка.ВернутьМногооборотнуюТару КАК ВернутьМногооборотнуюТару,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА ВидыЗапасов.Ссылка.ЦенаВключаетНДС
| ТОГДА ВидыЗапасов.СуммаСНДС / ВидыЗапасов.Количество
| ИНАЧЕ (ВидыЗапасов.СуммаСНДС - ВидыЗапасов.СуммаНДС) / ВидыЗапасов.Количество
| КОНЕЦ КАК ЧИСЛО(31, 2)) КАК Цена,
| ВЫБОР
| КОГДА ВидыЗапасов.Ссылка.ЦенаВключаетНДС
| ТОГДА ВидыЗапасов.СуммаСНДС
| ИНАЧЕ ВидыЗапасов.СуммаСНДС - ВидыЗапасов.СуммаНДС
| КОНЕЦ КАК Сумма,
| ВЫБОР
| КОГДА ВидыЗапасов.ВидЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
| ТОГДА ВЫРАЗИТЬ(""КомиссионныеТовары"" КАК СТРОКА(20))
| ИНАЧЕ ВЫРАЗИТЬ(&СобственныеТовары КАК СТРОКА(20))
| КОНЕЦ КАК ТипЗапасов,
| ВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ВЫБОР
| КОГДА ВидыЗапасов.СуммаРучнойСкидки > 0
| ТОГДА ВидыЗапасов.СуммаРучнойСкидки
| КОГДА ВидыЗапасов.СуммаАвтоматическойСкидки > 0
| ТОГДА ВидыЗапасов.СуммаАвтоматическойСкидки
| КОНЕЦ КАК СуммаСкидки,
| ВЫБОР
| КОГДА &РеализацияПоЗаказам
| И &РеализацияПоНесколькимЗаказам
| И ВидыЗапасов.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента
| ТОГДА ВидыЗапасов.ЗаказКлиента
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК Заказ
|ПОМЕСТИТЬ ВидыЗапасов
|ИЗ
| Документ.РеализацияТоваровУслуг.ВидыЗапасов КАК ВидыЗапасов
|ГДЕ
| ВидыЗапасов.Ссылка = &Ссылка
| И ВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
| И ВидыЗапасов.АналитикаУчетаНоменклатуры.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа)
|;
|
|////////////////////////////////////////////////////////////////////////////////
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| МАКСИМУМ(ТаблицаТовары.ПроцентСкидки) КАК ПроцентСкидки,
| МАКСИМУМ(ТаблицаТовары.СуммаСкидки) КАК СуммаСкидки,
| МАКСИМУМ(ТаблицаТовары.СуммаБонусныхБаллов) КАК СуммаБонусныхБаллов,
| ТаблицаТовары.Серия КАК Серия
| ПОМЕСТИТЬ ВТ_БонусыИСкидки
| ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|
| СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Номенклатура,
| ТаблицаТовары.Характеристика,
| ТаблицаТовары.Серия
| ;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Характеристика КАК Характеристика,
| ВЫБОР
| КОГДА ТаблицаТовары.ХарактеристикаНаименование = """"
| ТОГДА ТаблицаТовары.НоменклатураНаименование
| ИНАЧЕ ТаблицаТовары.НоменклатураНаименование + "" ("" + ТаблицаТовары.ХарактеристикаНаименование + "")""
| КОНЕЦ КАК Содержание,
| ТаблицаТовары.Номенклатура.Принципал КАК ПринципалСсылка,
| ВЫБОР
| КОГДА ТаблицаТовары.Номенклатура.ОсобенностьУчета = ЗНАЧЕНИЕ(Перечисление.ОсобенностиУчетаНоменклатуры.ОрганизациейПоАгентскойСхеме)
| ИЛИ ТаблицаТовары.Номенклатура.ОсобенностьУчета = ЗНАЧЕНИЕ(Перечисление.ОсобенностиУчетаНоменклатуры.Партнером)
| ТОГДА ""Агентские""
| ИНАЧЕ ""Собственные""
| КОНЕЦ КАК ТипУслуги,
| ТаблицаТовары.Количество КАК Количество,
| ТаблицаТовары.Заказ КАК Заказ,
| ТаблицаТовары.Цена КАК Цена,
| ТаблицаТовары.СтавкаНДС КАК СтавкаНДС,
| ТаблицаТовары.Сумма КАК Сумма,
| ТаблицаТовары.СуммаНДС КАК СуммаНДС,
| ТаблицаТовары.ПроцентСкидки КАК ПроцентСкидки,
| ТаблицаТовары.СуммаСкидки КАК СуммаСкидки,
| ТаблицаТовары.СуммаБонусныхБаллов КАК СуммаБонусныхБаллов,
| ТаблицаТовары.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаТовары.НомерСтроки КАК НомерСтрокиДокумента
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|ГДЕ
| (ТаблицаТовары.НоменклатураТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
| ИЛИ ТаблицаТовары.НоменклатураТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| МАКСИМУМ(ТаблицаТовары.НомерСтроки) КАК НомерСтроки
|ПОМЕСТИТЬ ТаблицыТоварыПоМаксСтроке
|ИЗ
| ТаблицаТовары КАК ТаблицаТовары
|
|СГРУППИРОВАТЬ ПО
| ТаблицаТовары.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура КАК Номенклатура,
| ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| &ТекстЗапросаХарактеристика,
| &ТекстЗапросаСерия,
| &ТекстЗапросаУпаковка,
| &ТекстЗапросаРНПТ,
| &ТекстЗапросаГТД,
| ВложенныйЗапрос.СтавкаНДС КАК СтавкаНДС,
| ВложенныйЗапрос.ТипЗапасов КАК ТипЗапасов,
| ВложенныйЗапрос.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
| ВложенныйЗапрос.Цена КАК Цена,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.Сумма КАК Сумма,
| ВложенныйЗапрос.СуммаНДС КАК СуммаНДС,
| ВложенныйЗапрос.СуммаСкидки КАК СуммаСкидки,
| ВТ_БонусыИСкидки.ПроцентСкидки КАК ПроцентСкидки,
| ВТ_БонусыИСкидки.СуммаБонусныхБаллов КАК СуммаБонусныхБаллов,
| ВложенныйЗапрос.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ВложенныйЗапрос.Заказ КАК Заказ
|ИЗ
| (ВЫБРАТЬ
| ВидыЗапасов.Номенклатура КАК Номенклатура,
| ВидыЗапасов.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ВидыЗапасов.Характеристика КАК Характеристика,
| ВидыЗапасов.Серия КАК Серия,
| ВидыЗапасов.Упаковка КАК Упаковка,
| ВидыЗапасов.КоличествоУпаковок КАК КоличествоУпаковок,
| ВидыЗапасов.СтавкаНДС КАК СтавкаНДС,
| ВидыЗапасов.НомерГТД КАК НомерГТД,
| ВЫБОР
| КОГДА ВидыЗапасов.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И ВидыЗапасов.ВернутьМногооборотнуюТару
| ТОГДА ""ВозвратнаяТара""
| ИНАЧЕ ВидыЗапасов.ТипЗапасов
| КОНЕЦ КАК ТипЗапасов,
| ЕСТЬNULL(ПорядокСтрокТаблицыТовары.НомерСтроки, 0) КАК НомерСтрокиДокумента,
| ВЫРАЗИТЬ(ВидыЗапасов.Цена КАК ЧИСЛО(31, 2)) КАК Цена,
| СУММА(ВидыЗапасов.Количество) КАК Количество,
| СУММА(ВидыЗапасов.КоличествоПоРНПТ) КАК КоличествоПоРНПТ,
| СУММА(ВЫРАЗИТЬ(ВидыЗапасов.Сумма КАК ЧИСЛО(31, 2))) КАК Сумма,
| СУММА(ВидыЗапасов.СуммаНДС) КАК СуммаНДС,
| ВидыЗапасов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| СУММА(ВидыЗапасов.СуммаСкидки) КАК СуммаСкидки,
| ВидыЗапасов.Заказ КАК Заказ
| ИЗ
| ВидыЗапасов КАК ВидыЗапасов
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыТоварыПоМаксСтроке КАК ПорядокСтрокТаблицыТовары
| ПО ВидыЗапасов.Номенклатура = ПорядокСтрокТаблицыТовары.Номенклатура
|
| СГРУППИРОВАТЬ ПО
| ВидыЗапасов.Номенклатура,
| ВидыЗапасов.Характеристика,
| ВидыЗапасов.ЕдиницаИзмерения,
| ВидыЗапасов.СтавкаНДС,
| ВидыЗапасов.Цена,
| ВидыЗапасов.НомерГТД,
| ВЫБОР
| КОГДА ВидыЗапасов.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)
| И ВидыЗапасов.ВернутьМногооборотнуюТару
| ТОГДА ""ВозвратнаяТара""
| ИНАЧЕ ВидыЗапасов.ТипЗапасов
| КОНЕЦ,
| ЕСТЬNULL(ПорядокСтрокТаблицыТовары.НомерСтроки, 0),
| ВидыЗапасов.Серия,
| ВидыЗапасов.Упаковка,
| ВидыЗапасов.КоличествоУпаковок,
| ВидыЗапасов.Заказ,
| ВидыЗапасов.ИдентификаторСтроки) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_БонусыИСкидки КАК ВТ_БонусыИСкидки
| ПО (ВложенныйЗапрос.Номенклатура = ВТ_БонусыИСкидки.Номенклатура
| И ВложенныйЗапрос.Характеристика = ВТ_БонусыИСкидки.Характеристика
| И ВложенныйЗапрос.Серия = ВТ_БонусыИСкидки.Серия
| И ВТ_БонусыИСкидки.СуммаСкидки = ВложенныйЗапрос.СуммаСкидки)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтрокиДокумента";
ЗаполнитьСобственныеТоварыВТексте(ТоварыИУслугиДокумента);
ТоварыИУслугиДокумента = СтрЗаменить(ТоварыИУслугиДокумента, "&ТекстЗапросаХарактеристика",
ПолучитьТекстЗапросаХарактеристики(КомпонентыОбмена, "ВложенныйЗапрос"));
ТоварыИУслугиДокумента = СтрЗаменить(ТоварыИУслугиДокумента, "&ТекстЗапросаУпаковка",
ПолучитьТекстЗапросаУпаковки(КомпонентыОбмена, "ВложенныйЗапрос"));
ТоварыИУслугиДокумента = СтрЗаменить(ТоварыИУслугиДокумента, "&ТекстЗапросаСерия",
ПолучитьТекстЗапросаСерии(КомпонентыОбмена, "ВложенныйЗапрос"));
ТоварыИУслугиДокумента = СтрЗаменить(ТоварыИУслугиДокумента, "&ТекстЗапросаРНПТ",
ПолучитьТекстЗапросаРНПТ(КомпонентыОбмена, "ВложенныйЗапрос"));
ТоварыИУслугиДокумента = СтрЗаменить(ТоварыИУслугиДокумента, "&ТекстЗапросаГТД",
ПолучитьТекстЗапросаГТД(КомпонентыОбмена, "ВложенныйЗапрос"));
//++ Локализация
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.16") Тогда
ИмяТаблицы = "Документ.РеализацияТоваровУслуг.ВидыЗапасов";
ИдентификаторыИзВидовЗапасов = Истина;
ПолучитьСведенияОПрослеживаемости(ИмяТаблицы, ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, ИдентификаторыИзВидовЗапасов);
КонецЕсли;
//-- Локализация
#Область МаркировкиУпаковки
ТекстЗапросаМаркировкиУпаковки =
"ВЫБРАТЬ
| РеализацияТоваровУслугШтрихкодыУпаковок.НомерСтроки КАК НомерСтрокиДокумента,
//++ Локализация
| ШтрихкодыУпаковокТоваров.ТипУпаковки КАК ТипУпаковки,
| ШтрихкодыУпаковокТоваров.Номенклатура КАК Номенклатура,
| ШтрихкодыУпаковокТоваров.Характеристика КАК Характеристика,
| ШтрихкодыУпаковокТоваров.Серия КАК Серия,
| ШтрихкодыУпаковокТоваров.Упаковка КАК Упаковка,
| ШтрихкодыУпаковокТоваров.ЗначениеШтрихкода КАК ЗначениеШтрихкода,
//-- Локализация
| РеализацияТоваровУслугШтрихкодыУпаковок.ШтрихкодУпаковки КАК ШтрихкодУпаковки
|ПОМЕСТИТЬ втШтрихкодыУпаковок
|ИЗ
| Документ.РеализацияТоваровУслуг.ШтрихкодыУпаковок КАК РеализацияТоваровУслугШтрихкодыУпаковок
//++ Локализация
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковокТоваров
| ПО РеализацияТоваровУслугШтрихкодыУпаковок.ШтрихкодУпаковки = ШтрихкодыУпаковокТоваров.Ссылка
//-- Локализация
|ГДЕ
| &ВыгружатьШтрихкодыУпаковок
| И РеализацияТоваровУслугШтрихкодыУпаковок.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//++ Локализация
| втШтрихкодыУпаковок.Номенклатура КАК Номенклатура,
| &ТекстЗапросаХарактеристикаАкцизныеМарки,
| &ТекстЗапросаСерияАкцизныеМарки,
| &ТекстЗапросаУпаковкаАкцизныеМарки,
| &ТипАкцизнойМарки,
| втШтрихкодыУпаковок.ЗначениеШтрихкода КАК НомерАкцизнойМарки,
//-- Локализация
| втШтрихкодыУпаковок.НомерСтрокиДокумента КАК НомерСтрокиДокумента
|ИЗ
| втШтрихкодыУпаковок КАК втШтрихкодыУпаковок
//++ Локализация
|ГДЕ
| втШтрихкодыУпаковок.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковок.МаркированныйТовар)
//-- Локализация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втШтрихкодыУпаковок.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
| втШтрихкодыУпаковок.ШтрихкодУпаковки КАК МаркировкаУпаковки
|ИЗ
| втШтрихкодыУпаковок КАК втШтрихкодыУпаковок
//++ Локализация
|ГДЕ
| НЕ втШтрихкодыУпаковок.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковок.МаркированныйТовар)
| И НЕ втШтрихкодыУпаковок.ТипУпаковки = ЗНАЧЕНИЕ(Перечисление.ТипыУпаковок.МультитоварнаяУпаковка)
//-- Локализация
|";
//++ Локализация
ТекстЗапросаМаркировкиУпаковки = СтрЗаменить(ТекстЗапросаМаркировкиУпаковки, "&ТекстЗапросаХарактеристикаАкцизныеМарки",
ПолучитьТекстЗапросаХарактеристики(КомпонентыОбмена, "втШтрихкодыУпаковок"));
ТекстЗапросаМаркировкиУпаковки = СтрЗаменить(ТекстЗапросаМаркировкиУпаковки, "&ТекстЗапросаСерияАкцизныеМарки",
ПолучитьТекстЗапросаСерии(КомпонентыОбмена, "втШтрихкодыУпаковок"));
ТекстЗапросаМаркировкиУпаковки = СтрЗаменить(ТекстЗапросаМаркировкиУпаковки, "&ТекстЗапросаУпаковкаАкцизныеМарки",
ПолучитьТекстЗапросаУпаковки(КомпонентыОбмена, "втШтрихкодыУпаковок", Ложь));
ТекстЗапросаМаркировкиУпаковки = СтрЗаменить(ТекстЗапросаМаркировкиУпаковки, "&ТипАкцизнойМарки",
ПолучитьТекстЗапросаТипАкцизнойМарки(КомпонентыОбмена, "втШтрихкодыУпаковок"));
//-- Локализация
#КонецОбласти
Запрос = Новый Запрос;
Запрос.Текст = ШапкаДокумента + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ДанныеОперации + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТоварыИУслугиДокумента + ОбщегоНазначения.РазделительПакетаЗапросов()
+ ТекстЗапросаМаркировкиУпаковки;
Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка);
Запрос.УстановитьПараметр("Дата", ДанныеИБ.Дата);
Запрос.УстановитьПараметр("БазоваяВалюта", ВалютаРеглУчета);
Запрос.УстановитьПараметр("ВыгружатьШтрихкодыУпаковок", ВыгружатьШтрихкодыУпаковок(КомпонентыОбмена));
Запрос.УстановитьПараметр("РеализацияПоЗаказам", ДанныеИБ.РеализацияПоЗаказам);
Запрос.УстановитьПараметр("РеализацияПоНесколькимЗаказам", ДанныеИБ.РеализацияПоЗаказам
И Не ЗначениеЗаполнено(ДанныеИБ.ЗаказКлиента));
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ДанныеОперации = РезультатыЗапроса[1].Выбрать();
Если ДанныеОперации.Следующий() Тогда
ДанныеXDTO.Вставить("КурсВзаиморасчетов", ДанныеОперации.КурсВзаиморасчетов);
ДанныеXDTO.Вставить("КратностьВзаиморасчетов", ДанныеОперации.КратностьВзаиморасчетов);
КонецЕсли;
ТабУслуги = РезультатыЗапроса[5].Выгрузить();
ТабТовары = РезультатыЗапроса[7].Выгрузить();
ЗаполнитьХарактеристикуУпаковкуВТЧ(КомпонентыОбмена, ТабТовары);
ТаблицаУслугЗаполнитьПринципала(КомпонентыОбмена, ТабУслуги);
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) < ВерсияФорматаЧислом("1.17") Тогда
ПереопределитьСтавкуНДСДляСтарыхФорматов(ТабТовары, Ложь);
ПереопределитьСтавкуНДСДляСтарыхФорматов(ТабУслуги, Ложь);
КонецЕсли;
ДанныеXDTO.Вставить("Товары", ТабТовары);
ДанныеXDTO.Вставить("Услуги", ТабУслуги);
//++ Локализация
ПроверитьНеобходимостьВыгрузкиПатента(ДанныеXDTO, ДанныеИБ.Организация, ДанныеИБ.Подразделение, ДанныеИБ.НалогообложениеНДС, КомпонентыОбмена, ДанныеИБ.Ссылка);
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.7") Тогда
АкцизныеМарки = РезультатыЗапроса[РезультатыЗапроса.Количество() - 2].Выгрузить();
ЗаполнитьХарактеристикуУпаковкуВТЧ(КомпонентыОбмена, АкцизныеМарки);
ДанныеXDTO.Вставить("АкцизныеМарки", АкцизныеМарки);
КонецЕсли;
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.7") Тогда
МаркировкиУпаковок = РезультатыЗапроса[РезультатыЗапроса.Количество() - 1].Выгрузить();
ДанныеXDTO.Вставить("МаркировкиУпаковок", МаркировкиУпаковок);
КонецЕсли;
//-- Локализация
Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.17") Тогда
ЗаполнитьСерииПоДокументу(ДанныеИБ.Ссылка, "Документ.РеализацияТоваровУслуг.Серии", ДанныеXDTO);
КонецЕсли;
#Вставка
ДанныеXDTO.Вставить("ЭтапыГрафикаОплаты", ДанныеИБ.ЭтапыГрафикаОплаты.Выгрузить());
#КонецВставки
КонецПроцедуры
Аналогичнотребуется скопировть расширение формата в базу в Источник и также доработать процедуры ПКО (Процедура ДобавитьПКОДокументРеализацияТоваровУслуг(ПравилаКонвертации)) и возможно ПередЗаписьюПолученныхДанных. В данном примере нам эти данные не нужны, их в бухгалтерии девать некуда в соответствии с бизнес-логикой, но думаю у вас с этим проблем не возникнет.
единственное — заглянем в файл выгрузки реализации. Как видим, появилась наша табличная часть с префиксом ext1:СтрокаЭтапыОплаты с заказом и суммой, как мы и хотели

Если вам данные примеры нужны для с скачивания можете скачать с платного ресурса — с Инфостарта https://infostart.ru/1c/articles/2632740/