Как решить проблему выгрузки субконто по ссылке в Конвертации данных 2.1?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При настройке обмена данными между конфигурациями «Управление производственным предприятием» (УПП) и «Бухгалтерия предприятия» (БП) программисты часто сталкиваются с ситуацией, когда данные документа или регистра переносятся корректно, но субконто в бухгалтерских проводках остаются пустыми. Особенно остро эта проблема проявляется при попытке выгрузить документ ОтражениеЗарплатыВРеглУчете в ОперацияБух. В этой статье мы подробно разберем, почему КД 2.1 может игнорировать значения субконто и как правильно настроить правила конвертации свойств (ПКС), чтобы избежать подобных ошибок.

Анализ проблемы: почему субконто не попадает в файл выгрузки

Рассмотрим стандартную ситуацию. Вы формируете таблицу значений (ТЗ) для передачи через ВходящиеДанные. В коде обработчика вы явно заполняете соответствие субконто, указывая вид субконто и его значение (например, ссылку на контрагента). На первый взгляд, код выглядит абсолютно логично:


ИначеЕсли Строка.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("76.41") Тогда
    НовСтрок.СчетКт = Строка.СчетКт;
    СоотвСубк = Новый Соответствие;
    СоотвСубк.Вставить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты, Строка.СубконтоКт1);
    НовСтрок.СубконтоКт = СоотвСубк;
КонецЕсли;

Однако при просмотре XML-файла выгрузки вы обнаруживаете, что узел, описывающий СубконтоКт, либо полностью отсутствует, либо содержит описание типа без самого значения. Проанализируем причины такого поведения системы.

  1. Неопределенность типа приемника. Субконто в 1С — это всегда составной тип данных. Механизм КД должен точно знать, в какой тип преобразовывать значение из источника. Если в правилах ПКС не указан конкретный тип приемника, КД может не найти подходящее правило конвертации объектов (ПКО) «на лету».
  2. Отсутствие ПКО для Плана видов характеристик. Вид субконто (например, «Контрагенты») сам по себе является объектом ссылки. Если для ПВХ ВидыСубконтоХозрасчетные не создано правило конвертации, система не сможет корректно сериализовать ключ в объекте Соответствие.
  3. Ошибки в именовании колонок ТЗ. При выгрузке в регистр бухгалтерии или документ «Операция (бухгалтерский и налоговый учет)» КД ожидает определенную структуру коллекции.

Решение №1: Установка «Типа приемника» в ПКС

Это самое важное и часто пропускаемое действие. Разберем его по шагам. Когда мы работаем с составными типами в КД 2.1, автоматика не всегда срабатывает верно, особенно если данные передаются через ВходящиеДанные или программно формируемые структуры.

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

Почему это важно: когда тип приемника жестко типизирован, КД формирует в XML-файле описание типа {http://v8.1c.ru/8.1/data/enterprise/current-config}ChartOfCharacteristicTypesRef.ВидыСубконтоХозрасчетные. Без этой настройки узел может быть сформирован некорректно, и загрузчик в базе-приемнике просто проигнорирует данные.

Решение №2: Использование структуры вместо соответствия

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


// Вместо Соответствия используем Структуру
СубконтоСтруктура = Новый Структура;
// В качестве ключа передаем наименование или предопределенное имя вида субконто,
// но лучше использовать ссылку, если настроено ПКО для ПВХ
СубконтоСтруктура.Вставить("Контрагенты", Строка.СубконтоКт1);

// Передаем структуру в колонку ТЗ
НовСтрок.СубконтоКт = СубконтоСтруктура;

Важно помнить: если вы используете Структуру, ключи должны соответствовать именам видов субконто в приемнике, либо логика их обработки должна быть описана в обработчиках ПКС «Перед выгрузкой».

Решение №3: Проверка синхронизации Планов видов характеристик

Проанализируем ситуацию, когда сам элемент справочника (например, Контрагент) выгружается, а ссылка на вид субконто — нет. Это часто происходит из-за того, что в базе-источнике и базе-приемнике элементы ПВХ ВидыСубконтоХозрасчетные имеют разные внутренние идентификаторы (GUID).

Выясним, создано ли у вас ПКО для ПВХ ВидыСубконтоХозрасчетные. Если нет — обязательно создайте его. Настройте поиск в этом ПКО по «Наименованию» или «Предопределенному имени». Если КД не сможет сопоставить вид субконто «Контрагенты» из УПП с аналогичным видом в БП, она не запишет значение в регистр, даже если сам контрагент успешно перенесен.

Решение №4: Программное указание правила конвертации

Если автоматический подбор ПКО для значения субконто не срабатывает, мы можем заставить систему использовать конкретное правило. В настройках ПКС для субконто, в колонке «Правило», выберите нужное ПКО (например, «Контрагенты»).

Однако, так как субконто составное, одно правило на все случаи поставить нельзя. В этом случае используем обработчик «При выгрузке» для ПКС:


// Пример в обработчике ПКС СубконтоКт
Если ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
    ИмяПКО = "Контрагенты";
ИначеЕсли ТипЗнч(Значение) = Тип("СправочникСсылка.Номенклатура") Тогда
    ИмяПКО = "Номенклатура";
КонецЕсли;

Использование переменной ИмяПКО гарантирует, что КД применит именно те настройки поиска и синхронизации, которые вы определили для конкретного справочника.

Дополнительные советы при работе с «ОперацияБух»

Рассмотрим специфику приемника. Документ ОперацияБух в БП 3.0 является «техническим» объектом, данные которого хранятся в регистре бухгалтерии Хозрасчетный. При выгрузке через ВходящиеДанные убедитесь, что структура вашей таблицы значений совпадает с ожидаемой структурой ПКС в ПКО документа ОперацияБух.

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

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

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

← На главную