gifts2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

Комментарии

1. DAnry (DAnry) 28.03.14 12:15
Спасибо, очень интересно и познавательно. А вообще "Конвертация данных" в умелых руках - мощная вещь.
2. Владимир Командровский (Wefast) 21.04.16 11:41
В ПКО ПередВыгрузкой пишу:
ПередатьОдинПараметрВПриемник("Должность",Источник.Должность);


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


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

Да и источник это 7.7
3. Надежда Гайнанова (nadja_gw) 27.04.16 15:06
(2) Wefast, проверьте, есть ли у источника реквизит Должность
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа