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