Как ERP научить печатать непроведенные документы внешними печатными формами

23.05.23

Задачи пользователя - Адаптация типовых решений

Иногда требуется печатать непроведенные документы, но стандартный механизм не позволяет это делать. Во всяком случае, я не нашел такую возможность. Поэтому, немного покопавшись в модулях печати, нашел способ, который я опишу в этой публикации. Все изменения буду делать в расширении (тестировалось на версии ERP 2.5.12.48).

Для начала нужно подготовить справочник "ДополнительныеОтчетыИОбработки":

1) Добавляем реквизит типа "Булево" в справочник "ДополнительныеОтчетыИОбработки"

 

 

2) Размещаем элемент формы для этого реквизита на форме элемента

 

 

На этом подготовку справочника закончили и начинаем править типовые процедуры.

1) Расширяем процедуру "ВыполнитьНазначаемуюКомандуПечати" общего модуля "ДополнительныеОтчетыИОбработкиКлиент"

 

&ИзменениеИКонтроль("ВыполнитьНазначаемуюКомандуПечати")
// Обработчик внешней команды печати.
//
// Параметры:
//  ВыполняемаяКоманда - Структура        - структура из строки таблицы команд, см.
//                                        ДополнительныеОтчетыИОбработки.ПриПолученииКомандПечати.
//  Форма            - ФормаКлиентскогоПриложения - форма, в которой выполняется команда печати.
//
Процедура ВыполнитьНазначаемуюКомандуПечатиИзменение(ВыполняемаяКоманда, Форма) Экспорт
	
	// Перенос дополнительных параметров, переданных этой подсистемой, в корень структуры.
	Для Каждого КлючИЗначение Из ВыполняемаяКоманда.ДополнительныеПараметры Цикл
		ВыполняемаяКоманда.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
	КонецЦикла;
	
	// Запись фиксированных параметров.
	ВыполняемаяКоманда.Вставить("ЭтоОтчет", Ложь);
	ВыполняемаяКоманда.Вставить("Вид", ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма")); 
	#Вставка
	ДополнительныеОтчетыИОбработкиВызовСервера.УстановитьСтандартнуюОбработку(ВыполняемаяКоманда);
	#КонецВставки
	
	// Запуск метода обработки, соответствующего контексту команды.
	ВариантЗапуска = ВыполняемаяКоманда.ВариантЗапуска;
	Если ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") Тогда
		ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати);
	ИначеЕсли ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") Тогда
		ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати);
	Иначе
		ВыполнитьОткрытиеПечатнойФормы(ВыполняемаяКоманда, Форма, ВыполняемаяКоманда.ОбъектыПечати);
	КонецЕсли;
	
КонецПроцедуры 

 

2) расширяем процедуру "ВыполнитьОткрытиеПечатнойФормы" общего модуля "ДополнительныеОтчетыИОбработкиКлиент"

 

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

 

3) Добавляем процедуру "УстановитьСтандартнуюОбработку" в общий модуль "ДополнительныеОтчетыИОбработкиВызовСервера"

 

Процедура УстановитьСтандартнуюОбработку(ВыполняемаяКоманда) Экспорт    
	Перем СсылкаДополнительнойОбработки;
	// не разбирался с типом аргумента "ВыполняемаяКоманда" поэтому условно - тип Структура
	Если ВыполняемаяКоманда.Свойство("Ссылка", СсылкаДополнительнойОбработки) 
		И ТипЗнч(СсылкаДополнительнойОбработки) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда
		ВыполняемаяКоманда.Вставить("СтандартнаяОбработка", СсылкаДополнительнойОбработки.СтандартнаяОбработка);  
	КонецЕсли;
КонецПроцедуры

 

На этом все изменения внесены. 

Судя по написанному коду ERP игнорирует проверку на "непроведенность" документа если флаг "СтандартнаяОбработка" = Ложь. Это можно наблюдать из процедуры "ВыполнитьОткрытиеПечатнойФормы" общего модуля "УправлениеПечатьюСлужебныйКлиент" в которую из нашей расширяемой процедуры "ВыполнитьОткрытиеПечатнойФормы" общего модуля "ДополнительныеОтчетыИОбработкиКлиент" передается "СтандартнаяОбработка".

 

 

Можно, конечно, использовать

 

ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ОбъектыНазначения, СтандартнаяОбработка);

 

Но я не увидел возможность в этой процедуре контролировать флаг "СтандартнаяОбработка" какими-либо настройками.

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4653    9    5    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3062    4    0    

20

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

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

01.03.2024    1691    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    2109    19    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2244    25    progmaster    8    

3
Оставьте свое сообщение