В практике работы с платформой 1С:Предприятие 7.7 бухгалтеры и программисты часто сталкиваются с загадочным явлением: в оборотно-сальдовой ведомости (ОСВ) по определенному счету продолжает «висеть» субконто, хотя все суммы и количества по нему полностью закрыты. В отчете это выглядит как строка с нулевыми значениями в колонках начального сальдо, которая портит вид отчета и вызывает вопросы у контролирующих органов. Стандартный пересчет итогов или тестирование и исправление информационной базы зачастую не приносят результата.
В этой статье мы подробно разберем причины возникновения «фантомных» остатков и рассмотрим пошаговые методики их устранения, опираясь на технические особенности движка 1С 7.7.
Одной из самых распространенных причин является наличие «невидимых» остатков. Рассмотрим ситуацию: счет имеет количественный учет, но конкретное субконто (например, «Статьи затрат») настроено как чисто суммовое. Если по какой-то причине (сбой, программная ошибка или изменение настроек счета в прошлом) по этому субконто зафиксировалось движение с количеством, оно попадет в таблицу итогов.
Проанализируем механизм: бухгалтерский запрос БИ.ВыполнитьЗапрос() видит запись в таблице остатков 1SBKTTL, где количество равно, допустим, 0.001, а сумма — 0.00. В отчете, настроенном на вывод двух знаков после запятой, это количество может округляться до нуля, но сама запись считается системой ненулевой, поэтому строка попадает в выборку.
Что нужно сделать:
БухгалтерскиеИтоги в режиме отладки или через внешнюю обработку, чтобы получить значения методами СНД("К") или СНК("К").Если в вашей конфигурации используется Разделитель учета (чаще всего это справочник «Фирмы»), то нулевое сальдо может быть следствием «пересортицы» между фирмами. Рассмотрим пример: по «Фирме А» у вас числится остаток +100 рублей, а по «Фирме Б» — -100 рублей. В консолидированной ОСВ (без фильтра по фирме) общая сумма будет равна нулю, но система все равно покажет строку, так как записи в базе данных разделены.
Как выявить проблему:
// Пример программной проверки сальдо в разрезе разделителя учета
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
БИ.ИспользоватьРазделительУчета(ВыбФирма); // Попробовать разные варианты, включая пустую
БИ.ВыполнитьЗапрос(НачДата, КонДата, "21",,,, "Проводка", "С");
В 1С 7.7 итоги хранятся в иерархическом виде. Если на счете 21 три субконто (например, 1. Подразделение, 2. Номенклатура, 3. Статьи затрат), то записи по третьему субконто могут «подтягиваться» в отчет, если не полностью закрыто второе или первое.
Проанализируем ситуацию, описанную в теме: по третьему субконто (Статьи затрат) сумма закрыта, но оно все равно висит. Это может означать, что по комбинации «Подразделение + Номенклатура» остался какой-то «хвост» в предыдущем периоде. Даже если этот хвост равен нулю, физическая запись в SQL-таблице 1SBKTTL может не удалиться.
Решение проблемы через «встряску» итогов:
1SBKTTL, что часто приводит к её корректному удалению при достижении истинного нуля.Для баз данных, работающих на MS SQL Server, характерна проблема точности. Суммы в SQL могут храниться с большим количеством знаков после запятой, чем видит платформа 1С. В результате математических операций (особенно при распределении сумм пропорционально количеству) может возникнуть остаток типа 0.00000000001.
Как с этим бороться:
Рассмотрим вариант прямого анализа базы. Если вы имеете доступ к SQL-менеджеру, выполните запрос к таблице итогов:
SELECT * FROM 1SBKTTL
WHERE ACCID = (ID вашего счета)
AND (SUM_ != 0 OR QUANT_ != 0)
Если запрос возвращает строки, которые в интерфейсе 1С выглядят как пустые, значит, вы столкнулись с проблемой точности или поврежденными итогами. В этом случае может помочь выгрузка данных в .dat (через Конфигуратор) и загрузка обратно. При выгрузке 1С нормализует числовые значения, отбрасывая микроскопические «хвосты».
Иногда причиной «зависания» итогов является некорректно введенное сторно. Если в цепочке движений по субконто присутствуют красные записи (отрицательные числа), движок 1С 7.7 при определенных условиях может некорректно сворачивать итоги на границе периодов.
Проанализируем следующие шаги:
Если ни пересчет итогов, ни выгрузка-загрузка не помогли, воспользуемся методом «нулевой операции»:
Такое действие заставляет систему пересчитать итоги именно по этой комбинации аналитики. После этого проверьте ОСВ в следующем периоде. Если строка исчезла — операцию можно пометить на удаление, итоги должны остаться чистыми.
Нулевое сальдо в 1С 7.7 — это почти всегда признак того, что в таблице итогов существует запись, которую система считает значимой. Будь то разница в разделителе учета, микроскопический остаток количества или логическая ошибка SQL-версии платформы. Последовательное применение вышеуказанных методов — от включения всех колонок в ОСВ до «манипуляций с одной копейкой» — позволяет решить проблему в 99% случаев.