gifts2017

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

Опубликовал Павел Парамонов (anchovy) в раздел Обмен - Перенос данных из 1C8 в 1C8

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Правила обмена данными
.xml 1,69Mb
06.07.15
9
.xml 1 1,69Mb 9 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. anton popov (dexxxqqq) 05.01.16 21:00
Спасибо за Ваш труд! Подошло и для УТ 11.1 -> БП 3.
Может быть кому пригодится, в 7-м пункте вместо ОбъектКоллекции.ХарактеристикаНоменклатуры просто ОбъектКоллекции.Характеристика. Вот так:

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

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

ВыгрузитьПоПравилу(ОбъектКоллекции.Номенклатура,, ИсходящиеДанные,,"Номенклатура");
...Показать Скрыть
2. Alex B (avbolshakov) 18.04.16 12:49
Спасибо. Получилось все для ут11 -->> бп 3,0 . А вы не можете подсказать как всю номенклатуру запихнуть в приемнике в определенную папку. Понятно, что проверяем Родителя, если он на верху дерева, то назначить ему родителя нашу новую папку. Но вот где это лучше указать
3. Павел Парамонов (anchovy) 20.04.16 12:41
(2) avbolshakov, Событие "После загрузки" в ПКО Номенклатура попробуйте использовать.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа