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