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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с программными продуктами на платформе 1С:Предприятие 8 под управлением Библиотеки стандартных подсистем (БСП) пользователи часто используют великолепную возможность — редактирование макетов печатных форм (например, ТОРГ-12, Счет на оплату, Акт выполненных работ) прямо в пользовательском режиме (в режиме «1С:Предприятие»). Это позволяет быстро изменить логотип, переставить местами строки, добавить нужный текст или изменить шрифт без привлечения программиста и внесения изменений в конфигурацию.

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

Почему возникает проблема при обычном копировании?

Давайте выясним причину, почему стандартное выделение ячеек через комбинацию клавиш Ctrl+A, копирование Ctrl+C и последующая вставка Ctrl+V в новой базе приводят к тому, что макет «плывет», а колонки теряют свою исходную ширину. Дело в том, что при выделении «всех ячеек» буфер обмена Windows копирует только свойства самих ячеек (текст, цвет, границы, шрифт, формат данных). При этом параметры сетки табличного документа (ширина колонок и высота строк, которые жестко заданы для всего документа или его секций) не переносятся. В результате в базе-приемнике макет пытается «натянуться» на стандартную сетку нового документа, что полностью искажает внешний вид печатной формы.

Ниже мы подробно рассмотрим проверенные способы, которые помогут перенести макет в первозданном виде.

Способ 1. Секрет интерактивного копирования через буфер обмена (сохраняем ширину колонок)

Рассмотрим первый, самый быстрый способ, который не требует программирования или использования сторонних обработок. Нам нужно заставить платформу скопировать не просто ячейки, а весь объект ТабличныйДокумент целиком, включая его структуру.

Разберем этот процесс по шагам:

  1. В исходной базе перейдем в раздел администрирования макетов печатных форм (обычно это Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм).
  2. Найдем нужный измененный макет (он будет отмечен особым значком, указывающим на то, что он отредактирован пользователем) и откроем его для редактирования. Макет откроется в стандартном встроенном редакторе табличных документов 1С.
  3. Критически важный шаг: вместо нажатия клавиш Ctrl+A, найдем глазами левый верхний угол таблицы. Нам нужно кликнуть левой кнопкой мыши на серый пустой прямоугольник, который находится на пересечении шкал заголовков (левее наименования колонки «А» и выше наименования строки «1»).
  4. После клика по этому пересечению выделится абсолютно все пространство табличного документа, включая служебную разметку ширины и высоты.
  5. Нажмем сочетание клавиш Ctrl+C для копирования данных в буфер обмена.
  6. Откроем базу-приемник, перейдем в аналогичный макет печатной формы и также откроем его для редактирования.
  7. Точно так же кликнем на серый прямоугольник на пересечении заголовков строк и колонок в новой базе, чтобы выделить весь пустой макет.
  8. Нажмем сочетание клавиш Ctrl+V.

Посмотрим на результат: макет перенесся идеально. Все объединенные ячейки, сложные форматы строк, цвета, а главное — индивидуальная ширина каждой колонки встали ровно в те же координаты, что и в базе-источнике.

Способ 2. Перенос данных через стандартную обработку «Выгрузка и загрузка данных XML»

Если макетов много или ручной перенос через буфер обмена вам кажется ненадежным, проанализируем архитектуру хранения этих данных. Все пользовательские изменения макетов БСП сохраняет в специализированном регистре сведений. Он называется ПользовательскиеМакетыПечати.

Каждая запись в этом регистре содержит ключевые измерения:

Самое главное — в ресурсе Макет хранится объект типа ХранилищеЗначений, внутри которого в бинарном виде находится весь наш настроенный табличный документ.

Поскольку наши базы абсолютно идентичны по структуре конфигурации, мы можем перенести записи этого регистра напрямую. Для этого отлично подойдет стандартная обработка от фирмы 1С «Выгрузка и загрузка данных XML» (ее можно скачать на портале ИТС).

Выполним следующие действия:

  1. Запустим обработку «Выгрузка и загрузка данных XML» в исходной базе в режиме «1С:Предприятие» с правами администратора.
  2. В дереве объектов метаданных найдем регистр сведений ПользовательскиеМакетыПечати и отметим его галочкой.
  3. Если нам нужно перенести только один конкретный макет, настроим отбор для выгрузки. Добавим отбор по полю ИмяМакета (например, равен "ТОРГ12") или по конкретному объекту метаданных. Если нужно перенести абсолютно все пользовательские изменения, отборы ставить не нужно.
  4. Укажем путь для сохранения XML-файла на диске и нажмем кнопку «Выгрузить».
  5. Откроем базу-приемник, запустим там эту же обработку, перейдем на вкладку «Загрузка», выберем наш XML-файл и нажмем кнопку «Загрузить».

Программа запишет бинарные данные напрямую в базу-приемник. Перенос завершен, система сразу начнет использовать новые макеты без необходимости перезапуска сеансов пользователей.

Способ 3. Автоматизированная загрузка файла MXL с помощью внешней обработки

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

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

Посмотрим на пример программного кода, который решает эту задачу на стороне сервера:


&НаСервере
Процедура ЗагрузитьПользовательскийМакетНаСервере(ПутьКФайлу, ИмяОбъектаМетаданных, ИмяМакета)
    
    // Инициализируем табличный документ и считываем данные из файла .mxl
    ТабДок = Новый ТабличныйДокумент;
    Попытка
        ТабДок.Прочитать(ПутьКФайлу);
    Исключение
        ВызватьИсключение "Не удалось прочитать файл макета! Ошибка: " + ОписаниеОшибки();
    КонецПопытки;
    
    // Работаем с регистром сведений БСП
    НаборЗаписей = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(ИмяОбъектаМетаданных); 
    НаборЗаписей.Отбор.ИмяМакета.Установить(ИмяМакета);         
    
    // Создаем новую запись для нашего измененного макета
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Объект = ИмяОбъектаМетаданных;
    НоваяЗапись.ИмяМакета = ИмяМакета;
    
    // Помещаем табличный документ в ХранилищеЗначений и активируем его использование
    НоваяЗапись.Макет = Новый ХранилищеЗначений(ТабДок);
    НоваяЗапись.Использование = Истина; 
    
    // Записываем набор в базу данных
    Попытка
        НаборЗаписей.Записать();
        Сообщить("Макет успешно загружен и активирован!");
    Исключение
        Сообщить("Ошибка записи в базу данных: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

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

Способ 4. Альтернативный архитектурный подход: Внешняя печатная форма (ВПФ)

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

Рекомендуем следующее решение:

Перенесите измененный макет и логику его заполнения во Внешнюю печатную форму (ВПФ).

Преимущества данного подхода очевидны:

  1. ВПФ представляет собой отдельный независимый файл внешней обработки с расширением .epf.
  2. Для ее переноса в аналогичную базу вам не нужно настраивать отборы, использовать буфер обмена или писать скрипты. Достаточно зайти в раздел Дополнительные отчеты и обработки базы-приемника, нажать кнопку «Обновить из файла» и выбрать вашу обработку.
  3. Код формирования печатной формы изолирован от типовой конфигурации, что гарантирует стабильность работы при последующих обновлениях системы 1С.

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

← На главную