При формировании печатных форм в 1С часто возникает задача визуальной корректировки макета под требования бизнеса. Одной из таких задач является увеличение высоты строк с данными, например, чтобы в бумажном варианте было удобнее вписывать результаты пересчета товаров вручную. Рассмотрим подробно, как увеличить высоту строк в табличном документе с исходных 0,5 см до 1,0 см, используя различные подходы: от простого редактирования макета до программного управления свойствами области.
Самый простой и предпочтительный способ, если структура документа статична — внесение изменений в сам макет (объект типа Макет в конфигураторе). Этот метод не требует написания сложного кода и работает быстрее всего. Также полезно изучить классический корректный пример внешней печатной формы для понимания стандартов разработки. Разберем шаги по его реализации:
ПФ_MXL_ЗаданиеПересчетТоваров документа ПересчетТоваров).Строка или СтрокаТаблицы. В эти же строки часто внедряется простая генерация QR и штрихкодов для складского учета.Важное замечание по единицам измерения: В системе 1С высота строк измеряется в пунктах. Чтобы получить высоту в 1 сантиметр, нужно использовать коэффициент пересчета (1 пункт примерно равен 0,35 мм). Таким образом, для высоты 1 см нам необходимо установить значение примерно 28.35 пунктов. Если вы хотите увеличить высоту ровно в два раза относительно стандарта (который часто составляет 15 пунктов), установите значение 30.
Если печатная форма формируется динамически и вам нужно гарантировать определенную высоту строк независимо от настроек макета, следует использовать программный метод в цикле обхода данных. В исходном коде, предоставленном в теме, мы видим цикл Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл. Именно здесь выполняется вывод строк в итоговый документ.
Проанализируем ситуацию: когда мы вызываем метод Вывести(), область из макета копируется в результирующий ТабличныйДокумент. После этого мы можем обратиться к последней выведенной строке через свойство ВысотаТаблицы. Разберем пример кода для вставки в цикл:
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
// Сначала выводим область строки в табличный документ
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыНачало);
// Получаем номер строки, которая только что была выведена
НомерТекущейСтроки = ТабличныйДокумент.ВысотаТаблицы;
// Обращаемся к области по номеру строки и устанавливаем параметры
ТекущаяСтрокаОбласть = ТабличныйДокумент.Область(НомерТекущейСтроки, , НомерТекущейСтроки, );
ТекущаяСтрокаОбласть.АвтоВысотаСтроки = Ложь; // Отключаем автоматический расчет
ТекущаяСтрокаОбласть.ВысотаСтроки = 28.35; // Устанавливаем высоту 1 см (в пунктах)
// Продолжаем присоединение колонок, если это необходимо
// ...
КонецЦикла;
Этот способ надежен, так как он принудительно устанавливает высоту для каждой строки документа. Обратите внимание, что свойство АвтоВысотаСтроки обязательно нужно установить в значение Ложь, иначе платформа может пересчитать высоту в зависимости от объема текста в ячейке, проигнорировав ваше значение ВысотаСтроки.
Если вы не хотите вмешиваться в логику цикла вывода областей, можно применить изменения ко всему документу сразу перед тем, как функция вернет его для отображения или печати. Рассмотрим ситуацию, когда нам известно, что табличная часть начинается, например, с 10-й строки.
Выясним причину, почему поиск по имени области (например, СтрокаТаблицыЯчейкаКодУчет) часто не работает в итоговом документе. Это происходит потому, что после метода Вывести() в ТабличныйДокумент попадают только данные и форматирование, а именованные области макета «растворяются», превращаясь в обычные адреса ячеек типа "R1C1".
Посмотрим на пример кода, который нужно разместить в самом конце процедуры печати перед оператором Возврат ТабличныйДокумент;:
// Определим диапазон строк, которые нужно увеличить.
// Допустим, шапка закончилась на 9 строке, а подвал нам менять не нужно.
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
НачальнаяСтрокаДанных = 10; // Это значение можно вычислить динамически в процессе вывода шапки
Если ВсегоСтрок >= НачальнаяСтрокаДанных Тогда
// Получаем область всех строк с данными (все колонки)
ОбластьДанных = ТабличныйДокумент.Область(НачальнаяСтрокаДанных, , ВсегоСтрок, );
ОбластьДанных.АвтоВысотаСтроки = Ложь;
ОбластьДанных.ВысотаСтроки = 30; // Устанавливаем высоту чуть больше 1 см
КонецЕсли;
При программном изменении высоты строк следует учитывать несколько критических факторов, которые могут повлиять на итоговый результат:
ТабличныйДокумент.АвтоМасштаб = Истина;. Если вы значительно увеличите высоту строк, таблица может перестать помещаться на один лист по вертикали. Алгоритм автоScale в 1С попытается «сжать» весь документ, чтобы он влез в границы печати, что может привести к визуальному уменьшению шрифтов и высоты строк обратно. В таких случаях стоит проверить параметры страницы и, возможно, использовать ландшафтную ориентацию.ВертикальноеПоложение в значение Центр. Это делается так: ОбластьДанных.ВертикальноеПоложение = ВертикальноеПоложение.Центр;.РазмещениеТекста.Переносить, то при фиксированной высоте строки текст, который не поместился, будет просто обрезаться. Проверьте, достаточно ли установленной высоты для вывода наименований номенклатуры.Проанализируем также использование метода Область(). Как было отмечено в обсуждении на форуме, для обращения к конкретным строкам в формате "R1C1" используется синтаксис Область("R5C1:R10C5"). Однако программное обращение через индексы Область(5, 1, 10, 5) считается более профессиональным и менее подверженным ошибкам при динамическом формировании документа.
Разберем еще один тонкий момент из сообщений пользователей: попытка установить высоту через ТекущаяОбласть. В современных версиях платформы 8.3 рекомендуется работать напрямую с объектом ОбластьЯчеекТабличногоДокумента, который возвращается методом Область(). Использование устаревших свойств может привести к тому, что изменения просто не вступят в силу, как это случилось у автора вопроса в сообщении №10. Всегда проверяйте, что вы установили АвтоВысотаСтроки = Ложь перед назначением конкретного значения высоты.