При разработке отчетов и настройке интерфейсов в среде «1С:Предприятие» специалисты часто сталкиваются со специфическим поведением полей типа «строка неограниченной длины». К таким полям традиционно относится реквизит «Комментарий», присутствующий практически в каждом документе. Из-за архитектурных ограничений СУБД этот реквизит может не отображаться в отчетах, а после обновления конфигурации — пропадать из журналов и списков документов. В этой статье мы подробно разберем, как решить обе проблемы.
---
Попытка вывести стандартное поле комментария напрямую в отчет часто заканчивается тем, что колонка остается пустой либо система выдает ошибку. Происходит это потому, что СУБД (будь то MS SQL, PostgreSQL или IBM DB2) не умеют выполнять сортировку и группировку по полям неограниченной длины (хранящимся как BLOB/LOB). Разберем основные способы обхода этого ограничения.
Самый надежный способ вывести комментарий в отчете, построенном на базе запроса (включая Построитель отчетов и СКД) — это принудительное приведение типа неограниченной строки к строке фиксированной длины. Для этого применяется функция ВЫРАЗИТЬ.
Рассмотрим пример запроса, в котором нам необходимо сгруппировать данные по комментарию:
ВЫБРАТЬ
ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(300)) КАК Комментарий,
КОЛИЧЕСТВО(Док.Ссылка) КАК КоличествоДокументов
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Док
СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(300))
Важный нюанс: обратите внимание, что конструкция ВЫРАЗИТЬ должна быть прописана как в поле выборки (секция ВЫБРАТЬ), так и в секции группировки (СГРУППИРОВАТЬ ПО). Если опустить приведение типа в группировке, платформа выдаст ошибку совместимости типов СУБД.
Аналогично функции приведения типов, мы можем использовать функцию получения подстроки. Это позволяет «обрезать» комментарий до разумной длины на уровне базы данных, превращая его в строку фиксированной длины:
ВЫБРАТЬ
ПОДСТРОКА(Док.Комментарий, 1, 500) КАК КомментарийКратко
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
Этот метод полностью аналогичен первому, но более наглядно задает начальный символ и длину возвращаемой строки.
Если ваш отчет разрабатывается на Системе компоновки данных (СКД), физического ограничения СУБД можно избежать без обрезки строки. СУБД ругается на неограниченную длину только тогда, когда поле участвует в группировках.
Если в структуре настроек отчета СКД вывести поле Комментарий в группировку «Детальные записи» (структурная ветка без указания полей группировки), система выведет текст оригинальной длины без искажений, так как группировать строки по этому полю ей не придется.
Если вам все же необходимо выводить отчет с группировкой (например, по контрагентам или документам), но в колонках нужно отображать полный комментарий, настройте его роль в СКД:
Комментарий и откройте колонку «Роль».Ссылка или Документ).После этого СКД поймет, что группировать данные по самому комментарию не требуется, и автоматически выведет его как дополнительное свойство основного объекта.
Если вам запрещено менять конфигурацию и схему компоновки данных в конфигураторе, пользователь может самостоятельно решить проблему в режиме «1С:Предприятие» при наличии прав на изменение варианта отчета:
Подстрока(Регистратор.Комментарий, 1, 300).Влияние на производительность: помните, что выделение избыточной длины (например, СТРОКА(1000)) заставляет СУБД резервировать большой объем оперативной памяти под каждую обрабатываемую запись во временных таблицах. Для оптимизации быстродействия рекомендуется ограничивать длину выводимого комментария в пределах 150–300 символов.
---
Часто после обновления типовых конфигураций (например, при переходе с «1С:Розница 2.1» на версию «Розница 2.2» и выше) пользователи замечают, что из списков документов исчезает колонка «Комментарий». Попытка вернуть ее через меню «Еще — Изменить форму» не приносит успеха: кнопка «Добавить поля» не активна, либо в структуре полей отсутствует элемент Ссылка, через который можно было бы «вытащить» комментарий.
В современных конфигурациях 1С, разработанных на базе Библиотеки стандартных подсистем (БСП), разработчики в целях оптимизации переводят динамические списки документов со стандартного считывания таблиц метаданных на произвольные запросы.
Если в запросе динамического списка на уровне конфигуратора поле Ссылка не выбрано явно или для него не включено свойство «Использовать всегда», платформа оптимизирует запрос и вообще не передает ссылку на клиентский компьютер. Как результат — пользователь теряет возможность интерактивно добавлять любые связанные реквизиты (включая комментарий) через настройки формы.
Иногда колонка пропадает из-за сбоя кэша настроек конкретного пользователя при обновлении метаданных. Прежде чем переходить к конфигурированию, выполните простое действие:
Если разработчики типового решения оставили поле комментария в запросе списка, но просто скрыли его по умолчанию, этот шаг вернет отображение колонки на экран.
Если сброс настроек не помог, значит, поле действительно исключено из запроса динамического списка. Чтобы решить проблему, не снимая конфигурацию с поддержки и не препятствуя последующим автоматическим обновлениям, создадим расширение:
ФормаСписка документа ОтчетОРозничныхПродажах).Список) найдите свойство «Настройка списка» и нажмите «Открыть».Ссылка установите флаг «Использовать всегда».
ВЫБРАТЬ
ДокументТаблица.Ссылка КАК Ссылка,
ДокументТаблица.Дата КАК Дата,
ДокументТаблица.Номер КАК Номер,
ДокументТаблица.Комментарий КАК Комментарий
ИЗ
Документ.ОтчетОРозничныхПродажах КАК ДокументТаблица
После применения расширения в окне «Изменить форму» у вас гарантированно появится возможность добавить поле Комментарий напрямую в список колонок вашего журнала документов. Для изучения других практических способов расширения состава колонок можно ознакомиться со статьей с описанием методов доработки динамических списков и добавления полей.