Объединение данных справочника при конвертации





Бывают ситуации, когда необходимо догрузить данные из одной базы в другую с помощью правил, созданных конвертацией данных. В данной статье приведен пример объединения данных с приоритетом базы-приемника на примере справочника "Основные средства" для конфигурации БГУ.

Представьте себе, что имеются правила переноса данных из конфигурации БГУ в идентичную конфигурацию, созданные когда-то в конвертации для переноса данных в новую базу. И теперь возникла ситуация для переноса некоторых данных из справочника «Основные средства» из старой базы (зачем-то там поработали с этим справочником, заполнили вкладку «Инд. характеристики» и теперь хотят эти данные видеть в новой базе).  Сделать это легко, подкоректировав уже имеющиеся правила для данного справочника, используя следующий алгоритм:

1. для тех реквизитов, которых НЕ НУЖНО замещать ставим в ПКС галку «Не замещать значение свойства у существующих объектов в приемнике»;

2. пишем обработчики в ПКО для Объекта ОсновныеСредства:

— перед выгрузкой. Здессь передаем значения реквизитов в приемник в виде параметров при помощи ПередатьОдинПараметрВПриемник(ИмяПараметра, ЗначениеПараметра, ) ;

ПередатьОдинПараметрВПриемник(«Изготовитель»,Источник.Изготовитель);
ПередатьОдинПараметрВПриемник(«НомерПаспорта»,Источник.НомерПаспорта);
ПередатьОдинПараметрВПриемник(«ЗаводскойНомер»,Источник.ЗаводскойНомер);
ПередатьОдинПараметрВПриемник(«ДатаВыпуска»,Источник.ДатаВыпуска);
ПередатьОдинПараметрВПриемник(«НазначениеОбъекта»,Источник.НазначениеОбъекта);

— при загрузке. Здесь собственно и организуем объединение данных в параметрах: проверяем заполнены ли реквизиты в объекте приемника и если реквизит заполнен, то заменяем значение параметра с именем данного реквизита. Теперь в параметрах окажутся все заполенные значения приемника и те значения истоника, которые не были изменены в параметрах);

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

— после загрузки. Здесь все данные параметров присваиваем реквизитам объекта приемника.

Объект.Изготовитель=Параметры.Изготовитель;
Объект.НомерПаспорта=Параметры.НомерПаспорта;
Объект.ЗаводскойНомер=Параметры.ЗаводскойНомер;
Объект.ДатаВыпуска=Параметры.ДатаВыпуска;
Объект.НазначениеОбъекта=Параметры.НазначениеОбъекта;

Таким образом получили объект, в котором объеденены данные справочника «Основные средства» из 2-х разных баз с приоритетом базы-приемника. Соотвественно можно

Данный алгоритм можно легко применить и для общих случев, когда требуется объединение всех реквизитов справочника.

Надеюсь, что данная статья многим начинающим программистам 1С поможет разобраться с принципом объединения данных при конвертации и при необходимости, модифицировав данный алгоритм применить его и для других случаев.

3 Comments

  1. DAnry

    Спасибо, очень интересно и познавательно. А вообще «Конвертация данных» в умелых руках — мощная вещь.

    Reply
  2. Wefast

    В ПКО ПередВыгрузкой пишу:

    ПередатьОдинПараметрВПриемник(«Должность»,Источник.Должность);

    В После загрузки#k8SjZc9Dxk

    делаю запрос и устанавливаю параметр запроса как Параметры.Должность.

    Выдает ошибку что поле должность не найдено.

    Да и источник это 7.7

    Reply
  3. nadja_gw

    (2) Wefast, проверьте, есть ли у источника реквизит Должность

    Reply

Leave a Comment

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