Почему в отчете на СКД, измененном в расширении, пропадают все поля?

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

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

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

Шаг 1. Глубокая проверка и очистка настроек

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

  1. Проверка под другим пользователем. Самый быстрый и простой способ диагностики. Создайте нового тестового пользователя без каких-либо сохраненных настроек и попробуйте сформировать отчет под ним. Если у нового пользователя отчет работает корректно, значит, проблема на 100% в настройках исходного пользователя.
  2. Полное удаление вариантов и настроек отчета. Если проверка под новым пользователем помогла, нужно полностью очистить настройки для проблемного пользователя.
    • Найдите в конфигурации справочник ВариантыОтчетов. Откройте его и найдите все элементы, относящиеся к вашему отчету. Попробуйте удалить пользовательские варианты.
    • Более радикальный метод — очистка записей из системных хранилищ. Настройки хранятся в регистре сведений СохраненныеНастройки (в типовых конфигурациях на БСП). Можно программно найти и удалить все настройки, связанные с вашим отчетом и пользователем. Это гарантированно удалит любые "зависшие" данные.

Важно: Проблема может быть не в настройках структуры (видимость полей), а в сохраненных отборах или сортировках, которые из-за изменения в расширении стали некорректными и приводят к пустому результату.

Шаг 2. Анализ программного изменения отчета

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

Проанализируем этот момент:

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

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

Шаг 3. Проверка влияния функциональных опций и прав доступа (RLS)

Современные конфигурации активно используют механизм функциональных опций для включения или отключения частей функционала. Также на данные влияют права доступа на уровне записей (RLS).

Шаг 4. Использование внешнего отчета как временное решение

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

  1. Сохраните измененный в расширении отчет в файл .erf.
  2. В режиме "Предприятие" подключите его через стандартный механизм дополнительных отчетов и обработок (раздел "Администрирование" -> "Печатные формы, отчеты и обработки" -> "Дополнительные отчеты и обработки").

Плюсы: Это быстро и решает проблему вывода полей.

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

Подводя итог, можно сказать, что "магическое" исчезновение полей в отчете СКД при его переносе в расширение почти всегда имеет логическое объяснение. Начинать диагностику следует с самых простых причин (пользовательские настройки) и постепенно двигаться к более сложным (анализ программного кода, влияние ФО и RLS).

← На главную