Почему не открывается отчет в веб-клиенте и как правильно перевести его на СКД

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

При переходе с обычного приложения 1С на управляемое (тонкий и веб-клиент) разработчики часто сталкиваются с ситуацией, когда отчеты, прекрасно работавшие годами, внезапно перестают открываться или выдают пустые формы. В этой статье мы разберем, почему «Универсальный отчет» старого образца не пригоден для работы в браузере, и детально изучим процесс миграции запроса на Систему компоновки данных (СКД).

Выясняем причину: почему «Построитель отчета» не работает в веб-клиенте?

Рассмотрим техническую подоплеку проблемы. В старых конфигурациях (на обычных формах) большинство отчетов строилось с использованием объекта ПостроительОтчета. Этот объект отвечал за генерацию запроса, наложение отборов и формирование макета. Однако в архитектуре управляемого приложения (8.2 и 8.3) ПостроительОтчета является «жильцом» исключительно толстого клиента.

Веб-клиент работает через браузер, который взаимодействует с сервером 1С. Объект ПостроительОтчета не имеет программного интерфейса для работы на веб-сервере и не может быть визуализирован в управляемой форме. Именно поэтому при попытке открыть такой отчет в веб-клиенте система либо ничего не выводит, либо сообщает о невозможности инициализации объекта.

Решение здесь только одно — перевод отчета на СКД. Система компоновки данных полностью поддерживается всеми типами клиентов и является современным стандартом платформы «1С:Предприятие».

Анализируем ошибку «Поле не найдено ВариантИсполнения»

Проанализируем ситуацию, когда разработчик уже пытается перенести запрос в СКД, но сталкивается с ошибками. В Сообщении №7 представлен сложный запрос с использованием ОБЪЕДИНИТЬ ВСЕ и временных таблиц. Ошибка «поле не найдено ВариантИсполнения» в таких конструкциях — классическая ловушка.

Давайте разберем по шагам, где может скрываться проблема в представленном коде:

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

Исправляем запрос для работы в СКД

Рассмотрим, как должен выглядеть фрагмент корректного запроса для СКД. Мы должны убедиться, что поле ВариантИсполнения проброшено через все ветки объединения. Посмотрим на пример упрощенной структуры:


ВЫБРАТЬ
    ОстаткиТМЦ.Номенклатура КАК Номенклатура,
    ОстаткиТМЦ.ВариантИсполнения КАК ВариантИсполнения,
    ОстаткиТМЦ.КолОстаток КАК Количество
ИЗ
    РегистрНакопления.ОстаткиТМЦ.Остатки(&Период, { (Номенклатура).*, (ВариантИсполнения).* }) КАК ОстаткиТМЦ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Резервы.Номенклатура,
    Резервы.ВариантИсполнения,
    Резервы.КолОстаток
ИЗ
    РегистрНакопления.Резервы.Остатки(&Период, { (Номенклатура).*, (ВариантИсполнения).* }) КАК Резервы

Важный нюанс: если в каком-то из регистров нет поля ВариантИсполнения, но структура отчета требует его наличия, необходимо в соответствующем блоке объединения подставить пустое значение (например, ЗНАЧЕНИЕ(Справочник.ВариантыИсполнения.ПустаяСсылка)), чтобы сохранить «колонку» для итоговой таблицы.

Инструкция по созданию отчета на СКД для веб-клиента

Разобравшись с запросом, перейдем к технике создания самого отчета в конфигураторе. Разберем этот процесс по шагам:

  1. Создайте новый объект метаданных Отчет.
  2. Нажмите кнопку «Открыть схему компоновки данных».
  3. В схеме добавьте новый «Набор данных - запрос».
  4. Вставьте ваш исправленный запрос из Сообщения №7. Убедитесь, что все параметры (такие как &ДатаКон) автоматически появились на закладке «Параметры».
  5. На закладке «Настройки» воспользуйтесь конструктором настроек. Выберите тип отчета (список или таблица), укажите выбранные поля (Номенклатура, СвободныйОстаток и т.д.) и добавьте необходимые группировки.

Почему это будет работать? В отличие от Построителя, СКД при запуске в веб-клиенте генерирует декларативное описание отчета. Платформа 1С сама интерпретирует эти настройки и отрисовывает форму в браузере, используя стандартные механизмы управляемого интерфейса. Вам не нужно писать ни одной строчки кода в модуле формы для вывода данных.

Использование универсальной формы отчета

Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), мы рекомендуем не создавать свои формы, а подключать отчет к общей форме отчета. Для этого:

Это позволит пользователям в веб-клиенте не только видеть отчет, но и самостоятельно менять настройки, сохранять свои варианты и рассылать их по почте, что было крайне сложно реализовать на старом «Построителе».

Проанализировав ситуацию, мы видим, что проблема «неоткрывающегося отчета» — это сигнал к обновлению архитектурного подхода. Переход на СистемаКомпоновкиДанных не только решит проблему с веб-клиентом, но и значительно расширит возможности анализа данных для ваших пользователей.

← На главную