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

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Почему не стоит изменять стандартную конфигурацию напрямую?

Прежде чем мы перейдем к решению, давайте выясним, почему прямое изменение стандартных макетов и кода конфигурации — это не лучший путь:

  1. Проблемы с обновлениями: При каждом обновлении типовой конфигурации вам придется сравнивать и объединять изменения, что является трудоемким процессом и может привести к конфликтам. Ваши доработки могут быть просто стерты или перестанут работать.
  2. Сложности поддержки: Измененная конфигурация сложнее поддерживать, так как она отклоняется от стандартного поведения. Возможные ошибки могут быть труднее диагностировать.
  3. Зависимость от вендора: Вы теряете преимущества оперативного получения исправлений и новых возможностей от 1С, поскольку каждое обновление требует дополнительных усилий по адаптации.

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

Правильный подход: Внешние Печатные Формы (ВПФ)

Одним из наиболее эффективных и безопасных способов модификации печатных форм является использование механизма внешних печатных форм (ВПФ). Этот подход позволяет реализовать необходимую логику печати в отдельном файле (.epf), который затем подключается к информационной базе в режиме 1С:Предприятие. При этом основная конфигурация остается типовой и легко обновляется. Часто за основу берутся уже готовые решения, например, внешний счет на оплату покупателю, которые адаптируются под нужды конкретной организации — для этого подойдёт внешняя печатная форма счета-договора для 1С:Бухгалтерии.

Преимущества использования ВПФ:

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

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

Шаг 1: Копирование стандартного макета из конфигуратора

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

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. В дереве конфигурации перейдите к ветке Общие -> Макеты.
  3. Найдите нужный макет. В нашем случае это, скорее всего, СчетНаОплату или ПечатнаяФормаСчета, который относится к документу СчетНаОплатуПокупателю. Точное имя макета может варьироваться в зависимости от версии конфигурации.
  4. Дважды щелкните по макету, чтобы открыть его.
  5. В открывшемся окне макета нажмите правой кнопкой мыши по любой области и выберите пункт Сохранить как... или в меню Файл -> Сохранить как.... Сохраните макет в формате .mxl (например, МойСчетНаОплату.mxl).
  6. После сохранения вы можете закрыть конфигуратор, так как дальнейшая работа с макетом будет происходить уже во внешней обработке.

Шаг 2: Создание новой внешней обработки (.epf)

Теперь мы создадим контейнер для нашей внешней печатной формы.

  1. Запустите Конфигуратор.
  2. Создайте новую внешнюю обработку через меню Файл -> Новый -> Внешняя обработка.
  3. Перейдите на вкладку Макеты в новой обработке.
  4. Нажмите кнопку Добавить и выберите Табличный документ. Назовите его, например, МойМакетСчета.
  5. В открывшемся окне нового макета загрузите сохраненный ранее файл МойСчетНаОплату.mxl (меню Файл -> Открыть и выберите ваш .mxl файл).
  6. Теперь вы можете приступить к редактированию этого макета: добавлять новые области, изменять шрифт, добавлять параметры. Например, чтобы изменить шрифт в определенной ячейке, выделите ее, откройте свойства ячейки (правая кнопка мыши -> Свойства) и настройте параметры шрифта.
  7. Сохраните внешнюю обработку в файл с расширением .epf (например, МойСчетНаОплатуВПФ.epf).

Шаг 3: Реализация функционала ВПФ в модуле объекта

Для того чтобы 1С "узнала" о вашей внешней печатной форме и смогла её вызвать, необходимо реализовать в модуле внешней обработки две экспортные функции: СведенияОВнешнейОбработке() и Печать().

Функция СведенияОВнешнейОбработке()

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

Откройте модуль объекта вашей внешней обработки (дважды кликните по названию обработки в дереве конфигурации, затем перейдите на вкладку Модуль объекта) и добавьте следующий код:


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

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

    Возврат РегистрационныеДанные;
КонецФункции

Обратите особое внимание на поле ОбъектыНазначения. Здесь необходимо точно указать полное имя объекта метаданных, к которому будет привязываться ваша печатная форма (например, Документ.СчетНаОплатуПокупателю).

Функция Печать()

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

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

Давайте посмотрим, как это сделать. Мы добавим скелет функции Печать(), а затем обсудим адаптацию типовой логики.


Функция Печать(МассивОбъектов, ОбъектыПечати, ПараметрыПечати) Экспорт
    РезультатПечати = Новый Структура("ТабличныйДокумент", Неопределено);
    ТабДокумент = Новый ТабличныйДокумент;
    
    // Получаем наш измененный макет, который мы добавили в обработку
    Макет = ПолучитьМакет("МойМакетСчета"); // Имя макета, как вы его назвали в ВПФ
    
    Для Каждого ТекущийОбъект Из МассивОбъектов Цикл
        // Здесь будет основная логика формирования печатной формы.
        
        // --- Пример адаптации типовой логики ---
        // Инициализация параметров
        ПараметрыМакета = Новый Структура;
        // Заполняем основные параметры из текущего объекта документа
        ПараметрыМакета.Вставить("НомерДокумента", ТекущийОбъект.Номер);
        ПараметрыМакета.Вставить("ДатаДокумента", Формат(ТекущийОбъект.Дата, "ДФ=dd.MM.yyyy"));
        ПараметрыМакета.Вставить("ОрганизацияНаименование", ТекущийОбъект.Организация.Наименование);
        ПараметрыМакета.Вставить("КонтрагентНаименование", ТекущийОбъект.Контрагент.Наименование);
        
        // Например, если вы реализуете вывод в «Основание» печатной формы УПД строки без ограничений,
        // то вы добавляете логику получения значения из дополнительного реквизита.
        
        // Выводим области макета
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
        ОбластьШапка.Параметры.Заполнить(ПараметрыМакета);
        ТабДокумент.Вывести(ОбластьШапка);
        
        // Вывод табличной части документа
        ОбластьТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьШапка");
        ТабДокумент.Вывести(ОбластьТабличнаяЧастьЗаголовок);
        
        ОбластьСтрокаТабличнойЧасти = Макет.ПолучитьОбласть("СтрокаТабличнойЧасти");
        Для Каждого СтрокаТЧ Из ТекущийОбъект.Товары Цикл
            ОбластьСтрокаТабличнойЧасти.Параметры.Номенклатура = СтрокаТЧ.Номенклатура;
            ОбластьСтрокаТабличнойЧасти.Параметры.Количество = СтрокаТЧ.Количество;
            ОбластьСтрокаТабличнойЧасти.Параметры.Цена = СтрокаТЧ.Цена;
            ОбластьСтрокаТабличнойЧасти.Параметры.Сумма = СтрокаТЧ.Сумма;
            ТабДокумент.Вывести(ОбластьСтрокаТабличнойЧасти);
        КонецЦикла;
        
        ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
        ОбластьПодвал.Параметры.Заполнить(ПараметрыМакета); 
        ТабДокумент.Вывести(ОбластьПодвал);
        
        // Установка параметров страницы
        ТабДокумент.ПараметрыСтраницы.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
        ТабДокумент.АвтоМасштаб = Истина;
    КонецЦикла;
    
    РезультатПечати.ТабличныйДокумент = ТабДокумент;
    Возврат РезультатПечати;
КонецФункции

Как найти типовую логику печати?

Мы предлагаем несколько способов найти исходный код для копирования и адаптации:

  1. Через менеджер документа: Откройте в конфигураторе нужный документ. Поищите в модуле менеджера функции, связанные с печатью.
  2. Общие модули: Ищите модули с названиями типа УправлениеПечатью или ПечатьДокументов. Если вам требуется специфическая доработка, например, генерация QR кодов для типового УПД, стоит изучить, как система формирует данные для вывода графических объектов.
  3. Просмотр кода кнопки "Печать": Это поможет понять, какой именно программный вызов инициирует процесс формирования документа.

Аналогичным образом можно реализовать и другие специфические формы, такие как ТОРГ-13 для перемещений между сотрудниками, где логика получения данных может существенно отличаться от стандартной реализации.

Шаг 4: Подключение ВПФ в режиме 1С:Предприятие

После создания файла .epf и написания необходимого кода, нам нужно подключить его к базе 1С.

  1. Запустите 1С:Предприятие.
  2. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки.
  3. Перейдите по ссылке Дополнительные отчеты и обработки.
  4. Нажмите кнопку Создать и укажите путь к вашему файлу .epf.
  5. После загрузки проверьте Назначение и нажмите кнопку Записать и закрыть.

Шаг 5: Проверка и отладка

Теперь мы можем проверить, как работает наша внешняя печатная форма. Откройте нужный документ, нажмите кнопку Печать и выберите вашу новую команду.

Альтернативный подход: Изменение макетов через режим 1С:Предприятие (для простых правок)

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

  1. Запустите 1С:Предприятие.
  2. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки.
  3. Перейдите по ссылке Макеты печатных форм.
  4. Здесь вы можете отредактировать доступные макеты во встроенном редакторе.

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

Важные нюансы и возможные сложности

  1. Поддержание актуальности: При обновлении конфигурации проверяйте, не изменилась ли логика формирования данных в типовом решении.
  2. Сложные макеты: Для сложных отчетов адаптация кода может потребовать значительного времени.
  3. Заполнение параметров: Внимательно следите за соответствием имен параметров в макете и в коде функции Печать().

Таким образом, мы рассмотрели подробный и наиболее правильный способ модификации стандартных печатных форм в 1С:Бухгалтерия 8.3. Использование ВПФ позволяет сохранить конфигурацию на поддержке и упрощает процесс обновлений, предоставляя при этом гибкие возможности для кастомизации. Несмотря на то, что это требует определенных навыков программирования, такой подход является наиболее рекомендованным для стабильной работы системы.

← На главную