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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

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

Рассмотрим пошаговый алгоритм:

  1. Находим объект внешней обработки в информационной базе (например, в справочнике ВнешниеОбработки).
  2. Извлекаем двоичные данные из реквизита хранения.
  3. Записываем данные во временный файл на диске.
  4. Подключаем внешнюю обработку и вызываем её метод.

Пример кода для реализации данного метода:


ВнешнийОтчет = Справочники.ВнешниеОбработки.НайтиПоНаименованию(Наименование);
Если ВнешнийОтчет.Пустая() Тогда
    Предупреждение("Не найден внешний отчет """+Наименование+"""");
Иначе
    ИмяФайла = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ВнешнийОтчет.ХранилищеВнешнейОбработки.Получить();
    ДвоичныеДанные.Записать(ИмяФайла);
    Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
    Если Не Форма = Неопределено Тогда
        Форма.Открыть();
    КонецЕсли;
КонецЕсли;

Метод второй: вызов метода печати через объект внешней обработки

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

Разберем пример реализации на стороне клиента и сервера:


&НаКлиенте
Процедура Х_ПечатьНажатие(Команда)
    ОбъектыНазначения = Новый Массив;
    ОбъектыНазначения.Добавить(Объект.Ссылка);
    ВПФ = ПолучитьВПФпоИмени("НаименованиеВашейПФ");
    ОбъектыПечати = Новый СписокЗначений;
    МассивПечатныхФорм = ПечатьФормыНаСервере(ОбъектыНазначения, ВПФ, ОбъектыПечати);
    ТабДок = МассивПечатныхФорм[0].ТабличныйДокумент;
    ТабДок.Показать();
КонецПроцедуры

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

Рекомендации по реализации

При внедрении данных решений важно учитывать следующие аспекты:

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

← На главную