При работе в среде 1С:Предприятие 7.7 разработчики часто сталкиваются с аппаратными ограничениями механизма сравнения и объединения конфигураций. Типичная ситуация: в одной информационной базе доработана конкретная печатная форма (например, «Акт аренды» для документа «Оказание услуг»), и её необходимо перенести в другую базу. Однако при попытке объединения конфигураций через файл 1cv7.md платформа блокирует возможность выбора отдельной таблицы — флажок на уровне конкретного макета неактивен, и система предлагает перенести весь документ «Оказание услуг» целиком. Если согласиться на это, затрутся все остальные реквизиты, модули и макеты документа-приемника.
Выясним причину такого поведения платформы. В архитектуре 1С 7.7 метаданные документа являются неделимым (атомарным) объектом. Любые внутренние таблицы и модули жестко привязаны к структуре самого документа в файле конфигурации. Тем не менее перенести одну печатную форму без затирания остальных данных возможно. Проанализируем несколько проверенных практических способов решения этой задачи — от простых ручных манипуляций до профессиональной разработки внешних печатных форм и применения декомпиляторов.
Самый очевидный способ — запустить два Конфигуратора одновременно и скопировать макет напрямую через буфер обмена (Ctrl+C / Ctrl+V). Однако при прямом копировании таблиц между окнами разных программ часто сбиваются настройки форматирования: изменяется высота строк, «плывет» ширина колонок, слетают шрифты и теряются встроенные картинки (например, логотипы компаний или факсимильные подписи). Чтобы избежать искажения визуального оформления, выполним перенос через сохранение во внешний файл.
Разберем этот процесс по шагам:
ActArendy.mxl. Закроем этот Конфигуратор.АктАренды.ActArendy.mxl. Перед нами откроется окно с макетом.АктАренды внутри документа базы-приемника и вставим данные, нажав Ctrl+V. При таком способе вся структура строк, ячеек и графических объектов перенесется в исходном виде без искажений.После переноса визуальной части нам обязательно потребуется обновить программный код в модуле документа-приемника. Перейдем на вкладку «Модуль документа» и пропишем вызов нашей новой таблицы. Если ранее использовалась стандартная процедура печати, нам понадобится добавить условие или кнопку выбора. Код вызова новой таблицы в модуле документа выглядит следующим образом:
Процедура Печать(ИмяМакет)
Таб = СоздатьОбъект("Таблица");
// Передаем имя нашей новой перенесенной таблицы
Таб.ИсходнаяТаблица("АктАренды");
// Заполняем секции макета данными
Таб.ВывестиСекцию("Шапка");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
// Показываем сформированную печатную форму на экране
Таб.Опции(0,0,0,0);
Таб.Показать("Печать: Акт аренды", "");
КонецПроцедуры
Внесение изменений непосредственно в структуру файла метаданных 1cv7.md усложняет последующие обновления конфигурации. Если база находится на поддержке, лучшим решением будет создание внешней печатной формы в виде файла с расширением .ert. В типовых конфигурациях 1С 7.7 встроен удобный механизм регистрации таких форм.
Рассмотрим подробнее процесс создания и настройки внешней печатной формы:
АктАренды и скопируем туда визуальную часть акта из исходной базы (используя метод экспорта/импорта MXL, описанный в Способе 1).Напишем процедуру формирования печатной формы в модуле внешней обработки:
Процедура Печать() Экспорт
// Получаем контекст документа через Параметр формы
ДокКонтекст = Форма.Параметр;
// Проверим, корректно ли передан контекст
Если ТипЗначенияСтр(ДокКонтекст) <> "ГрупповойКонтекст" Тогда
Предупреждение("Данная обработка может быть запущена только из формы документа!");
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
// Используем встроенную в обработку таблицу
Таб.ИсходнаяТаблица("АктАренды");
// Внимание: Все обращения к реквизитам строятся через переменную ДокКонтекст
// Например, вместо НомерДок пишем ДокКонтекст.НомерДок
Таб.ВывестиСекцию("Шапка");
ДокКонтекст.ВыбратьСтроки();
Пока ДокКонтекст.ПолучитьСтроку() = 1 Цикл
// Обработка строк табличной части документа
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.Опции(0,0,0,0);
Таб.Показать("Акт аренды (внешний)", "");
КонецПроцедуры
После сохранения файла обработки (например, под именем rentact.ert) его необходимо зарегистрировать в информационной базе. Разберем, как это сделать:
rentact.ert в каталог базы данных в подпапку \ExtForms\PrnForms\. Если папки PrnForms внутри каталога ExtForms не существует, создадим её вручную через проводник Windows.rentact.ert из папки PrnForms и введем название кнопки печати (например, «Акт аренды»).Теперь пользователи смогут выбирать новую печатную форму при нажатии на стандартную кнопку «Печать» в документе, при этом сама конфигурация останется чистой и типовой.
Для крупных проектов и групповой разработки, где изменения отслеживаются через системы контроля версий (Git/SVN), использование Конфигуратора для ручного переноса не всегда эффективно. В этой ситуации на помощь приходит утилита GComp. Она позволяет декомпилировать двоичный файл конфигурации 1cv7.md во множество текстовых файлов и файлов таблиц формата MXL.
Проанализируем алгоритм работы с утилитой:
1cv7.md с помощью GComp. Утилита разложит структуру метаданных на папки. Каждому документу будет соответствовать отдельная директория.Table2.mxl или аналогичное).1cv7.md.Этот способ требует четкого понимания внутренней структуры метаданных 1С 7.7, но незаменим при автоматизации процессов сборки конфигураций.