При работе с типовыми конфигурациями, такими как 1С:Управление торговлей 11, ERP или Комплексная автоматизация, пользователи часто сталкиваются с необходимостью вывести в отчет дополнительную текстовую информацию, например, Комментарий из карточки партнера или договора. Однако стандартная Система компоновки данных (СКД) накладывает жесткие ограничения на работу с полями неограниченной длины. В этой статье мы подробно разберем, почему возникает ошибка "В списке выборки не могут участвовать поля неограниченной длины" и как обойти это ограничение несколькими способами, не прибегая к расширениям конфигурации.
Прежде чем переходить к решению, давайте проанализируем ситуацию. В базе данных SQL поля типа "Строка неограниченной длины" (к которым относится Комментарий) хранятся в специальных структурах. Основное ограничение SQL-сервера заключается в том, что по таким полям нельзя выполнять группировку. Когда мы пытаемся добавить поле в отчет, 1С транслирует наши настройки в SQL-запрос. Если поле попадает в секцию группировки или если основной запрос отчета использует инструкцию ВЫБРАТЬ РАЗЛИЧНЫЕ (DISTINCT), система выдает ошибку.
Рассмотрим основные причины, по которым поле может не отображаться или вызывать ошибку:
Чаще всего ошибка возникает из-за того, что пользователь пытается добавить Комментарий в состав полей самой группировки. Давайте разберем правильный алгоритм действий через изменение варианта отчета.
Рассмотрим последовательность действий:
Поставщик).Поставщик.Комментарий.Если система наотрез отказывается принимать поле неограниченной длины, мы можем "обмануть" её, принудительно ограничив длину комментария в настройках. Для этого используются функции ПОДСТРОКА или ВЫРАЗИТЬ.
Проанализируем ситуацию: нам нужно превратить "неограниченную строку" в "строку длиной 100-200 символов". Рассмотрим, как это сделать правильно в интерфейсе пользователя:
Комментарий (сокр.).Вариант с функцией ПОДСТРОКА (наиболее стабильный):
Подстрока([Поставщик.Комментарий], 1, 150)
Вариант с функцией ВЫРАЗИТЬ (если первый вариант выдает ошибку контекста):
Выразить([Поставщик.Комментарий], "Строка(150)")
Обратите внимание: Квадратные скобки вокруг имени поля [Поставщик.Комментарий] обязательны, так как это синтаксис пользовательских полей СКД. Если вы пишете выражение итогов, оставьте его пустым, чтобы система не пыталась агрегировать текст.
В типовых конфигурациях 1С (УТ 11, ERP) часто реализован механизм вывода дополнительных реквизитов. Вместо того чтобы мучаться с пользовательскими полями, попробуем использовать штатную возможность.
Поставщик.Комментарий.Если ваша задача — хранить какую-то заметку о поставщике и выводить её в отчет, а стандартное поле Комментарий создает технические трудности, мы рекомендуем рассмотреть использование механизма Дополнительных сведений.
Разберем преимущества этого подхода:
Рассмотрим технический нюанс, упомянутый в обсуждении. Ошибка УстановитьПредставлениеВыражений при использовании функции ВЫРАЗИТЬ в пользовательском поле часто связана с тем, что программный код отчета пытается проанализировать метаданные созданного вами поля. Если выражение слишком сложное для парсера платформы внутри пользовательского сеанса, возникает конфликт.
Чтобы избежать этого, старайтесь:
ВЫРАЗИТЬ(ПОДСТРОКА(...))).Если ни один из способов через интерфейс "Предприятие" не помог, а лезть в конфигурацию и создавать расширение крайне не хочется из-за будущих обновлений, есть "золотая середина".
Выполним следующие шаги:
ВЫРАЗИТЬ(Текст КАК СТРОКА(200)). В конфигураторе это работает гораздо стабильнее.Этот метод позволяет внести необходимые изменения в логику формирования запроса, при этом не затрагивая конфигурацию и не создавая проблем при обновлении 1С.
Мы выяснили, что основной причиной проблем с полем Комментарий является его тип (неограниченная длина). Чтобы успешно вывести его в отчет, необходимо либо правильно позиционировать его в Выбранных полях группировки (избегая попадания в саму группировку), либо использовать пользовательское поле с функцией ПОДСТРОКА. В самых сложных случаях эффективным решением станет создание внешнего отчета на базе стандартной схемы или использование механизма дополнительных сведений.