Информационный поток
Задания вакансии материалы разработки сообщения форума
Рубрики статей и материалов
Яндекс-директ

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

  • Добавить свою публикацию
  • для этого требуется регистрация

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

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

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

Алгоритм состоит в следующем:

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

 

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

 

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

Изображение

 

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

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

 

 

 

 
0
≡ к списку статей