В практике программиста 1С часто возникает задача переноса полезного функционала из одной конфигурации в другую. Одним из таких примеров является функция Печать на конверте, которая стандартно присутствует в «Бухгалтерии предприятия», но может отсутствовать в отраслевых решениях, таких как «Управление теплосетью». Разберем подробно, как интегрировать общую форму печати и вывести соответствующую кнопку в интерфейс справочника.
Прежде всего, проанализируем ситуацию. У нас есть общая форма НастройкаПечатиКонвертов, которую мы скопировали из другой базы. Наша цель — сделать так, чтобы в справочнике Контрагенты появилась кнопка, открывающая эту форму с предзаполненными данными выбранного клиента. Существует два основных способа реализации: прямой вызов формы через команду на форме элемента и использование механизмов Библиотеки стандартных подсистем (БСП).
В современных конфигурациях 1С кнопки печати крайне редко добавляются вручную непосредственно в редакторе формы. Для этого используется программный интерфейс БСП, который автоматически формирует подменю «Печать». Рассмотрим, как это реализовать.
Для начала нам необходимо внести изменения в Модуль менеджера справочника Контрагенты. Найдем или создадим в нем процедуру ДобавитьКомандыПечати. Рассмотрим пример кода, который регистрирует нашу новую команду:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Описание команды для открытия формы печати конверта
Команда = КомандыПечати.Добавить();
Команда.Идентификатор = "ПечатьНаКонверте";
Команда.Представление = НСтр("ru = 'Печать на конверте'");
Команда.ПроверкаПроведенияПередПечатью = Ложь;
Команда.Порядок = 100;
// Указываем, что команда открывает форму
Команда.ТипВызова = "ОткрытиеФормы";
Команда.Менеджер = "ОбщаяФорма.НастройкаПечатиКонвертов";
КонецПроцедуры
Этот метод хорош тем, что кнопка автоматически появится во всех формах справочника (в списке и в карточке элемента), где выведено стандартное подменю печати.
Если конфигурация не использует БСП или вам нужно жестко закрепить кнопку в определенном месте формы, разберем вариант с ручным созданием команды. Проанализируем шаги:
Контрагенты.ПечатьНаКонверте.Теперь пропишем код вызова нашей общей формы в модуле формы:
&НаКлиенте
Процедура ПечатьНаКонверте(Команда)
// Подготовим параметры, чтобы форма знала, для какого контрагента печатать
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ИсточникДанных", Объект.Ссылка);
// Открываем общую форму
ОткрытьФорму("ОбщаяФорма.НастройкаПечатиКонвертов", ПараметрыФормы);
КонецПроцедуры
Просто скопировать форму недостаточно. Выясним причину возможных ошибок после переноса. Как правило, код общей формы обращается к общим модулям исходной конфигурации. Проанализируем ситуацию: если в коде встречаются вызовы типа ОбщегоНазначенияБП.ПолучитьАдрес(), а в вашей конфигурации такого модуля нет, программа выдаст ошибку.
Что нужно проверить при копировании:
Общих макетах. Проверьте свойства формы и найдите, откуда подтягивается макет.КонтактнаяИнформация.Поскольку «Управление теплосетью» — это тиражное решение, настоятельно рекомендуем вносить все изменения через Расширение конфигурации. Это позволит вам беспрепятственно обновлять основную базу.
Для этого выполним следующие действия:
Контрагенты (достаточно добавить только модуль менеджера или нужную форму).ДобавитьКомандыПечати, в модуле менеджера расширения используйте аннотацию &После для встраивания своей команды в общий список.Рассмотрим подробнее, как передать данные из справочника в форму. Когда мы вызываем ОткрытьФорму, в обработчике ПриСозданииНаСервере самой общей формы нам нужно принять переданную ссылку и заполнить поля (Кому, Куда, Индекс). Рассмотрим примерный фрагмент кода в модуле общей формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ИсточникДанных") Тогда
КонтрагентСсылка = Параметры.ИсточникДанных;
// Получаем данные контрагента
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.НаименованиеПолное КАК Наименование,
| Контрагенты.КонтактнаяИнформация.(
| Представление КАК Адрес,
| Тип КАК ТипКИ
| )
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", КонтрагентСсылка);
// Далее следует логика обработки результата запроса и заполнения реквизитов формы
КонецЕсли;
КонецПроцедуры
После того как вы добавили код в модуль менеджера или на форму, кнопка может не появиться сразу. Выясним причину: в информационных базах на БСП список команд печати часто кэшируется. Чтобы обновить кэш, можно воспользоваться одним из способов:
/С ЗапуститьОбновлениеИнформационнойБазы.Таким образом, мы разобрали комплексный подход к добавлению общей формы в объекты конфигурации. Сочетая использование стандартов БСП и механизмы расширений, вы создадите надежное решение, которое будет легко поддерживать в будущем.