При разработке конфигураций на платформе 1С:Предприятие 8.3 с нуля (без использования Библиотеки стандартных подсистем — БСП) программисты часто сталкиваются с ограничением стандартного метода Показать() для табличного документа. Этот метод открывает системное окно, которое невозможно кастомизировать: нельзя добавить свои кнопки, изменить состав командной панели или программно управлять поведением формы. Разберем, как создать полноценный интерфейс для работы с печатными формами самостоятельно.
Рассмотрим ситуацию, когда печать реализована классическим способом через процедуру в модуле команды или формы. Проанализируем типичный код, который приводит к открытию модального окна без управляемой панели:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ТабДок = Новый ТабличныйДокумент;
СформироватьНаСервере(ТабДок, ПараметрКоманды);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать(); // Вот этот метод генерирует форму "на лету" без панели
КонецПроцедуры
Для того чтобы получить полный контроль над внешним видом окна, нам необходимо отказаться от вызова ТабДок.Показать() и разработать собственную Общую форму для просмотра отчетов и печатных документов.
Выясним, как должна быть устроена форма, чтобы она могла принимать любой табличный документ. Выполним следующие действия:
ПросмотрПечатныхФорм.ПечатныйЛист. Установим для него тип данных ТабличныйДокумент.ПечатныйЛист в левую часть (дерево элементов формы). Платформа автоматически создаст элемент типа Поле табличного документа.ОтображатьСетку, установим ТолькоПросмотр и выберем АвтоМасштаб.Теперь самое главное — создание той самой панели управления, о которой спрашивал автор темы. Рассмотрим, как добавить стандартные функции печати, масштабирования и поиска на форму:
Перейдем на закладку Команды в редакторе формы. Нас интересует вложенная закладка Стандартные команды. Развернем ветку, относящуюся к нашему элементу ПечатныйЛист. Здесь собраны все встроенные действия, которые платформа умеет совершать с табличным документом.
Выберем нужные команды и перетянем их в командную панель формы (или создадим для них отдельную Группу — Командная панель):
Печать — вызов стандартного диалога настроек принтера.ПечатьПоУмолчанию — быстрая отправка на принтер.ПредварительныйПросмотр — режим просмотра перед печатью.Найти — поиск текста в документе.СохранитьКак — экспорт в PDF, Excel и другие форматы.Важный нюанс: если мы хотим, чтобы кнопки выглядели как в типовых решениях, в свойствах группы командной панели следует установить параметр Вид в значение Командная панель, а свойство Источник команд привязать к нашему элементу формы ПечатныйЛист. Тогда команды добавятся автоматически.
Чтобы форма «подхватила» сформированный нами документ, необходимо правильно организовать передачу параметров. Проанализируем код вызова формы из документа или справочника:
&НаКлиенте
Процедура Печать(ПараметрКоманды)
// 1. Формируем табличный документ на сервере
ТабДок = СформироватьПечатнуюФорму(ПараметрКоманды);
// 2. Подготавливаем структуру параметров для открытия формы
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ТабДок", ТабДок);
// 3. Открываем нашу кастомную форму вместо стандартного Показать()
ОткрытьФорму("ОбщаяФорма.ПросмотрПечатныхФорм", ПараметрыОткрытия);
КонецПроцедуры
В модуле самой общей формы ПросмотрПечатныхФорм необходимо обработать эти параметры при инициализации. Напишем обработчик ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверяем, передан ли документ в параметрах
Если Параметры.Свойство("ТабДок") Тогда
// Заполняем реквизит формы данными
ПечатныйЛист = Параметры.ТабДок;
КонецЕсли;
КонецПроцедуры
Разберем продвинутые настройки, которые сделают работу пользователя с печатной формой более профессиональной, даже если вы не используете БСП.
Если вы хотите добавить кнопку «Отправить по почте» или «Сохранить в архив», используйте метод Записать(). Рассмотрим пример сохранения документа в формате PDF:
ПутьКФайлу = "C:\Temp\Document.pdf";
ПечатныйЛист.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Частая жалоба пользователей в самописных конфигурациях — «принтер постоянно сбрасывается на настройки по умолчанию». Чтобы 1С запоминала выбранный принтер, ориентацию страницы и поля для конкретного отчета, используйте свойство КлючПараметровПечати. Установите уникальную строку для каждой печатной формы:
ТабДок.КлючПараметровПечати = "УникальныйКлюч_ПечатьСчетаНаОплату";
В собственной форме вы можете реализовать событие Выбор для поля табличного документа. Если в ячейку макета в свойство ПараметрРасшифровки записана ссылка на объект (например, на документ или справочник), то при двойном клике пользователь сможет «провалиться» в этот объект. В системном окне Показать() управлять этим процессом значительно сложнее, а в своей форме вы полностью контролируете логику открытия.
Таким образом, создание отдельной формы для вывода на печать — это стандартный и наиболее правильный путь для управляемого приложения 1С. Это позволяет не только вывести нужную панель кнопок, но и значительно расширить функционал взаимодействия пользователя с документом.