Как задать параметры внешней печатной формы в современных конфигурациях 1С?

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

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

Разберем по шагам, как можно изящно и правильно решить эту задачу, используя как встроенные механизмы БСП, так и программные хитрости.

Решение 1: Использование пользовательских макетов (Рекомендуемое в БСП)

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

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

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

Решение 2: Использование механизма "Дополнительные реквизиты"

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

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

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


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

КонецПроцедуры

Решение 3: Программная идентификация информационной базы

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

  1. По префиксу базы: Если базы обмениваются данными или просто имеют настроенные префиксы, мы можем прочитать константу с префиксом.
  2. По строке соединения: Функция СтрокаСоединенияИнформационнойБазы возвращает путь к базе (каталог или имя SQL-сервера).

Посмотрим на пример с использованием строки соединения:


Функция ОпределитьТипБазы()
    
    СтрокаБазы = СтрокаСоединенияИнформационнойБазы();
    
    Если СтрНайти(СтрокаБазы, "Base_Moscow") > 0 Тогда
        Возврат "Москва";
    ИначеЕсли СтрНайти(СтрокаБазы, "Base_Kazan") > 0 Тогда
        Возврат "Казань";
    КонецЕсли;
    
    Возврат "Основная";
    
КонецФункции

Решение 4: Создание формы настроек (ХранилищеНастроек)

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

Рассмотрим, как правильно зарегистрировать такую команду в функции СведенияОВнешнейОбработке, чтобы она не "засоряла" меню печати в документах, но была доступна администратору в справочнике:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработкиКлиентСервер.СведенияОВнешнейОбработке("2.2.2.1");
    // ... заполнение основных свойств ...
    
    // 1. Основная команда печати (привязывается к документам)
    КомандаПечати = ПараметрыРегистрации.Команды.Добавить();
    КомандаПечати.Представление = "Печать договора";
    КомандаПечати.Идентификатор = "ПечатьДоговора";
    КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    КомандаПечати.ПоказыватьОповещение = Истина;
    
    // 2. Команда настроек (НЕ привязывается к объектам, видна только в справочнике)
    КомандаНастройки = ПараметрыРегистрации.Команды.Добавить();
    КомандаНастройки.Представление = "Настройка параметров ВПФ";
    КомандаНастройки.Идентификатор = "ОткрытьНастройки";
    КомандаНастройки.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

При нажатии на команду настроек откроется форма вашей обработки. На этой форме вы можете разместить любые поля для ввода параметров. При сохранении вы используете стандартный объект ХранилищеОбщихНастроек, передавая в качестве ключа уникальный идентификатор (GUID) вашей подключенной обработки, чтобы при вызове процедуры печати корректно прочитать сохраненные значения.

Решение 5: Регистрация нескольких команд печати

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


Команда1 = ПараметрыРегистрации.Команды.Добавить();
Команда1.Представление = "Печать (Макет Москва)";
Команда1.Идентификатор = "ПечатьМосква";
// ...

Команда2 = ПараметрыРегистрации.Команды.Добавить();
Команда2.Представление = "Печать (Макет Казань)";
Команда2.Идентификатор = "ПечатьКазань";
// ...

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

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

← На главную