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