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