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



Выгрузка Номенклатура + Характеристика в одну Номенклатуру на примере обмена УТ 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 не будет опубликован. Обязательные поля помечены *