Как правильно перенести субконто «Документ расчетов с контрагентом» при конвертации данных?

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

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

Разберем, почему это происходит и как правильно решить данную задачу.

Анализ проблемы типизации субконто

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

Решение: перенос объектов и заполнение после загрузки

Наиболее надежный и архитектурно верный подход — это разделение процесса на два этапа: сначала перенос документов-оснований, а затем заполнение аналитики в проводках.

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

Пример реализации в обработчике

Представим, что мы передали информацию о расчетном документе через поле Содержание (или любое другое текстовое поле). Теперь в событии ПослеЗагрузкиДанных мы можем выполнить корректировку проводок:


// В обработчике ПослеЗагрузки документа "Операция"
Для Каждого Проводка Из Объект.Хозрасчетный Цикл
    // Допустим, мы нашли способ идентифицировать наш документ
    // Ищем ссылку в базе по переданному ранее номеру/комментарию
    НайденныйДокумент = Документы.ДокументРасчетовСКонтрагентом.НайтиПоНомеру(...);
    
    Если ЗначениеЗаполнено(НайденныйДокумент) Тогда
        // Устанавливаем третье субконто
        Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами] = НайденныйДокумент;
    КонецЕсли;
КонецЦикла;
Объект.Записать();

Почему этот метод эффективен?

Совет: Всегда проверяйте, что тип данных, который вы передаете в Субконто, точно входит в составной тип, определенный в Плане счетов. Если в плане счетов не выбран нужный вам документ, никакой перенос не поможет, пока вы не измените настройки Плана счетов в конфигураторе.

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

← На главную