Каталог решений - Печать непроведенных документов (через расширение)

Печать непроведенных документов (через расширение)

Печать непроведенных документов (через расширение)

В наличии

Обходим стандартную проверку, пошаговая инструкция.

Категория:

Описание

Проблема: Есть люди, которые хотят печатать не проведённые документы, но типовой механизм не дает им этого делать. Рассмотрим на примере документа Заказ Клиента. Выполнил проверку на ERP 2.4.3.145, но в других типовых так же, 1С:Предприятие 8.3 (8.3.10.2650).

Варианты решения:

Решение точечное

Решение массовое

 

1 Решение точечное.

Заходим в менеджер объекта, ищем область печати и процедуру ДобавитьКомандыПечати.

Над процедурой видим комментарий

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//

В процедуре видим параметр команды КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Заходим в указанный над процедурой комментарии модуль УправлениеПечатью и делаем поиск по «ПроверкаПроведенияПередПечатью»

Читаем:

//  * ПроверкаПроведенияПередПечатью    - Булево - (необязательный) Признак необходимости проверки проведенности
//                                        документов перед печатью. Если выбран хотя бы один непроведенный документ, то
//                                        перед выполнением команды печати возникает диалог проведения.
//                                        Для непроведенных документов команда печати не выполняется.
//                                        Если параметр не указан, то проверка проведенности не выполняется.

Делаем выводы. Добавляем расширение и помещаем документ ЗаказКлиент в расширение. Надеюсь, все читали данную статью http://v8.1c.ru/o7/201603module/index.htm.

Воспользуемся Аннотацией &После

Нам нужно после формирования команд, найти нужную и отключить проверку.

Добавляем в расширение модуль менеджера код:

&После ("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати) Экспорт
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");
	НайденныеСтроки = КомандыПечати.НайтиСтроки(ПараметрыОтбора);
		 
	Для каждого строкаНС из НайденныеСтроки Цикл 
		строкаНС.ПроверкаПроведенияПередПечатью = Ложь;
	КонецЦикла;	
	
КонецПроцедуры

Проверяем и радуемся.

2 Решение массовое.

А) Решение не совсем правильное

Ищем где и почему работает проверка. В модуле ОбщегоНазначения. ПроверитьПроведенностьДокументов

Эта функция возвращает массив непроведенных документов, следовательно если массив пустой то все проверки пройдены. Очень просто обманываем систему.

Добавляем этот модуль в расширение и пишем код:

&Вместо("ПроверитьПроведенностьДокументов")
Функция Расш1_ПроверитьПроведенностьДокументов(Знач Документы) Экспорт
	Результат = Новый Массив;
	Возврат Результат;
КонецФункции

Б) Более правильное решение.

Нужно в модуле УправлениеПечатью в процедуре ЗаполнитьКомандыПечатиДляСпискаОбъектов в цикле где обходятся команды параметр ПроверкаПроведенияПередПечатью = Истина поменять значение на Ложь

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

Проверяем и радуемся.

Расширение прикладываю с примерами.

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