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