1С конвертация данных запрос

КД2.0 — конфигурация Конвертация данных, редакция 2.0 .
КД3.0 — конфигурация Конвертация данных, редакция 3.0 .
БСП — Библиотека стандартных подсистем.
ПОД — правило обработки данных.
ПКО — правило конвертации объекта.
ПКПД — правило конвертации предопределенных данных.
ПКС — правило конвертации свойства.

Конвертация данных, редакция 3.0 (далее КД3.0 ) — это инструмент для разработки обменов, предполагающих наличие посредника передачи данных между конфигурациями в виде универсального формата данных EnterpriseData . В этом качестве КД3.0 является одним из компонентов технологии обмена данными через формат EnterpriseData .

КД3.0 не является заменой конфигурации Конвертация данных, редакция 2.0 (далее КД2.0 ), но аналогична ей по характеру решаемых задач, общий смысл которых сводится к упрощению разработки логики конвертации данных за счет представления ее объектной модели.

Главной особенностью КД3.0 является концепция конвертации данных (см. рисунок):

Следуя из этого список отличий КД3.0 от КД2.0 можно свести к нескольким пунктам:

  • результатом работы КД3.0 является код модуля менеджера обмена, состоящий из процедур и функций, в которых реализована логика загрузки данных, представленных в формате EnterpriseData , а также логика выгрузки данных в формат;
  • алгоритмы конвертации содержат код, выполняемый в одной конфигурации — той, для которой разрабатывается модуль конвертации;
  • алгоритмы конвертации не несут в себе информации о внутреннем устройстве конфигурации-корреспондента, вместо этого они ориентированы на структуру формата EnterpriseData (для простоты разработки в КД3.0 объекты формата EnterpriseData представлены аналогично объектам метаданных 1С:Предприятие).

В основе реализованной в БСП механики конвертации данных через формат данных EnterpriseData , лежит модель, включающая в себя следующие элементы (далее — функциональные компоненты конвертации):

  • Конвертация,
  • Правила обработки данных (ПОД),
  • Правила конвертации объектов (ПКО), частью которых являются правила конвертации свойств (ПКС),
  • Правила конвертации предопределенных данных (ПКПД),
  • Алгоритмы.

В совокупности все эти компоненты реализуют функциональность, связанную с обработкой данных в процессе их получения, либо отправки:

Общий порядок выполнения правил конвертации при выполнении процедур отправки и получения данных представлен на схеме:

Заполнение свойств с помощью алгоритма

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

В этом случае в правиле конвертации свойства:

Установленный признак Используется алгоритм конвертации дает понять алгоритмам выгрузки и загрузки данных, что заполнение данного свойства предусмотрено обработчиками:

  • ПриОтправкеДанных для правил отправки,
  • ПриКонвертацииДанныхXDTO для правил получения.
Конвертация свойств по правилам конвертации объектов

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

Вариант №1. Правило конвертации свойства можно указать однозначно.

Простая ситуация, когда нет зависимости от данных конвертируемого объекта. В этом случае Правило конвертации свойства указывается явно — в ПКС.

Пример: свойство Организация в большинстве типовых конфигураций.

Вариант №2. Правило конвертации зависит от данных конвертируемого объекта.

Например, свойство ДокументРеализации , который может быть ссылкой на документ различного типа.

В этой ситуации

Пример кода для отправки:

Если ДокументРеализации <> Неопределено Тогда
ИмяПКО = "Документ_РеализацияТоваровУслуг_Отправка";
Если ТипЗнч(ДокументРеализации) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
ИмяПКО = "Документ_ОтчетОРозничныхПродажах_Отправка";
КонецЕсли;
ДанныеXDTO.Вставить("ДокументРеализации", Новый Структура("Значение, ИмяПКО", ДокументРеализации, ИмяПКО));
КонецЕсли;

Пример кода для получения:

Если ДокументРеализации <> Неопределено Тогда
ИмяПКО = "Документ_РеализацияТоваровУслуг_Получение";
Если Найти(ДокументРеализации .ТипЗначения, "ОтчетОРозничныхПродажах") > 0 Тогда
ИмяПКО = "Документ_ОтчетОРозничныхПродажах_Получение";
КонецЕсли;
ПолученныеДанные.ДополнительныеСвойства.Вставить("ДокументРеализации", Новый Структура("Значение, ИмяПКО", ДокументРеализации, ИмяПКО));
КонецЕсли;

Конвертация табличных частей с помощью алгоритмов конвертации

Методика конвертации в правилах конвертации объектов для отправки:

Читайте также:  Sky vision t2108 не включается

Пример кода для отправки табличной части РасшифровкаПлатежа :

ТабРП = Новый ТаблицаЗначений;
ТабРП.Колонки.Добавить("СтатьяДДС");
ТабРП.Колонки.Добавить("Заказ");
ТабРП.Колонки.Добавить("Сумма");
ТабРП.Колонки.Добавить("СуммаНДС");
ТабРП.Колонки.Добавить("СтавкаНДС");

Для Каждого СтрокаРП_ИБИз ДанныеИБ.РасшифровкаПлатежа Цикл

НоваяСтрокаРП = ТабРП.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаРП, СтрокаРП_ИБ, "СтатьяДДС,Сумма,СуммаНДС,СтавкаНДС");

Если ЗначениеЗаполнено(СтрокаРП_ИБ.Заказ) Тогда
ТипСсылки = ТипЗнч(СтрокаРП_ИБ.Заказ);
ИмяПКО = "";

Если ТипСсылки = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
ИмяПКО = "Документ_ПоступлениеТоваровУслуг_Отправка";
ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ПоступлениеУслугПрочихАктивов") Тогда
ИмяПКО = "Документ_ПоступлениеУслугПрочихАктивов_Отправка";
ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ТаможеннаяДекларацияИмпорт") Тогда
ИмяПКО = "Документ_ТаможеннаяДекларация_Отправка";
ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ОтчетКомиссионера") Тогда
ИмяПКО = "Документ_ОтчетКомиссионера_Отправка";
ИначеЕсли ТипСсылки = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ИмяПКО = "Документ_ЗаказКлиента_Отправка";
КонецЕсли;

Если ИмяПКО <> "" Тогда
НоваяСтрокаРП.Заказ = Новый Структура("Значение, ИмяПКО", СтрокаРП_ИБ.Заказ, ИмяПКО);

Методика конвертации в правилах конвертации объектов для получения:

Пример кода для получения табличной части РасшифровкаПлатежа :

МассивСтрокРасшифровка = Новый Массив;

Для Каждого Строка Из ДанныеXDTO.РасшифровкаПлатежа Цикл

СтруктураДанныхСтроки = Новый Структура;
СтруктураДанныхСтроки.Вставить("Сумма", Строка.Сумма);
СтруктураДанныхСтроки.Вставить("СуммаВзаиморасчетов", Строка.СуммаВзаиморасчетов);
СтруктураДанныхСтроки.Вставить("СтатьяДДС", Строка.СтатьяДвиженияДенежныхСредств);

Конвертация табличных частей без использования алгоритмов конвертации

В версии 3.0.5 конфигурации Конвертация данных появилась возможность создавать правила конвертации для табличных частей и их свойств без написания кода алгоритмов ПКО. Для использования данной возможности должно выполняться 2 условия:

  • В конфигурации, для которой ведется разработка, должна использоваться БСП версии 2.4.1,
  • В конвертации, в свойстве Версия формата менеджера конвертации должна быть указана версия 2.

Для того чтобы при отправке или получении данных конвертация табличных частей происходила только на основе ПКС, достаточно задать ПКС, где будет указаны источник (одна из колонок табличной части отправляемого или получаемого объекта), приемник (одна из колонок табличной части объекта формата) и при необходимости — ПКО, по которому должна выполняться конвертация значения ссылочного типа.

Для реализации комбинированного сценария конвертации табличных частей, когда конвертация выполняется при помощи алгоритма, в соответствующем ПКС необходимо не только указать источник, но и включить признак Используется алгоритм конвертации . В этом случае сначала будет выполнено заполнение на основе ПКС, затем будет выполнен алгоритм, и после ПКС для свойств табличных частей отработают еще раз, но уже с учетом изменений, которые были выполнены в алгоритме.

Возможен другой комбинированный сценарий, при котором часть свойств табличной части конвертируется только на основе ПКС, другая часть конвертируется при помощи алгоритма. В этом случае часть ПКС будет без указания источника, с включенным признаком Используется алгоритм конвертации.

Пример кода для отправки табличной части Товары (часть свойств заполняются только на основе ПКС, другая часть — алгоритмом):

Запрос = Новый Запрос(
"ВЫБРАТЬ
| _ДемоПоступлениеТоваровТовары.Номенклатура.СтранаПроисхождения КАК СтранаПроисхождения,
| ВЫРАЗИТЬ(_ДемоПоступлениеТоваровТовары.Цена * _ДемоПоступлениеТоваровТовары.Количество КАК ЧИСЛО(15, 2)) КАК Сумма
|ИЗ
| Документ._ДемоПоступлениеТоваров.Товары КАК _ДемоПоступлениеТоваровТовары
|ГДЕ
| _ДемоПоступлениеТоваровТовары.Ссылка = &Ссылка
|УПОРЯДОЧИТЬ ПО НомерСтроки");
Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();

// Товары
ИндексСтроки = 0;
ТекСтавкаНДС = ПолучитьСтавкуНДСДокумента(ДанныеИБ.СтавкаНДС);
Пока Выборка.Следующий() Цикл
СтрокаТовары = ДанныеXDTO.Товары[ИндексСтроки];
СтрокаТовары.СтавкаНДС = ТекСтавкаНДС;
СтрокаТовары.НомерГТД = "";
СтрокаТовары.ЕдиницаИзмерения = Новый Структура("Ссылка,Код","","796");
СтрокаТовары.Сумма = Выборка.Сумма;
СтрокаТовары.СтранаПроисхождения = Выборка.СтранаПроисхождения;
ИндексСтроки = ИндексСтроки + 1;
КонецЦикла;

Пример кода для получения табличной части Товары (часть свойств заполняются только на основе ПКС, другая часть — алгоритмом):

МассивСтрокТовары = Новый Массив;
Если ДанныеXDTO.Свойство("Товары")
И ЗначениеЗаполнено(ДанныеXDTO.Товары) Тогда
ИндексСтроки = 0;
Для Каждого Строка Из ДанныеXDTO.Товары Цикл
СтрокаТЧ = ПолученныеДанные.Товары[ИндексСтроки];
СтрокаТЧ.Цена = Строка.Цена;
ИндексСтроки = ИндексСтроки + 1;
КонецЦикла;
КонецЕсли;

Процесс разработки конвертации в КД3.0 осуществляется по принципу компоновки элементов конвертации. Для упрощения параллельной разработки нескольких обменов данными в КД3.0 предусмотрена возможность использования общих элементов конвертации: ПОД, ПКО, ПКПД, алгоритмов (см. рисунок):

Состав конвертаций определяется набором элементов справочника Элементы конвертации , устанавливающими связи между конвертациями и множеством функциональных компонентов конвертации (ПОД, ПКО, ПКПД и алгоритмов).

Управлять составом конвертаций можно с помощью команд Добавить элемент в состав конвертации и Выделить элемент из состава конвертаций доступными из форм функциональных компонентов.

Читайте также:  Поставленная в тексте закладка

Команда Добавить элемент в состав конвертации создает в КД3.0 связь между текущим элементом и конвертацией, указанной в форме выбора.

С помощью команды Выделить элемент из состава конвертаций выполняется операция "отпочкования": создается вторая версия текущего элемента и привязывается к тем конвертациям, с которых был снят флаг в форме редактирования состава конвертаций, использующих текущий элемент.

Ниже приведены примеры использования общих элементов конвертации.

Пример 1

В двух конфигурациях, назовем их Конфигурация 1 и Конфигурация 2 , справочник Контрагенты имеет одинаковую структуру. Реализовав логику загрузки контрагентов из формата EnterpriseData для Конфигурации 1 будет логично использовать ее и в Конфигурации 2 . КД3.0 позволяет это сделать путем включения ПКО для справочника Контрагенты в состав одновременно двух конвертаций: и для Конфигурации 1 , и для Конфигурации 2 .

Пример 2

Выполняется параллельная разработка двух версий одной конфигурации, назовем их Версия 1 и Версия 2 . Версия 2 отличается от Версии 1 только названиями реквизитов справочника Контрагенты . Соответственно конвертация для Версии 2 будет отличаться от конвертации Версии 1 только ПКО для справочника Контрагенты , поэтому в каждой конвертации свой вариант этого ПКО. Все остальные элементы конвертации должны быть общими для Версии 1 и Версии 2 , чтобы избежать необходимости дублирования изменений, например, при исправлении ошибок в правилах либо алгоритмах конвертации.

В КД3.0 поддерживается операция копирования состава конвертаций (раздел Конвертации , команда Копирование состава конвертации ).

При копировании состава конвертации не происходит создание новых правил — вместо этого существующие правила конвертации-источника включаются в состав указанной конвертации.

Допустим у нас есть правила обмена данными. При этом два разных правила конвертации объектов используют абсолютно одинаковые по структуре выборки данных, только с разными параметрами. Возникает резонный вопрос, а можно ли где-нибудь зафиксировать этот запрос, а затем использовать его во всех местах где нужно. Для этих целей существуют Запросы.

Технология использования очень проста. На закладке "Запросы" создаем и описываем текст запроса:

Далее в тексте обработчиков можно использовать такой код:

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

А вызов этого кода будет очень прост:

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Передача программным путём Массива (Таблицы значений, Списка значений) в параметры.

На примере ЗУП 2.5: в обработке «Выгрузка данных в бухгалтерскую программу» на форме размещен реквизит, в котором пользователь подбирает нужные счета дебета, далее требуется передать выбранные пользователем счета в правила выгрузки.

В типовых конфигурациях есть удобный механизм "СериализоватьОбъектXDTO", саму функцию легко найти в интернете, а мне достаточно в процедуре "ВыгрузитьПоПравиламБух30" формы вписать вот это:

Далее в Конвертации данных добавляем параметр.

Перед выгрузкой данных выполняем проверку:

Читайте также:  Прижимная сила головки звукоснимателя

И используем десериализованный массив, например вот так:

Использование произвольного алгоритма для создания объекта без источника.

В ПВД (правило выгрузки данных):

Запросы размещаются на закладке "АлгоритмыЗапросы" без кавычек.

Установка своего Значения (Вариант 1).

В описанном выше документе в табличной части есть реквизит "ВидРасчета" для которого правилом конвертации является ПКО "ОсновныеНачисленияОрганизаций".

Создавать новые ВидыРасчетов в базе загрузки из базы выгрузки я не хочу (отключаю поиск по "Коду", "Пометка на удаление" мне тоже не интересна), пытаюсь найти объекты по Наименованию

и в случае, если Наименование определенное, то присваиваю ему другое значение (другими словами. устанавливаю соответствие).

Установка своего Значения (Вариант 2).

Ситуация вторая, мне не интересно что было в источнике, я хочу просто задать своё конкретное значение.

Наименование у нас имеет тип "Строка", так что Значение задано строкой.

Особенности выгрузки документов (Задать своё значение реквизита в произвольном запросе).

Рассмотрим вариант произвольного запроса.

Как видно из картинки выше, в запросе выводим и реквизиты и табличную часть (и) документа (обведено голубым квадратом).

//1 — табличная часть документа

//2 — не суть, просто какое-то условие (завист от задачи)

//3 — задаём другое значение

Задать своё значение реквизиту табличной части в ПКС, использование Алгоритма, задать другое ПКО.

"Источник" содержит в себе ссылку.

Обратиться к строке табличной части можно с помощью переменной "ОбъектКоллекции".

Далее всё просто.

Алгоритм выглядит вот так:

Если в результате получаем ИмяПКО = "", отключаем ПКС (Отказ = Истина;), удобно для случаев, когда в одном документе есть реквизит, а в другом — нет. Например, подобная ситуация возникает, если в одной системе ЗУП 2.5 установлена программа Бухучета 7.7, а в другой — Бухгалтерия 3.0

Несколько часто используемых строчек кода в ПКО.

Несколько часто используемых строчек кода в ПВД.

Перед выгрузкой (подойдет для варианта стандартной выгрузки, когда при обмене выгружаются зарегистрированные объекты):

Разное.

Найти ссылку в приёмнике, которой нет в источнике.

Пример приведён, чтобы показать все возможности конвертации.

Предположим, в источнике есть информация о табельном номере сотрудника, мне необходимо определить сотрудника.

Вариант 1 приведен с целью, чтобы показать идею. Но, поскольку запрос в цикле — это зло, смотри Вариант 2 🙂

В запросе установите галочку:

Еще одна проблема, с которой мне пришлось давным-давно столкнуться и по неопытности было потрачено какое-то время —

Конвертация документа "Перенос данных", или, например "Операция" (Перенос движений документа).

В выгрузке описания структуры установите галочку, как показано на рис. ниже.

Далее в конвертации данных:

Галочками отметьте необходимые регистры, по которым хотите перенести движения, они будут добавлены так же, как и табличные части документа. Менять стандартные правила выгрузки не нужно (то есть не нужно писать никаких запросов), движения будут выгружены автоматически.

Конвертация перечисления.

Если исходного значения перечисления в базе источнике нет, то нам не нужно ПКО для перечисления.

Рассмотрим простейший пример:

ПКС такого перечисления:

Использование параметра в табличной части.

В табличной части "ОтражениеВУчете" добавим параметр "ВидРезерва" и зададим ему нужное нам значение.

Далее после загрузки объекта можем обратиться к параметрам любым способом.

Я привела два примера:

Выгрузка структуры в ПКС.

Зачем нужно: например, в Договоре контрагента при выгрузке нужно подменить Владельца.

Если выполняется какое-либо условие, то при выгрузке в договоре Владелец будет другой.

Если, условие перестаёт выполняться, Договор контрагента выгружается стандартным образом.

Оцените статью
Добавить комментарий