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