1с. Конвертация данных. Перенос подчиненных справочников, отсутствующих в исходной базе - 1С-ИнтеГрация

1с. Конвертация данных. Перенос подчиненных справочников, отсутствующих в исходной базе



Думаю те, кто пишут правила обмена нередко сталкиваются с проблемой переноса подчиненных справочников вместе с владельцем.

Сейчас я покажу одно из решений проблемы на примере переноса реквизита номенклатуры «Единица измерения».

Как известно, в 1с. Бухгалтерия 2.0 в справочнике «Номенклатура» есть реквизит «БазоваяЕдиницаИзмерения» с типом «СправочникСсылка.КлассифкаторЕдиницИзмерения», в 1С. Управление торговлей 10.3 кроме указанного реквизита есть еще несколько идентичных реквизитов, например, «ЕдиницаХраненияОстатков» (тип, «СправочникСсылка.ЕдиницыИзмерения»).
Алгоритм состоит в следующем:

1. Настроить все возможные правила переноса реквизитов данного справочника.
2. После загрузки в базе-приемнике программно создать подчиненные справочники.

Выполнение 1 шага не таит в себе никаких сложностей. Стандартная настройка ПКС и ПКО. Обращаю внимание на то, что переносится реквизит «БазоваяЕдиницаИзмерения». 

На втором шаге в ПКО Номенклатура необходимо в обработчике «После загрузки» прописать процедура по поиску и созданию единицы измерения.

Предлагаю следующий код: 

Если НЕ Объект.ЭтоГруппа И НЕ (Объект.Услуга И НЕ ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения)) Тогда
Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) И НЕ Объект.ЭтоГруппа Тогда
ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Объект.Ссылка);
Если ВыборкаЕдиниц.Следующий() Тогда
НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование = СокрЛП(Объект.БазоваяЕдиницаИзмерения);
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент = 1;
НайденнаяЕдиницаОбъект.Владелец = Объект.Ссылка;
НайденнаяЕдиницаОбъект.УстановитьНовыйКод();

ЗаписатьОбъектВИБ(НайденнаяЕдиницаОбъект, Тип("СправочникСсылка.ЕдиницыИзмерения"));
НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;

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


Источник



Назад в раздел