Ситуация, когда в платформе 1С:Предприятие 7.7 к счету, по которому уже велся учет, внезапно добавляют субсчета, является классической техногенной ошибкой. Проблема заключается в архитектурных особенностях «семерки»: как только у счета появляется хотя бы один субсчет, сам родительский счет становится «счетом-группой». Согласно логике системы, проводки на счетах-группах существовать не должны, и стандартные отчеты (ОСВ, карточка счета) просто перестают их «видеть», хотя физически в базе данных эти записи сохраняются.
В данной статье мы подробно разберем, почему так происходит, какие риски это несет для бухгалтерского учета (особенно на счете 90.2 «Себестоимость продаж») и какими методами можно восстановить корректность данных, не прибегая к опасному перепроведению старых периодов.
Проанализируем техническую сторону вопроса. В 1С 7.7 данные о проводках хранятся в таблице 1SENTRY. Каждая запись содержит идентификатор счета. Когда мы превращаем счет в группу в Плане счетов, его внутренний ID остается прежним, но в таблице счетов (1SACC) меняется признак иерархии.
Стандартные механизмы формирования бухгалтерских итогов при построении отчетов рассчитывают суммы «снизу вверх» — от субсчетов к родителю. Если система видит, что счет является группой, она ожидает найти суммы на его подчиненных субсчетах. Проводки, которые «зависли» непосредственно на родителе, игнорируются логикой запросов к итогам. В результате мы получаем ситуацию, когда в журнале проводок суммы есть, а в оборотно-сальдовой ведомости — пусто.
Рассмотрим конкретный пример со счетом 90.2. Поскольку этот счет участвует в определении финансового результата и должен закрываться в конце каждого месяца, наличие невидимых остатков приведет к следующим последствиям:
90.2, документ не перенесет себестоимость на счет 90.9.Выясним, как исправить эту ситуацию наиболее эффективными способами.
Это самый правильный и «мягкий» способ с точки зрения методологии 1С 7.7. Мы создаем специальный субсчет для «старых» проводок, чтобы вывести их из-под родительского счета-группы.
Алгоритм действий:
90.2.0, и называем его «Себестоимость (до разделения)».90.2 до поломки.Рассмотрим пример кода для такой обработки:
Процедура ВыполнитьПеренос()
СчетОткуда = СчетПоКоду("90.2");
СчетКуда = СчетПоКоду("90.2.0");
Операция = СоздатьОбъект("Операция");
ВыбратьОперации(ДатаНачала, ДатаКонца);
Пока ПолучитьОперацию() = 1 Цикл
ВыбратьПроводки();
Пока ПолучитьПроводку() = 1 Цикл
Если Дебет.Счет = СчетОткуда Тогда
Дебет.Счет = СчетКуда;
Записать();
КонецЕсли;
Если Кредит.Счет = СчетОткуда Тогда
Кредит.Счет = СчетКуда;
Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
Предупреждение("Перенос завершен. Обязательно пересчитайте итоги!");
КонецПроцедуры
Важно: Метод Записать() в 1С 7.7 позволяет программно установить в проводку счет-субсчет, даже если через интерфейс (в самом документе) это сделать уже невозможно из-за того, что родитель стал группой.
Если ваша база работает на файлах DBF и вы обладаете навыками работы с редакторами таблиц (например, DBF Navigator), можно выполнить замену ID счета напрямую в таблице проводок 1SENTRY.DBF.
Разберем по шагам этот процесс:
1SACC.DBF (план счетов) и найдите ID (внутренний код) счета 90.2 и нового субсчета 90.2.1 (или 90.2.0). Эти коды выглядят как 3-4 символьные строки (например, " 1A").1SENTRY.DBF.S_ACID (счет дебета) и K_ACID (счет кредита), где содержится ID старого счета, и замените их на ID нового субсчета за нужный период.Существует типовая обработка U_BUHG.ERT (или аналоги), которая позволяет массово заменять одни объекты на другие. Однако стандартная обработка может блокировать выбор счета-группы. В этом случае программисту необходимо временно закомментировать в коде обработки проверку Счет.ЭтоГруппа() = 1, чтобы позволить системе выбрать «битый» счет в качестве образца для поиска.
Многие пользователи в сообщении 0 задаются вопросом: «Может, просто все перепровести?». Проанализируем риски этого решения:
Таким образом, вариант с программной заменой счета в проводках (Способ 1) является наиболее приоритетным и безопасным.
После того как вы любым способом (программным или ручным) изменили счета в проводках, ваши отчеты все еще могут показывать старые (некорректные) данные. Это происходит потому, что 1С 7.7 берет данные для ОСВ из таблиц итогов (1SBKTTL, 1SBKTTLC), а не рассчитывает их «на лету» из проводок.
Чтобы изменения вступили в силу, необходимо выполнить процедуру:
Администрирование -> Исправление информационной базы -> Поставить галочку «Пересчет итогов» -> Выполнить.
Только после этой операции система перечитает таблицу 1SENTRY и заново сформирует правильные остатки на новых субсчетах.
Рассмотрим, как правильно вводить субсчета в 1С 7.7 в будущем, чтобы не допускать подобных ситуаций:
Следуя этим инструкциям, вы сможете восстановить работоспособность базы 1С 7.7 и обеспечить корректное формирование финансовой отчетности.