При организации обмена данными между конфигурациями 1С:Комплексная автоматизация (КА) и 1С:Бухгалтерия предприятия (БП) с помощью инструмента «Конвертация данных 2» (КД2) разработчики часто сталкиваются с несовпадением структуры планов счетов. Типичный сценарий: в базе-источнике (КА) на некоторых счетах включен аналитический учет по субконто «Подразделения», тогда как в базе-приемнике (БП) на аналогичных счетах этого субконто нет.
В момент загрузки проводок в Бухгалтерию система выдает критическую ошибку: «Запись не верна! Вид Субконто "Подразделения" не доступно для данной записи! (Регистр бухгалтерии: Журнал проводок...)». Это происходит из-за строгой валидации платформы 1С:Предприятие при записи набора записей регистра бухгалтерии.
В рамках этой статьи мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы платформы и рассмотрим четыре практических варианта решения этой задачи: от гибкой программной настройки правил обмена до изменения параметров ведения учета в конфигурациях.
---
Для начала выясним точную причину поведения системы. Платформа 1С выполняет жесткую проверку структуры субконто в момент вызова метода Записать() для объекта регистра бухгалтерии. Если в структуре загружаемой проводки присутствует значение субконто (ключ аналитики), которого физически нет в плане счетов базы-приемника для выбранного счета дебета или кредита, транзакция прерывается.
Важная особенность: простая очистка значения (установка его в Неопределено или ПустаяСсылка) не решает проблему. Если в коллекции субконто проводки остается сам вид субконто (ключ), платформа все равно выдаст ошибку. Нам необходимо именно физически удалять связь или исключать передачу этого субконто еще на этапе выгрузки.
---
Этот способ является наиболее гибким и отказоустойчивым. Его суть заключается в том, что мы выгружаем данные из источника «как есть», а в базе-приемнике перед непосредственной записью документа динамически проверяем, поддерживает ли счет дебета или кредита пришедшие виды субконто. Если какое-то субконто не поддерживается планом счетов приемника, мы удаляем его программно.
Для реализации этого алгоритма выполним следующие шаги в «Конвертации данных 2»:
ОперацияБух) или ПКО для набора записей регистра бухгалтерии (если перенос идет напрямую в регистр).Рассмотрим пример кода для обработчика:
Для каждого Проводка из Объект.Движения.Хозрасчетный Цикл
// 1. Проверяем и очищаем субконто по Дебету
Если Проводка.СчетДт.ВыбиратьСубконто Тогда
КоллекцияСубконтоДт = Проводка.СубконтоДт;
СписокУдаленияДт = Новый Массив;
// Собираем неподдерживаемые виды субконто
Для каждого Субконто из КоллекцияСубконтоДт Цикл
ВидСубконтоТекущий = Субконто.Ключ;
ЕстьТакоеСубконто = Ложь;
Для каждого ВидСубконтоСчета из Проводка.СчетДт.ВидыСубконто Цикл
Если ВидСубконтоСчета.ВидСубконто = ВидСубконтоТекущий Тогда
ЕстьТакоеСубконто = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЕстьТакоеСубконто Тогда
СписокУдаленияДт.Добавить(ВидСубконтоТекущий);
КонецЕсли;
КонецЦикла;
// Удаляем лишние субконто из проводки
Для каждого ЭлементУдаления Из СписокУдаленияДт Цикл
КоллекцияСубконтоДт.Удалить(ЭлементУдаления);
КонецЦикла;
КонецЕсли;
// 2. Проверяем и очищаем субконто по Кредиту
Если Проводка.СчетКт.ВыбиратьСубконто Тогда
КоллекцияСубконтоКт = Проводка.СубконтоКт;
СписокУдаленияКт = Новый Массив;
// Собираем неподдерживаемые виды субконто
Для каждого Субконто из КоллекцияСубконтоКт Цикл
ВидСубконтоТекущий = Субконто.Ключ;
ЕстьТакоеСубконто = Ложь;
Для каждого ВидСубконтоСчета из Проводка.СчетКт.ВидыСубконто Цикл
Если ВидСубконтоСчета.ВидСубконто = ВидСубконтоТекущий Тогда
ЕстьТакоеСубконто = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЕстьТакоеСубконто Тогда
СписокУдаленияКт.Добавить(ВидСубконтоТекущий);
КонецЕсли;
КонецЦикла;
// Удаляем лишние субконто из проводки
Для каждого ЭлементУдаления Из СписокУдаленияКт Цикл
КоллекцияСубконтоКт.Удалить(ЭлементУдаления);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Преимущество метода: Данный код универсален. Он защищает от ошибок не только по субконто «Подразделения», но и по любым другим несовпадениям аналитик между конфигурациями-партнерами (например, если в будущем вы добавите новые субконто на счета в одной из баз).
---
Если мы хотим решить проблему строго на стороне базы-источника (КА), чтобы в XML-файл обмена вообще не попадали лишние данные по подразделениям для определенных проводок, настроим фильтрацию при выгрузке свойств.
Разберем по шагам, как настроить правила конвертации свойств (ПКС):
СубконтоДт и СубконтоКт.Пример кода для обработчика «Перед выгрузкой» ПКС:
// Проверяем, совпадает ли выгружаемый вид субконто с типом "Подразделения"
Если ВидСубконто = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Подразделения Тогда
// Отменяем выгрузку только этого конкретного элемента коллекции субконто
Отказ = Истина;
КонецЕсли;
Важное примечание: Использование флага Отказ = Истина внутри обработчика ПКС отменяет выгрузку исключительно текущего свойства (конкретной строки субконто), не влияя на выгрузку всей остальной проводки или самого документа. В результирующий XML-файл данная аналитика просто не запишется, что предотвратит ошибку при загрузке в базу-приемник.
---
Иногда корни проблемы лежат не в программных правилах обмена, а в настройках самой базы-приемника. Вполне возможно, что учет затрат по подразделениям необходим бухгалтерам в БП, но эта функция сейчас просто отключена в параметрах программы.
Давайте проверим настройки функциональности в 1С:Бухгалтерии предприятия:
После активации этой настройки платформа 1С автоматически добавит предопределенное субконто «Подразделения» на соответствующие счета учета затрат (такие как 20, 26, 44) в плане счетов БП. Это автоматически синхронизирует структуру планов счетов, и ошибка загрузки пропадет без внесения изменений в программный код КД2.
---
Проанализируем ситуацию с точки зрения методологии ведения учета в системе «1С:Предприятие». Перенос готовых бухгалтерских проводок из оперативной базы (КА) в регламентированную (БП) имеет ряд существенных недостатков.
Почему переносить проводки напрямую — не всегда хорошее решение?
Альтернативный и более стандартный подход — выгружать документы без проводок. При переносе документов в БП они записываются непроведенными или проводятся по правилам базы-приемника. Таким образом, проводки будут сформированы непосредственно движком проведения Бухгалтерии, опираясь на внутренний план счетов БП и его актуальные настройки. Для этого в КД2 достаточно отключить перенос табличной части движений регистра бухгалтерии в настройках ПКО документов.
---
Мы подробно разобрали проблему несовпадения планов счетов по субконто «Подразделения» и методы ее решения. Если вам необходимо гарантировать перенос проводок «один в один» без изменения метаданных конфигураций, оптимальным решением станет использование Варианта 1 с программным удалением неподдерживаемых субконто при загрузке в БП. Если же аналитика по подразделениям необходима бухгалтерам в БП — воспользуйтесь Вариантом 3 для активации соответствующей функциональности.