При разработке в среде 1С:Предприятие 8 очень часто возникает классическая задача: у нас уже есть готовый (или программно сформированный) табличный документ, и мы хотим вывести его на экран, используя красивое стандартное окно предварительного просмотра БСП (Библиотека Стандартных Подсистем). При этом нам не хочется регистрировать полноценную команду печати в справочнике дополнительных отчетов и обработок или жестко привязываться к механизмам конфигурации.
В этой статье мы подробно разберем, как решить эту задачу в управляемых формах, разграничим серверную и клиентскую логику, а также рассмотрим несколько удобных способов вызова формы печати БСП.
Прежде чем перейти к написанию кода, давайте проанализируем важный методологический нюанс. Автор темы упомянул серверную процедуру УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию. Важно понимать, как распределяются роли между клиентскими и серверными процедурами БСП:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию спроектирован для использования внутри экспортной процедуры Печать в модулях менеджеров объектов (документов, справочников). Этот метод заполняет серверную таблицу значений (коллекцию), которую БСП затем автоматически передает на клиентскую сторону.УправлениеПечатьюКлиент.Давайте подробно рассмотрим два основных программных сценария реализации этой задачи.
Это наиболее правильный и рекомендуемый способ. Мы задействуем функции общего модуля УправлениеПечатьюКлиент, что гарантирует совместимость решения при обновлениях БСП и избавляет от необходимости вручную формировать сложные структуры параметров формы.
Рассмотрим пошагово этот процесс. Сначала нам потребуется серверная функция, которая формирует и возвращает наш табличный документ. Затем на клиенте мы инициализируем коллекцию и откроем форму печати.
Проанализируем программный код:
&НаСервереБезКонтекста
Функция СформироватьТабличныйДокументНаСервере()
ТабДок = Новый ТабличныйДокумент;
// Здесь происходит формирование вашего табличного документа
// Для примера создадим простую область с текстом
Секция = ТабДок.ПолучитьОбластьМакета(Новый Рисунок); // или получение области из реального макета
// Заполняем параметры, выводим строки...
// В демонстрационных целях просто добавим тестовую строку
ТабДок.Область("R1C1").Текст = "Привет из программного кода БСП!";
ТабДок.Область("R1C1").Шрифт = Новый Шрифт(,,Истина);
Возврат ТабДок;
КонецФункции
&НаКлиенте
Процедура ВывестиДокументВФормуПечати(Команда)
// Шаг 1. Получаем готовый табличный документ с сервера
ТабДок = СформироватьТабличныйДокументНаСервере();
// Шаг 2. Создаем клиентскую коллекцию печатных форм
// Передаем уникальный идентификатор нашей печатной формы
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("МояУникальнаяПечатнаяФорма");
// Шаг 3. Заполняем свойства описания печатной формы
ПечатнаяФорма = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "МояУникальнаяПечатнаяФорма");
ПечатнаяФорма.ТабличныйДокумент = ТабДок;
ПечатнаяФорма.СинонимМакета = "Печать тестового документа"; // Заголовок вкладки в форме БСП
ПечатнаяФорма.Экземпляров = 1; // Количество копий по умолчанию
ПечатнаяФорма.ИмяФайлаПечатнойФормы = "ТестовыйДокумент"; // Имя файла при сохранении на диск
// Шаг 4. Открываем стандартную форму печати БСП
// Передаем коллекцию, параметры (могут быть Неопределено) и форму-владелец
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтаФорма);
КонецПроцедуры
Этот изящный способ отлично работает на большинстве современных версий БСП, обеспечивая полную работоспособность стандартного интерфейса печати (отправка на принтер, изменение масштаба, сохранение в файлы разных форматов).
Выясним, что делать в ситуациях, когда вы работаете со старой версией БСП, или по какой-то причине метод УправлениеПечатьюКлиент.ПечатьДокументов недоступен или ведет себя некорректно. В этом случае мы можем открыть общую форму ПечатьДокументов напрямую, самостоятельно подготовив и передав параметры её инициализации.
Рассмотрим структуру этого решения по шагам:
&НаКлиенте
Процедура ОткрытьФормуПечатиНапрямую(Команда)
// 1. Получаем сформированный табличный документ с сервера
ТабДок = СформироватьТабличныйДокументНаСервере();
// 2. Создаем стандартную структуру коллекции печатных форм БСП
КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяМакета");
// Заполняем свойства напрямую в первом элементе коллекции
КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок;
КоллекцияПечатныхФорм[0].СинонимМакета = "Произвольный заголовок";
// 3. Подготовка параметров открытия общей формы печати
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
ПараметрыОткрытия.Вставить("ИмяМенеджераПечати", ""); // Оставляем пустым, так как печатаем напрямую
ПараметрыОткрытия.Вставить("ИменаМакетов", "");
ПараметрыОткрытия.Вставить("ПараметрКоманды", Новый Массив); // Пустой массив параметров команд
ПараметрыОткрытия.Вставить("ПараметрыПечати", Новый Структура);
// Генерируем ключ уникальности, чтобы формы не затирали друг друга при повторном открытии
КлючУникальности = Строка(Новый УникальныйИдентификатор);
// 4. Интерактивный вызов формы БСП
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ЭтаФорма, КлючУникальности);
КонецПроцедуры
Такой подход обеспечивает максимальную гибкость и независимость кода от внутренних изменений логики клиентских общих модулей конкретного релиза БСП.
Помимо базового вывода печатной формы, мы можем гибко управлять поведением открываемого окна просмотра БСП через свойства структуры описания печатной формы:
ПолныйПутьКМакету (например, указать "Документ.РеализацияТоваровУслуг.ПФ_MXL_Накладная"), БСП предоставит пользователю штатную возможность отредактировать печатную форму прямо в окне предпросмотра (включится режим изменения макета в режиме Предприятие). Если оставить этот параметр пустым, документ откроется «только для чтения» и базового просмотра.УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Счет, Накладная, Акт")), а затем заполнить свойства для каждого элемента коллекции. В форме БСП они отобразятся на отдельных удобных вкладках.Используя предложенные методики, вы сможете легко и профессионально интегрировать вывод любых программно сформированных отчетов и печатных форм в типовой интерфейс БСП, обеспечивая пользователям привычную и стабильную рабочую среду.