Часто при разработке печатных форм и отчетов в 1С:Предприятие программисты сталкиваются со странным поведением табличного документа. Выводимые секции макета могут визуально искажаться: текст параметров (например, длинные фразы вроде «Цены не установлены») обрезается до одного слова, а объединенные ячейки начинают «съезжать» и схлопываться. При этом в конфигураторе макет может выглядеть абсолютно ровно. Проанализируем эту ситуацию и разберем по шагам все возможные причины и методы их устранения.
Рассмотрим стандартный фрагмент кода, который используется для вывода строк в табличный документ. Мы получаем область, заполняем параметры и выводим ее в цикле:
Выборка = РезультатЗапроса.Выбрать();
ОбластьСтрокаЦен = Макет.ПолучитьОбласть("СтрокаЦен");
Пока Выборка.Следующий() Цикл
ОбластьСтрокаЦен.Параметры.ВидЦен = Выборка.ВидЦен;
ОбластьСтрокаЦен.Параметры.Цена = Выборка.Цена;
ОбластьСтрокаЦен.Параметры.ВалютаЦены = Выборка.ВалютаЦены;
Результат.Вывести(ОбластьСтрокаЦен);
КонецЦикла;
Именно в таком классическом коде может возникнуть эффект, когда одна строка выводится нормально, а в другой многострочный текст или длинная строка обрезается, либо ломается сетка ячеек. Выясним причину.
Иногда фраза обрезается странным образом: пропадает не конец строки, а ее начало (например, вместо «Цены не установлены» мы видим только слово «установлены»). Разберем, почему это происходит.
Это классический симптом конфликта настроек выравнивания. Если в ячейке установлено выравнивание по правому краю, а свойство РазмещениеТекста установлено в значение Авто или Обрезать, платформа прижимает текст к правой границе. То, что не поместилось, просто уходит за левую границу ячейки и визуально исчезает.
Как исправить:
РазмещениеТекста и установим его в значение Переносить.Автовысота.Рассмотрим подробнее проблему, когда ячейки визуально схлопываются. В платформе 1С ширина колонок итогового табличного документа диктуется первой выведенной секцией (чаще всего это шапка документа).
Если в вашей секции СтрокаЦен границы ячеек не совпадают с сеткой колонок, которая уже сформировалась выше при выводе шапки, то в режиме Предприятия табличный документ попытается «подогнать» их друг под друга. Из-за этого объединенные ячейки могут сжиматься, хотя в конфигураторе все отрисовано ровно.
Решение: Внимательно проверьте макет. Обязательно объединяйте ячейки так, чтобы их границы строго совпадали с границами основных колонок таблицы. Также можно использовать разные форматы строк (свойство, позволяющее разорвать жесткую привязку колонок одной секции к колонкам другой).
Многие разработчики отмечают: «какое-то свойство поправил, ничего не заметил, стало выводиться нормально, а потом опять слезло». Это типичное проявление кэширования в 1С.
Если вы редактируете внешнюю печатную форму или вносите изменения в макет расширения, платформа может использовать закэшированную старую версию табличного документа. Вы меняете свойства ячеек, но в пользовательском режиме видите старый результат. Создается иллюзия плавающего бага. Чтобы избавиться от этого, всегда очищайте кэш клиента 1С при тестировании измененных макетов.
Посмотрим на пример с другой стороны: иногда макет настроен идеально, но текст все равно обрезан. Проанализируем источник данных. Если параметр заполняется из запроса, где использовалась функция приведения типов, проблема может быть там.
Если в запросе есть конструкция вида ВЫРАЗИТЬ(Поле КАК Строка(11)), то 1С обрежет текст ровно до 11 символов еще на этапе формирования результата запроса. В этом случае в свойство ОбластьСтрокаЦен.Параметры приходит уже обрезанная строка. Обязательно проверяйте отладчиком значение, которое передается в макет перед вызовом метода Вывести().
В современных конфигурациях 1С (особенно построенных на базе новых версий БСП) добавлены удобные механизмы авторазмещения текста. Если вам критически важно, чтобы текст оставался в одну строку и не переносился, используйте механизмы автомасштабирования. Система сама уменьшит размер шрифта так, чтобы строка целиком уместилась в выделенную ей ячейку без обрезки.
Подводя итог: при странном поведении секций макета всегда проверяйте три вещи: совпадение сетки объединенных ячеек с шапкой таблицы, настройки размещения текста (переносить по словам) и наличие закэшированных данных на клиенте. Соблюдение этих правил гарантирует стабильный и красивый вывод печатных форм.