Конвертация данных. Создание Субконто в документе ОперацияБух или «А план видов характеристик чудесным образом, но обрабатывается».
Необходимо при помощи конфигурации «Конвертация данных» в базе-источнике сформировать данные (в виде таблицы значений) и перегрузить в документ «ОперацияБух» базы-приемника так, чтобы строки таблицы значений стали строками документа «ОперацияБух» (то есть, формирование ручных проводок по таблице значений).
Платформа источника и приемника 8.х. В конфигурации источника план счетов есть, но нет субконто (нет «ПланВидовХарактеристикСсылка.ВидыСубконто…»).
- Описание
- Подробнее
Описание
Здесь акцентирую внимание на создание субконто, так как это вызывает основную сложность.
1. Создание правила выгрузки данных.
Данное правило формирует таблицу значений для проводок.

Код правила выгрузки:
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); // ДатаНачала и ДатаОкончания предопределенные параметры конфигурации «Конвертация данных»
Запрос.УстановитьПараметр("…….",……………….); // дополнительные параметры
Запрос.Текст = "ВЫБРАТЬ
………………………………………………………..
| …………………..КАК Контрагент,
| ………………… КАК Договор,
| СУММА(…………………..Сумма) КАК Сумма,
| …………………. КАК СчетДт,
| …………………..КАК СчетКт,
| …………………. КАК КоличествоДт,
| ………………… КАК КоличествоКт
|ИЗ
| ……………… КАК ………………………………
|ГДЕ
| ……………………………………...Период МЕЖДУ &ДатаНачала И &ДатаОкончания
РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой); // таблица значений из запроса
Если РезультатЗапроса.Количество() > 0 Тогда
// шапка документа
ВходящиеДанные = Новый Структура("Дата, Хозрасчетный, Комментарий, Содержание ");
ВходящиеДанные.Дата = КонецДня(ДатаОкончания);
ВходящиеДанные.Содержание = "Взаиморасчеты компании.";
ВходящиеДанные.Комментарий = "Загружено из Альфа-Авто.";
ВходящиеДанные.СпособЗаполнения = "Вручную";
// табличная часть документа
РезультатЗапроса.Колонки.Добавить("СубконтоДт");
РезультатЗапроса.Колонки.Добавить("СубконтоКт");
Для Каждого ТекущаяСтрокаРезультатЗапроса Из РезультатЗапроса Цикл
СубконтоДт = Новый Соответствие;
СубконтоДт.Вставить(Новый Структура("Код", "00005"), ТекущаяСтрокаРезультатЗапроса.Контрагент);
СубконтоДт.Вставить(Новый Структура("Код", "00016"), ТекущаяСтрокаРезультатЗапроса. Договор);
ТекущаяСтрокаРезультатЗапроса.СубконтоДт = СубконтоДт;
СубконтоКт = Новый Соответствие;
ТекущаяСтрокаРезультатЗапроса.СубконтоКт = СубконтоКт;
КонецЦикла;
ВходящиеДанные.Хозрасчетный = РезультатЗапроса;
ВыгрузитьПоПравилу(, ,ВходящиеДанные , , "ОперацияБух");
КонецЕсли;Самая главная строка, необходимая для Субконто:
СубконтоДт.Вставить(Новый Структура(«Код», «00005»), ТекущаяСтрокаРезультатЗапроса.Контрагент)
Новый Структура(«Код», «00005») – добавляется код элемента плана видов характеристик, как он определен в базе-приемнике (в данном случае – это элемент «Контрагенты»).
2. Создание правил конвертации объектов
— Для документа «ОперацияБух»

приемник — реквизит «Хозрасчетный» документа «ОперацияБух»


Здесь самая главная строка:
ИмяПКОВидСубконто = «ВидыСубконтоХозрасчетные»;
Аналогично заполяется для приемника и СубконтоКт
— Для плана видов характеристик «ВидыСубконтоХозрасчетные»

— Для Субконто «Контрагенты»

3. Последний штрих
То, что я не встретил ни в одном источнике: если создано несколько правил конвертации объектов с одинаковым типом у источника (например для контрагентов создано два правила по конвертации данных), то для того чтобы система попадала в нужное правило, приоритет у этого правила должен быть максимальными среди них.

Решил разместить публикацию, так как сам потратил много времени, пока нашёл нужное решение. В той литературе, что есть, этот момент описан скудно, пришлось пересмотреть множество правил обмена.
Надеюсь, кому-то поможет данная статья.
