При работе с планом счетов в системе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда попытка изменить виды субконто на предопределенном счете приводит к ошибке: «Превышено максимальное количество субконто». Даже если визуально в Конфигураторе или в режиме «Предприятие» лишних записей нет, платформа может блокировать изменения. В данной статье мы подробно разберем, почему это происходит и как корректно выполнить реструктуризацию плана счетов.
Для начала проанализируем архитектуру хранения предопределенных данных в 1С 8.3. Основная сложность заключается в том, что информация о субконто на счете хранится в двух местах одновременно:
Когда мы пытаемся изменить вид субконто в Конфигураторе, платформа не всегда автоматически очищает соответствующие записи в базе данных. Если для плана счетов установлено ограничение (например, максимум 3 субконто), а в режиме предприятия уже заполнены 3 строки, добавление новой строки в Конфигураторе воспринимается системой как попытка создать четвертое субконто, что и вызывает ошибку. Это происходит из-за механизма синхронизации предопределенных данных, который «защищает» существующие в пользовательском режиме настройки.
Рассмотрим наиболее надежный способ приведения структуры плана счетов в порядок без использования прямого редактирования таблиц БД. Выполним следующие шаги:
ВидыСубконто. Сохраним изменения и обновим конфигурацию базы данных.Если ручное удаление не помогает или счетов слишком много, проанализируем ситуацию программно. Мы можем принудительно очистить коллекцию субконто объекта счета, игнорируя проверки платформы. Рассмотрим пример кода, который можно запустить во внешней обработке:
// Выбираем нужный счет по коду
СчетСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("001");
СчетОбъект = СчетСсылка.ПолучитьОбъект();
// Полностью очищаем табличную часть видов субконто
СчетОбъект.ВидыСубконто.Очистить();
// Используем режим загрузки, чтобы обойти встроенные проверки
СчетОбъект.ОбменДанными.Загрузка = Истина;
СчетОбъект.Записать();
Сообщить("Табличная часть субконто для счета " + СчетСсылка + " успешно очищена.");
После выполнения этого кода в режиме «Предприятие» счет станет «пустым» с точки зрения аналитики, и вы сможете без проблем задать новые виды субконто через Конфигуратор. Для прямого редактирования табличных частей и реквизитов объектов базы без написания кода подойдёт инструмент для редактирования объектов информационной базы.
Важно понимать, что изменение видов субконто на счете не влечет за собой автоматического изменения данных в Регистре бухгалтерии. Если по счету уже были движения, в таблицах регистра (таких как _AccRgED) могут остаться значения старых субконто. Выясним причину, почему это мешает:
Платформа 1С хранит значения субконто в колонках вида Субконто1, Субконто2 и так далее. Если вы удалили субконто из плана счетов, но не удалили движения, то при попытке добавить новое субконто система может обнаружить, что «физическое место» в таблице еще занято старыми данными. Для массовой очистки и изменения таких записей можно использовать обработку для групповой корректировки записей регистров.
Для решения этой задачи мы рекомендуем:
В современных конфигурациях, работающих на платформе 8.3.18 и выше, предусмотрен специальный механизм обновления предопределенных данных. Если вы столкнулись с «залипшими» субконто, попробуем воспользоваться стандартной обработкой:
/RenewPredefinedData, который заставляет систему пересмотреть связи между метаданными и объектами в базе.Как отметил автор вопроса, проблема возникла на забалансовом счете. Выясним, есть ли тут специфика. Хотя забалансовые счета не участвуют в двойной записи, они точно так же создают записи в таблицах регистра бухгалтерии. Если счет является «самописным» (нетиповым), платформа позволяет более гибко им управлять, но ограничения на максимальное количество субконто (обычно это 3) действуют для всех счетов плана одинаково. Поэтому все вышеперечисленные методы очистки кэша и реструктуризации таблиц актуальны и для забалансового учета.
Подведем итог: Основное решение заключается в последовательной очистке данных сначала в режиме предприятия (чтобы удалить записи из таблиц БД), а затем в Конфигураторе (чтобы изменить описание структуры). Только полная синхронизация этих двух уровней позволит избежать ошибки превышения лимита субконто.