Представьте себе, что имеются правила переноса данных из конфигурации БГУ в идентичную конфигурацию, созданные когда-то в конвертации для переноса данных в новую базу. И теперь возникла ситуация для переноса некоторых данных из справочника «Основные средства» из старой базы (зачем-то там поработали с этим справочником, заполнили вкладку «Инд. характеристики» и теперь хотят эти данные видеть в новой базе). Сделать это легко, подкоректировав уже имеющиеся правила для данного справочника, используя следующий алгоритм:
1. для тех реквизитов, которых НЕ НУЖНО замещать ставим в ПКС галку «Не замещать значение свойства у существующих объектов в приемнике»;
2. пишем обработчики в ПКО для Объекта ОсновныеСредства:
— перед выгрузкой. Здессь передаем значения реквизитов в приемник в виде параметров при помощи ПередатьОдинПараметрВПриемник(ИмяПараметра, ЗначениеПараметра, ) ;
ПередатьОдинПараметрВПриемник(«Изготовитель»,Источник.Изготовитель);
ПередатьОдинПараметрВПриемник(«НомерПаспорта»,Источник.НомерПаспорта);
ПередатьОдинПараметрВПриемник(«ЗаводскойНомер»,Источник.ЗаводскойНомер);
ПередатьОдинПараметрВПриемник(«ДатаВыпуска»,Источник.ДатаВыпуска);
ПередатьОдинПараметрВПриемник(«НазначениеОбъекта»,Источник.НазначениеОбъекта);
— при загрузке. Здесь собственно и организуем объединение данных в параметрах: проверяем заполнены ли реквизиты в объекте приемника и если реквизит заполнен, то заменяем значение параметра с именем данного реквизита. Теперь в параметрах окажутся все заполенные значения приемника и те значения истоника, которые не были изменены в параметрах);
Если ЗначениеЗаполнено(Объект.Изготовитель) тогда
Параметры.Изготовитель=Объект.Изготовитель;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.НомерПаспорта) тогда
Параметры.НомерПаспорта=Объект.НомерПаспорта;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ЗаводскойНомер) тогда
Параметры.ЗаводскойНомер=Объект.ЗаводскойНомер;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ДатаВыпуска) тогда
Параметры.ДатаВыпуска=Объект.ДатаВыпуска;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.НазначениеОбъекта) тогда
Параметры.НазначениеОбъекта=Объект.НазначениеОбъекта;
КонецЕсли;
— после загрузки. Здесь все данные параметров присваиваем реквизитам объекта приемника.
Объект.Изготовитель=Параметры.Изготовитель;
Объект.НомерПаспорта=Параметры.НомерПаспорта;
Объект.ЗаводскойНомер=Параметры.ЗаводскойНомер;
Объект.ДатаВыпуска=Параметры.ДатаВыпуска;
Объект.НазначениеОбъекта=Параметры.НазначениеОбъекта;
Таким образом получили объект, в котором объеденены данные справочника «Основные средства» из 2-х разных баз с приоритетом базы-приемника. Соотвественно можно
Данный алгоритм можно легко применить и для общих случев, когда требуется объединение всех реквизитов справочника.
Надеюсь, что данная статья многим начинающим программистам 1С поможет разобраться с принципом объединения данных при конвертации и при необходимости, модифицировав данный алгоритм применить его и для других случаев.
Спасибо, очень интересно и познавательно. А вообще «Конвертация данных» в умелых руках — мощная вещь.
В ПКО ПередВыгрузкой пишу:
В После загрузки#k8SjZc9Dxk
делаю запрос и устанавливаю параметр запроса как Параметры.Должность.
Выдает ошибку что поле должность не найдено.
Да и источник это 7.7
(2) Wefast, проверьте, есть ли у источника реквизит Должность