Как отредактировать текст в макете 1С, если его перекрывает картинка с рамкой?

Программист
← На главную

При разработке печатных форм, таких как сертификаты, грамоты или бланки строгой отчетности, часто возникает необходимость разместить на макете рамку или другой фоновый элемент в виде изображения. Стандартная проблема, с которой сталкиваются разработчики: после вставки картинки в редакторе макетов MXL, она располагается поверх ячеек и блокирует доступ к тексту для редактирования. Давайте разберем, почему так происходит и какие существуют способы решения этой задачи.

Причина проблемы кроется в том, что объект "Картинка" в редакторе макетов является отдельным слоем, который накладывается поверх сетки ячеек. Стандартные свойства вроде "Порядок" (на задний/передний план) управляют взаимным расположением нескольких объектов-картинок, но не их положением относительно ячеек макета. Картинка всегда будет сверху. Рассмотрим несколько подходов, от самых простых "ручных" до наиболее правильных программных.

Решение 1: Сделать картинку фоном для табличного документа (рекомендуемый способ)

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

Разберем по шагам:

  1. Подготовка макета. Откройте ваш макет MXL в Конфигураторе. Если вы уже вставили картинку с рамкой, выделите ее и удалите. Весь текст и поля для заполнения должны быть легко доступны.

  2. Добавление картинки. Вашу рамку необходимо сохранить в конфигурации как отдельный объект. Для этого в дереве конфигурации найдите ветку "Общие" -> "Макеты". Создайте новый макет с типом "Картинка" и загрузите в него ваше изображение рамки. Дайте ему понятное имя, например, "РамкаСертификата".

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

    Посмотрим на пример. Допустим, ваша переменная табличного документа называется ТабДок.

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

Важные моменты и доработки:

Этот метод является предпочтительным, так как он разделяет данные (текст в ячейках) и оформление (рамка), что делает макет чистым и удобным для поддержки.

Решение 2: Программное наложение рисунка поверх документа

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

Как это работает:

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

Посмотрим на пример кода:


// ТабДок - это ваш уже сформированный табличный документ
// Добавляем новый рисунок в коллекцию рисунков документа
РисунокРамка = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

// Загружаем картинку из общего макета
РисунокРамка.Картинка = ПолучитьОбщийМакет("РамкаСертификата");

// Устанавливаем точное положение рисунка
// Координаты задаются через указание верхней, левой, нижней и правой ячеек
// Например, растянем рамку на всю первую страницу (приблизительно)
ВерхняяЯчейка = ТабДок.Область("R1C1");
НижняяЯчейка = ТабДок.Область("R50C20");

РисунокРамка.Расположить(ВерхняяЯчейка, ВерхняяЯчейка, НижняяЯчейка, НижняяЯчейка);

// Можно также настроить прозрачность, размер и другие свойства
РисунокРамка.РазмерКартинки = РазмерКартинки.Растянуть;

Этот способ более сложен в настройке, но предоставляет максимальный контроль над результатом.

Решение 3: Простые "ручные" способы для быстрого редактирования

Если вам нужно внести разовые правки и не хочется лезть в код, можно воспользоваться простыми приемами прямо в редакторе макетов.

Способ 3.1: Временное удаление картинки

Самый очевидный, но эффективный метод. Идея в том, чтобы убрать картинку на время редактирования текста, а потом вернуть ее на место.

  1. Откройте макет в Конфигураторе.
  2. Выделите картинку с рамкой.
  3. Нажмите Ctrl+X (Вырезать), чтобы скопировать картинку в буфер обмена и одновременно удалить ее из макета.
  4. Спокойно внесите все необходимые изменения в текст в ячейках.
  5. После завершения редактирования нажмите Ctrl+V (Вставить). Картинка вернется на свое прежнее место.

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

Способ 3.2: Навигация с помощью клавиатуры

Даже если ячейка визуально перекрыта картинкой, она все еще существует в структуре макета и на нее можно "перейти" с помощью клавиатуры.

  1. Кликните на любую видимую ячейку рядом с той, которую нужно отредактировать.
  2. Используйте клавиши Tab (для перехода к следующей ячейке) и Shift+Tab (для перехода к предыдущей), чтобы переместить фокус на нужную, пусть и невидимую, ячейку.
  3. Когда нужная ячейка будет выделена (вы увидите ее адрес в поле имени слева от строки формул), вы сможете редактировать ее содержимое прямо в строке ввода формул, которая находится в верхней части окна редактора макетов.

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

← На главную