Как изменить длину строки в реквизите табличной части или таблицы значений во внешней обработке 1С 8.3

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

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

Анализируем причину ограничения длины строки

Если при заполнении таблицы программным кодом или через запрос вы замечаете, что строка всегда обрезается до определенного количества символов (например, 10, 25 или 50), это явный признак того, что для данного реквизита установлены жесткие квалификаторы строки. В системе 1С:Предприятие 8.3 длина строки — это не просто визуальный параметр, а свойство типа данных реквизита.

Рассмотрим ситуацию: вы получаете данные из запроса, где поле имеет неограниченную длину, но записываете их в таблицу, где в настройках указано Длина: 25. В момент присваивания значения платформа принудительно отсекает "лишние" символы, чтобы значение соответствовало типу данных приемника.

Вариант 1: Изменение длины реквизита Табличной части объекта

Чаще всего внешние обработки проектируются с использованием Табличных частей, которые создаются непосредственно в дереве метаданных самого объекта обработки (на вкладке "Основные"). Это позволяет сохранять данные в файле обработки между вызовами процедур сервера.

Проанализируем шаги по исправлению длины в этом случае:

  1. Откроем внешнюю обработку в конфигураторе.
  2. Перейдем на вкладку Основные (дерево метаданных обработки).
  3. Развернем ветку Табличные части и найдем нужную таблицу (например, Изделия).
  4. Внутри таблицы найдем реквизит (колонку), данные в котором обрезаются (например, Наименование или Комментарий).
  5. Вызовем Свойства этого реквизита (через правую кнопку мыши или клавишу Alt+Enter).
  6. Найдем категорию Тип и нажмем на кнопку выбора (три точки).
  7. В открывшемся окне "Описание типов" убедимся, что выбран тип Строка, и изменим значение в поле Длина на нужное (например, 100 или 500).
  8. Если длина текста заранее неизвестна, установим флажок Неограниченная длина (или установим значение 0).

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

Вариант 2: Изменение длины Реквизита формы

Иногда таблица создается не в объекте, а непосредственно в форме обработки на вкладке "Реквизиты". Такие таблицы существуют только во время работы формы и не сохраняются в объекте обработки.

Выясним, как изменить тип данных в этом случае:

  1. Перейдем в редактор формы внешней обработки.
  2. В правой верхней части редактора (вкладка Реквизиты) найдем нашу таблицу (тип ДанныеФормыКоллекция).
  3. Развернем её и найдем нужную колонку.
  4. В окне свойств этой колонки найдем поле Тип.
  5. Нажмем на кнопку выбора и в квалификаторах строки увеличим Длину.

Помните, что изменение свойств Элемента формы (в левой части редактора формы) не поможет. Свойства элемента (колонки таблицы на форме) отвечают только за визуальное отображение: ширину колонки, шрифт и возможность многострочного ввода. Реальное ограничение данных всегда кроется в Реквизите. Для быстрой проверки и настройки отображения открытых форм в режиме предприятия подойдёт инструмент для просмотра и редактирования свойств открытых форм.

Использование оператора ВЫРАЗИТЬ в запросах

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
    |   ВЫРАЗИТЬ(ЗаказКлиентаТовары.Ссылка.Комментарий КАК СТРОКА(150)) КАК Наименование
    |ИЗ
    |   Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
    |ГДЕ
    |   ЗаказКлиентаТовары.Ссылка.Номер = &Номер";

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

Программное заполнение таблицы

Рассмотрим правильный подход к заполнению таблицы на форме, когда мы обходим выборку запроса. Обратите внимание, что переменная СтрокаТаблицы должна быть получена из объекта, тип колонок которого мы уже настроили ранее.


РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    // Добавляем новую строку в табличную часть обработки
    НоваяСтрока = Объект.Изделия.Добавить();
    НоваяСтрока.Номенклатура = Выборка.Номенклатура;
    
    // Если здесь колонка "Наименование" имеет длину 100 в метаданных, 
    // данные из Выборка.Наименование (длиной 150) будут обрезаны до 100.
    НоваяСтрока.Наименование = Выборка.Наименование; 
КонецЦикла;

Настройка визуального отображения (Многострочный режим)

После того как мы увеличили длину реквизита в метаданных (до 100, 200 символов или до неограниченной), может возникнуть другая проблема: текст помещается в ячейку, но видна только его часть, так как ячейка слишком узкая. Чтобы пользователь мог комфортно читать длинные строки, выполним следующие настройки Элемента формы:

  1. В редакторе формы выберем колонку в дереве элементов (слева).
  2. В свойствах найдем параметр Ширина и установим разумное значение (например, 30 или 40).
  3. Установим флажок Растягивать по горизонтали в значение Да.
  4. Найдем свойство Многострочный режим и установим его в Да. Это позволит тексту переноситься на новую строку внутри одной ячейки, если он не помещается по ширине.
  5. Также можно настроить свойство Высота, чтобы сразу видеть несколько строк текста.

Резюме

Подведем итог нашего анализа. Для решения проблемы с обрезкой строки во внешней обработке необходимо выполнить три действия:

Если вы создаете таблицу значений программно "на лету" (через Новый ТаблицаЗначений), не забывайте указывать описание типов при добавлении колонок, используя конструктор Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)). Это гарантирует, что ваши данные сохранят свою целостность при передаче между процедурами.

← На главную