Как правильно получить сальдо по счету на конец периода в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Часто при разработке отчетов или обработок на платформе 1С:Предприятие разработчики сталкиваются с ситуацией, когда данные в запросе к виртуальным таблицам выглядят «странно» или не соответствуют ожиданиям. Разберем типичный пример, когда при попытке получить остатки по 62 счету программа выводит не те значения, которые ожидались.

Анализ проблемы

Рассмотрим ситуацию, когда запрос к виртуальной таблице РегистрБухгалтерии.Хозрасчетный.Остатки не возвращает актуальное сальдо на конец периода. В подобных случаях чаще всего причина кроется в самом параметре &НачПериода, который был передан в качестве границы получения данных. Если в отчет попадают данные «прошлого года» или просто не те цифры, которые вы видите в стандартной оборотно-сальдовой ведомости, первым делом стоит проверить именно логику формирования границ временного интервала.

В примере автора темы ошибка заключалась в том, что вместо даты конца периода была использована дата начала. В системе 1С виртуальные таблицы остатков работают с моментом времени. Передача даты, соответствующей началу периода, заставляет систему рассчитывать остатки на начало, в то время как пользователю требовался результат на конец дня или месяца.

Как реализовать корректный запрос

Для того чтобы получить верные данные, необходимо убедиться, что параметр периода в запросе корректно позиционирован. Разберем правильную структуру запроса:


ВЫБРАТЬ
    ХозрасчетныйОстатки.Счет КАК Счет,
    ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
    СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет В ИЕРАРХИИ (&Счет), , Субконто1 = &Контрагент) КАК ХозрасчетныйОстатки
СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстатки.Счет,
    ХозрасчетныйОстатки.Субконто1

Чтобы исключить ошибки, связанные с «человеческим фактором» и неверным выбором даты, рекомендуем придерживаться следующих правил:

  1. Используйте функцию КОНЕЦПЕРИОДА: Всегда передавайте в параметры виртуальной таблицы результат выполнения этой функции, чтобы захватить остатки на последнюю секунду дня или периода. Например: КОНЕЦПЕРИОДА(&ВашаДата, ДЕНЬ). Это защитит ваш код от ситуаций, когда в отчет не попадают движения, совершенные в течение этого дня.
  2. Проверяйте группировку: Убедитесь, что группировка по полям Счет и Субконто в запросе соответствует структуре вашего отчета. Если данных слишком много или они «свернуты», проверьте, не участвуют ли в группировке лишние измерения.
  3. Анализируйте план счетов: 62 счет является активно-пассивным. Помните, что СуммаОстаток возвращает свернутое сальдо. Если вам необходимо видеть отдельно дебетовые и кредитовые остатки, обращайтесь к полям СуммаОстатокДт и СуммаОстатокКт.

Советы по отладке

Если вы все еще получаете некорректные данные, воспользуйтесь методом отладки через Консоль запросов:

Проанализируем ситуацию пошагово:

Подводя итог, всегда внимательно относитесь к тому, что именно вы передаете в качестве параметров виртуальной таблицы. Использование функций платформы КОНЕЦПЕРИОДА помогает избежать двусмысленности в определении границ, что сэкономит вам часы на отладку кода.

← На главную