Разработка печатных форм в системе 1С:Предприятие 7.7 часто сопряжена с определенными трудностями, особенно когда речь идет о динамическом управлении графическими объектами. В отличие от версии 8.x, где каждый рисунок является объектом коллекции с доступными методами Удалить() или свойством Видимость, штатный функционал «семерки» весьма ограничен. Рассмотрим подробнее, как можно реализовать задачу скрытия или удаления факсимильной печати в зависимости от условий, например, при нажатии на флажок в форме.
Проанализируем самый надежный и «чистый» с точки зрения платформы способ. Вместо того чтобы пытаться удалить уже выведенный объект, мы определим логику вывода еще на этапе формирования таблицы. Для этого в шаблоне печатной формы создаются две идентичные области (секции), которые назовем, например, Подпись и ПодписьФаксимиле.
Разберем алгоритм действий:
Посмотрим на пример кода, реализующего этот подход:
Если ФлагВыводитьФаксимиле = 1 Тогда
Таб.ВывестиСекцию("ПодписьФаксимиле");
Иначе
Таб.ВывестиСекцию("Подпись");
КонецЕсли;
Этот метод исключает необходимость манипулировать объектами после их появления на экране и является наиболее стабильным. Однако он требует дублирования областей в макете, что может быть неудобно при сложных формах.
Выясним, что делать, если таблица уже сформирована или использование секций затруднено. В 1С 7.7 объект «Таблица» не предоставляет прямого доступа к коллекции рисунков через стандартный встроенный язык. Однако разработчики нашли обходной путь через изменение параметров объекта.
Проанализируем ситуацию: если мы не можем удалить картинку, мы можем сделать ее практически невидимой. Для этого используется программное изменение размеров рисунка до минимально возможных значений (1 пиксель).
Пример логики:
Важный нюанс: Чтобы этот метод работал, рисунок должен иметь имя в свойствах (в режиме конфигуратора), к которому можно обратиться (хотя в штатной 7.7 программный доступ к именам картинок без внешних компонент крайне ограничен и часто требует использования TableDoc.dll).
Рассмотрим наиболее профессиональный подход. Для полноценной работы с табличными документами в 1С 7.7 часто применяется компонента Йоксель (развитие идей TableDoc.dll). Она расширяет объектную модель таблицы до уровня, сопоставимого с современными версиями 1С.
С помощью Йокселя мы можем обращаться к коллекции ГрафическиеОбъекты. Это позволяет реализовать следующие действия:
Удалить().Видимость (0 или 1), что полностью решает задачу автора темы.Проанализируем примерный принцип работы через компоненту:
// Предположим, ГрафОбъект получен из коллекции графики таблицы
ГрафОбъект.Видимость = ?(НужноОтобразить = 1, 1, 0);
Часто вопрос удаления картинки возникает из-за того, что она перекрывает текст или другие элементы своим белым фоном. Разберем технический момент: штатные форматы (BMP, JPG) в 1С 7.7 плохо поддерживают прозрачность. Однако платформа отлично работает с векторным форматом WMF (Windows Metafile).
Если подготовить факсимиле в формате WMF, оно будет обладать естественной прозрачностью. Это позволяет:
Подводя итог, можно сказать следующее: если вы работаете в рамках стандартных возможностей платформы 1С 7.7, лучшим решением будет использование различных секций макета для вывода подписи с факсимиле и без него. Это гарантирует корректную печать на любых принтерах.
Если же требуется высокая интерактивность (динамическое скрытие уже в открытом окне просмотра), следует обратить внимание на внешние компоненты типа Йоксель, которые открывают доступ к объектной модели рисунков. Для обеспечения визуального качества не забывайте использовать формат WMF, который решает проблемы с прозрачностью и масштабированием графики в старых версиях системы.