Как исправить ошибку «Вид Субконто "Подразделения" не доступно для данной записи» при обмене между 1С:КА и 1С:БП в КД 2?

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

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

В момент загрузки проводок в Бухгалтерию система выдает критическую ошибку: «Запись не верна! Вид Субконто "Подразделения" не доступно для данной записи! (Регистр бухгалтерии: Журнал проводок...)». Это происходит из-за строгой валидации платформы 1С:Предприятие при записи набора записей регистра бухгалтерии.

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

---

Почему возникает ошибка: логика платформы 1С:Предприятие

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

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

---

Вариант 1. Универсальная программная очистка лишних субконто при загрузке (Рекомендуемый способ)

Этот способ является наиболее гибким и отказоустойчивым. Его суть заключается в том, что мы выгружаем данные из источника «как есть», а в базе-приемнике перед непосредственной записью документа динамически проверяем, поддерживает ли счет дебета или кредита пришедшие виды субконто. Если какое-то субконто не поддерживается планом счетов приемника, мы удаляем его программно.

Для реализации этого алгоритма выполним следующие шаги в «Конвертации данных 2»:

  1. Откроем Правило конвертации объектов (ПКО) для переносимого документа (например, ОперацияБух) или ПКО для набора записей регистра бухгалтерии (если перенос идет напрямую в регистр).
  2. Перейдем на вкладку «Обработчики событий».
  3. Найдем обработчик события «После загрузки» (или «После загрузки объекта»).
  4. Пропишем код, который обойдет все проводки документа и удалит неподдерживаемые виды субконто.

Рассмотрим пример кода для обработчика:


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

КонецЦикла;

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

---

Вариант 2. Исключение конкретного субконто на этапе выгрузки в XML

Если мы хотим решить проблему строго на стороне базы-источника (КА), чтобы в XML-файл обмена вообще не попадали лишние данные по подразделениям для определенных проводок, настроим фильтрацию при выгрузке свойств.

Разберем по шагам, как настроить правила конвертации свойств (ПКС):

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

Пример кода для обработчика «Перед выгрузкой» ПКС:


// Проверяем, совпадает ли выгружаемый вид субконто с типом "Подразделения"
Если ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Подразделения Тогда
    // Отменяем выгрузку только этого конкретного элемента коллекции субконто
    Отказ = Истина;
КонецЕсли;

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

---

Вариант 3. Настройка функциональности ведения учета в 1С:Бухгалтерии

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

Давайте проверим настройки функциональности в 1С:Бухгалтерии предприятия:

  1. Перейдем в раздел меню Главное -> Настройки -> Функциональность.
  2. Откроем вкладку Учет по подразделениям (в некоторых версиях конфигурации эта настройка находится в разделе Параметры учета).
  3. Убедимся, что включен признак ведения учета по подразделениям (например, для обособленных подразделений или затрат).

После активации этой настройки платформа 1С автоматически добавит предопределенное субконто «Подразделения» на соответствующие счета учета затрат (такие как 20, 26, 44) в плане счетов БП. Это автоматически синхронизирует структуру планов счетов, и ошибка загрузки пропадет без внесения изменений в программный код КД2.

---

Вариант 4. Пересмотр архитектуры обмена: проведение документов в приемнике

Проанализируем ситуацию с точки зрения методологии ведения учета в системе «1С:Предприятие». Перенос готовых бухгалтерских проводок из оперативной базы (КА) в регламентированную (БП) имеет ряд существенных недостатков.

Почему переносить проводки напрямую — не всегда хорошее решение?

Альтернативный и более стандартный подход — выгружать документы без проводок. При переносе документов в БП они записываются непроведенными или проводятся по правилам базы-приемника. Таким образом, проводки будут сформированы непосредственно движком проведения Бухгалтерии, опираясь на внутренний план счетов БП и его актуальные настройки. Для этого в КД2 достаточно отключить перенос табличной части движений регистра бухгалтерии в настройках ПКО документов.

---

Резюме

Мы подробно разобрали проблему несовпадения планов счетов по субконто «Подразделения» и методы ее решения. Если вам необходимо гарантировать перенос проводок «один в один» без изменения метаданных конфигураций, оптимальным решением станет использование Варианта 1 с программным удалением неподдерживаемых субконто при загрузке в БП. Если же аналитика по подразделениям необходима бухгалтерам в БП — воспользуйтесь Вариантом 3 для активации соответствующей функциональности.

← На главную