Имя: Пароль:
1C
1С v8
КД Перенос из 7.7 в 8.3
0 Wefast
 
28.03.17
08:39
в 7.7 есть справочник Номенклатура. У него есть реквизит справочник Сертификаты.

в 8.3 в номенклатуре нет такого реквизита.
Но есть справочник Сертификаты и есть регистр сведений для связи номенклатуры и сертификатов.

Как правильно будет все это выгрузить?

Я попробовал так:

Сделал ПКО Номенклатура - Номенклатура.
и ПКО Сертификаты - Сертификаты.


Поставил у сертификатов приоритет 1. У номенклатуры 2.

Сделал у ПКО Номенклатура ПКС Сертификат - Описание
Написал Значение = Источник.Наименование.

В после загрузки написал.
Попытка Если Объект.Описание <> "" Тогда
    Сертификат = Справочники.СертификатыНоменклатуры.НайтиПоНаименованию(Объект.Описание);
    Если Сертификат <> Справочники.СертификатыНоменклатуры.ПустаяСсылка() Тогда
        РС = РегистрыСведений.ОбластиДействияСертификатовНоменклатуры.СоздатьМенеджерЗаписи();
        РС.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
        РС.Номенклатура = Объект;
        РС.СертификатНоменклатуры = Сертификат;
        РС.Прочитать();
        Если НЕ РС.Выбран() Тогда
            РС.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
            РС.Номенклатура = Объект;
            РС.СертификатНоменклатуры = Справочники.СертификатыНоменклатуры.НайтиПоНаименованию(Объект.Описание);
            РС.Записать();
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1 Wefast
 
28.03.17
12:53
ап
2 Rema Dan
 
28.03.17
13:04
(0) Приоритет таким образом стоит выставлять не у ПКО, а у ПВД, и конечно для каждого справочника должно присутствовать своё ПВД.
Я не помню можно ли применять при выгрузке из 7.7 выгрузку в параметры. Если да, то выгружаем ссылку на сертификат в параметр номенклатуры, а после загрузки номенклатуры связываем их в регистре.
Если же выгрузить в параметр нельзя, то возможно придумать велосипед с выгрузкой кода/наименования/номера сертификата в один из текстовых реквизитов номенклатуры и потом связывать их в регистре с очисткой этого реквизита.
3 Wit77
 
28.03.17
13:04
Искать по наименованию - не кошерно. И на стороне загрузки создавать объекты нужно, только если их никак не получается сформировать при выгрузке.

После выгрузки номенклатуры - проверять заполнен ли реквизит "Сертификат", если заполнен, то вызывать правило выгрузки "Сертификаты - Сертификаты" куда в качестве источника передавать значение этого реквизита.
Следом вызывать правило выгрузки "РС для связи", где в качестве источника данных передавать структурой значения для заполнения регистра.
В итоге у вас в конечной ХМЛ уже должны быть выгружены номенклатура, сертификат и запись регистра сведений.
4 Rema Dan
 
28.03.17
13:12
(3) Идея с выгрузкой сразу записей регистра действительно приятнее и значительно быстрее при больших объёмах данных.
Можно сделать отдельный ПВД для выгрузки записей регистра. Перед обработкой ПВД собирать ТЗ с колонками ВидНоменклатуры, Номенклатура, СертификатНоменклатуры по заполненным в базе сертификатам и передавать её в ВыборкаДанных в качестве источника данных.
5 Wefast
 
28.03.17
14:25
(2) с параметрами в 7.7 вроде не поработать.
выгружаю имя сертификата в описание номенклатуры.
Ну я так и делаю. Но не уверен что приоритетность работает. Т.о придется сначала загрузить сертификаты. А потом уже запускать загрузку номенклатуры.

(3) в 7.7 я так понял нет структуры, поэтому наверное не выйдет передать их в выгрузитьпоправилу()

(4) а вот тут не понял. Такого не делал
6 Rema Dan
 
28.03.17
14:57
(5)
1. Порядок выгрузки определяется в первую очередь приоритетами ПВД.
2. Там наверняка можно использовать вместо структуры что-то иное. Таблицу значений или список.
3. В ПВД регистра сведений выбирается способ выгрузки "Произвольный алгоритм" и в событии перед обработкой в переменной ВыборкаДанных собирается ТЗ каждая строка которой будет одной записью регистра.
7 Wit77
 
29.03.17
06:32
(4,6) Полностью согласен.
(0) Один из основных принципов обмена в КД2 - все объекты для базы приемника должны формироваться при выгрузке в базе-источнике. Т.е. после выгрузки у вас в файле должны быть конечные объекты, которые достаточно только загрузить с минимальной обработкой на стороне приемника. При написании правил переноса смотрите на обмен с такой точки зрения. Конечно бывают исключения, когда такое сделать невозможно - такие случаи надо рассматривать индивидуально.
2 + 2 = 3.9999999999999999999999999999999...