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