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