Как правильно выводить этикетки в несколько колонок в печатной форме 1С?

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

Разберем типичную задачу: необходимо сформировать печатную форму (например, лист А4), заполненную этикетками в несколько рядов по горизонтали и вертикали. Часто при использовании метода Присоединить() возникает неприятный эффект: вместо того чтобы располагаться в строке друг за другом, элементы начинают выстраиваться вертикально, ломая структуру всей формы. Давайте выясним, почему это происходит и как настроить макет правильно.

Разбор причин ошибки: почему элементы уходят вниз?

Основная причина заключается в том, как 1С интерпретирует область макета. В системе табличный документ при выводе и присоединении учитывает границы ячеек. Если мы получаем область макета, которая охватывает всю строку (ширину страницы), метод Присоединить() «думает», что мы хотим добавить новую строку, а не дополнить текущую. Чтобы добавить этикетку справа от предыдущей, нам нужно использовать область, ограниченную не только по строкам, но и по колонкам.

Шаг 1: Правильное именование областей в макете

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

  1. Откройте макет в конфигураторе.
  2. Выделите диапазон ячеек, соответствующий одной этикетке (например, колонки 1-2, строки 1-5).
  3. В поле имени области задайте Ярлык|ЯрлыкВерт. Использование символа «|» (вертикальная черта) позволяет системе понять, что это именно вертикальная область (фрагмент строки).

Шаг 2: Изменение кода получения области

Теперь скорректируем наш код в функции формирования печатной формы. Вместо получения всей области Ярлык, мы должны обратиться конкретно к вертикальному фрагменту.

Рассмотрим, как это выглядит в коде:


// Вместо:
Область = МакетОбработки.ПолучитьОбласть("Ярлык");

// Используем:
Область = МакетОбработки.ПолучитьОбласть("Ярлык|ЯрлыкВерт");

После этого изменения метод Присоединить(Область) начнет корректно размещать объекты в соседних колонках текущей строки, так как теперь он работает с фрагментом, который физически может быть присоединен справа.

Шаг 3: Оптимизация логики вывода

При выводе этикеток важно следить за счетчиками. Рассмотрим структуру цикла, которая позволяет корректно управлять заполнением листа:


// Инициализация счетчиков
ЭтикетокВСтроке = 0;
СтрокНаСтранице = 1;

// Цикл по данным
Для Каждого Строка Из ВыборкаДетальныеЗаписи Цикл
    // Логика получения области
    Область = МакетОбработки.ПолучитьОбласть("Ярлык|ЯрлыкВерт");
    
    // Заполнение параметров...
    
    Если ЭтикетокВСтроке < КоличествоПоГоризонтали Тогда
        ТабличныйДокумент.Присоединить(Область);
        ЭтикетокВСтроке = ЭтикетокВСтроке + 1;
    Иначе
        // Переход на новую строку
        ТабличныйДокумент.Вывести(Область);
        ЭтикетокВСтроке = 1;
        СтрокНаСтранице = СтрокНаСтранице + 1;
    КонецЕсли;
КонецЦикла;

Полезные рекомендации для профессиональной верстки

1. Отказ от лишних разрывов. Часто разработчики пытаются имитировать отступы с помощью пустых областей и Присоединить(). Это усложняет код. Лучше заранее настроить ширину колонок в самом макете и использовать отступы внутри ячеек. Это сделает верстку «резиновой» и предсказуемой.

2. Использование параметров ширины. Если вы хотите, чтобы макет выглядел эстетично, задайте точную ширину колонок в свойствах табличного документа. Это избавит вас от необходимости добавлять «пустые» области для разделителей.

3. Управление страницами. Не забывайте, что при достижении лимита по вертикали необходимо вызывать ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(). Это позволит системе корректно разбивать отчет на листы А4 при печати. При этом обязательно сбрасывайте счетчик строк на новой странице.

4. Отладка. Если форма всё еще выводится некорректно, воспользуйтесь отладчиком. Проверьте, какую область возвращает ПолучитьОбласть(). Убедитесь, что ширина присоединенной области не превышает ширину листа, иначе 1С принудительно перенесет её на новую строку.

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

← На главную