Перенос Номенклатура + Характеристика в один элемент Номенклатура



Выгрузка Номенклатура + Характеристика в одну Номенклатуру на примере обмена УТ 10.3-БП 2.0.
Удобство данного решения в том, что можно переносить и элементы справочника Номенклатура, и Номенклатура + Характеристика.

Изначально метод был описан тут: http://forum.infostart.ru/forum26/topic77014/message916608/?result=edit#message916608. Так как возникло много сопутствующих вопросов и просьба выложить готовый файл с правилами, то решил оформить это в отдельную статью.

Выгрузку необходимо производить через обработку «Универсальный обмен данными в формате XML» версии не ниже 2.1.7.
В результате работы данных правил создается документ ВводНачальныхОстатков с заполненной табличной частью МПЗПриобретенные.
Описываемый алгоритм реализован в выгрузке только этого типа документов.
Исходные данные берутся из регистра ПартииТоваровНаСкладах.
Перед выгрузкой необходимо заполнить параметр ДатаОстатков, для получения остатков на эту дату.
Основные моменты описаны последовательно по пунктам.
У кого что не получается, пишем в комментариях.
Если кому-то эта статья не интересна, то можно ничего не писать в комментариях, так будет даже лучше.

1. В конфигурации базы-приемника (Бухгалтерия) в справочнике Номенклатура добавить два новых реквизита для элементов и групп. В этих реквизитах будут храниться УИДы справочников из базы УТ. По сочетанию УИДНоменклатура + УИДХарактеристика будет производиться поиск элемента при загрузке.

    УИДНоменклатура, тип строка, длина 36
    УИДХарактеристика, тип строка, длина 36.
        
2. Заполнение значения реквизита УИДНоменклатура для поиска и/или заполнения в базе-приемнике. В ПКО Номенклатура добавить новый ПКС. Источник пустой, получатель УИДНоменклатура. В событии ПередВыгрузкой пишем код:  

Если ТипЗнч(Источник) = Тип("СправочникСсылка.Номенклатура") Тогда
    Значение = Строка(Источник.УникальныйИдентификатор());
Иначе
    Значение = Строка(Источник.Ссылка.УникальныйИдентификатор());
КонецЕсли;

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

Если Источник.ЭтоГруппа Тогда
Значение = "";
Иначе

Попытка

Если ТипЗнч(ВходящиеДанные.ХарактеристикаНоменклатуры) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
Значение = Строка(ВходящиеДанные.ХарактеристикаНоменклатуры.УникальныйИдентификатор());
Иначе
Значение = Строка(ВходящиеДанные.ХарактеристикаНоменклатуры.Ссылка.УникальныйИдентификатор());
КонецЕсли;

Исключение
Значение = "";
КонецПопытки;

КонецЕсли;

4. В ПКО Номенклатура:
    Установить галочку поиск только у реквизитов: УИДНоменклатура, УИДХарактеристика, Родитель, ЭтоГруппа, Наименование.
    Установить галочку «Не запоминать выгруженные объекты».
    Установить галочку «Автоматически генерировать номер или код, если он не задан».
    Поиск по уникальному идентификатору необходимо снять.
    В событии Поля поиска поместить код:

Если СвойстваПоиска.Получить("ЭтоГруппа") Тогда
СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
СтрокаИменСвойствПоиска = "УИДНоменклатура, УИДХарактеристика, ЭтоГруппа, Родитель";
КонецЕсли;

   
5. В ПКС Наименование ПКО Номенклатура событие ПередВыгрузкой:

Значение = Источник.Наименование;

Если Не Источник.ЭтоГруппа Тогда
Попытка
Значение = Значение + " " + ВходящиеДанные.ХарактеристикаНоменклатуры.Наименование;
Исключение
КонецПопытки;
КонецЕсли;

   
6. В ПКС Наименование Полное ПКО Номенклатура событие ПередВыгрузкой:

Значение = Источник.Наименование;

Если Не Источник.ЭтоГруппа Тогда
Попытка
Значение = Значение + " " + ВходящиеДанные.ХарактеристикаНоменклатуры.Наименование;
Исключение
КонецПопытки;
КонецЕсли;

7. В ПКС Номенклатура, связанным с реквизитом выгружаемого документа, в событии ПередВыгрузкой располагается код, который при заполненной характеристике производит выгрузку с передачей значения характеристики. В данном случае это ПКС Номенклатура ПКГС МПЗПриобретенные документа ВводНачальныхОстатков.

ИсходящиеДанные = Новый Структура;

Если ЗначениеЗаполнено(ОбъектКоллекции.ХарактеристикаНоменклатуры) Тогда
ИсходящиеДанные.Вставить("ХарактеристикаНоменклатуры", ОбъектКоллекции.ХарактеристикаНоменклатуры);
Иначе
ИсходящиеДанные.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
КонецЕсли;

ВыгрузитьПоПравилу(ОбъектКоллекции.Номенклатура,, ИсходящиеДанные,,"Номенклатура");

 8. Результат в виде документов Ввода начальных остатков с разбивкой по организациям и счетам учета.

8 Comments

  1. dexxxqqq

    Спасибо за Ваш труд! Подошло и для УТ 11.1 -> БП 3.

    Может быть кому пригодится, в 7-м пункте вместо ОбъектКоллекции.ХарактеристикаНоменклатуры просто ОбъектКоллекции.Характеристика. Вот так:

    ИсходящиеДанные = Новый Структура;
    
    Если ЗначениеЗаполнено(ОбъектКоллекции.Характеристика) Тогда
    ИсходящиеДанные.Вставить(«ХарактеристикаНоменклатуры», ОбъектКоллекции.Характеристика);
    Иначе
    ИсходящиеДанные.Вставить(«ХарактеристикаНоменклатуры», Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
    КонецЕсли;
    
    ВыгрузитьПоПравилу(ОбъектКоллекции.Номенклатура,, ИсходящиеДанные,,»Номенклатура»);

    Показать

    Reply
  2. avbolshakov

    Спасибо. Получилось все для ут11 —>> бп 3,0 . А вы не можете подсказать как всю номенклатуру запихнуть в приемнике в определенную папку. Понятно, что проверяем Родителя, если он на верху дерева, то назначить ему родителя нашу новую папку. Но вот где это лучше указать

    Reply
  3. anchovy

    (2) avbolshakov, Событие «После загрузки» в ПКО Номенклатура попробуйте использовать.

    Reply
  4. user793598

    Вопрос.

    Переношу данные из УТ 10.3.13.2 в БП 2.0.13 в режиме совместимости.

    Пытаюсь выгружать все через обработку «Универсальный обмен данными в формате XML» версии 2.0.20.»

    Почему «Выгрузку необходимо производить через обработку «Универсальный обмен данными в формате XML» версии не ниже 2.1.7.»?

    Reply
  5. anchovy

    (4) Потому что в процессе разработки изменялся формат файла правил. Используйте лучше версию обработки не ниже 2.1.8 и будет вам счастье.

    Reply
  6. user793598

    Спасибо.

    В начале написано:

    «В результате работы данных правил создается документ ВводНачальныхОстатков с заполненной табличной частью МПЗПриобретенные.

    Описываемый алгоритм реализован в выгрузке только этого типа документов. Исходные данные берутся из регистра ПартииТоваровНаСкладах

    Пункты 2 — 6 относятся ПКО номенклатура. Там все понятно и просто в «Конвертация данных 2.1.8».

    Непонятен пункт 7. Запутался.

    Добавляю ПКО «ВводНачальныхОстатков», где источник «РегистрНакопленияЗапись.ПартииТоваровНаСкладах», а источник «ДокументСсылка.ВводНачальныхОстатков», там ищу ТЧ МПЗПриобретенные, в нем номенклатуру, и пытаюсь прописать в событии ПередВыгрузкой код. Не нахожу, где это сделать в Конвертации данных… См. скрин. Может быть это надо делать по-другому?

    Можно приложить правильный скрин?

    Reply
  7. anchovy

    (6) Смотрите в правилах.

    Reply
  8. anchovy

    (6) У ПКО ВводНачальныхОстатков нет источника. Данные для заполнения документа определяются в ПВД. Опять таки смотрите правила, там есть все.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *