Как добавить возможность печати конвертов из справочника Контрагенты в произвольной конфигурации 1С

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

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

Анализ исходной задачи и выбор стратегии

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

Способ 1. Использование подсистемы Печать (стандарт БСП)

В современных конфигурациях 1С кнопки печати крайне редко добавляются вручную непосредственно в редакторе формы. Для этого используется программный интерфейс БСП, который автоматически формирует подменю «Печать». Рассмотрим, как это реализовать.

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


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

Этот метод хорош тем, что кнопка автоматически появится во всех формах справочника (в списке и в карточке элемента), где выведено стандартное подменю печати.

Способ 2. Создание команды непосредственно на форме элемента

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

  1. Откроем Форму элемента справочника Контрагенты.
  2. Перейдем на закладку Команды и создадим новую команду, назовем ее ПечатьНаКонверте.
  3. Перетащим созданную команду на панель действий формы или в командную панель, чтобы визуализировать кнопку.
  4. В свойстве команды Действие создадим клиентский обработчик.

Теперь пропишем код вызова нашей общей формы в модуле формы:


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

Обработка зависимостей и перенос кода

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

Что нужно проверить при копировании:

Использование расширений для сохранения возможности обновлений

Поскольку «Управление теплосетью» — это тиражное решение, настоятельно рекомендуем вносить все изменения через Расширение конфигурации. Это позволит вам беспрепятственно обновлять основную базу.

Для этого выполним следующие действия:

  1. Создадим новое расширение в базе.
  2. Добавим в расширение справочник Контрагенты (достаточно добавить только модуль менеджера или нужную форму).
  3. Создадим в расширении новую Общую форму и скопируем в нее содержимое (реквизиты и код) из формы-источника.
  4. Если используется метод с ДобавитьКомандыПечати, в модуле менеджера расширения используйте аннотацию &После для встраивания своей команды в общий список.

Получение данных контрагента для печати

Рассмотрим подробнее, как передать данные из справочника в форму. Когда мы вызываем ОткрытьФорму, в обработчике ПриСозданииНаСервере самой общей формы нам нужно принять переданную ссылку и заполнить поля (Кому, Куда, Индекс). Рассмотрим примерный фрагмент кода в модуле общей формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("ИсточникДанных") Тогда
        КонтрагентСсылка = Параметры.ИсточникДанных;
        
        // Получаем данные контрагента
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    Контрагенты.НаименованиеПолное КАК Наименование,
            |    Контрагенты.КонтактнаяИнформация.(
            |        Представление КАК Адрес,
            |        Тип КАК ТипКИ
            |    )
            |ИЗ
            |    Справочник.Контрагенты КАК Контрагенты
            |ГДЕ
            |    Контрагенты.Ссылка = &Ссылка";
        
        Запрос.УстановитьПараметр("Ссылка", КонтрагентСсылка);
        // Далее следует логика обработки результата запроса и заполнения реквизитов формы
    КонецЕсли;
    
КонецПроцедуры

Регистрация изменений в интерфейсе

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

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

← На главную