Чтобы в меню печать появилась кнопка "Отложенная печать", нам понадобится:
- Внешняя печатная форма ВПФ_ОтложеннаяПечать.epf. В ней в макет "Параметы регистрации" добавлены все типы документов для которых необходима возможность отложенной печати:
Ее необходимо добавить в Сервис->Дополнительные обработки и отчеты->Дополнительные внешние печатные формы.
- Необходимо добавить регистр сведений _ОтложеннаяПечать.
Измерения:
-
ДокументСсылка: тип ДокументСсылка
-
ПечатнаяФорма: тип Строка(100)
-
Ответственный: тип СправочникСсылка.Пользователи
Ресурсы:
-
Напечатан: тип Булево
-
Расшифровка: тип ХранилищеЗначения
Реквизиты:
-
ДатаДобавления: тип Дата (Дата и время)
-
ДатаПечати: тип Дата (Дата и время)
-
Текст: тип Строка(100)
- В общем модуле УниверсальныеМеханизмы необходимо заменить следущую процедуру:
Процедура ПечатьПоДополнительнойКнопке(УдалитьДеревоМакетов, Объект, Форма = Неопределено, ТекстКнопки) Экспорт
Если Не Форма = Неопределено Тогда
Если Не РаботаСДиалогами.ПроверитьМодифицированностьВФорме(Объект,Форма) Тогда
Возврат;
КонецЕсли;
КонецЕсли;
ЭтоДокумент = Метаданные.Документы.Содержит(Объект.Метаданные());
Попытка
СтруктураВнутреннихПечатныхФорм = Объект.ПолучитьСтруктуруПечатныхФорм()
Исключение
СтруктураВнутреннихПечатныхФорм = Новый Структура;
КонецПопытки;
ДеревоМакетовПечати = ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);
//-------------------ОТЛОЖЕННАЯ ПЕЧАТЬ----------------------------
Если ТекстКнопки = "Отложенная печать" Тогда
Если Не Метаданные.РегистрыСведений._ОтложеннаяПечать.Измерения.ДокументСсылка.Тип.СодержитТип(ТипЗнч(Объект.Ссылка)) Тогда
Возврат;
КонецЕсли;
МассивВычитания = Новый Массив();
МассивВычитания.Добавить("Отложенная печать");
МассивВычитания.Добавить("");
МассивВычитания.Добавить("По умолчанию...");
Результат = ДеревоМакетовПечати.Скопировать();
Результат.Строки.Очистить();
Для Каждого Элемент Из ДеревоМакетовПечати.Строки Цикл
Если МассивВычитания.Найти(Элемент.Текст) = Неопределено Тогда
НоваяСтрока = Результат.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
КонецЕсли;
КонецЦикла;
ДеревоМакетовПечати = Результат;
Если ДеревоМакетовПечати.Строки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПечатнаяФорма = ДеревоМакетовПечати.ВыбратьСтроку("Выберите печатную форму");
Если ПечатнаяФорма <> Неопределено Тогда
ЗаписьРС = РегистрыСведений._ОтложеннаяПечать.СоздатьМенеджерЗаписи();
ЗаписьРС.Ответственный = Пользователи.ТекущийПользователь();
ЗаписьРС.ДокументСсылка = Объект.Ссылка;
ЗаписьРС.ПечатнаяФорма = ПечатнаяФорма.Имя;
ЗаписьРС.Текст = ПечатнаяФорма.Текст;
ЗаписьРС.Напечатан = Ложь;
ЗаписьРС.ДатаДобавления = ТекущаяДата();
Расшифровка = ПечатнаяФорма.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ЗаписьРС.Расшифровка = Новый ХранилищеЗначения(Расшифровка);
КонецЕсли;
ЗаписьРС.Записать(Истина);
КонецЕсли;
Возврат;
КонецЕсли;
//-----------------------------------------------------------
СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти(ТекстКнопки,"Текст");
Если СтрокаКнопки = Неопределено Тогда
Предупреждение("Печать не доступна. Изменился набор реквизитов!");
Возврат;
КонецЕсли;
Расшифровка = СтрокаКнопки.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДокумент = НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);
НапечататьДокумент(ТабДокумент, , , ?(ЭтоДокумент, ОбщегоНазначенияЗК.СформироватьЗаголовокДокумента(Объект), Строка(Объект)), ,ТабДокумент);
Иначе
Объект.Печать(СтрокаКнопки.Имя, 0);
КонецЕсли;
КонецПроцедуры // ПечатьПоДополнительнойКнопке()
- Выбираем
- Выбираем необходимую печатную форму из списка
- Дальше нужно воспользоваться обработкой ОтложеннаяПечать.epf.
Метод, описанный в публикации, за исключением параметров авторегистрации, должен работать на всех типовых на обычных формах. Делал для ЗУП 2.5. Проверял на релизе Зарплата и управление персоналом КОРП, редакция 2.5 (2.5.159.4).