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

24.12.20

Разработка - БСП (Библиотека стандартных подсистем)

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

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)

 

БСП печать кнопка механизм печатные формы

См. также

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    595    PROSTO-1C    3    

8

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    1307    MadRave    11    

20

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1291    MadRave    1    

16

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1000    n_mezentsev    10    

8

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    3736    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    4833    PROSTO-1C    12    

50
Отзывы
6. John_d 5877 11.10.19 10:34 Сейчас в теме
(1) Версионирование
1. Добавить Новый объект в Подписки на события "ЗаписатьВерсиюДокумента"
2. Добавить Новый объект в Определяемые типы "ВерсионируемыеДанные"
3. В режиме предприятия настроить хранение данных:
Администрирование -> Общие настройки -> История изменений -> Настройки хранения
В списке объектов найти новый объект и поставить напротив него "При записи"
Merkalov; shu_vol; sergpogo; echo77; smit1c; olo_lo4; Yan_Malyakov; Риник; AgeevVG; fight1c; glorry; +11 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Vasvas05 27 10.10.19 15:15 Сейчас в теме
класс, надо такие же сделать на версионирование, дату запрета редактирования и другие полезные фишки
Bob_Dobr; rpgshnik; myoker; 2711640; Светлый ум; DrAku1a; Sergafan10; +7 Ответить
2. Sergafan10 10.10.19 15:18 Сейчас в теме
(1) с версионированием каждый раз велосипед изобретать приходится))
6. John_d 5877 11.10.19 10:34 Сейчас в теме
(1) Версионирование
1. Добавить Новый объект в Подписки на события "ЗаписатьВерсиюДокумента"
2. Добавить Новый объект в Определяемые типы "ВерсионируемыеДанные"
3. В режиме предприятия настроить хранение данных:
Администрирование -> Общие настройки -> История изменений -> Настройки хранения
В списке объектов найти новый объект и поставить напротив него "При записи"
Merkalov; shu_vol; sergpogo; echo77; smit1c; olo_lo4; Yan_Malyakov; Риник; AgeevVG; fight1c; glorry; +11 Ответить
8. Vasvas05 27 11.10.19 11:50 Сейчас в теме
(6) Вы забыли про код в форме при создание на сервере
// СтандартныеПодсистемы.ВерсионированиеОбъектов
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

Как для этого такие "Подсказки" помогают, когда ночью уже голова не соображает, то такие пошаговые выручают, так как зачем это все помнить
13. Риник 15 23.01.20 13:35 Сейчас в теме
3. dock 44 10.10.19 19:11 Сейчас в теме
Для идеальности не хватает только указания версии БСП....
Автору огромный плюс!
user811769; Alex_1066; Риник; +3 Ответить
4. ColaKola 14 10.10.19 22:05 Сейчас в теме
чем вас не устроила ссылка на официальную документацию в избранном?
Casey1984; dhurricane; aegoncharov; Labotamy; Йожкин Кот; Sashares; asupsam; +7 4 Ответить
5. Labotamy 10.10.19 22:21 Сейчас в теме
ИТС не предлагать?
Casey1984; Sashares; +2 Ответить
7. Vasvas05 27 11.10.19 11:43 Сейчас в теме
(5)ахаха, вы сравнили, тут все четко разложено, там надо вникать. Я уверен на 100%, что вы у себя при разработке нового документа забиваете на все версионирования, даты запрета, рлс потому что неохота лезть на итс))
unknown181538; nekit_rdx; milov.aleksey; +3 1 Ответить
9. Labotamy 11.10.19 13:26 Сейчас в теме
10. Labotamy 11.10.19 13:30 Сейчас в теме
Не увидел указания под какую версию БСП этот "склерозник"?
Дмитрий74Чел; aegoncharov; +2 Ответить
11. wolfsoft 2421 14.10.19 07:59 Сейчас в теме
Как уже писали в комментариях, вам для каждой версии БСП придётся писать отдельные шпаргалки.
14. AlX0id 13.02.20 09:50 Сейчас в теме
(11)
Если бы авторы БСП хоть чуть-чуть думали головой о последствиях изменений в оной - пришлось бы реже, чем для каждой. Но де-факто да.
12. grayskin 2 20.11.19 10:18 Сейчас в теме
Не забыть еще в Свойствах Формы События Процедуры прописать
Прикрепленные файлы:
gucci76; ichhh; +2 Ответить
15. echo77 1876 25.10.20 11:26 Сейчас в теме
(0) Я один вижу весь код в одну строку?
16. V1V 112 30.10.20 09:22 Сейчас в теме
да, код в одну строку.
возможно автор просто так код пишет )))
v.merkulov; +1 Ответить
17. vissarion249 08.12.20 04:37 Сейчас в теме
(16) Просто он на лету обфусцирует код
18. R_o_n_n_y 68 27.03.21 15:48 Сейчас в теме
В новой БСП можно сократить код подключения обработки, достаточно:
Функция СведенияОВнешнейОбработке() Экспорт

Процедуры/функции ПолучитьСтруктуруТаблицыКоманд(); ДобавитьКоманду(); СформироватьСписокКоманд(Команды) не нужны
Yan_Malyakov; +1 Ответить
19. Jungle Murzik 08.05.21 15:32 Сейчас в теме
Еще можно было бы дать ссылку на ИТС: https://its.1c.ru/db/bsp22doc#content:219:1
Там, кстати, написано, почему не обязательно, чтобы в списке присутствовала Ссылка
20. Romyl01 38 16.10.21 12:53 Сейчас в теме
21. lesv 41 25.11.21 13:24 Сейчас в теме
22. jan-pechka 425 06.04.22 10:19 Сейчас в теме
Автор забыл, что если это внешняя печатная форма из документа, то нужно этот новый документ зарегистрировать в ОпределяемыеТипы "ОбъектСДополнительнымиКомандами"
!!!! и после этого запустить обр-ку из БСП "ОбновлениеВспомогательныхДанных"
!!! и еще очень важно на форме создать реквизит "ПараметрыПодключаемыхКоманд" с типом Произвольный.

п.с. а вот с запуском БСП-шной обработки "ОбновлениеВспомогательныхДанных" в переписанных конфигурациях (особенно если в ней множество собственных ролей) - может быть облом....А ведь по задумке 1с-ников именно эта обработка должна прописать в справочник "ОбъектыМетаданных" наш новый документ.
п.с.2. у меня данная обработка не сработала, в справочник "ОбъектыМетаданных" записала через перезапуск 1с с параметрами "/C ЗапуститьОбновлениеИнформационнойБазы" , читаю справочник, вижу зарегистрированный самописный документ, но его нету в справочнике "ДополнительныеОтчетыИОбработки"-> "НазначениеОбъекта" (это чтобы запустить Печатную форму через внешнюю обработку из документа-как 2-й вариант).....хотя я же зарегистрировала этот док. в ОпределяемыеТипы "ОбъектСДополнительнымиКомандами"....заколдованный круг!

Вывод: отвертеться не получится и придется ремонтировать/искать ошибки в БСП, к-й вшит в конфигурацию....
свою проблему пытаюсь решить здесь: https://forum.infostart.ru/forum29/topic279679/#message2809276
Yan_Malyakov; +1 Ответить
23. jan-pechka 425 06.04.22 13:19 Сейчас в теме
"// СтандартныеПодсистемы.Печать
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуПечати(Команда)
УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект);
КонецПроцедуры "


на моей БСП 3.0.1.428 в конфигураторе у типовых документов стоит:

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


т.е. //УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма); - устаревшая.............

может кто знает: где искать коды под конкретные версии БСП?....................
unknown181538; +1 Ответить
24. newvideo 01.07.22 15:01 Сейчас в теме
в типовых на форме списка нет никаких ссылок и печать работает, ссылка на форме не всегда нужна
25. ryapa 21.10.22 09:52 Сейчас в теме
ПоложениеКоманднойПанели поставить Верх

Огромное спасибо!!! Вынырнул в полнейшем отчаянии из многочасового спагетти-трипа по БСП, и случайно наткнулся на эту статью.
testnv0; John_d; +2 Ответить
26. mrKHrom 17.02.23 16:50 Сейчас в теме
27. igor_gk 49 28.08.23 19:55 Сейчас в теме
У меня только один вопрос: Почему это так? Где мы свернули не туда?
Merkalov; unknown181538; +2 Ответить
28. unknown181538 158 01.04.24 14:20 Сейчас в теме
(27) оно еще и не полностью актуально... Т.е. эта "библиотека" требует постоянно актуализации.
29. artbear 1562 05.09.24 15:31 Сейчас в теме
(0) вот эту строку зря добавили

СведенияОВнешнейОбработке.Вставить("БезопасныйРежим", Ложь);

для печатных форм это точно не нужно и только вызывает лишние вопросы у тех, кто будет внедрять обработку.

по умолчанию нужно или Истина или вообще удалить.
Оставьте свое сообщение