Изначально метод был описан тут: http://forum.infostart.ru/forum26/topic77014/message916608/?result=edit#message916608. Так как возникло много сопутствующих вопросов и просьба выложить готовый файл с правилами, то решил оформить это в отдельную статью.
Выгрузку необходимо производить через обработку "Универсальный обмен данными в формате XML" версии не ниже 2.1.7.
В результате работы данных правил создается документ ВводНачальныхОстатков с заполненной табличной частью МПЗПриобретенные.
Описываемый алгоритм реализован в выгрузке только этого типа документов.
Исходные данные берутся из регистра ПартииТоваровНаСкладах.
Перед выгрузкой необходимо заполнить параметр ДатаОстатков, для получения остатков на эту дату.
Основные моменты описаны последовательно по пунктам.
У кого что не получается, пишем в комментариях.
Если кому-то эта статья не интересна, то можно ничего не писать в комментариях, так будет даже лучше.
1. В конфигурации базы-приемника (Бухгалтерия) в справочнике Номенклатура добавить два новых реквизита для элементов и групп. В этих реквизитах будут храниться УИДы справочников из базы УТ. По сочетанию УИДНоменклатура + УИДХарактеристика будет производиться поиск элемента при загрузке.
УИДНоменклатура, тип строка, длина 36
УИДХарактеристика, тип строка, длина 36.
2. Заполнение значения реквизита УИДНоменклатура для поиска и/или заполнения в базе-приемнике. В ПКО Номенклатура добавить новый ПКС. Источник пустой, получатель УИДНоменклатура. В событии ПередВыгрузкой пишем код:
Если ТипЗнч(Источник) = Тип("СправочникСсылка.Номенклатура") Тогда
Значение = Строка(Источник.УникальныйИдентификатор());
Иначе
Значение = Строка(Источник.Ссылка.УникальныйИдентификатор());
КонецЕсли;
3. Заполнение значения реквизита УИДХарактеристика для поиска и/или заполнения в базе-приемнике. В ПКО Номенклатура нужно добавить новый ПКС. Источник пустой, получатель УИДХарактеристика. Значение реквизита берется из входящих данных через попытку, чтобы ислючить появление сообщения об ошибке, при отсутствии этих данных. В событии ПередВыгрузкой пишем код:
Если Источник.ЭтоГруппа Тогда
Значение = "";
Иначе
Попытка
Если ТипЗнч(ВходящиеДанные.ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Значение = Строка(ВходящиеДанные.ХарактеристикаНоменклатуры.УникальныйИдентификатор());
Иначе
Значение = Строка(ВходящиеДанные.ХарактеристикаНоменклатуры.Ссылка.УникальныйИдентификатор());
КонецЕсли;
Исключение
Значение = "";
КонецПопытки;
КонецЕсли;
4. В ПКО Номенклатура:
Установить галочку поиск только у реквизитов: УИДНоменклатура, УИДХарактеристика, Родитель, ЭтоГруппа, Наименование.
Установить галочку "Не запоминать выгруженные объекты".
Установить галочку "Автоматически генерировать номер или код, если он не задан".
Поиск по уникальному идентификатору необходимо снять.
В событии Поля поиска поместить код:
Если СвойстваПоиска.Получить("ЭтоГруппа") Тогда
СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
СтрокаИменСвойствПоиска = "УИДНоменклатура, УИДХарактеристика, ЭтоГруппа, Родитель";
КонецЕсли;
5. В ПКС Наименование ПКО Номенклатура событие ПередВыгрузкой:
Значение = Источник.Наименование;
Если Не Источник.ЭтоГруппа Тогда
Попытка
Значение = Значение + " " + ВходящиеДанные.ХарактеристикаНоменклатуры.Наименование;
Исключение
КонецПопытки;
КонецЕсли;
6. В ПКС Наименование Полное ПКО Номенклатура событие ПередВыгрузкой:
Значение = Источник.Наименование;
Если Не Источник.ЭтоГруппа Тогда
Попытка
Значение = Значение + " " + ВходящиеДанные.ХарактеристикаНоменклатуры.Наименование;
Исключение
КонецПопытки;
КонецЕсли;
7. В ПКС Номенклатура, связанным с реквизитом выгружаемого документа, в событии ПередВыгрузкой располагается код, который при заполненной характеристике производит выгрузку с передачей значения характеристики. В данном случае это ПКС Номенклатура ПКГС МПЗПриобретенные документа ВводНачальныхОстатков.
ИсходящиеДанные = Новый Структура;
Если ЗначениеЗаполнено(ОбъектКоллекции.ХарактеристикаНоменклатуры) Тогда
ИсходящиеДанные.Вставить("ХарактеристикаНоменклатуры", ОбъектКоллекции.ХарактеристикаНоменклатуры);
Иначе
ИсходящиеДанные.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
КонецЕсли;
ВыгрузитьПоПравилу(ОбъектКоллекции.Номенклатура,, ИсходящиеДанные,,"Номенклатура");
8. Результат в виде документов Ввода начальных остатков с разбивкой по организациям и счетам учета.