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