Почему поле 'Контрагент' не отображается в отчете СКД по 'Соглашениям с клиентами' в 1С:ERP?

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

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

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


ВЫБРАТЬ
    СоглашенияСКлиентами.Ссылка КАК Ссылка,
    СоглашенияСКлиентами.Контрагент КАК Контрагент
ИЗ
    Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами

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

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

Основная причина: Влияние функциональных опций на СКД

Ключевым моментом, который часто упускается из виду, является взаимодействие СКД с функциональными опциями (ФО). Функциональные опции — это мощный механизм платформы 1С:Предприятие, который позволяет разработчикам управлять доступностью определенной функциональности в прикладном решении. Это касается не только элементов пользовательского интерфейса (форм, команд), но и видимости данных в отчетах СКД.

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

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

Пошаговое решение проблемы

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

  1. Определяем, какие функциональные опции связаны с реквизитом:

    Для этого нам потребуется открыть конфигурацию в режиме Конфигуратора. Мы разберем процесс:

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

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

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

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

Другие распространенные причины невидимости полей в отчетах СКД

Хотя функциональные опции являются частой причиной, существуют и другие факторы, по которым поля могут быть не видны в отчете СКД. Мы рассмотрим наиболее распространенные из них:

  1. Ограничения прав доступа:

    Если у пользователя нет прав на чтение или просмотр определенного поля или объекта, к которому относится поле, СКД автоматически исключит его из отчета. Это особенно актуально для составных типов данных, когда у пользователя может не быть прав на все возможные типы регистратора. В таких случаях мы можем явно указать тип в запросе, используя конструкцию ВЫРАЗИТЬ. Например, если Контрагент может быть разных типов ссылок, а нам нужен только Справочник.Контрагенты:

    
    ВЫБРАТЬ
        СоглашенияСКлиентами.Ссылка КАК Ссылка,
        ВЫРАЗИТЬ(СоглашенияСКлиентами.Контрагент КАК Справочник.Контрагенты) КАК Контрагент
    ИЗ
        Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
    

    Такой подход помогает СКД лучше понять, какой именно тип данных нам нужен, и применить к нему соответствующие права.

  2. Некорректные настройки макета отчета:

    Даже если поле присутствует в схеме компоновки данных и доступно, оно не будет отображаться, если мы не добавим его в макет отчета. Убедимся, что в выбранных полях структуры отчета поле действительно включено.

  3. Ошибки в выражениях вычисляемых полей:

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

  4. Неправильно задан "ПутьКДанным" для вычисляемых полей:

    Для вычисляемых полей в схеме компоновки данных поле ПутьКДанным должно точно соответствовать имени поля, которое мы используем в выражении и в макете отчета.

  5. Проблемы с ресурсами отчета:

    Если поле используется для вывода итогов (например, суммы, количества), мы должны добавить его в раздел Ресурсы схемы компоновки данных и обеспечить корректное выражение для вычисления итога.

  6. Настройки видимости и ограничения доступности:

    В настройках самого СКД, для каждого поля мы можем установить специфические условия видимости или ограничения доступности. Мы проверяем вкладку Настройки и Параметры данных, чтобы убедиться, что поле не скрыто.

  7. Отсутствие данных:

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

  8. Оптимизация запросов СКД:

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

Рекомендации по отладке отчетов СКД

Для эффективной отладки отчетов СКД мы рекомендуем использовать следующие подходы:

  1. Использование консоли СКД:

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

  2. Проверка логов и сообщений об ошибках:

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

  3. Проверка вычисляемых полей в конфигураторе:

    На вкладке Вычисляемые поля схемы компоновки данных в конфигураторе мы тщательно проверяем корректность выражений и настроек каждого вычисляемого поля. Особое внимание уделяем синтаксису и ссылкам на другие поля.

  4. Сохранение отчета как внешнего:

    Иногда помогает сохранить отчет как внешний файл (.erf или .mxl) и запустить его с другим именем. Это может исключить влияние кэша или специфических настроек существующего отчета, которые могли быть сохранены для пользователя.

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

← На главную