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