При формировании печатных форм, отчетов и аналитических таблиц в 1С часто возникает задача визуального выделения отдельных данных. Одним из эффективных способов компактного размещения информации или акцентирования внимания является вертикальное отображение текста. В платформе 1С:Предприятие за угол поворота надписи в ячейке отвечает свойство ОриентацияТекста объекта ОбластьЯчеекТабличногоДокумента. Однако при динамическом изменении этого свойства разработчики нередко сталкиваются с ситуацией, когда код выполняется без ошибок, но текст в результирующем документе не поворачивается либо поворачивается во всех последующих строках подряд.
Разберем подробно причины такого поведения, рассмотрим правильные способы программного поворота текста как в макете до вывода, так и в уже сформированном табличном документе, а также изучим альтернативные методы решения задачи.
Проанализируем типичную ситуацию. Предположим, стоит задача: если номенклатура или категория имеет определенный статус (например, «Списано»), текст в соответствующей колонке должен быть повернут вертикально на 90 градусов. Разработчик получает область ячейки и присваивает свойству ОриентацияТекста значение 90, но визуально в отчете ничего не меняется.
Выясним основные причины, из-за которых возникают сложности при программной настройке ориентации:
ПолучитьОбласть(), хранит свое состояние в памяти. Если для первой подошедшей под условие строки задать ОриентацияТекста = 90 и не сбросить это значение в ветке Иначе, то все последующие строки макета также будут выводиться с повернутым текстом.АвтоВысотаСтроки = Ложь) и задана фиксированная небольшая высота, вертикальный текст высотой в несколько слов может визуально обрезаться или скрываться границами ячейки.Рассмотрим классический способ формирования табличного документа через обход выборки данных. При таком подходе мы получаем область строки из макета, заполняем параметры, проверяем условие и при необходимости меняем ориентацию нужной ячейки.
Критически важный момент: если мы модифицируем ячейку макета по условию, мы обязательно должны предусмотреть ветку Иначе, возвращающую угол поворота к исходному состоянию (обычно 0 градусов).
Посмотрим на пример правильной реализации:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Пока Выборка.Следующий() Цикл
// Заполняем параметры области
ОбластьСтрока.Параметры.Заполнить(Выборка);
// Получаем конкретную ячейку внутри выводимой области строки
// Обратиться можно по имени ячейки или по локальным координатам области
ЯчейкаКатегории = ОбластьСтрока.Область("Категория");
Если Выборка.КатегорияЭксплуатации = Перечисления.КатегорииЭксплуатации.Списано Тогда
ЯчейкаКатегории.ОриентацияТекста = 90;
Иначе
// Обязательно сбрасываем ориентацию для строк, не попадающих под условие
ЯчейкаКатегории.ОриентацияТекста = 0;
КонецЕсли;
// Выводим подготовленную область в результирующий табличный документ
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Разберем, как это работает: метод Область() у объекта секции макета возвращает вложенную область ячеек. Мы задаем угол поворота в градусах (допустимы стандартные значения 0, 90, 180, 270) и выводим область в результирующий ТабличныйДокумент.
Если структура макета сложная или не хочется постоянно следить за сбросом оформления в ветке Иначе, более надежным подходом является модификация ячеек непосредственно в сформированном результирующем документе.
При выводе каждой строки мы можем определить ее номер в результирующем документе с помощью свойства ВысотаТаблицы и применить форматирование только к нужной ячейке.
Посмотрим на пример реализации данного подхода:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
НомерКолонкиКатегории = 4; // Номер колонки с категорией в итоговом документе
Пока Выборка.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрока);
// Получаем координаты последней добавленной строки
ТекущаяСтрока = ТабДок.ВысотаТаблицы;
Если Выборка.КатегорияЭксплуатации = Перечисления.КатегорииЭксплуатации.Списано Тогда
// Обращаемся напрямую к ячейке результирующего документа
ЯчейкаРезультата = ТабДок.Область(ТекущаяСтрока, НомерКолонкиКатегории);
ЯчейкаРезультата.ОриентацияТекста = 90;
КонецЕсли;
КонецЦикла;
Преимущество этого метода заключается в полной изолированности строк: макет остается в исходном состоянии, а оформление накладывается точечно только на те строки, которые действительно соответствуют критерию.
Если отчет строится с использованием Системы компоновки данных (СКД), писать программный код для изменения ориентации текста не требуется. Платформа 1С позволяет настроить поворот текста декларативно.
Разберем настройку по шагам:
Ориентация текста, установим флаг и укажем значение 90.КатегорияЭксплуатации Равно "Списано".При формировании отчета СКД автоматически повернет текст в ячейках, удовлетворяющих условию, и корректно отобразит стандартную ориентацию для всех остальных строк без необходимости ручного управления выводом.
При вертикальном расположении текста важно учитывать сопутствующие свойства ячейки для сохранения читаемости печатной формы:
АвтоВысотаСтроки = Истина, либо зададим высоту строки с запасом через ВысотаСтроки.РазмещениеТекста = Переносить для повернутого на 90 градусов текста перенос строк будет рассчитываться с учетом новой геометрии ячейки.ГоризонтальноеПоложение (например, Центр) и ВертикальноеПоложение (Низ или Центр), чтобы надпись выглядела аккуратно.Использование описанных подходов позволяет гибко и безошибочно управлять внешним видом табличных документов в 1С, избегая распространенных проблем с «залипанием» стилей оформления.