Разберем распространенную ситуацию, с которой часто сталкиваются разработчики при создании отчетов на базе Системы компоновки данных (СКД) в современных конфигурациях, таких как Управление торговлей 11, ERP Управление предприятием или Комплексная автоматизация. Представим ситуацию: вы создали простой отчет, в конструкторе запроса выбрали все необходимые поля, включая Контрагент, настроили группировки, но при запуске в режиме «1С:Предприятие» нужное поле просто исчезает из структуры отчета. При этом другие поля, например Организация или Номенклатура, отображаются корректно.
Давайте вместе проанализируем, почему платформа ведет себя подобным образом и как это исправить. Мы пройдем путь от проверки текста запроса до настройки функциональных опций системы.
Первым делом рассмотрим пример запроса, который может использоваться в таком отчете. Важно убедиться, что поле не просто выбрано, но и доступно для системы компоновки. Рассмотрим типичный запрос к табличной части документа:
ВЫБРАТЬ
ЗаказКлиентаТовары.Ссылка КАК Ссылка,
ЗаказКлиентаТовары.ДатаОтгрузки КАК ДатаОтгрузки,
ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
ЗаказКлиентаТовары.Количество КАК Количество,
ЗаказКлиентаТовары.Цена КАК Цена,
ЗаказКлиентаТовары.Сумма КАК Сумма,
ЗаказКлиентаТовары.Ссылка.Контрагент КАК Контрагент
{ВЫБРАТЬ
Ссылка.*,
ДатаОтгрузки,
Номенклатура.*,
Количество,
Цена,
Сумма,
Контрагент.*}
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
ЗаказКлиентаТовары.Ссылка.Проведен = ИСТИНА
И ЗаказКлиентаТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
И ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
{ГДЕ
ЗаказКлиентаТовары.Ссылка.*,
ЗаказКлиентаТовары.ДатаОтгрузки,
ЗаказКлиентаТовары.Номенклатура.*,
ЗаказКлиентаТовары.Количество,
ЗаказКлиентаТовары.Цена,
ЗаказКлиентаТовары.Сумма,
ЗаказКлиентаТовары.Ссылка.Контрагент.*}
В данном запросе мы видим использование фигурных скобок {}. Это расширение языка запросов для СКД. Поля внутри этих скобок становятся доступными для выбора пользователем в настройках отчета. Казалось бы, если Контрагент указан и в основном списке ВЫБРАТЬ, и в блоке расширения, он обязан появиться. Однако в 1С:Предприятии 8 существует механизм, который может «перекрыть» эти настройки на уровне ядра платформы.
Выясним основную причину: в современных конфигурациях (УТ 11, ERP 2) доступность многих реквизитов жестко завязана на так называемые Функциональные опции. Если определенная опция выключена, то связанные с ней реквизиты объектов метаданных становятся невидимыми для пользователя во всех интерфейсах, включая настройки СКД.
В случае с полем Контрагент ключевую роль играет функциональная опция «Независимо вести партнеров и контрагентов». Проанализируем архитектурную логику 1С:
Если в настройках программы в разделе CRM и маркетинг отключена опция независимого ведения партнеров и контрагентов, система переходит в упрощенный режим «один партнер — один контрагент». В этом режиме основным реквизитом в документах становится Партнер (или Клиент), а реквизит Контрагент платформа скрывает, так как считает его избыточным. Поэтому СКД при формировании списка доступных полей просто игнорирует этот реквизит, даже если он прописан в запросе в Конфигураторе.
Рассмотрим порядок действий для восстановления видимости поля Контрагент в вашем отчете.
Шаг 1. Проверка функциональной опции.
Перейдите в режим «1С:Предприятие» под правами администратора. Откройте раздел НСИ и администрирование -> Настройка НСИ и разделов -> CRM и маркетинг. Найдите флаг «Независимо вести партнеров и контрагентов». Если он выключен — установите его. Именно это действие зачастую является «магическим решением», после которого поле появляется в структуре СКД.
Шаг 2. Сброс настроек отчета.
Даже после включения опции поле может не появиться сразу. Это происходит из-за кэширования настроек компоновки. Выполните следующие действия в форме отчета:
Это заставит систему перечитать схему компоновки из метаданных, учитывая текущее состояние функциональных опций. Важно помнить: пока вы разрабатываете отчет, старайтесь не сохранять его варианты в пользовательском режиме, иначе старая структура «застрянет» в базе данных и не будет обновляться при изменениях в Конфигураторе.
Шаг 3. Переименование варианта отчета.
Если сброс настроек не помог, попробуйте в Конфигураторе на закладке «Варианты отчета» изменить имя варианта (например, с Основной на Основной_Новый). Это гарантированно создаст «чистую» запись в системных таблицах настроек при следующем запуске отчета.
Проанализируем ситуацию, когда в версии 11.4.5 отчет работал, а в 11.4.7 перестал. Разработчики фирмы «1С» постоянно оптимизируют механизмы. В более новых релизах связь между функциональными опциями и метаданными становится более строгой. Если раньше платформа могла «прощать» обращение к скрытому реквизиту через точку (Ссылка.Контрагент), то в новых версиях проверка прав и опций в СКД выполняется более тщательно на этапе инициализации схемы.
Посмотрим на пример того, как рекомендуется проектировать универсальные отчеты, чтобы они не зависели от этой настройки:
Вместо жесткой привязки к полю Контрагент, попробуйте добавить в запрос поле Партнер. В логике УТ 11 это поле является первичным. Если вам нужны именно юридические данные, используйте связь с партнером. Это обеспечит стабильную работу отчета при любых настройках ведения учета клиентов.
Подводя итог нашему разбору, можно выделить основные правила работы с «исчезающими» полями в СКД:
Партнеров и Контрагентов.Проанализировав данную проблему, мы видим, что решение лежит не в области программного кода, а в плоскости административной настройки системы. Включение возможности независимого ведения партнеров и контрагентов делает реквизит Контрагент активным в метаданных, что автоматически открывает к нему доступ для системы компоновки данных.