Реализация команды печати "Библиотека стандартных подсистем", редакция 3.1 (3.1.1.151)


В новом релизе «БСП» произошли изменения в процедурах общих модулей, связанных с механизмом печати, и в процедурах их вызова в формах документов и в формах списков. Рассмотрим их.

Предыстория:

Пишем свою конфигурацию с внедрением "БСП" и вот дошло дело до реализации механизма печати. Была найдена статья на Инфостарте //infostart.ru/public/674880/ но, как оказалось, к "БСП" (3.1.1.151) она не подходит, поиски в интернете тоже не дали нужного результата.

Реализация команды печати "Библиотека стандартных подсистем", редакция 3.1 (3.1.1.151)

Пример: нужно на форме документа "Счет" реализовать печать документа. 

1. На форме документа в командной панели создаем "ГруппуПечать"

В форме документа создаем процедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);

КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

2. В Общем модули "УправлениеПечатьюПереопределяемый"

// Определяет объекты конфигурации, в модулях менеджеров которых размещена процедура ДобавитьКомандыПечати,
// формирующая список команд печати, предоставляемых этим объектом.
// Синтаксис процедуры ДобавитьКомандыПечати см. в документации к подсистеме.
//
// Параметры:
//  СписокОбъектов - Массив - менеджеры объектов с процедурой ДобавитьКомандыПечати.
//
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
СписокОбъектов.Добавить(Документы.Счет);
КонецПроцедуры

3. В документе Модуль менеджера

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "Счёт";
КомандаПечати.Представление = НСтр("ru = 'Счёт'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

КонецПроцедуры


// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов  - Массив    - ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати - Структура - дополнительные настройки печати;
//  КоллекцияПечатныхФорм - ТаблицаЗначений - сформированные табличные документы (выходной параметр).
//  ОбъектыПечати         - СписокЗначений  - значение - ссылка на объект;
//                                            представление - имя области в которой был выведен объект (выходной
//                                                            параметр);
//  ПараметрыВывода       - Структура       - дополнительные параметры сформированных табличных документов (выходной
//                                            параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

// Печать накладной на перемещение.
НужноПечататьМакет = УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Счёт");
Если НужноПечататьМакет Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"Счёт",
НСтр("ru = 'Счёт'"),
СформироватьПечатнуюФормуСчета(МассивОбъектов, ОбъектыПечати),
,
"Документ.Счёт.ПФ_MXL_МакетСчет");
КонецЕсли;

КонецПроцедуры

И сама функция в Модуле менеджера где формируется печатная форма

Функция СформироватьПечатнуюФормуСчета(МассивОбъектов, ОбъектыПечати) Экспорт

ТекстЗапроса =
"ВЫБРАТЬ
| Счет.Ссылка КАК Ссылка,
| Счет.ВерсияДанных КАК ВерсияДанных,
| Счет.ПометкаУдаления КАК ПометкаУдаления,
| Счет.Номер КАК Номер,
| Счет.Дата КАК Дата,
| Счет.Проведен КАК Проведен,
| Счет.Статус КАК Статус,
| Счет.Отдел КАК Отдел,
| Счет.Сделка КАК Сделка,
| Счет.Партнер КАК Партнер,
| Счет.СуммаСчета КАК СуммаСчета,
| Счет.СуммаПеревода КАК СуммаПеревода,
| Счет.ПервыйСчет КАК ПервыйСчет,
| Счет.БизнесРегион КАК БизнесРегион,
| Счет.Магазин КАК Магазин,
| Счет.Представление КАК Представление,
| Счет.МоментВремени КАК МоментВремени
|ИЗ
| Документ.Счет КАК Счет
|ГДЕ
| Счет.Ссылка В (&СписокДокументов)";

Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("СписокДокументов", МассивОбъектов);

Результат = Запрос.Выполнить().Выбрать();
КонецФункции

В итоге получится

Может, что-то упустил, может, что-то делаю не правильно)))

4 Comments

  1. leosoft

    А вот статья только что была https://infostart.ru/public/1132897/

    Reply
  2. CheBurator

    ничего не понял.

    для подключения печатной формы с использованием стандартных механизмов — надо менять код типовой конфигурации?

    Reply
  3. wolfsoft

    (2) Это не типовая, это «своя» конфигурация. Как вариант — для добавления механизма печати в свой документ.

    Reply
  4. paulis

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *