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

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

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 не будет опубликован. Обязательные поля помечены *