Как реализовать макет-чертеж с вертикальными полями и рамками в 1С

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

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

В этой статье мы подробно разберем несколько подходов к созданию чертежных макетов, проанализируем технические нюансы работы с объектом ТабличныйДокумент и выясним, как обеспечить корректное разбиение на страницы.

Способ 1: Использование ориентации текста в ячейках

Самый простой с точки зрения структуры макета способ — это использование стандартных ячеек, но с измененными свойствами текста. Рассмотрим этот вариант подробнее. Мы можем создать в макете узкие колонки слева, которые будут имитировать боковую рамку чертежа.

Для того чтобы текст в этих колонках шел вертикально, необходимо в свойствах ячейки или программно установить параметр ОриентацияТекста. Значение 90 будет соответствовать повороту текста снизу вверх, а 270 — сверху вниз. Это позволяет использовать обычные механизмы Вывести() и Присоединить(), сохраняя при этом текстовую информацию в вертикальном виде.

Преимущество этого метода: простота реализации и сохранение «табличной» структуры, что облегчает выравнивание границ.

Способ 2: Программное формирование страниц и расчет высоты строк

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

  1. Создаем основной цикл по данным, которые необходимо вывести.
  2. Для каждой итерации текста, если он слишком длинный, программно разбиваем его на строки.
  3. Перед выводом очередной строки данных обязательно проверяем, поместится ли она вместе с нижним штампом на текущий лист.

Для реализации этого механизма в 1С используется метод ПроверитьВывод(). Разберем пример кода, который демонстрирует этот подход:


// Массив секций для проверки (строка данных + штамп)
МассивСекций = Новый Массив;
МассивСекций.Добавить(ОбластьСтрокаДанных);
МассивСекций.Добавить(ОбластьНижнийШтамп);

Если Не ТабДок.ПроверитьВывод(МассивСекций) Тогда
    // Если не влезает, выводим штамп на текущей странице
    ТабДок.Вывести(ОбластьНижнийШтамп);
    // Переходим на новый лист
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    // Выводим шапку на новой странице, если нужно
    ТабДок.Вывести(ОбластьШапка);
КонецЕсли;

ТабДок.Вывести(ОбластьСтрокаДанных);

Проанализируем ситуацию: этот метод гарантирует, что рамка чертежа (штамп) всегда будет находиться внизу страницы, а данные не «налезут» на подписи.

Способ 3: Метод Присоединить() для формирования вертикальных зон

Иногда удобнее формировать документ из нескольких независимых частей. Например, у нас есть основная область с данными и отдельная узкая вертикальная полоса для левого поля. Мы можем использовать метод Присоединить(), чтобы собрать документ «по горизонтали».

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


ТабДокумент = Новый ТабличныйДокумент;
// Подготавливаем две части
ТабДокЛево = ПолучитьЛевуюЧастьЧертежа(); 
ТабДокПраво = ПолучитьПравуюЧастьСДанными();

// Собираем документ
ТабДокумент.Вывести(ТабДокЛево);
ТабДокумент.Присоединить(ТабДокПраво);

Важный нюанс: при использовании метода Присоединить() высота строк в обеих частях будет синхронизироваться по максимальному значению. Если ячейка справа растянется из-за большого объема текста, ячейка слева также увеличит свою высоту. Это необходимо учитывать при проектировании дизайна рамки.

Использование графических объектов (Рисунков)

Проанализируем еще один мощный инструмент — РисунокТабличногоДокумента. Если сетка ячеек не позволяет добиться нужной точности линий (например, требуются тонкие линии внутри одной ячейки или сложные пересечения), мы можем использовать графические объекты.

В 1С объект Рисунок может иметь тип ТипРисункаТабличногоДокумента.Текст или ТипРисункаТабличногоДокумента.Линия. Это позволяет нарисовать рамку «поверх» документа. Основные преимущества работы с рисунками:

Почему фоновые картинки (подложки) не подходят для многостраничных чертежей?

Многие разработчики пробуют установить готовую картинку рамки в качестве фона табличного документа. Выясним причину, почему это плохое решение. Свойство ФоноваяКартинка в 1С работает как единая подложка для всего полотна документа. При печати она не дублируется автоматически на каждой странице так, как нам нужно для чертежа.

Если документ занимает более одной страницы, фон либо растянется на все листы, либо будет отображаться некорректно на стыках. Для чертежей по ГОСТ единственно верным путем является программный вывод рамки (либо через ячейки, либо через рисунки) на каждой странице отдельно с использованием контроля разделителей.

Дополнительные рекомендации по автоматизации

Для достижения наилучшего результата мы рекомендуем:

  1. Использовать ПовторятьПриПечатиСтроки: если верхняя часть рамки статична, назначьте ее в свойствах табличного документа. Это сэкономит время на программный вывод заголовков на каждой странице.
  2. Контролировать масштаб: для чертежей критически важно установить АвтоМасштаб = Истина, чтобы документ корректно вписывался в область печати принтера независимо от небольших отклонений в размерах шрифтов.
  3. Кэширование областей: чтобы ускорить формирование многостраничного документа, получите все необходимые области макета один раз перед циклом вывода, используя метод ПолучитьОбласть().

Рассмотренные подходы позволяют создавать в 1С документы любой сложности, полностью соответствующие требованиям конструкторской документации. Выбор конкретного метода зависит от сложности структуры вашего чертежа и динамичности выводимых данных.

← На главную