Как создать внешний отчет, использующий данные из расширения?

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

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

Причина проблемы кроется в контексте работы. Конфигуратор при работе с внешним файлом "не знает" о подключенных к базе расширениях и видит только метаданные основной конфигурации. В то же время, режим "1С:Предприятие" запускается с полным контекстом, включая все активные расширения.

Рассмотрим несколько способов, как обойти это ограничение.

Решение 1: Разработка в Предприятии и игнорирование ошибки

Это самый распространенный и быстрый способ для платформ до версии 8.3.28. Суть метода в том, чтобы полностью подготовить схему компоновки в режиме Предприятия, а в Конфигураторе просто "подложить" ее в макет, игнорируя предупреждения.

  1. Запустите базу в режиме "1С:Предприятие".
  2. Откройте инструмент для работы с СКД, например, стандартную обработку "Консоль отчетов" или "Универсальный отчет".
  3. Создайте новый запрос, используя все необходимые объекты и реквизиты как из основной конфигурации, так и из расширений. Настройте поля, параметры, группировки и оформление.
  4. Убедитесь, что отчет формируется корректно, и сохраните схему компоновки данных в XML-файл (в консоли отчетов обычно есть кнопка "Сохранить схему в файл").
  5. Теперь перейдите в Конфигуратор. Создайте новый внешний отчет (.erf).
  6. Добавьте в отчет новый макет. В качестве типа макета укажите "Схема компоновки данных".
  7. Откройте макет и загрузите в него ранее сохраненный XML-файл.
  8. Самый важный шаг: в момент загрузки и при последующих открытиях макета Конфигуратор будет выдавать ошибки о том, что поля из расширения не найдены. Эти ошибки следует просто проигнорировать и закрыть.
  9. Сохраните внешний отчет. Несмотря на ошибки в Конфигураторе, в режиме "1С:Предприятие" он будет работать правильно, так как там контекст расширений доступен.

Решение 2: Разработка отчета внутри расширения (рекомендуемый способ)

Этот подход считается более правильным с точки зрения архитектуры. Вместо создания "безконтекстного" внешнего файла вы разрабатываете отчет как полноценный объект метаданных внутри расширения.

  1. В Конфигураторе откройте нужное расширение.
  2. Добавьте в него новый объект метаданных типа "Отчет".
  3. Откройте схему компоновки данных этого отчета. Теперь вы можете полноценно работать с конструктором запросов и конструктором СКД. Конфигуратор в контексте расширения видит как объекты основной конфигурации, так и все объекты, добавленные в самом расширении.
  4. После завершения разработки и отладки, если вам все же нужен отдельный файл, вы можете легко его получить. Щелкните правой кнопкой мыши на объекте отчета в дереве расширения и выберите пункт "Сохранить как внешний отчет/обработку...".

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

Решение 3: Ручная модификация текста запроса ("обман" конструктора)

Это "хакерский", но рабочий способ, если нужно внести небольшие правки в уже существующую схему, не прибегая к ее полной перестройке.

  1. В тексте запроса СКД временно замените поле из расширения на любое поле из основной конфигурации с таким же типом данных. Обязательно используйте псевдоним, совпадающий с именем поля из расширения.
  2. Например, вместо Документ.Реализация.МойРеквизитИзРасширения напишем:

    
    ВЫБРАТЬ
        Документ.РеализацияТоваровУслуг.Комментарий КАК МойРеквизитИзРасширения
    ИЗ
        Документ.РеализацияТоваровУслуг КАК ДокументРеализацияТоваровУслуг
    
  3. Теперь Конфигуратор не будет выдавать ошибку, и вы сможете настраивать отчет на других закладках конструктора СКД (ресурсы, настройки, условное оформление и т.д.).
  4. После того как все настройки выполнены, вернитесь на первую вкладку с текстом запроса и верните настоящее имя поля.
  5. 
    ВЫБРАТЬ
        Документ.РеализацияТоваровУслуг.МойРеквизитИзРасширения КАК МойРеквизитИзРасширения
    ИЗ
        Документ.РеализацияТоваровУслуг КАК ДокументРеализацияТоваровУслуг
    
  6. Важно: после этого не переходите на другие вкладки конструктора, иначе он снова проверит схему и может сбросить настройки.
  7. Сохраните схему, игнорируя появившуюся ошибку.

Решение 4: Обновление платформы (современный подход)

Компания "1С" решила эту проблему на уровне платформы.

Начиная с версии платформы 1С:Предприятие 8.3.28, Конфигуратор при работе с внешними отчетами и обработками научился видеть метаданные подключенных расширений. Это означает, что все вышеописанные "обходные пути" больше не нужны, если вы используете актуальную версию платформы.

Вы можете просто создавать внешний отчет и в его схеме компоновки данных напрямую обращаться к реквизитам и объектам из расширений через конструктор запросов, как если бы они были частью основной конфигурации.

← На главную