Доработка типовой синхронизации
Первая часть статься, как настроить типовую синхронизацию тут
В этой статье я покажу как можно доработать типовой механизм синхронизации между УТ 11.5 и БУХ 3 для документов "Поступление товаров от комиссионера".
Описание проблемы
Необходимо из УТ передать документ "Поступление товаров от комиссионера" в БУХ. И этого, стандартным образом сделать не получится.
На ИТС по этому поводу говорят следующее:

Комиссионная торговля
В первой статье мы уже настроили типовую синхронизацию между УТ и БУХ. В ней мы сделали пару документов поступления и продажи. Все дальнейшие действия я буду делать в той базе УТ. Бух мы трогать не будем. Она нам интересно только для того что бы получить из УТ нужный нам документ "Поступление товаров, Возврат от комиссионера".
Для начала сделаем пару документов комиссионной торговли, которые будем отправлять в БУХ.
НСИ и Администрирование ->Продажи. Чтобы была возможность включить функционал связанный с Комиссионной торговлей, в начале ставим галку Договоры с клиентам а затем мотаем в низ и ставим галку Комиссионные продажи

Теперь мы можем передать товар на комиссию. Идем в Продажи ->Документы продажи (все). Что бы была возможность выбрать документ "Передача товаров" при создании, в начале нужно нажать вверху на гиперссылку Настроить, и можно ткнуть все галки. После этого нажимаем "Создать", выбираем Передача товаров ->Передача на комиссию. Выбираем нашего покупателя. Создаем договор - заполняем поле Наименование: - "Договор с покупателем", и жмем "Записать и закрыть". Переходим на вкладку "Товары", выбираем номенклатуру, которую будем передавать, заполняем количество, цену. На этом все. Опять жмем "Записать и закрыть"

Теперь сделаем возврат товара от комиссионера. На этом документе мы и будем экспериментировать с доработкой синхронизации. Жмем "Создать", Поступление товаров ->Возврат от комиссионера, Выбираем нашего покупателя. Договор подставится автоматически. На вкладке товары выберем пару номенклатур, количество, цена. Нажимаем "Провести и закрыть".

Ну и первым делом, хочется посмотреть, какие документы зарегистрировались для отправки в 1с. Идем в НСИ и Администрирование ->Синхронизация данных ->Настройка синхронизации данных, тыкаем на пиктограмму . Откроется окно регистрации изменений. Развернем документы, и видим - зарегистрировался только 1 документ - "Передача товаров". А вот в "Поступление товаров" зареганых документов нет :(.

Для чистоты эксперимента, пробуем зарегистрировать "Поступление товаров" (возврат от комиссионера) в ручную. Жмем правой кнопкой в правой части, выбираем Зарегистрировать изменения объекта, выбираем наш документ, и видим сообщение: Зарегистрировано 0 изменений из 1 на узле "бухгалтерия предприятия, редакция 3.0".

Собственно, как и написано в ИТС, штатными средствами отправить этот документ в бух нельзя. Поэтому будем отправлять не штатными.
Конвертация данных 3.1
Для доработки нам потребуется конфигурация Конвертация данных 3.1. Создаем пустую базу из шаблона.
В КД нужно сделать пару настроек. Идем в Администрирование ->Используемый функционал Т.к. мы будем дорабатывать типовую синхронизацию, а она в свою очередь построена на универсальном обмене через XDTO пакет EnterpriseData - нам нужно включить необходимый функционал. Ставим галку Использовать формат XDTO
Кроме того, нужно еще сделать так, что бы сам документ "Поступление товаров" (возврат от комиссионера) регистрировался, а для этого нужно изменить правила регистрации для него. Поэтому еще ставим галку Использовать правила регистрации объектов

Далее, нам нужно загрузить структуру конфигураций. В принципе Достаточно только УТ, но я загрузил так же и структуру БУХ. Для этого выгружаем обе конфигурации в файлы XML.

В КД переходим в Конфигурации ->Загрузка конфигурации из файлов XML/EDT, выбираем папку с выгрузкой. Остальные настройки оставляем по дефолту, и нажимаем "Выполнить загрузку".

Если загрузка прошла успешно, то в Конфигурации ->Релизы, появится список загруженных конфигураций.

Далее нам нужно загрузить формат. Это два пакета XDTO - EnterpriseData, причем той версии, которая используется в нашем обмене (в моем случае 1.19.1). и ExchangeMessage. Взять их можно из типовой конфигурации, в разделе "Общие" -> "XDTO-пакеты", находим нужные нам в списке, тыкаем правой кнопкой -> Экспорт XML-схемы...

В КД переходим в Формат данных -> Загрузка структуры формата выбираем наши оба файла, которые выгрузили шагом выше и жмем "Выполнить загрузку"

Далее идем в Конвертации -> Загрузка конвертации XDTO Попадаем в мастер загрузки. На первом шаге Выбрать конвертацию для загрузки - "Загрузка конвертации" оставляем "новая", и поля не заполняем. Оно заполнится само. А вот "Загрузка конфигурации" выбираем пункт - "Существующая", т.к. ее загрузили ранее отдельно, и из списка выбираем нашу Управление Торговлей. На втором шаге выбираем каталог с файлами XML базы 1с. Имя модуля подставится автоматом (МенеджерОбменаЧерезУниверсальныйФормат). Ну и собственно все. Ждем пока загрузится.

Ну и последний подготовительный шаг - это загрузка регистраций. И он очень похож на загрузку конвертаций. Идем в Регистрации -> Загрузка регистрации Тут похожий мастер, на первом шаге: "загрузка регистрации" оставляем пустой. А в "Загрузке конфигурации" выбираем - "Существующая" и из списка выбираем УТ. Жмем "Готово". На втором шаге опять выбираем папку с файлами XML УТ. Имя модуля тоже подгрузится автоматом - "МенеджерРегистрации". "Готово". И опять ждем.

Дорабатываем регистрацию изменений.
Идем в Регистрации -> Регистрации, и видим "Правила регистрации для конфигурации ERP 2.5.22", что странно :). Мы то загружали правлила регистрации из УТ. Ну да ладно, наверно программисты из 1с делают эти правила на базе ERP и поленились поменять название. Проваливаемся. Переходим по гиперссылке Правила регистрации объектов, разворачиваем документы и ищем наш: "Поступление товаров". Дважды тыкаем по нему.

Если изучить на вкладке "Основное", те правила которые есть, то там все норм. Их трогать не надо. Переходим во вкладку "Обработки событий" -> "При обработке". находим строку кода:
ПараметрыОбработкиПРО.РазделыУчетаСтрокой = "Производство";
и здесь "Производство" меняем на продажи. На вкладке "При обработке (доп)" делаем то же самое.
Жмем "Записать и закрыть". Возвращаемся на вкладку "Основное", и тыкаем на кнопку "Выгрузить правила регистрации". Немного ждем и в сообщении говорят что исправленный модуль скопирован в буфер обмена. Сохраняем его в текстовый файл. Ну на всякий случай.

Идем в конфигуратор УТ, создаем расширение, добавляем в него общи модуль "МенеджерРегистрации". В основной конфигурации тоже открываем этот модуль. Ищем в нем процедуру:
Процедура ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработкеДополнительный(
И эта процедура как раз та, что мы видели в конвертации, и где поменяли значение с "Производства" на "Продажи". Кстати ниже там втрая процедура, из вкладки доп. Где мы сделали то же самое.
Процедура ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработке(
Обе их добавляем в расширение как "Изменение и контроль", и меняем строчки с "Производства" на "Продажи".
&ИзменениеИКонтроль("ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработкеДополнительный")
Процедура СинхДоп_ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработкеДополнительный(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, ИспользоватьКэш, ДополнительныеСвойства)
ПараметрыОбработкиПРО = ОбменДаннымиСобытияУТ.ИнициализироватьПараметрыОбработкиПРО();
ПараметрыОбработкиПРО.ТекстЗапроса = ТекстЗапроса;
ПараметрыОбработкиПРО.ПараметрыЗапроса = ПараметрыЗапроса;
ПараметрыОбработкиПРО.ИспользоватьКэш = ИспользоватьКэш;
ПараметрыОбработкиПРО.Отказ = Отказ;
ПараметрыОбработкиПРО.Объект = Объект;
#Удаление
ПараметрыОбработкиПРО.РазделыУчетаСтрокой = "Производство";
#КонецУдаления
#Вставка
ПараметрыОбработкиПРО.РазделыУчетаСтрокой = "Продажи";
#КонецВставки
ПараметрыОбработкиПРОПослеОбработки = ОбменДаннымиСобытияУТ.ПриОбработкеПРО(ПараметрыОбработкиПРО);
ТекстЗапроса = ПараметрыОбработкиПРОПослеОбработки.ТекстЗапроса;
ПараметрыЗапроса = ПараметрыОбработкиПРОПослеОбработки.ПараметрыЗапроса;
ИспользоватьКэш = ПараметрыОбработкиПРОПослеОбработки.ИспользоватьКэш;
Отказ = ПараметрыОбработкиПРОПослеОбработки.Отказ;
Объект = ПараметрыОбработкиПРОПослеОбработки.Объект;
КонецПроцедуры
&ИзменениеИКонтроль("ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработке")
Процедура СинхДоп_ПРО_Документ_ПоступлениеТоваровОтХранителя_ПриОбработке(Отказ, ПРО, Объект, ТекстЗапроса, ПараметрыЗапроса, ИспользоватьКэш, Выгрузка, ДополнительныеСвойства)
ПараметрыОбработкиПРО = ОбменДаннымиСобытияУТ.ИнициализироватьПараметрыОбработкиПРО();
ПараметрыОбработкиПРО.ТекстЗапроса = ТекстЗапроса;
ПараметрыОбработкиПРО.ПараметрыЗапроса = ПараметрыЗапроса;
ПараметрыОбработкиПРО.ИспользоватьКэш = ИспользоватьКэш;
ПараметрыОбработкиПРО.Отказ = Отказ;
ПараметрыОбработкиПРО.Объект = Объект;
ПараметрыОбработкиПРО.Выгрузка = Выгрузка;
#Удаление
ПараметрыОбработкиПРО.РазделыУчетаСтрокой = "Производство";
#КонецУдаления
#Вставка
ПараметрыОбработкиПРО.РазделыУчетаСтрокой = "Продажи";
#КонецВставки
ПараметрыОбработкиПРОПослеОбработки = ОбменДаннымиСобытияУТ.ПриОбработкеПРО(ПараметрыОбработкиПРО);
ТекстЗапроса = ПараметрыОбработкиПРОПослеОбработки.ТекстЗапроса;
ПараметрыЗапроса = ПараметрыОбработкиПРОПослеОбработки.ПараметрыЗапроса;
ИспользоватьКэш = ПараметрыОбработкиПРОПослеОбработки.ИспользоватьКэш;
Отказ = ПараметрыОбработкиПРОПослеОбработки.Отказ;
Объект = ПараметрыОбработкиПРОПослеОбработки.Объект;
Выгрузка = ПараметрыОбработкиПРОПослеОбработки.Выгрузка;
КонецПроцедуры
Но этого не достаточно, что бы регистрация нашего документа заработала. Если взять функцию из общего модуля:
Функция Документ_ПоступлениеТоваровОтХранителя_ОтборПоСвойствамОбъекта()
и сравнить ее с такой же, но из файла, в который мы сохранили из КД, то там будут отличия. Добавляем эту функцию в расширения, и вставляем те строки, которых не хватает. У меня получилось так:
&ИзменениеИКонтроль("Документ_ПоступлениеТоваровОтХранителя_ОтборПоСвойствамОбъекта")
Функция СинхДоп_Документ_ПоступлениеТоваровОтХранителя_ОтборПоСвойствамОбъекта()
Возврат "<ОтборПоСвойствамОбъекта>
| <ЭлементОтбора>
| <ТипСвойстваОбъекта>Булево</ТипСвойстваОбъекта>
| <ВидСравнения>Равно</ВидСравнения>
| <СвойствоОбъекта>Проведен</СвойствоОбъекта>
| <Вид>ЗначениеКонстанты</Вид>
| <ЗначениеКонстанты>true</ЗначениеКонстанты>
| <ТаблицаСвойствОбъекта>
| <Свойство>
| <Наименование>Проведен</Наименование>
| <Тип>Булево</Тип>
| <Вид>Свойство</Вид>
| </Свойство>
| </ТаблицаСвойствОбъекта>
| </ЭлементОтбора>
| <Группа>
| <БулевоЗначениеГруппы>ИЛИ</БулевоЗначениеГруппы>
| <ЭлементОтбора>
| <ТипСвойстваОбъекта>ПеречислениеСсылка.ХозяйственныеОперации</ТипСвойстваОбъекта>
| <ВидСравнения>Равно</ВидСравнения>
| <СвойствоОбъекта>ХозяйственнаяОперация</СвойствоОбъекта>
| <Вид>АлгоритмЗначения</Вид>
| <ЗначениеКонстанты>Значение = Перечисления.ХозяйственныеОперации.ВозвратОтПереработчика2_5;</ЗначениеКонстанты>
| <ТаблицаСвойствОбъекта>
| <Свойство>
| <Наименование>ХозяйственнаяОперация</Наименование>
| <Тип>ПеречислениеСсылка.ХозяйственныеОперации</Тип>
| <Вид>Реквизит</Вид>
| </Свойство>
| </ТаблицаСвойствОбъекта>
| </ЭлементОтбора>
| <ЭлементОтбора>
| <ТипСвойстваОбъекта>ПеречислениеСсылка.ХозяйственныеОперации</ТипСвойстваОбъекта>
| <ВидСравнения>Равно</ВидСравнения>
| <СвойствоОбъекта>ХозяйственнаяОперация</СвойствоОбъекта>
| <Вид>АлгоритмЗначения</Вид>
#Вставка
| <ЗначениеКонстанты>Значение = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера;</ЗначениеКонстанты>
| <ТаблицаСвойствОбъекта>
| <Свойство>
| <Наименование>ХозяйственнаяОперация</Наименование>
| <Тип>ПеречислениеСсылка.ХозяйственныеОперации</Тип>
| <Вид>Реквизит</Вид>
| </Свойство>
| </ТаблицаСвойствОбъекта>
| </ЭлементОтбора>
| <ЭлементОтбора>
| <ТипСвойстваОбъекта>ПеречислениеСсылка.ХозяйственныеОперации</ТипСвойстваОбъекта>
| <ВидСравнения>Равно</ВидСравнения>
| <СвойствоОбъекта>ХозяйственнаяОперация</СвойствоОбъекта>
| <Вид>АлгоритмЗначения</Вид>
#КонецВставки
| <ЗначениеКонстанты>Значение = Перечисления.ХозяйственныеОперации.ПоступлениеОтПереработчика2_5;</ЗначениеКонстанты>
| <ТаблицаСвойствОбъекта>
| <Свойство>
| <Наименование>ХозяйственнаяОперация</Наименование>
| <Тип>ПеречислениеСсылка.ХозяйственныеОперации</Тип>
| <Вид>Реквизит</Вид>
| </Свойство>
| </ТаблицаСвойствОбъекта>
| </ЭлементОтбора>
| </Группа>
|</ОтборПоСвойствамОбъекта>";
КонецФункции
Теперь можно проверять, зарегистрируется ли наш документ. Идем в НСИ и Администрирование ->Синхронизация данных -> Настройка синхронизации. Жмем на , выбираем документ "Поступление товаров", и в правой части пробуем зарегистрировать наш документ. Теперь все ок. Закрываем окно, и жмем "Синхронизировать", в надежде, а вдруг сработает. Но ожидаемо нет. Если перейти в журнал регистрации и посмотреть что там за ошибки, становится понятно, что нужно править саму синхронизацию. Чем собственно сейчас и займемся.

Правила конвертации
Возвращаемся в Конвертацию данных. Конвертации ->Настройки правил конвертации. Разворачиваем "Формат XDTO" и видим конвертацию которую загрузили из УТ. Название странное: УП2.5.22_ED_1_19, ну да пофиг. Жмем два раза. Попадаем во вкладку Правила конвертации объектов. В левой части встанем на "Отправка", что бы при создании эта группа подхватилась, и ее не пришлось вводить вручную. Жмем "Создать". В поле "Объект конфигурации" - выбираем наш документ: ДокументСсылка.ПоступлениеТоваровОтХранителя. В поле "Объект формата" - "Документ.ВозвратТоваровОтПокупателя". Теперь можно нажать кнопку "Заполнить" что бы сгенерировался идентификатор правила. Жмем "Записать", и переходим на вкладку правила конвертации.

Первым делом, пробуем сопоставить свойства автоматически. Жмем кнопку "Настройка ПКС", потом жмем "Автоматическое сопоставление" и далее "Создать правило конвертации свойств".

К сожалению, автоматически сопоставились не все свойства. Поэтому добавим их в ручную. Для начала сделаем ПКС для хозяйственной операцию. Жмем "Создать". В поле Свойство формата: выбираем "Вид операции", в поле Свойство конфигурации: выбираем "ХозяйственнаяОперация", в поле Правило конвертации свойства: выбираем единственное значение: "ВидыОперацийВозвратОтПокупателя", жмем "Записать и закрыть".

Далее сделаем ПКС для ДокументаОснования. Подобным образом как делали это с видом операции, нажимаем "Создать". В поле Свойство конфигурации: выбираю - "ДокументОснования". А в поле Свойство формата: - "ДокументРеализации". А вот Правило конвертации свойства:для сопоставления этих свойств. Поэтому пока жмем "Записать". Будем его создавать.

Теперь создадим ПКО для Документа основания. Возвращаемся на вкладку Правило конвертации объекта, жмем "Создать". В поле Объект конфигурации: - "ДокументСсылка.ПередачаТоваровХранителю", в поле Объект формата: - Документ.РеализацияТоваровУслуг. Нажимаем записать. Переходим во вкладку Правила конвертации свойств. Нажимаем кнопку "Настройка ПКО", "Автоматическое сопоставление", "Создать правила конвертации". Далее пробуем "Записать и закрыть". КД ругнется на какие-то свойства, и выделит их розовым. Помечаем их как проверенные. Это не столь принципиально, т.к. сам документ основания этим правилом мы переносить не будем. Нам нужно только что бы документ основания заполнился в документе возврата. Далее возвращаемся в наше ПКС для документа основания, открываем его форму, и для поля Правило конвертации свойств, жмем кнопку "Ввод вручную" и заполняем нашим ПКО "Документ_ПередачаТоваров_Реализация_Отправка".

Ну и последняя ПКС которую нужно сделать - будет в табличной части "Товары". Создаем правило, Свойство конфигурации: - "Упаковка", Свойство формата: - "ЕдиницаИзмерения". Заполнять эти значения будем программно, поэтому ставим галку: Использовать алгоритм конвертации. "Записать и закрыть". Далее переходим во вкладку: Обработчики событий и вставляем следующий код:
Счетчик = 0;
Для Каждого Товар ИЗ ДанныеИБ.Товары Цикл
ЕИ = Новый Структура("Код,Наименование,Ссылка", Товар.Номенклатура.ЕдиницаИзмерения.Код, Товар.Номенклатура.ЕдиницаИзмерения.Наименование,Товар.Номенклатура.ЕдиницаИзмерения);
ДанныеXDTO.Товары[Счетчик].ЕдиницаИзмерения = ЕИ;
Счетчик = Счетчик + 1;
КонецЦикла;

Далее нам нужно создать ПОД. Переходим во вкладку Правило обработки данных, встаем в дереве на "Отправка" что бы заполнилась группа, и жмем "Создать". В поле Объект выборки: выбираем наш документ: "ДокументСсылка.ПоступлениеТоваровОтХранителя". В поле Правило конвертации объекта: выбираем наше ПКО "Документ_ПоступлениеТоваровОтХранителя_Отправка". Далее жмем на кнопку "Заполнить" что бы заполнился идентификатор правила. Жмем записать и закрыть. Далее жмем кнопку "Сохранить модуль менеджера обмена". Код модуля скопируется в буфер. Ну и сохраним его куда нибудь в файл.

Теперь нам нужно в расширении УТ добавить правила конвертации, которые сделали. В основной конфигуруации находим общий модуль "МенеджерОбменаЧерезУниверсальныйФормат" и добавляем его в расширение.
В него переносим 4 процедуры из файла, в который мы сохранили новый код модуля из "конвертации данных".
Процедура ДобавитьПОД_Документ_ПоступлениеТоваровОтХранителя_Отправка(ПравилаОбработкиДанных)
ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
ПравилоОбработки.Имя = "Документ_ПоступлениеТоваровОтХранителя_Отправка";
ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.ПоступлениеТоваровОтХранителя;
ПравилоОбработки.ОчисткаДанных = Ложь;
ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПоступлениеТоваровОтХранителя_Отправка");
КонецПроцедуры
Процедура ДобавитьПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_ПоступлениеТоваровОтХранителя_Отправка";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.ПоступлениеТоваровОтХранителя;
ПравилоКонвертации.ОбъектФормата = "Документ.ВозвратТоваровОтПокупателя";
ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОтправкеДанных";
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "Валюта", "Валюта", , "Справочник_Валюты");
ДобавитьПКС(СвойстваШапки, "Дата", "Дата");
ДобавитьПКС(СвойстваШапки, "ДатаВходящегоДокумента", "ДатаВходящегоДокумента");
ДобавитьПКС(СвойстваШапки, "Договор", "Договор", , "Справочник_ДоговорыКонтрагентов");
ДобавитьПКС(СвойстваШапки, "ДокументОснование", "ДокументРеализации", , "Документ_ПередачаТоваров_Реализация_Отправка");
ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий");
ДобавитьПКС(СвойстваШапки, "Контрагент", "Контрагент", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "НаименованиеВходящегоДокумента", "НаименованиеВходящегоДокумента");
ДобавитьПКС(СвойстваШапки, "Номер", "Номер");
ДобавитьПКС(СвойстваШапки, "НомерВходящегоДокумента", "НомерВходящегоДокумента");
ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка");
ДобавитьПКС(СвойстваШапки, "Подразделение", "Подразделение", , "Справочник_Подразделения_Отправка");
ДобавитьПКС(СвойстваШапки, "Склад", "Склад", , "Справочник_Склады_Отправка");
ДобавитьПКС(СвойстваШапки, "ХозяйственнаяОперация", "ВидОперации", , "ВидыОперацийВозвратОтПокупателя");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "Товары", "Товары");
ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки");
ДобавитьПКС(СвойстваТЧ, "Количество", "Количество");
ДобавитьПКС(СвойстваТЧ, "КоличествоУпаковок", "КоличествоУпаковок");
ДобавитьПКС(СвойстваТЧ, "Номенклатура", "Номенклатура", , "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "НомерГТД", "НомерГТД", , "Справочник_НомераГТД_Отправка");
ДобавитьПКС(СвойстваТЧ, "Серия", "Серия", , "Справочник_СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "Сумма", "Сумма");
ДобавитьПКС(СвойстваТЧ, "Упаковка", "ЕдиницаИзмерения", 1);
ДобавитьПКС(СвойстваТЧ, "Упаковка", "Упаковка", , "Справочник_Упаковки");
ДобавитьПКС(СвойстваТЧ, "Характеристика", "Характеристика", , "Справочник_ХарактеристикиНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "Цена", "Цена");
КонецПроцедуры
Процедура ПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
Счетчик = 0;
Для Каждого Товар ИЗ ДанныеИБ.Товары Цикл
ЕИ = Новый Структура("Код,Наименование,Ссылка", Товар.Номенклатура.ЕдиницаИзмерения.Код, Товар.Номенклатура.ЕдиницаИзмерения.Наименование,Товар.Номенклатура.ЕдиницаИзмерения);
ДанныеXDTO.Товары[Счетчик].ЕдиницаИзмерения = ЕИ;
Счетчик = Счетчик + 1;
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьПКО_Документ_ПередачаТоваровХранителю_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_ПередачаТоваровХранителю_Отправка";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.ПередачаТоваровХранителю;
ПравилоКонвертации.ОбъектФормата = "Документ.РеализацияТоваровУслуг";
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "АдресДоставки", "АдресДоставки");
ДобавитьПКС(СвойстваШапки, "БанковскийСчетОрганизации", "БанковскийСчетОрганизации", , "Справочник_БанковскиеСчетаОрганизаций_Отправка");
ДобавитьПКС(СвойстваШапки, "Валюта", "Валюта", , "Справочник_Валюты");
ДобавитьПКС(СвойстваШапки, "ГлавныйБухгалтер", "ГлавныйБухгалтер");
ДобавитьПКС(СвойстваШапки, "Грузоотправитель", "Грузоотправитель", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "Грузополучатель", "Грузополучатель", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "Дата", "Дата");
ДобавитьПКС(СвойстваШапки, "ДоверенностьДата", "ДоверенностьДата");
ДобавитьПКС(СвойстваШапки, "ДоверенностьНомер", "ДоверенностьНомер");
ДобавитьПКС(СвойстваШапки, "Договор", "Договор", , "Справочник_ДоговорыКонтрагентов");
ДобавитьПКС(СвойстваШапки, "Комментарий", "Комментарий");
ДобавитьПКС(СвойстваШапки, "Контрагент", "Контрагент", , "Справочник_Контрагенты");
ДобавитьПКС(СвойстваШапки, "Номер", "Номер");
ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Отправка");
ДобавитьПКС(СвойстваШапки, "Подразделение", "Подразделение", , "Справочник_Подразделения_Отправка");
ДобавитьПКС(СвойстваШапки, "Руководитель", "Руководитель");
ДобавитьПКС(СвойстваШапки, "Склад", "Склад", , "Справочник_Склады_Отправка");
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "Товары", "Товары");
ДобавитьПКС(СвойстваТЧ, "ИдентификаторСтроки", "ИдентификаторСтроки");
ДобавитьПКС(СвойстваТЧ, "Количество", "Количество");
ДобавитьПКС(СвойстваТЧ, "КоличествоУпаковок", "КоличествоУпаковок");
ДобавитьПКС(СвойстваТЧ, "Номенклатура", "Номенклатура", , "Справочник_Номенклатура_Отправка");
ДобавитьПКС(СвойстваТЧ, "Серия", "Серия", , "Справочник_СерииНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "Сумма", "Сумма");
ДобавитьПКС(СвойстваТЧ, "Упаковка", "Упаковка", , "Справочник_Упаковки");
ДобавитьПКС(СвойстваТЧ, "Характеристика", "Характеристика", , "Справочник_ХарактеристикиНоменклатуры");
ДобавитьПКС(СвойстваТЧ, "Цена", "Цена");
КонецПроцедуры
и еще нужно добавить из общего модулоя основной конфигурации несколько процедур. Добавляем их через "Вызвать вместо (с контролем)".
&ИзменениеИКонтроль("ЗаполнитьПравилаОбработкиДанных")
Процедура СинхДоп_ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных)
//...
ДобавитьПОД_Документ_ПересчетТоваров_Отправка(ПравилаОбработкиДанных);
#Вставка
ДобавитьПОД_Документ_ПоступлениеТоваровОтХранителя_Отправка(ПравилаОбработкиДанных);
#КонецВставки
//...
КонецПроцедуры
&ИзменениеИКонтроль("ЗаполнитьПравилаОбработкиДанных")
Процедура СинхДоп_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации)
//...
ДобавитьПКО_Документ_ПередачаТоваров_Реализация_Отправка(ПравилаКонвертации);
#Вставка
ДобавитьПКО_Документ_ПередачаТоваровХранителю_Отправка(ПравилаКонвертации);
#КонецВставки
//++ Локализация
//-- Локализация
//...
ДобавитьПКО_Документ_ПКОРасчетыССотрудниками_Отправка(ПравилаКонвертации);
#Вставка
ДобавитьПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка(ПравилаКонвертации);
#КонецВставки
//...
КонецПроцедуры
&ИзменениеИКонтроль("ЗаполнитьПравилаОбработкиДанных")
Процедура СинхДоп_ВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры)
//...
ИначеЕсли ИмяПроцедуры = "ПКО_Документ_ПКОРасчетыССотрудниками_Отправка_ПриОтправкеДанных" Тогда
ПКО_Документ_ПКОРасчетыССотрудниками_Отправка_ПриОтправкеДанных(
Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена, Параметры.СтекВыгрузки);
#Вставка
ИначеЕсли ИмяПроцедуры = "ПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОтправкеДанных" Тогда
ПКО_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОтправкеДанных(
Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена, Параметры.СтекВыгрузки);
#КонецВставки
//...
КонецПроцедуры
Обновляем конфигурацию, пробуем сделать синхронизацию. Теперь она проходит без ошибок.

Проверяем документ в БУХ. Идем в Продажи ->Возвраты от покупателей. Все ок, документ Возврат от покупателя из УТ прилетел.

Ну и сделаем еще раз контрольную проверку. Создадим еще один документ "Возврат товара". Идем в УТ в Продажи ->Документы продажи (все). На основании документа "Передача товаров" делаем "Поступление товара от комиссионера", в табличной части "Товары" оставляем по 2 шт. номенклатуры и проводим.

Далее идем в синхронизацию, убеждаемся что новый документ зарегистрировался. Опять жмем синхронизировать.

Ну и что бы убедится что все ок, идем опять в бухгалтерию. Видим наш 2 документ. Т.к. он делался на основании - документ отгрузки тоже заполнен.
