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