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

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 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1114    dimanich70    6    

13

Заполнение поля адреса в своей обработке [БСП]

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

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    638    FilippovRI    0    

14

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2257    YA_418728146    11    

38

1С:БСП Дополнительные реквизиты и сведения

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

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    4652    PROSTO-1C    5    

45

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

БСП (Библиотека стандартных подсистем) Мероприятия Бесплатно (free)

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3754    0    Infostart    0    

20

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4729    mrXoxot    11    

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

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

Как для этого такие "Подсказки" помогают, когда ночью уже голова не соображает, то такие пошаговые выручают, так как зачем это все помнить
13. Риник 13 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 3 Ответить
5. Labotamy 10.10.19 22:21 Сейчас в теме
ИТС не предлагать?
Casey1984; Sashares; +2 Ответить
7. Vasvas05 22 11.10.19 11:43 Сейчас в теме
(5)ахаха, вы сравнили, тут все четко разложено, там надо вникать. Я уверен на 100%, что вы у себя при разработке нового документа забиваете на все версионирования, даты запрета, рлс потому что неохота лезть на итс))
nekit_rdx; milov.aleksey; +2 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 1868 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 66 27.03.21 15:48 Сейчас в теме
В новой БСП можно сократить код подключения обработки, достаточно:
Функция СведенияОВнешнейОбработке() Экспорт

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

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

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


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

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


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

может кто знает: где искать коды под конкретные версии БСП?....................
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 Сейчас в теме
У меня только один вопрос: Почему это так? Где мы свернули не туда?
Оставьте свое сообщение