Шпаргалка (БСП). Добавление в новый документ механизма печати дополнительных печатных форм

Постоянно приходится вспоминать, как добавить механизм печати (БСП) в новый документ.
Поэтому решил написать шпаргалку.

1. В форму документа добавить процедуры:

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

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

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

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

 

2. Добавить в события формы документа:

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

 

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

 
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область Печать

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

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

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

ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);

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

Функция ДоступныеДляШаблоновПечатныеФормы() Экспорт

МассивДоступныхПечатныхФорм = Новый Массив;

Возврат МассивДоступныхПечатныхФорм

КонецФункции

#КонецОбласти

#КонецЕсли

 

4. В общий модуль УправлениеПечатьюПереопределяемый в процедуру ПриОпределенииОбъектовСКомандамиПечати добавить строчку.

 
Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт

СписокОбъектов.Добавить(Документы.НовыйДокумент);

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

 

5. В модуль дополнительной печатной формы добавить процедуры

 
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

Функция СведенияОВнешнейОбработке() Экспорт

СведенияОВнешнейОбработке = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
СведенияОВнешнейОбработке.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма());
СведенияОВнешнейОбработке.Вставить("Назначение", ПолучитьНазначениеОбработки());
СведенияОВнешнейОбработке.Вставить("Наименование", "Новый документ");
СведенияОВнешнейОбработке.Вставить("Версия", "1.0");
СведенияОВнешнейОбработке.Вставить("Информация", "Новый документ");
СведенияОВнешнейОбработке.Вставить("БезопасныйРежим", Ложь);
СформироватьСписокКоманд(СведенияОВнешнейОбработке.Команды);

Возврат СведенияОВнешнейОбработке;

КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НовыйДокумент");

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

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

#КонецОбласти

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

Док = МассивОбъектов[0];

//Тут заполняем печатную форму
//Макет    =  ПолучитьМакет("Макет");
//ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
//ТабличныйДокумент.Вывести(ОбластьЗаголовок);

ТабличныйДокумент = Новый ТабличныйДокумент;
Возврат ТабличныйДокумент;

КонецФункции

#Область СлужебныеПроцедурыИФункции

Функция ПолучитьНазначениеОбработки()

Результат = Новый Массив;

Результат.Добавить("Документ.НовыйДокумент");

Возврат Результат;

КонецФункции

Функция ПолучитьСтруктуруТаблицыКоманд()

Результат = Новый ТаблицаЗначений;

Результат.Колонки.Добавить("Представление",   Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Идентификатор",   Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("Использование",   Новый ОписаниеТипов("Строка"));
Результат.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Результат.Колонки.Добавить("Модификатор",   Новый ОписаниеТипов("Строка"));

Возврат Результат;

КонецФункции

Процедура ДобавитьКоманду(Команды, Идентификатор, Представление, Использование, ПоказыватьОповещение = Ложь, Модификатор = Неопределено)

НоваяКоманда = Команды.Добавить();

НоваяКоманда.Идентификатор   = Идентификатор;
НоваяКоманда.Представление   = Представление;
НоваяКоманда.Использование   = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор   = Модификатор;

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

Процедура СформироватьСписокКоманд(Команды)

ДобавитьКоманду(Команды, "НовыйДокумент", "Новый документ", ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(), Истина);

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

#КонецОбласти

#КонецЕсли

 

6. В форму списка документа добавить процедуры:

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

#Область ОбработчикиКомандФормы

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

УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Элементы.Список);

КонецПроцедуры
// Конец СтандартныеПодсистемы.Печать

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)

СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);

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

#КонецОбласти

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

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

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

Добавить в командную панель ПодменюПечать:

Тестировал на:

1С:Предприятие 8.3 (8.3.13.1644)

1С:Комплексная автоматизация 2 (2.4.6.207)

12 Comments

  1. MSK_Step

    класс, надо такие же сделать на версионирование, дату запрета редактирования и другие полезные фишки

    Reply
  2. Sergafan10

    (1) с версионированием каждый раз велосипед изобретать приходится))

    Reply
  3. dock

    Для идеальности не хватает только указания версии БСП….

    Автору огромный плюс!

    Reply
  4. ColaKola

    чем вас не устроила ссылка на официальную документацию в избранном?

    Reply
  5. Labotamy

    ИТС не предлагать?

    Reply
  6. John_d

    (1) Версионирование

    1. Добавить Новый объект в Подписки на события «ЗаписатьВерсиюДокумента»

    2. Добавить Новый объект в Определяемые типы «ВерсионируемыеДанные»

    3. В режиме предприятия настроить хранение данных:

    Администрирование -> Общие настройки -> История изменений -> Настройки хранения

    В списке объектов найти новый объект и поставить напротив него «При записи»

    Reply
  7. MSK_Step

    (5)ахаха, вы сравнили, тут все четко разложено, там надо вникать. Я уверен на 100%, что вы у себя при разработке нового документа забиваете на все версионирования, даты запрета, рлс потому что неохота лезть на итс))

    Reply
  8. MSK_Step

    (6) Вы забыли про код в форме при создание на сервере

    // СтандартныеПодсистемы.ВерсионированиеОбъектов

    ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);

    // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

    и другие нюансы, про которые незнаете и надо внимательно читать на ИТС

    Как для этого такие «Подсказки» помогают, когда ночью уже голова не соображает, то такие пошаговые выручают, так как зачем это все помнить

    Reply
  9. Labotamy

    (7)На чем основана Ваша 100% уверенность? На собственном неумении читать документацию?

    Крайне рекомендую https://its.1c.ru/db/bsp302doc#content:53:1

    И особенно

    https://its.1c.ru/db/bsp302doc#content:53:1:issogl2_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%­BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4_%D0%BF%D0%B5%D­1%87%D0%B0%D1%82%D0%B8_%D0%B2_%D1%80%D0%B0%D1%81%D1%88%D0%B8­%D1%80%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BA%D0%BE%D0%BD%D1%84%D0%B­8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8

    Reply
  10. Labotamy

    Не увидел указания под какую версию БСП этот «склерозник»?

    Reply
  11. wolfsoft

    Как уже писали в комментариях, вам для каждой версии БСП придётся писать отдельные шпаргалки.

    Reply
  12. grayskin

    Не забыть еще в Свойствах Формы События Процедуры прописать

    Reply

Leave a Comment

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