Как программно нарисовать жирную линию в макете печатной формы 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке печатных форм в системе 1С:Предприятие 7.7 разработчики часто сталкиваются с необходимостью динамического изменения оформления документа. Одной из типичных задач является отрисовка жирной разделительной линии в зависимости от определенных условий в данных. В отличие от более современных версий платформы, инструменты управления оформлением в «семерке» имеют свои особенности. Рассмотрим подробнее, какими способами можно реализовать эту задачу.

Метод 1: Использование альтернативных секций макета

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

Для реализации этого метода выполним следующие шаги:

  1. Откроем макет печатной формы.
  2. Создадим секцию (например, с именем СтрокаОбычная), где нижняя граница ячеек имеет стандартную толщину.
  3. Создадим вторую секцию (например, СтрокаСЛинией), которая полностью идентична первой, но в параметрах форматирования ячеек для нижней границы установлен тип «Жирная сплошная».
  4. В программном коде пропишем условие для выбора нужной секции.

Проанализируем пример кода для этого метода:


Если НужноВыделитьЖирным = 1 Тогда
    Таб.ВывестиСекцию("СтрокаСЛинией");
Иначе
    Таб.ВывестиСекцию("СтрокаОбычная");
КонецЕсли;

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

Метод 2: Программное управление границами через объект «Область»

Если нам требуется большая гибкость или мы не хотим дублировать секции, воспользуемся возможностями встроенного языка для работы с объектом Область. Этот метод позволяет изменять свойства ячеек уже после того, как они были выведены в итоговую таблицу или даже непосредственно в процессе формирования.

Для управления границами используется метод ГраницаСнизу() (а также аналогичные для других сторон). Рассмотрим синтаксис этого метода:

Таб.Область(нСтрока, нКолонка, кСтрока, кКолонка).ГраницаСнизу(ТипЛинии, Цвет);

Выясним, какие значения может принимать параметр ТипЛинии:

Посмотрим на практический пример. Предположим, мы только что вывели секцию и хотим подчеркнуть последнюю выведенную строку жирной линией по всей ширине отчета (например, с 1-й по 10-ю колонку).


// Выводим стандартную секцию
Таб.ВывестиСекцию("Строка");

// Определяем номер текущей строки в сформированной таблице
НомерСтроки = Таб.ВысотаТаблицы();

// Применяем жирную линию к нижней границе этой строки
// Параметры: Область(строка_нач, кол_нач, строка_кон, кол_кон)
Таб.Область(НомерСтроки, 1, НомерСтроки, 10).ГраницаСнизу(2);

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

Метод 3: Использование именованных областей

Чтобы сделать код более читаемым и не зависеть от жестко прописанных номеров колонок, мы можем использовать именованные области прямо в макете. Выделите нужные колонки в макете и через меню «Таблица — Имена — Назначить» дайте им имя, например, ВсеКолонки.

В этом случае работа с границами будет выглядеть более элегантно:


Таб.ВывестиСекцию("Данные");
нСтр = Таб.ВысотаТаблицы();

// Работаем с областью по имени, уточняя текущую строку
Таб.Область(нСтр, "ВсеКолонки").ГраницаСнизу(2);

Нюансы и рекомендации

Проанализируем несколько важных моментов, которые помогут избежать ошибок при разработке:

  1. Производительность: Если ваш отчет содержит десятки тысяч строк, частое обращение к методу Область() для каждой строки может несколько замедлить формирование документа. В таких случаях метод с двумя секциями (Метод 1) предпочтительнее, так как платформа быстрее обрабатывает готовые шаблоны.
  2. Цвет линии: Если вам нужно выделить линию не только жирностью, но и цветом, вторым параметром метода ГраницаСнизу() можно передать числовое значение цвета. Если параметр опущен, используется стандартный черный.
  3. Объединенные ячейки: Если в вашей секции есть объединенные ячейки, метод Область() все равно будет работать. Главное — указывать координаты так, чтобы они охватывали нужный диапазон. Система автоматически применит оформление к границам объединенного блока.
  4. Порядок действий: Всегда вызывайте методы изменения оформления после метода ВывестиСекцию() или ПрисоединитьСекцию(), так как объект Область работает с уже существующими ячейками в результирующей таблице.

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

← На главную