Каталог решений - В новой платформе пропала кнопка "Печать". Имитируем БСП

В новой платформе пропала кнопка "Печать". Имитируем БСП

В новой платформе пропала кнопка "Печать". Имитируем БСП

В наличии

«Приятным» сюрпризом для многих пользователей 1С стало то, что при обновлении платформы (начиная с 8.3.15) полностью поменялся интерфейс. Можно долго спорить о целесообразности этого новшества, но самым главным минусом стало то, что пропали стандартные кнопки на панели инструментов. Разработчики предполагают повсеместное использование БСП, но что делать тем, кто давно и успешно использует самописные конфигурации, в которых формирование печатной формы происходит по ТабДок.Показать(), и не желает их «утяжелять»? Добавим общую форму с нужными нам кнопками.

Категория:

Описание

Сразу оговорюсь, что целиком и полностью поддерживаю продвижение БСП. Идея хороша, но за универсальность приходится расплачиваться объемами кода, в котором не так-то просто разобраться. Я честно пытался пройтись отладчиком по процедуре печати, но после "стопятьсотой" процедуры решил, что буду делать свою форму, с минимумом нужных мне функций. Что же для этого потребуется? (Конечно же сохранить копию базы и все эксперименты вести исключительно в ней!)

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

Первым делом переносим из любой типовой конфигурации общую форму ПечатьДокументов (я воспользовался конфигурацией Бухгалтерия Предприятия 3.0). Делается это в Конфигураторе. Для начала выгружаете конфигурацию донора (Конфигурация — Сохранить конфигурацию в файл), а затем загружаете в своей базе (Конфигурация — Сравнить, объединить с конфигурацией из файла). В окне с выбором необходимых модулей снимаем ВСЕ флажки. Раскрываем дерево, находим общую форму ПечатьДокументов (далее буду называть ее сокращенно ПД) и помечаем ее. Соглашаемся с изменениями и сохраняем свою конфигурацию.

Далее из модуля формы ПД удаляем все. Потом напишем собственные процедуры.

На самой форме оставляем только самое необходимое. На мой взгляд, достаточно кнопок: Печать, предварительный просмотр, выбор количества копий и запрет редактирования. Из реквизитов нам потребуются только Копий и ТекущаяПечатнаяФорма. Из Команд — ПереключитьРедактирование и сама команда Печать.

Настройки печатной формы

В модуле располагаем следующие процедуры:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ТекущаяПечатнаяФорма = Параметры.ТабличныйДокумент;
	ЭтаФорма.Заголовок = Параметры.ЗаголовокФормы;
	Копий =  ТекущаяПечатнаяФорма.КоличествоЭкземпляров;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПереключитьРедактирование(Неопределено)
КонецПроцедуры

&НаКлиенте
Процедура КопийПриИзменении(Элемент)
	ТекущаяПечатнаяФорма.КоличествоЭкземпляров = Копий;
	
КонецПроцедуры

&НаКлиенте
Процедура ПереключитьРедактирование(Команда)
	Элементы.ТекущаяПечатнаяФорма.Редактирование = НЕ Элементы.ТекущаяПечатнаяФорма.Редактирование;
	ПереключитьПометкуКнопкиРедактирование();
КонецПроцедуры

&НаКлиенте
Процедура ПереключитьПометкуКнопкиРедактирование()
	
	Элементы.КнопкаРедактирование.Пометка = НЕ Элементы.КнопкаРедактирование.Пометка;
	
КонецПроцедуры


&НаКлиенте
Процедура Печать(Команда)
	ТекущаяПечатнаяФорма.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
КонецПроцедуры

Коротко поясню их назначение. В процедуру ПриСозданииНаСервере() в качестве параметров будем передавать наш табличный документ и его название. Второй параметр не обязателен, но я его сделал для красоты и удобства, потом объясню причины. Здесь же мы инициализируем количество копий. Если у вас настройки печати сохраняются, то значением будет последнее использованное при печати.

В процедуре ПриОткрытии() я переключаю режим редактирования на Истина. Если вам не требуется редактировать по-умолчанию, можете вообще убрать эту процедуру, а режимы переключать вручную кнопкой.

Далее все понятно: при изменении на форме количества копий, соответственно меняются параметры печати табличного документа, при нажатии на кнопку Редактирование, ее значения меняются на противоположные, меняя заодно и пиктограмму. Ну, и главная процедура Печать(), которая и распечатает нам всю красоту с предварительным выводом диалогового окна.

Затем создадим в Общих модулях новую процедуру. Эта процедура должна работать только на клиенте, поэтому смотрите свойства модуля, в котором создаете процедуру. Можно для верности предварить процедуру директивой #Если Клиент Тогда
У меня модуль называется ОбработкиКлиента, у вас будет другое название, не перепутайте.

#Если Клиент Тогда
Процедура ПолучитьПечатнуюФорму(ТабДок,ТекстЗаголовка) Экспорт
	КоллекцияПечатныхФормСтруктура = Новый Структура;
	КоллекцияПечатныхФормСтруктура.Вставить("ТабличныйДокумент"   	, ТабДок);
	КоллекцияПечатныхФормСтруктура.Вставить("ЗаголовокФормы"   		, ТекстЗаголовка);
	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов",КоллекцияПечатныхФормСтруктура);

КонецПроцедуры	
#КонецЕсли

Здесь мы формируем структуру и отправляем в общую форму ПД.
Подготовительные работы закончены. Теперь ищем место, где выводится наш табличный документ. Для примера, у меня есть документ Доверенность. В нем команда ПечатьДоверенности, модуль которой выглядит следующим образом:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	ТабДок = Новый ТабличныйДокумент;
	Печать(ТабДок, ПараметрКоманды);
	ТабДок.ОтображатьСетку = Ложь;
	ТабДок.Защита = Ложь;
	ТабДок.ТолькоПросмотр = Ложь;
	ТабДок.ОтображатьЗаголовки = Ложь;
	ТабДок.АвтоМасштаб = Истина;
	ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ТабДок.Показать("Печать: Доверенность М-2 " + ПараметрКоманды);
	
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
	ТабДок.ИмяПараметровПечати = "ПечатьДоверенности_"+Строка(ПараметрыСеанса.ТекущийПользователь);
	Документы.Доверенность.ПечатьДоверенности(ТабДок, ПараметрКоманды);
КонецПроцедуры

Осталось заменить строчку
 

	ТабДок.Показать("Печать: Доверенность М-2 " + ПараметрКоманды);

на

	ОбработкиКлиента.ПолучитьПечатнуюФорму(ТабДок,"Печать: Доверенность М-2 " + ПараметрКоманды);

Как видите, название у новой формы останется прежним, а вставлять новый код просто: копируем левую часть до запятой и вставляем в нужные места нашей базы, где есть ТабДок.Показать().

Осталось только сохранить конфигурацию и проверить, как все работает.

has been added to your cart:
Оформление заказа