Как перенести одну печатную форму между конфигурациями в 1С 7.7?

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

При работе в среде 1С:Предприятие 7.7 разработчики часто сталкиваются с аппаратными ограничениями механизма сравнения и объединения конфигураций. Типичная ситуация: в одной информационной базе доработана конкретная печатная форма (например, «Акт аренды» для документа «Оказание услуг»), и её необходимо перенести в другую базу. Однако при попытке объединения конфигураций через файл 1cv7.md платформа блокирует возможность выбора отдельной таблицы — флажок на уровне конкретного макета неактивен, и система предлагает перенести весь документ «Оказание услуг» целиком. Если согласиться на это, затрутся все остальные реквизиты, модули и макеты документа-приемника.

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

Способ 1. Ручной перенос макета через промежуточный файл MXL (Рекомендуемый)

Самый очевидный способ — запустить два Конфигуратора одновременно и скопировать макет напрямую через буфер обмена (Ctrl+C / Ctrl+V). Однако при прямом копировании таблиц между окнами разных программ часто сбиваются настройки форматирования: изменяется высота строк, «плывет» ширина колонок, слетают шрифты и теряются встроенные картинки (например, логотипы компаний или факсимильные подписи). Чтобы избежать искажения визуального оформления, выполним перенос через сохранение во внешний файл.

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

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

После переноса визуальной части нам обязательно потребуется обновить программный код в модуле документа-приемника. Перейдем на вкладку «Модуль документа» и пропишем вызов нашей новой таблицы. Если ранее использовалась стандартная процедура печати, нам понадобится добавить условие или кнопку выбора. Код вызова новой таблицы в модуле документа выглядит следующим образом:


Процедура Печать(ИмяМакет)
    Таб = СоздатьОбъект("Таблица");
    // Передаем имя нашей новой перенесенной таблицы
    Таб.ИсходнаяТаблица("АктАренды");
    
    // Заполняем секции макета данными
    Таб.ВывестиСекцию("Шапка");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    
    // Показываем сформированную печатную форму на экране
    Таб.Опции(0,0,0,0);
    Таб.Показать("Печать: Акт аренды", "");
КонецПроцедуры

Способ 2. Создание внешней печатной формы (Наиболее надежный метод)

Внесение изменений непосредственно в структуру файла метаданных 1cv7.md усложняет последующие обновления конфигурации. Если база находится на поддержке, лучшим решением будет создание внешней печатной формы в виде файла с расширением .ert. В типовых конфигурациях 1С 7.7 встроен удобный механизм регистрации таких форм.

Рассмотрим подробнее процесс создания и настройки внешней печатной формы:

  1. В Конфигураторе базы-приемника создадим новый внешний отчет/обработку через меню Файл -> Новый -> Внешний отчет (*.ert).
  2. В открывшемся окне новой обработки перейдем в меню Таблицы -> Новая таблица, назовем её АктАренды и скопируем туда визуальную часть акта из исходной базы (используя метод экспорта/импорта MXL, описанный в Способе 1).
  3. Перейдем в модуль созданной обработки. Важно понимать, что внешняя обработка запускается отдельно от документа, поэтому у нее нет прямого доступа к реквизитам шапки и табличной части («клиент», «сумма», «номенклатура» и т.д.). Контекст документа-донора передается во внешнюю форму в качестве параметра. Получим его в коде.

Напишем процедуру формирования печатной формы в модуле внешней обработки:


Процедура Печать() Экспорт
    // Получаем контекст документа через Параметр формы
    ДокКонтекст = Форма.Параметр;
    
    // Проверим, корректно ли передан контекст
    Если ТипЗначенияСтр(ДокКонтекст) <> "ГрупповойКонтекст" Тогда
        Предупреждение("Данная обработка может быть запущена только из формы документа!");
        Возврат;
    КонецЕсли;

    Таб = СоздатьОбъект("Таблица");
    // Используем встроенную в обработку таблицу
    Таб.ИсходнаяТаблица("АктАренды");
    
    // Внимание: Все обращения к реквизитам строятся через переменную ДокКонтекст
    // Например, вместо НомерДок пишем ДокКонтекст.НомерДок
    Таб.ВывестиСекцию("Шапка");
    
    ДокКонтекст.ВыбратьСтроки();
    Пока ДокКонтекст.ПолучитьСтроку() = 1 Цикл
        // Обработка строк табличной части документа
        Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    
    Таб.ВывестиСекцию("Подвал");
    Таб.Опции(0,0,0,0);
    Таб.Показать("Акт аренды (внешний)", "");
КонецПроцедуры

После сохранения файла обработки (например, под именем rentact.ert) его необходимо зарегистрировать в информационной базе. Разберем, как это сделать:

  1. Поместим созданный файл rentact.ert в каталог базы данных в подпапку \ExtForms\PrnForms\. Если папки PrnForms внутри каталога ExtForms не существует, создадим её вручную через проводник Windows.
  2. Запустим 1С 7.7 в режиме «Предприятие» под пользователем с правами администратора.
  3. Откроем меню Сервис -> Дополнительные возможности (в некоторых конфигурациях путь может выглядеть как Сервис -> Регистрация внешних печатных форм).
  4. Выберем вид документа «Оказание услуг», нажмем кнопку «Добавить», укажем наш файл rentact.ert из папки PrnForms и введем название кнопки печати (например, «Акт аренды»).

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

Способ 3. Перенос через декомпилятор GComp (Для опытных разработчиков)

Для крупных проектов и групповой разработки, где изменения отслеживаются через системы контроля версий (Git/SVN), использование Конфигуратора для ручного переноса не всегда эффективно. В этой ситуации на помощь приходит утилита GComp. Она позволяет декомпилировать двоичный файл конфигурации 1cv7.md во множество текстовых файлов и файлов таблиц формата MXL.

Проанализируем алгоритм работы с утилитой:

  1. Запустим декомпиляцию исходного файла 1cv7.md с помощью GComp. Утилита разложит структуру метаданных на папки. Каждому документу будет соответствовать отдельная директория.
  2. В папке документа «Оказание услуг» исходной конфигурации найдем файл нужного макета (он будет иметь имя вида Table2.mxl или аналогичное).
  3. Декомпилируем файл конфигурации базы-приемника.
  4. Скопируем файл макета из папки исходного документа в соответствующую папку документа базы-приемника.
  5. Откроем файл описания структуры метаданных документа (текстовый файл описания структуры внутри папки документа) и вручную добавим строку объявления новой таблицы, назначив ей уникальный внутренний идентификатор.
  6. Соберем утилитой GComp измененную папку обратно в рабочий бинарный файл 1cv7.md.

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

← На главную