Как вывести поле «Комментарий» в отчете и списке документов 1С

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

При разработке отчетов и настройке интерфейсов в среде «1С:Предприятие» специалисты часто сталкиваются со специфическим поведением полей типа «строка неограниченной длины». К таким полям традиционно относится реквизит «Комментарий», присутствующий практически в каждом документе. Из-за архитектурных ограничений СУБД этот реквизит может не отображаться в отчетах, а после обновления конфигурации — пропадать из журналов и списков документов. В этой статье мы подробно разберем, как решить обе проблемы.

---

Часть 1. Вывод комментария неограниченной длины в отчетах

Попытка вывести стандартное поле комментария напрямую в отчет часто заканчивается тем, что колонка остается пустой либо система выдает ошибку. Происходит это потому, что СУБД (будь то MS SQL, PostgreSQL или IBM DB2) не умеют выполнять сортировку и группировку по полям неограниченной длины (хранящимся как BLOB/LOB). Разберем основные способы обхода этого ограничения.

Способ 1. Использование функции ВЫРАЗИТЬ в запросе

Самый надежный способ вывести комментарий в отчете, построенном на базе запроса (включая Построитель отчетов и СКД) — это принудительное приведение типа неограниченной строки к строке фиксированной длины. Для этого применяется функция ВЫРАЗИТЬ.

Рассмотрим пример запроса, в котором нам необходимо сгруппировать данные по комментарию:


ВЫБРАТЬ
    ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(300)) КАК Комментарий,
    КОЛИЧЕСТВО(Док.Ссылка) КАК КоличествоДокументов
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК Док
СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(300))

Важный нюанс: обратите внимание, что конструкция ВЫРАЗИТЬ должна быть прописана как в поле выборки (секция ВЫБРАТЬ), так и в секции группировки (СГРУППИРОВАТЬ ПО). Если опустить приведение типа в группировке, платформа выдаст ошибку совместимости типов СУБД.

Способ 2. Использование функции ПОДСТРОКА

Аналогично функции приведения типов, мы можем использовать функцию получения подстроки. Это позволяет «обрезать» комментарий до разумной длины на уровне базы данных, превращая его в строку фиксированной длины:


ВЫБРАТЬ
    ПОДСТРОКА(Док.Комментарий, 1, 500) КАК КомментарийКратко
ИЗ
    Документ.РеализацияТоваровУслуг КАК Док

Этот метод полностью аналогичен первому, но более наглядно задает начальный символ и длину возвращаемой строки.

Способ 3. Вывод через детальные записи в СКД (без группировки)

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

Если в структуре настроек отчета СКД вывести поле Комментарий в группировку «Детальные записи» (структурная ветка без указания полей группировки), система выведет текст оригинальной длины без искажений, так как группировать строки по этому полю ей не придется.

Способ 4. Настройка роли поля в СКД

Если вам все же необходимо выводить отчет с группировкой (например, по контрагентам или документам), но в колонках нужно отображать полный комментарий, настройте его роль в СКД:

  1. Перейдите на вкладку «Наборы данных» в схеме компоновки.
  2. Найдите строку с полем Комментарий и откройте колонку «Роль».
  3. В открывшемся окне свяжите это поле с родительским полем (например, укажите, что комментарий является свойством поля Ссылка или Документ).

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

Способ 5. Пользовательские поля в режиме «1С:Предприятие»

Если вам запрещено менять конфигурацию и схему компоновки данных в конфигураторе, пользователь может самостоятельно решить проблему в режиме «1С:Предприятие» при наличии прав на изменение варианта отчета:

  1. Откройте настройки отчета и перейдите во вкладку «Пользовательские поля».
  2. Добавьте новое «Новое поле-выражение».
  3. В поле формулы детальных записей и итогов пропишите выражение: Подстрока(Регистратор.Комментарий, 1, 300).
  4. Добавьте созданное пользовательское поле в список выбранных полей отчета.

Влияние на производительность: помните, что выделение избыточной длины (например, СТРОКА(1000)) заставляет СУБД резервировать большой объем оперативной памяти под каждую обрабатываемую запись во временных таблицах. Для оптимизации быстродействия рекомендуется ограничивать длину выводимого комментария в пределах 150–300 символов.

---

Часть 2. Пропажа комментария и поля «Ссылка» в динамических списках

Часто после обновления типовых конфигураций (например, при переходе с «1С:Розница 2.1» на версию «Розница 2.2» и выше) пользователи замечают, что из списков документов исчезает колонка «Комментарий». Попытка вернуть ее через меню «Еще — Изменить форму» не приносит успеха: кнопка «Добавить поля» не активна, либо в структуре полей отсутствует элемент Ссылка, через который можно было бы «вытащить» комментарий.

Выясняем причину

В современных конфигурациях 1С, разработанных на базе Библиотеки стандартных подсистем (БСП), разработчики в целях оптимизации переводят динамические списки документов со стандартного считывания таблиц метаданных на произвольные запросы.

Если в запросе динамического списка на уровне конфигуратора поле Ссылка не выбрано явно или для него не включено свойство «Использовать всегда», платформа оптимизирует запрос и вообще не передает ссылку на клиентский компьютер. Как результат — пользователь теряет возможность интерактивно добавлять любые связанные реквизиты (включая комментарий) через настройки формы.

Решение 1. Первичный сброс настроек формы (пользовательский метод)

Иногда колонка пропадает из-за сбоя кэша настроек конкретного пользователя при обновлении метаданных. Прежде чем переходить к конфигурированию, выполните простое действие:

  1. В форме списка документов нажмите кнопку «Еще» и выберите пункт «Изменить форму...».
  2. В открывшемся окне настроек нажмите кнопку «Еще» (в верхней панели окна настройки) и выберите «Установить стандартные настройки».
  3. Нажмите «Применить» или «ОК».

Если разработчики типового решения оставили поле комментария в запросе списка, но просто скрыли его по умолчанию, этот шаг вернет отображение колонки на экран.

Решение 2. Использование расширения конфигурации (профессиональный метод)

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

  1. Создайте новое расширение конфигурации (меню «Конфигурация — Расширения конфигурации»).
  2. Добавьте в расширение форму списка нужного вам документа (например, ФормаСписка документа ОтчетОРозничныхПродажах).
  3. В окне свойств динамического списка формы (обычно элемент называется Список) найдите свойство «Настройка списка» и нажмите «Открыть».
  4. В конструкторе запроса динамического списка перейдите на вкладку «Компоновка данных» и для поля Ссылка установите флаг «Использовать всегда».
  5. Альтернативный вариант: добавьте в текст запроса поле комментария напрямую:
    
    ВЫБРАТЬ
        ДокументТаблица.Ссылка КАК Ссылка,
        ДокументТаблица.Дата КАК Дата,
        ДокументТаблица.Номер КАК Номер,
        ДокументТаблица.Комментарий КАК Комментарий
    ИЗ
        Документ.ОтчетОРозничныхПродажах КАК ДокументТаблица
    
  6. Сохраните изменения в расширении и обновите конфигурацию базы данных.

После применения расширения в окне «Изменить форму» у вас гарантированно появится возможность добавить поле Комментарий напрямую в список колонок вашего журнала документов. Для изучения других практических способов расширения состава колонок можно ознакомиться со статьей с описанием методов доработки динамических списков и добавления полей.

← На главную