В практике автоматизации на платформе 1С:Предприятие 7.7 часто возникает задача создания технического или забалансового счета, который должен фиксировать только обороты. Бухгалтеры часто просят убрать "лишние" остатки, которые мозолят глаза в оборотно-сальдовой ведомости, особенно если эти счета используются для фиксации разовых событий или в качестве транзитных аналитических разрезов.
Давайте подробно разберем, почему в 7.7 нет прямой галочки "Только обороты" для всего счета, и какие архитектурные особенности платформы нам нужно учитывать, чтобы добиться желаемого результата.
Проанализируем структуру бухгалтерского учета в "семерке". Платформа жестко ориентирована на накопление итогов. Когда мы создаем Счет в Плане счетов, система автоматически резервирует место в таблицах итогов (1SBKTTL для DBF-версии) для хранения остатков в разрезе периодов. На уровне метаданных мы не можем сказать системе: "Не считай остатки по этому счету вообще". Даже если счет забалансовый, он все равно подчиняется правилам накопления итогов по дебету и кредиту.
Это первый и самый простой шаг, который позволяет частично решить проблему на уровне аналитики. Рассмотрим, как это работает:
Важный нюанс: установка этого флага означает, что система перестанет хранить остатки в разрезе этого конкретного субконто. Это экономит место в базе данных и ускоряет расчеты. Однако, если мы сформируем "Оборотно-сальдовую ведомость" по счету в целом (без детализации по субконто), сальдо всё равно будет отображаться. Это происходит потому, что общие итоги по счету считаются независимо от настроек его аналитических разрезов.
Если нам нужно, чтобы сальдо отсутствовало абсолютно всегда, проанализируем ситуацию с точки зрения формирования проводок. Если мы делаем запись только по дебету забалансового счета, сальдо неизбежно растет. Чтобы оно мгновенно обнулялось, можно использовать двойную запись на один и тот же счет.
Разберем пример кода в модуле документа, который фиксирует оборот, но сразу "гасит" остаток:
// Пример фиксации оборота без изменения сальдо
Операция.НоваяПроводка();
Операция.Дебет.Счет = СчетПоКоду("ЗБ.1");
Операция.Кредит.Счет = СчетПоКоду("ЗБ.1"); // Тот же счет в кредите
Операция.Сумма = 1000;
Операция.Содержание = "Фиксация оборота для статистики";
Операция.Записать();
В этом случае по счету ЗБ.1 пройдет оборот и по дебету, и по кредиту на одну и ту же сумму. Итоговое сальдо останется нулевым, а в отчетах типа "Анализ счета" или "Обороты счета" мы увидим зафиксированную сумму. Это наиболее "чистый" способ с точки зрения логики хранения данных в 1С 7.7.
Иногда бухгалтер не хочет видеть компенсационные записи в карточке счета, а хочет видеть только "приход" (дебет). В такой ситуации выясним причину: скорее всего, остатки просто мешают в конце месяца. Рассмотрим вариант с созданием регламентной обработки, которая будет списывать сальдо на указанную дату.
Пример алгоритма для такой обработки:
Процедура ЗакрытьОбороты()
БИ = СоздатьОбъект("БухгалтерскиеИтоги");
СчетЗБ = СчетПоКоду("ЗБ.1");
БИ.Рассчитать(ДатаКонца);
Остаток = БИ.СКД(СчетЗБ); // Получаем дебетовый остаток
Если Остаток <> 0 Тогда
Операция.НоваяПроводка();
Операция.Кредит.Счет = СчетЗБ;
Операция.Сумма = Остаток;
Операция.Содержание = "Техническое закрытие забалансового счета";
Операция.Записать();
КонецЕсли;
КонецПроцедуры
Такой подход позволяет бухгалтеру видеть накопленное сальдо в течение месяца, но к моменту формирования отчетности счет будет "чистым".
Проанализируем критически важный технический аспект. В 1С 7.7 для хранения сумм в таблицах итогов используется числовой формат с фиксированной длиной. Если вы создадите чисто "накопительный" счет (только дебет) и никогда не будете его обнулять, через несколько лет активной работы вы столкнетесь с ошибкой "Numeric overflow" (переполнение). Система просто не сможет записать очередную сумму в таблицу 1SBKTTL.
Именно поэтому использование Решения 2 (одновременный дебет и кредит) или Решения 3 (периодическое списание) является не просто прихотью программиста, а технической необходимостью для обеспечения стабильной работы базы данных в долгосрочной перспективе.
Многих интересует, как эта задача решается в более современных версиях. Выясним это: в 1С 8.3 для таких целей вместо бухгалтерского счета рекомендуется использовать Регистр накопления с видом "Обороты". В отличие от регистров остатков или планов счетов, оборотные регистры физически не хранят итоговые значения на дату, а только агрегируют данные за период. Это идеальный инструмент для "чисто оборотных" задач. Однако в бухгалтерской компоненте 8-ки (План счетов) ситуация аналогична 7.7: счет всегда предполагает наличие сальдо, если не включены специальные настройки аналитики.
Подводя итог нашему анализу, зафиксируем основные рекомендации:
Используя эти методы, вы сможете гибко настроить систему под требования заказчика, сохраняя при этом техническую целостность и производительность базы данных 1С 7.7.