Рассмотрим довольно неприятную и не самую очевидную ситуацию, с которой может столкнуться разработчик 1С. Вы берете типовой отчет на Системе Компоновки Данных (СКД), добавляете его в расширение, вносите незначительное изменение (например, добавляете одно новое поле в запрос), а в результате при запуске отчета в режиме "Предприятие" пропадают абсолютно все поля. При этом в настройках все поля видны и отмечены для вывода, запрос в консоли отрабатывает корректно, а если сохранить этот же измененный отчет как внешний файл (.erf) и запустить, то все работает идеально. Давайте разберем по шагам, что может быть причиной такого поведения и как это исправить.
Ситуация указывает на то, что сама схема компоновки данных и запрос составлены верно (ведь внешний отчет работает), а проблема кроется во взаимодействии измененного в расширении отчета с окружением основной конфигурации: сохраненными настройками, другим программным кодом или особенностями платформы.
Первое, что приходит на ум, — это проблемы с кэшем или сохраненными пользовательскими настройками. Стандартная очистка кэша и сброс настроек отчета через пользовательский интерфейс не всегда помогает, так как "мусорные" или поврежденные настройки могут храниться глубже.
ВариантыОтчетов. Откройте его и найдите все элементы, относящиеся к вашему отчету. Попробуйте удалить пользовательские варианты.СохраненныеНастройки (в типовых конфигурациях на БСП). Можно программно найти и удалить все настройки, связанные с вашим отчетом и пользователем. Это гарантированно удалит любые "зависшие" данные.Важно: Проблема может быть не в настройках структуры (видимость полей), а в сохраненных отборах или сортировках, которые из-за изменения в расширении стали некорректными и приводят к пустому результату.
Очень часто в типовых конфигурациях отчеты — это не просто схема СКД. Их поведение может динамически изменяться кодом, расположенным в модуле объекта отчета или его модуле менеджера. Этот код может модифицировать схему, настройки компоновщика или даже текст запроса перед формированием.
Проанализируем этот момент:
ПриКомпоновкеРезультата. Это самое популярное место для программных манипуляций с СКД.ДокументРезультат, а также параметры КомпоновщикНастроек. Обратите внимание, не изменяется ли программно состав доступных полей, не добавляются ли какие-то жесткие отборы, которые отсекают все данные.Возможно, код в этой процедуре обращается к каким-то элементам основной конфигурации, которые ведут себя иначе, когда отчет запущен из расширения. Например, код может проверять имя отчета или его метаданные, которые в расширении могут отличаться.
Современные конфигурации активно используют механизм функциональных опций для включения или отключения частей функционала. Также на данные влияют права доступа на уровне записей (RLS).
Если время на поиск причины ограничено, а результат нужен "здесь и сейчас", можно воспользоваться тем фактом, что сохраненный внешний отчет работает корректно. Этот метод был предложен на форуме и в итоге использован автором вопроса как временное решение.
.erf.Плюсы: Это быстро и решает проблему вывода полей.
Минусы: Это не решает первопричину проблемы. Обновлять такой отчет в будущем будет менее удобно, чем отчет в расширении, так как потребуется каждый раз перезагружать внешний файл. Это скорее обходной путь, а не полноценное решение.
Подводя итог, можно сказать, что "магическое" исчезновение полей в отчете СКД при его переносе в расширение почти всегда имеет логическое объяснение. Начинать диагностику следует с самых простых причин (пользовательские настройки) и постепенно двигаться к более сложным (анализ программного кода, влияние ФО и RLS).