Конвертация данных 1C, правила конвертации группы свойств (ПКГС)
Доброго времени суток, уважаемые читатели блога SoftMaker.kz. Раньше на этом сайте уже была опубликована статья о конвертации «Как в 1С сделать выгрузку и загрузку данных с помощью конфигурации Конвертация данных из 7.7 в 8.2?», в этой статье было показано, как можно настроить обмен, используя конструкторы, с помощью которых создаются правила обмена. Этот способ можно используется при конвертации баз из 1С версии 7.7 в 8.2. Сейчас мы поговорим, как переносить данные между конфигурациями 1С 8.2, которые несколько отличаются друг от друга. Основное внимание в этой статье будет уделено конвертации табличной части документа, а это значит, что мы будем работать с правилами конвертации группы свойств — ПКГС. Ну что, приступим?
- Подготовка к настройке ПКГС — правил конвертации группы свойств
- Создание правил конвертации группы свойств 1С
- Обработчики событий для правил конвертации группы свойств
Подготовка к настройке ПКГС — правил конвертации группы свойств
Мы будем переносить документ «ПоступлениеТоваровУслуг», который имеет отличия в реквизите СтавкаНДС табличной части «Товары» в базе источнике и приёмнике. В базе источнике этот реквизит имеет тип «СправочникСсылка.СтавкиНДС», а в базе приёмнике — тип «ПеречислениеСсылка.СтавкиНДС». Кстати, для удобства можно определить основное значение реквизита «СтавкаНДС» для подстановки в документы и справочники.
Кроме того, в базе приёмнике нам необходимо заполнять реквизит «СчетУчетаБУ», который также находится в табличной части «Товары» документа «ПоступлениеТоваровУслуг». Данные для заполнения мы возьмём из реквизита «СчетУчетаБУ» справочника «Номенклатура» базы приёмника.
Ситуация осложняется тем, что мы будем работать с табличной частью, поэтому нужно настраивать правила конвертации группы свойств — ПКГС. Нам нужно будет обращаться к текущей строке табличной части. Чтобы приступить к настройке правил конвертации необходимо загрузить структуру метаданных источника и приёмника в конфигурацию «Конвертация данных». Подробно об этом было написано в статье «Как в 1С сделать выгрузку и загрузку данных с помощью конфигурации Конвертация данных?»
Создание правил конвертации группы свойств 1С
У нас уже разработаны правила конвертации для документа «ПоступлениеТоваровУслуг». Но для табличной части «Товары» нет правила конвертации свойства (ПКС) «СтавкиНДС». Нужно добавить новое правило конвертации свойств, нажав на кнопку «Синхронизация свойств…».
Появится диалог «Настройка правил конвертации свойств (ПоступлениеТоваровУслуг)».
Нужно повторить то, что сделано на изображении и нажать кнопку «ОК». Хотя мы создали правило конвертации для группы свойств (ПКГС), но пока оно не готово. Помните, что реквизиты табличной части «СтавкиНДС» отличаются типами значений. В базе источнике этот реквизит имеет тип «СправочникСсылка.СтавкиНДС», а в базе приёмнике — тип «ПеречислениеСсылка.СтавкиНДС». Здесь нам не хватает правила конвертации из справочника в перечисление.
Обработчики событий для правил конвертации группы свойств
Чтобы настроить конвертацию свойства правильно, нужно создать новое правило конвертации объектов.
В появившемся диалоге указываем, что справочник «СтавкиНДС» конвертируется в перечисление с таким же названием.
Никаких правил конвертаций свойств для этого правила не будет. Поэтому при сохранении этого правила, в появившемся диалоге выберем «Нет».
В диалоге с вопросом «Создать правила выгрузки данных?» тоже выберем «Нет». Двойным нажатием откроем диалог с настройкой правила конвертации объекта (ПКО) «СтавкиНДС». На закладке «Настройки» снимем флаг «Искать объект приемника по внутреннему идентификатору объекта источника». А на закладке «Обработчики событий» выберем событие «При выгрузке» и определим «Источник» и «УзелСсылки», то есть то, что будет переносится.
Если Источник.Ставка = 0 Тогда УзелСсылки = "Ставка0"; ИначеЕсли Источник.Ставка = 12 Тогда УзелСсылки = "Ставка12"; ИначеЕсли Источник.Наименование = "без НДС" Тогда УзелСсылки = "БезНДС"; КонецЕсли;
После написания обработчика нажимаем кнопку «ОК». В информации по обработчикам:
- Источник — Произвольный — выгружаемый объект источник (ссылка или произвольные данные).
- УзелСсылки — инициализированный xml-узел ссылки. Может использоваться, например, для инициализации свойств других объектов.
Теперь явно укажем использование этого правила конвертации объекта при выгрузке реквизита «СтавкаНДС». Преходим на закладку «Конвертация свойств (*)» документа «ПоступлениеТоваровУслуг» и открываем конвертацию группы свойств «Товары», два раза щёлкаем на свойстве «СтавкиНДС» и в открывшемся диалоге, в поле «Правило» выбираем правило конвертации объекта «СтавкаНДС».
Нажимаем кнопку «ОК». Теперь нам осталось установить счета учёта в соответствии с теми значениями, которые определены для номенклатуры. Перейдём на закладку «Правила конвертации объектов», найдём объект «ПоступлениеТоваровУслуг» и двойным нажатием на нём откроем диалог правил конвертации объектов (ПКО). Перейдём на закладку «Обработчики событий» на событие «После загрузки» и напишем следующее:
Для каждого СтрокаТЧ Из Объект.Товары Цикл СтрокаТЧ.СчетУчетаБУ = СтрокаТЧ.Номенклатура.СчетУчетаБУ; КонецЦикла;
Сохраним правила, нажимаем кнопку «Сохранить правила». Конвертация объектов завершена. Теперь загрузим эти правила в источнике, используя внешнюю обработку «Универсальный обмен данными в формате XML» — «V8Exchan82.epf». Выгрузим данные в xml-файл. Затем, откроем эту же обработку в базе приёмнике и выберем xml-файл выгрузки и загрузим данные.
Кстати, обработку «Универсальный обмен данными в формате XML» можно открыть через пункт меню «Сервис» | «Прочие обмены данными» | «Универсальный обмен данными в формате XML». Об этом было немного написано в заметке о выгрузке данных в идентичную конфигурацию 1С.
Здорово!
Хотелось бы вас поблагодарить за то, что выложили этот пример, да еще и такое подробное описание к нему дали. А то конвертация данных мне с трудом дается и если бы не пример. то я вряд ли бы сам смог осилить эту задачу. А она была для меня оперативной.
Пожалуйста, Gilson! Здорово, что вам помог этот пример по конвертации данных.
Конвертация данных до сего момента мне вообще не встречалась и я в этом ничего не понимаю. Скажите, база источник и база приемник обязательно должны быть из одной версии 1C? или допускается такое, что версии разные?
Avdeev, конвертация данных тем и хороша, что вы можете переносить данные из разных конфигураций, гибко настрагивать этот обмен. Даже можно переносить данные из 7.7 в 8.х и обратно. То есть база источник и база приемник не обязательно должны быть из одной версии 1C.
Очень доходчиво и конкретно. Большое спасибо за то, что щедро делитесь своими знаниями!