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