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