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