При разработке сложных интерфейсов или эффективных автоматизированных рабочих мест (АРМ) часто возникает необходимость полностью программно создавать формы. Одной из неочевидных задач в этом процессе является вызов стандартного окна предварительного просмотра для ПолеТабличногоДокумента. В отличие от обычной печати, где достаточно вызвать один метод, предварительный просмотр требует понимания того, как платформа 1С взаимодействует со стандартными командами элементов формы.
В рамках данной статьи мы подробно разберем несколько эффективных способов решения этой задачи, проанализируем нюансы работы с динамическими командными панелями и выясним, как обеспечить пользователю максимально удобный интерфейс «в один клик».
Рассмотрим наиболее правильный и «чистый» с точки зрения архитектуры 1С 8.3 метод. Если вы используете в работе специальный общий модуль для программного изменения форм, то знаете, что нам не обязательно писать сложный код для открытия самого окна просмотра. Платформа уже содержит готовую стандартную команду для ПолеТабличногоДокумента. Наша задача — правильно привязать к ней программно созданную кнопку.
Разберем по шагам, как это реализовать. Допустим, у нас есть программно созданный элемент формы с типом ПолеФормы и видом ПолеТабличногоДокумента, который называется РезультатПечати. Помните, что добавление реквизитов и элементов на управляемые формы требует строгого соблюдения последовательности инициализации. Чтобы добавить кнопку предварительного просмотра на программную командную панель, используем следующий подход:
// 1. Создаем кнопку на командной панели
НоваяКнопка = Элементы.Добавить("КнопкаПредварительныйПросмотр", Тип("КнопкаФормы"), Элементы.ГруппаКоманднаяПанель);
// 2. Привязываем кнопку к стандартной команде поля табличного документа
// Имя команды формируется строго по шаблону: Элементы.<ИмяПоля>.СтандартнаяКоманда.<ИмяКоманды>
НоваяКнопка.ИмяКоманды = "Элементы.РезультатПечати.СтандартнаяКоманда.ПредварительныйПросмотр";
// 3. Настраиваем отображение
НоваяКнопка.Заголовок = "Предварительный просмотр";
НоваяКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;
Проанализируем этот код. Основная хитрость здесь заключается в свойстве ИмяКоманды. Платформа автоматически связывает эту кнопку с механизмом предварительного просмотра конкретного поля. Нам не нужно описывать процедуру &НаКлиенте, так как 1С сама откроет нужное окно при нажатии. Этот способ идеально подходит для динамических АРМ, где состав кнопок зависит от прав пользователя или контекста задачи.
Иногда удобнее не добавлять каждую кнопку по отдельности, а заставить платформу самостоятельно вывести все доступные команды для печатной формы. Рассмотрим, как это сделать через свойства Автозаполнение и ИсточникКоманд.
Выясним причину, по которой у многих разработчиков этот способ не срабатывает сразу: для появления кнопок печати и просмотра командная панель должна «знать», чьи команды она отображает. Посмотрим на пример программной настройки:
// Создаем командную панель
Панель = Элементы.Добавить("КоманднаяПанельПечати", Тип("ГруппаФормы"), ЭтаФорма);
Панель.Вид = ВидГруппыФормы.КоманднаяПанель;
// Указываем источник команд - это критически важно!
Панель.ИсточникКоманд = Элементы.РезультатПечати;
// Включаем автозаполнение
Панель.Автозаполнение = Истина;
При такой настройке платформа автоматически добавит на панель кнопки «Печать», «Печать по умолчанию», «Параметры страницы» и «Предварительный просмотр». Преимущество этого метода в том, что при обновлении платформы или изменении состава стандартных команд ваша форма автоматически получит новые возможности без переписывания кода.
Бывают ситуации, когда предварительный просмотр нужно открыть не в текущей форме, а в отдельном стандартном окне просмотра 1С (аналог функции «Файл - Просмотр»). Напрямую вызвать режим «с линеечками» методом Показать() нельзя, но мы можем максимально приблизиться к этому результату.
Рассмотрим алгоритм действий:
ТабличныйДокумент в памяти.Показать() с нужным заголовком.
// Пример на стороне клиента
ПросмотрДок = Новый ТабличныйДокумент;
// Копируем содержимое из экранного поля (реквизит формы типа ТабличныйДокумент)
ПросмотрДок.Вывести(Объект.РезультатПечати);
// Настраиваем параметры перед показом
ПросмотрДок.ТолькоПросмотр = Истина;
ПросмотрДок.ОтображатьСетку = Ложь;
ПросмотрДок.Показать("Предварительный просмотр печатной формы");
Важно помнить, что метод Показать() открывает новую вкладку или окно в интерфейсе «Такси». Если ваша задача включает сложную верстку, например, нужно выполнить добавление картинок в строки табличного документа, убедитесь, что все картинки корректно вывелись в объект перед вызовом метода Показать().
Этот метод часто упоминается на форумах как «последняя надежда», когда стандартные средства недоступны. Он заключается в программной посылке нажатий клавиш Alt + Ф + Р (традиционный путь к просмотру в меню 1С). Однако мы крайне не рекомендуем использовать его в промышленной эксплуатации без крайней необходимости.
Проанализируем риски:
SendKeys чувствителен к текущему языку ввода.
// Только для Windows-клиента и обычных форм
WshShell = Новый COMОбъект("WScript.Shell");
ЭтаФорма.ТекущийЭлемент = Элементы.РезультатПечати;
WshShell.SendKeys("%");
WshShell.SendKeys("{Ф}");
WshShell.SendKeys("{Р}");
Для пользователей, которые привыкли работать с документами вне среды 1С, отличным решением будет программная конвертация в PDF. Также в некоторых сценариях может потребоваться программная конвертация отчетов 1С в графический формат для отправки в сторонние системы или мессенджеры.
Разберем классическую реализацию через PDF:
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
// Сохраняем табличный документ во временный файл
РезультатПечати.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
// Открываем файл приложением по умолчанию
ЗапуститьПриложение(ИмяФайла);
Этот метод исключает любые проблемы с интерфейсом 1С и предоставляет пользователю привычные инструменты Adobe Reader или веб-браузера для печати и масштабирования.
Подводя итог, можно сказать, что для современных управляемых форм лучшим решением является Способ №1 (привязка кнопки к СтандартнаяКоманда.ПредварительныйПросмотр). Если же вы разрабатываете решение в рамках БСП, рекомендуем изучить классический корректный пример внешней печатной формы, где механизмы взаимодействия с печатными формами уже стандартизированы.
Мы надеемся, что данный разбор помог вам разобраться в тонкостях управления печатными формами. Помните, что удобство пользователя — это не только наличие функции, но и предсказуемость поведения интерфейса. Использование стандартных команд платформы — самый короткий путь к созданию качественного продукта на базе 1С.