В практике разработчика 1С нередко встречается ситуация, когда элементарный отчет, построенный на Системе компоновки данных (СКД), отказывается выводить данные за определенные периоды. Особенно часто это проявляется после проведения свертки информационной базы. При этом проверка через обычную консоль запросов показывает, что записи в регистре присутствуют, а сам запрос абсолютно корректен. В данной статье мы подробно разберем, почему возникает такая ситуация, и как инструменты разработчика помогают найти «невидимые» фильтры.
Рассмотрим типичную ситуацию: в базе «1С:Бухгалтерия КОРП» имеется нетиповой периодический регистр сведений (например, для учета пробега автомобилей), не подчиненный регистратору. После выполнения свертки базы на начало 2025 года пользователь замечает странное поведение: отчет за декабрь 2024 года пуст. Однако, если расширить период отчета так, чтобы он захватывал 2025 год (например, по 01.01.2025), данные за декабрь внезапно появляются. Самое загадочное — в обычной консоли запросов данные выбираются при любых вариантах дат.
Для понимания причин нам необходимо осознать ключевое различие: консоль запросов выполняет «чистый» текст запроса, в то время как СКД генерирует итоговый макет компоновки, учитывая настройки параметров, функциональные опции, права доступа (RLS) и особенности виртуальных таблиц.
Проанализируем работу СКД с параметрами. Если ваш запрос обращается к виртуальным таблицам (например, СрезПоследних), СКД по умолчанию пытается управлять параметром Период самостоятельно.
Если в схеме компоновки данных период виртуальной таблицы не ограничен жестко (через фигурные скобки {}), платформа может подставить в него значение конца периода из настроек отчета. После свертки базы логика работы виртуальных таблиц может измениться, если данные были перенесены или изменены границы их актуальности. Проверим, как прописаны параметры в тексте запроса СКД. Рассмотрим пример правильного оформления:
ВЫБРАТЬ
РегистрПробег.Автомобиль,
РегистрПробег.Пробег
ИЗ
РегистрСведений.ПробегАвтомобилей.СрезПоследних({&КонецПериода}, ) КАК РегистрПробег
Если параметры не указаны явно, СКД может формировать запрос к физической таблице с некорректными границами, которые не видны в конструкторе, но проявляются при исполнении.
Выясним истинную причину поведения системы. Как отметил автор темы, обычная консоль здесь бессильна. Нам поможет Консоль компоновки ИР (Инструменты разработчика). Этот инструмент позволяет увидеть не тот запрос, который вы написали в конфигураторе, а тот, который реально уходит на уровень СУБД.
Разберем, что именно мы можем там обнаружить:
СтандартныйПериод в СКД раскладывается на НачалоПериода и КонецПериода. Если время конца периода установлено как 00:00:00, записи, сделанные в последнюю секунду дня, могут не попасть в выборку.Проанализируем ситуацию с правами доступа. После свертки часто меняются владельцы объектов или настройки организаций. Обычная консоль запросов часто запускается под полными правами, игнорируя RLS (Row Level Security). СКД же всегда работает в контексте прав текущего пользователя.
Если данные за 2024 год после свертки потеряли связь с текущими активными организациями или подразделениями, механизмы RLS просто «вырежут» эти строки из итогового результата. Попробуйте сформировать отчет под пользователем с полными правами (Администратор) — если данные появятся, проблему нужно искать в настройках доступа.
Посмотрим на техническую сторону платформы 1С. Система компоновки кэширует макеты. Если структура регистра менялась в процессе свертки или менялись типы параметров, старые пользовательские настройки могут содержать некорректные ссылки.
Рекомендуем выполнить следующие действия:
Если отчет на СКД «молчит» там, где запрос в консоли «говорит», — дело всегда в трансформации запроса механизмом компоновки. Основное решение — использование специализированных консолей компоновки, которые показывают итоговый SQL/Query текст. В случае со сверткой чаще всего виновато автоматическое управление периодами виртуальных таблиц или системные отборы, считающие данные до даты свертки неактуальными для текущего интерфейса.
Для предотвращения подобных проблем в будущем, старайтесь явно указывать параметры в виртуальных таблицах и использовать СтандартныйПериод только там, где это действительно оправдано логикой отчета.