Как правильно изменять и дополнять типовые отчеты на СКД в конфигурациях 1С:ЗУП и 1С:ЗКГУ?

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

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

Почему типовые отчеты «затирают» изменения в запросах?

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

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

  1. Применения прав доступа (RLS).
  2. Учета настроек видимости данных пользователем.
  3. Поддержки работы расширений конфигурации.

Ключевым звеном в этом процессе является общий модуль ЗарплатаКадрыОбщиеНаборыДанных, в частности метод ЗаполнитьОбщиеИсточникиДанныхОтчета. Именно этот код динамически перестраивает запрос, поэтому если вы просто добавили поле в текст запроса в СКД, система его игнорирует или перезаписывает структуру на лету.

Как правильно внедрять новые данные в отчет?

Чтобы не снимать конфигурацию с поддержки и не ломать типовой механизм, рекомендуем рассмотреть следующие подходы:

1. Использование внешних наборов данных

Это самый безопасный и рекомендуемый способ. Вы не меняете логику основного запроса, а «пристыковываете» свои данные программно.

Порядок действий:

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

Этот метод позволяет сохранить целостность типовых обновлений, так как ваши данные подключаются только на этапе исполнения.

2. Отладка механизма формирования запроса

Если вам необходимо глубоко понять, почему ваши поля пропадают, используйте возможности отладки:

3. Создание временных таблиц и соединений

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


// В обработчике ПриКомпоновкеРезультата
// Добавьте логику заполнения временной таблицы
// И соедините её с типовым набором данных

Создание своей временной таблицы и ее последующее соединение с результатом типового запроса — это наиболее устойчивый способ, который минимизирует вероятность конфликтов при обновлении конфигурации.

Важные советы по разработке

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

Также помните о возможности использования расширений конфигурации. С помощью аннотаций &Перед или &После вы можете «вклиниться» в типовой процесс сбора данных, добавив свои условия или поля без внесения изменений в основной код программы. Это обеспечит вам беспроблемную установку обновлений в будущем.

И наконец, если задача слишком сложна для интеграции в типовой отчет, рассмотрите вариант создания отдельной внешней обработки с использованием СхемаКомпоновкиДанных. Это позволит использовать возможности типового отчета, не затрагивая при этом объекты метаданных конфигурации.

← На главную