Как программно изменить ориентацию текста в ячейке табличного документа 1С?

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

При формировании печатных форм, отчетов и аналитических таблиц в 1С часто возникает задача визуального выделения отдельных данных. Одним из эффективных способов компактного размещения информации или акцентирования внимания является вертикальное отображение текста. В платформе 1С:Предприятие за угол поворота надписи в ячейке отвечает свойство ОриентацияТекста объекта ОбластьЯчеекТабличногоДокумента. Однако при динамическом изменении этого свойства разработчики нередко сталкиваются с ситуацией, когда код выполняется без ошибок, но текст в результирующем документе не поворачивается либо поворачивается во всех последующих строках подряд.

Разберем подробно причины такого поведения, рассмотрим правильные способы программного поворота текста как в макете до вывода, так и в уже сформированном табличном документе, а также изучим альтернативные методы решения задачи.

Анализ проблемы: почему поворот текста не применяется или «залипает»

Проанализируем типичную ситуацию. Предположим, стоит задача: если номенклатура или категория имеет определенный статус (например, «Списано»), текст в соответствующей колонке должен быть повернут вертикально на 90 градусов. Разработчик получает область ячейки и присваивает свойству ОриентацияТекста значение 90, но визуально в отчете ничего не меняется.

Выясним основные причины, из-за которых возникают сложности при программной настройке ориентации:

  1. Обращение не к той области: если попытаться изменить ориентацию у неверно полученной области (например, обращаясь к табличному документу до вывода секции или передавая некорректные координаты строк/колонок), свойство меняется у ячеек, которые не выводятся на экран.
  2. Изменение макета без сброса значений (эффект «памяти макета»): объект области макета, полученный через метод ПолучитьОбласть(), хранит свое состояние в памяти. Если для первой подошедшей под условие строки задать ОриентацияТекста = 90 и не сбросить это значение в ветке Иначе, то все последующие строки макета также будут выводиться с повернутым текстом.
  3. Геометрия ячейки и автовысота: если у строки табличного документа отключена автовысота (АвтоВысотаСтроки = Ложь) и задана фиксированная небольшая высота, вертикальный текст высотой в несколько слов может визуально обрезаться или скрываться границами ячейки.

Способ 1. Изменение ориентации текста в области макета перед выводом

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

Критически важный момент: если мы модифицируем ячейку макета по условию, мы обязательно должны предусмотреть ветку Иначе, возвращающую угол поворота к исходному состоянию (обычно 0 градусов).

Посмотрим на пример правильной реализации:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Пока Выборка.Следующий() Цикл
    
    // Заполняем параметры области
    ОбластьСтрока.Параметры.Заполнить(Выборка);
    
    // Получаем конкретную ячейку внутри выводимой области строки
    // Обратиться можно по имени ячейки или по локальным координатам области
    ЯчейкаКатегории = ОбластьСтрока.Область("Категория");
    
    Если Выборка.КатегорияЭксплуатации = Перечисления.КатегорииЭксплуатации.Списано Тогда
        ЯчейкаКатегории.ОриентацияТекста = 90;
    Иначе
        // Обязательно сбрасываем ориентацию для строк, не попадающих под условие
        ЯчейкаКатегории.ОриентацияТекста = 0;
    КонецЕсли;
    
    // Выводим подготовленную область в результирующий табличный документ
    ТабДок.Вывести(ОбластьСтрока);
    
КонецЦикла;

Разберем, как это работает: метод Область() у объекта секции макета возвращает вложенную область ячеек. Мы задаем угол поворота в градусах (допустимы стандартные значения 0, 90, 180, 270) и выводим область в результирующий ТабличныйДокумент.

Способ 2. Изменение ориентации в уже выведенном табличном документе

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

При выводе каждой строки мы можем определить ее номер в результирующем документе с помощью свойства ВысотаТаблицы и применить форматирование только к нужной ячейке.

Посмотрим на пример реализации данного подхода:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

НомерКолонкиКатегории = 4; // Номер колонки с категорией в итоговом документе

Пока Выборка.Следующий() Цикл
    
    ОбластьСтрока.Параметры.Заполнить(Выборка);
    ТабДок.Вывести(ОбластьСтрока);
    
    // Получаем координаты последней добавленной строки
    ТекущаяСтрока = ТабДок.ВысотаТаблицы;
    
    Если Выборка.КатегорияЭксплуатации = Перечисления.КатегорииЭксплуатации.Списано Тогда
        // Обращаемся напрямую к ячейке результирующего документа
        ЯчейкаРезультата = ТабДок.Область(ТекущаяСтрока, НомерКолонкиКатегории);
        ЯчейкаРезультата.ОриентацияТекста = 90;
    КонецЕсли;
    
КонецЦикла;

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

Способ 3. Использование условного оформления в СКД (без программного кода)

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

Разберем настройку по шагам:

  1. Откроем схему компоновки данных и перейдем на вкладку Настройки.
  2. Перейдем на закладку Условное оформление и добавим новый элемент оформления.
  3. В колонке Оформление найдем параметр Ориентация текста, установим флаг и укажем значение 90.
  4. В колонке Условие добавим правило: КатегорияЭксплуатации Равно "Списано".
  5. В колонке Оформляемые поля выберем поле, в котором выводится категория номенклатуры.

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

Дополнительные рекомендации по форматированию повернутого текста

При вертикальном расположении текста важно учитывать сопутствующие свойства ячейки для сохранения читаемости печатной формы:

Использование описанных подходов позволяет гибко и безошибочно управлять внешним видом табличных документов в 1С, избегая распространенных проблем с «залипанием» стилей оформления.

← На главную