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

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

В процессе работы с 1С:Бухгалтерией предприятия 3.0 (БП3) пользователи часто сталкиваются с необходимостью модифицировать типовые печатные формы, например, акт сверки взаимных расчетов. При этом возникает задача сохранить оригинальную, типовую версию формы и одновременно иметь доступ к своей, скорректированной. Из обычного пользовательского режима "Предприятие" возможность прямого копирования типового макета с последующим созданием отдельной команды печати отсутствует, что приводит к вопросу: "Возможно ли скопировать типовой макет печатной формы акта сверки для его модификации, сохранив при этом исходный вариант?" Рассмотрим, как можно решить данную проблему, используя доступные механизмы платформы 1С:Предприятие.

Почему прямое копирование без конфигуратора невозможно?

Начнем с ответа на часто возникающий вопрос: можно ли реализовать такую задачу "без конфигуратора", то есть исключительно в режиме "Предприятие"? К сожалению, для полноценного решения, которое позволит вам иметь две независимые печатные формы (типовую и модифицированную) с отдельными командами печати, работа в конфигураторе является обязательной. Режим "Предприятие" предназначен для выполнения бизнес-процессов, ввода данных, формирования отчетов и использования уже готового функционала. Изменение структуры метаданных, добавление новых макетов или переопределение логики вывода печатных форм — это задачи, требующие инструментов разработки, доступных только в конфигураторе.

Хотя в режиме "Предприятие" существует возможность редактирования некоторых макетов печатных форм через раздел НСИ и Администрирование -> Печатные формы, отчеты и обработки -> Макеты печатных форм, этот механизм позволяет лишь вносить изменения в существующий макет. Он не дает возможности создать его полноценную копию, которая будет существовать параллельно с оригиналом и иметь свою собственную команду печати. Таким образом, для достижения поставленной цели нам потребуется обратиться к средствам разработки.

Решение 1: Использование Внешних Печатных Форм (ВПФ)

Наиболее распространенным и рекомендуемым способом для добавления собственных печатных форм или модификации существующих без изменения основной конфигурации является использование Внешних Печатных Форм (ВПФ). ВПФ представляют собой отдельные файлы с расширением .epf, которые подключаются к базе 1С в режиме "Предприятие". Этот подход позволяет сохранить конфигурацию на поддержке, что упрощает обновление.

Преимущества ВПФ:

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

Процесс создания ВПФ (требует конфигуратора):

Для создания ВПФ нам потребуется выполнить ряд шагов в конфигураторе. Рассмотрим их подробнее:

  1. Открываем типовую конфигурацию в конфигураторе. Убедимся, что у нас есть доступ к исходным макетам и коду.
  2. Находим типовой макет акта сверки. Обычно он называется ПФ_MXL_АктСверкиВзаимныхРасчетов и находится в общем макете или макете соответствующего документа (например, АктСверкиВзаимныхРасчетов).
  3. Создаем новую внешнюю обработку. Для этого в конфигураторе выбираем Файл -> Новый -> Внешняя обработка. Это будет наш контейнер для ВПФ.
  4. Добавляем команду печати в ВПФ. В объекте "Внешняя обработка" переходим на вкладку "Команды" и создаем новую команду. Даем ей понятное имя, например, "МойАктСверки", и указываем соответствующую процедуру в модуле объекта обработки.
  5. Копируем макет из типовой конфигурации. Открываем найденный на шаге 2 типовой макет, копируем его содержимое (Ctrl+A, Ctrl+C) и вставляем его в новый макет, который мы создадим в нашей внешней обработке (вкладка "Макеты" внешней обработки).
  6. Вносим корректировки в скопированный макет. Теперь мы можем изменять макет по своему усмотрению: добавлять логотипы, менять таблицы, шрифты, текст и т.д.
  7. Реализуем логику заполнения и вывода данных. В модуле объекта нашей внешней обработки необходимо написать код, который будет получать данные из системы и заполнять наш макет. Это включает в себя следующие экспортируемые процедуры:
    • СведенияОВнешнейОбработке(): Эта функция возвращает структуру, описывающую ВПФ (тип, версия, список команд и объекты, к которым она относится).
    • Печать(): Основная процедура, которая формирует печатную форму. Она должна получить данные, заполнить макет и вернуть готовый табличный документ.

    Пример структуры, которую возвращает функция СведенияОВнешнейОбработке():

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

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

  8. Сохраняем ВПФ. Сохраняем внешнюю обработку в файл .epf.

Подключение ВПФ в режиме "Предприятие":

После того как файл .epf создан и протестирован, его можно подключить в пользовательском режиме:

  1. Открываем базу 1С в режиме "Предприятие".
  2. Переходим в раздел НСИ и Администрирование.
  3. Выбираем пункт Печатные формы, отчеты и обработки.
  4. Переходим в Дополнительные отчеты и обработки.
  5. Нажимаем кнопку Создать и указываем путь к нашему файлу .epf.
  6. Настраиваем параметры использования: указываем, для какого объекта (например, "Акт сверки взаимных расчетов") должна быть доступна эта форма.

После подключения ваша новая печатная форма появится в списке доступных при печати документа "Акт сверки расчетов с контрагентами", рядом с типовой формой.

Решение 2: Использование Расширений Конфигурации

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

Преимущества Расширений:

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

Процесс создания Расширения (требует конфигуратора):

Рассмотрим шаги по созданию расширения для нашей задачи:

  1. Создаем расширение в конфигураторе. Открываем конфигуратор, переходим в Конфигурация -> Расширения конфигурации -> Добавить. Даем расширению понятное имя (например, "МоиДоработкиПечати").
  2. Добавляем ссылки на исходную конфигурацию. В свойствах расширения указываем, какие конфигурации оно должно расширять.
  3. "Заимствуем" типовой макет печатной формы. Находим в основной конфигурации макет ПФ_MXL_АктСверкиВзаимныхРасчетов (или аналогичный). Щелкнем по нему правой кнопкой мыши и выберем Добавить в расширение. Это создаст копию макета внутри расширения.
  4. Переименовываем заимствованный макет. Как справедливо указано в сообщении 4 и 5, скопированному макету необходимо дать уникальное имя, чтобы отличать его от типового. Например, из ПФ_MXL_АктСверкиВзаимныхРасчетов мы можем создать твойпрефикс_ПФ_MXL_АктСверкиВзаимныхРасчетов.
  5. Вносим корректировки в заимствованный макет. Открываем наш новый макет в расширении и вносим в него необходимые изменения.
  6. Добавляем новую команду печати. Это наиболее ответственный шаг. Нам нужно найти место в конфигурации, где регистрируются команды печати для акта сверки, и добавить туда вызов нашей новой формы.
    • Находим модуль, отвечающий за печать. Для документа "Акт сверки взаиморасчетов" это может быть модуль менеджера или специальный общий модуль, который обрабатывает команды печати. В БП3 часто используется механизм подключаемых команд печати. Вы можете найти его через поиск по конфигурации (Ctrl+Shift+F) по названию типовой печатной формы (например, "ПФ_MXL_АктСверкиВзаимныхРасчетов") или по названию команды печати, которую вы видите в документе "Акт сверки взаиморасчетов".
    • Заимствуем этот модуль в расширение. Как правило, мы заимствуем весь модуль, чтобы иметь возможность добавить в него новую логику.
    • Добавляем код для регистрации нашей новой команды печати. В заимствованном модуле мы находим место, где формируется список команд печати, и добавляем свою. Например, если используется стандартный механизм команд печати, это может выглядеть так:
    • 
      // Оригинальная процедура, например, ДобавитьКомандыПечатиВКоллекцию(КоллекцияКоманд)
      // ... типовой код регистрации команды ...
      // ПодключаемыеКоманды.Добавить(КомандаПечатьАктСверки, "Акт сверки взаимных расчетов", ТипКомандыПечати.Печать);
      
      // Наша новая команда:
      Команда = КоллекцияКоманд.Добавить();
      Команда.Идентификатор = "ПечатьАктСверкиМой"; // Уникальный идентификатор
      Команда.Представление = "Акт сверки взаимных расчетов (моя)"; // Имя, которое увидят пользователи
      Команда.Тип = Тип("ДокументСсылка.АктСверкиВзаиморасчетов"); // Тип объекта, для которого команда
      Команда.МенеджерПечати = "МенеджерПечатиМоихАктовСверки"; // Можем создать свой менеджер печати или указать существующий
      Команда.Использование = "Печать"; // Указываем, что это команда печати
      
      // Внутри процедуры МенеджерПечатиМоихАктовСверки.Печать(..., ИмяМакета)
      // мы будем получать наш макет твойпрефикс_ПФ_MXL_АктСверкиВзаимныхРасчетов
      
    • Реализуем логику вызова нашего макета. Мы можем либо модифицировать существующую процедуру печати, чтобы она выбирала макет по условию, либо (предпочтительнее) создать новую процедуру, которая будет получать данные и выводить наш модифицированный макет. В этом случае, при регистрации команды, мы укажем ссылку на эту новую процедуру.

    Например, в заимствованном модуле (если это, к примеру, модуль объекта или модуль менеджера документа), мы можем добавить свою процедуру:

    
    Процедура ПечатьАктСверкиМой(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
        // Здесь та же логика, что и для ВПФ, но с учетом того, что макет находится в расширении
        // Документ = МассивОбъектов[0];
        // ...
                
        Макет = ОбщиеМакеты.твойпрефикс_ПФ_MXL_АктСверкиВзаимныхРасчетов; // Обращаемся к макету в расширении
        ТабличныйДокумент = Новый ТабличныйДокумент;
        // ... Заполнение ТабличногоДокумента ...
                
        КоллекцияПечатныхФорм.Добавить("ПечатьАктСверкиМой", "Акт сверки взаимных расчетов (моя)", ТабличныйДокумент);
    КонецПроцедуры
    
  7. Публикуем расширение. После всех доработок расширение необходимо опубликовать (применить) к информационной базе. Это можно сделать из конфигуратора, выбрав Конфигурация -> Расширения конфигурации -> Опубликовать расширения конфигурации.

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

Ограниченное Редактирование Существующего Макета (без создания копии)

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

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

  1. Переходим в режим "Предприятие".
  2. Открываем раздел НСИ и Администрирование.
  3. Выбираем пункт Печатные формы, отчеты и обработки.
  4. Переходим в Макеты печатных форм.
  5. Находим в списке макет, соответствующий акту сверки (например, "Акт сверки взаимных расчетов").
  6. Нажимаем кнопку Открыть или Редактировать.
  7. В открывшемся окне макета можем вносить изменения: добавлять или изменять текст, изменять шрифт, добавлять логотип, корректировать размеры колонок и строк.

Ограничения данного подхода:

Заключение

Итак, мы выяснили, что для того чтобы иметь одновременно типовую и свою модифицированную печатную форму акта сверки взаимных расчетов в 1С:Бухгалтерии предприятия 3.0, необходимо использовать либо Внешние Печатные Формы (ВПФ), либо Расширения Конфигурации. Оба эти метода требуют работы в конфигураторе и наличия навыков программирования на встроенном языке 1С. ВПФ подойдут, если вы хотите создать полностью независимую форму. Расширения предпочтительнее для более глубокой интеграции и модификации существующих команд печати.

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

← На главную