Проблема: Есть люди, которые хотят печатать не проведённые документы, но типовой механизм не дает им этого делать. Рассмотрим на примере документа Заказ Клиента. Выполнил проверку на ERP 2.4.3.145, но в других типовых так же, 1С:Предприятие 8.3 (8.3.10.2650).
Варианты решения:
Заходим в менеджер объекта, ищем область печати и процедуру ДобавитьКомандыПечати.
Над процедурой видим комментарий
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
В процедуре видим параметр команды КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
Заходим в указанный над процедурой комментарии модуль УправлениеПечатью и делаем поиск по «ПроверкаПроведенияПередПечатью»
Читаем:
// * ПроверкаПроведенияПередПечатью - Булево - (необязательный) Признак необходимости проверки проведенности
// документов перед печатью. Если выбран хотя бы один непроведенный документ, то
// перед выполнением команды печати возникает диалог проведения.
// Для непроведенных документов команда печати не выполняется.
// Если параметр не указан, то проверка проведенности не выполняется.
Делаем выводы. Добавляем расширение и помещаем документ ЗаказКлиент в расширение. Надеюсь, все читали данную статью http://v8.1c.ru/o7/201603module/index.htm.
Воспользуемся Аннотацией &После
Нам нужно после формирования команд, найти нужную и отключить проверку.
Добавляем в расширение модуль менеджера код:
&После ("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати) Экспорт
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");
НайденныеСтроки = КомандыПечати.НайтиСтроки(ПараметрыОтбора);
Для каждого строкаНС из НайденныеСтроки Цикл
строкаНС.ПроверкаПроведенияПередПечатью = Ложь;
КонецЦикла;
КонецПроцедуры
Проверяем и радуемся.
А) Решение не совсем правильное
Ищем где и почему работает проверка. В модуле ОбщегоНазначения. ПроверитьПроведенностьДокументов
Эта функция возвращает массив непроведенных документов, следовательно если массив пустой то все проверки пройдены. Очень просто обманываем систему.
Добавляем этот модуль в расширение и пишем код:
&Вместо("ПроверитьПроведенностьДокументов")
Функция Расш1_ПроверитьПроведенностьДокументов(Знач Документы) Экспорт
Результат = Новый Массив;
Возврат Результат;
КонецФункции
Б) Более правильное решение.
Нужно в модуле УправлениеПечатью в процедуре ЗаполнитьКомандыПечатиДляСпискаОбъектов в цикле где обходятся команды параметр ПроверкаПроведенияПередПечатью = Истина поменять значение на Ложь
&Вместо("ЗаполнитьКомандыПечатиДляСпискаОбъектов")
Процедура Расш1_ЗаполнитьКомандыПечатиДляСпискаОбъектов(СписокОбъектов, КомандыПечати)
Для Каждого ОбъектМетаданных Из СписокОбъектов Цикл
ИсточникиКомандПечати = ИсточникиКомандПечати();
Если ИсточникиКомандПечати.Найти(ОбъектМетаданных) = Неопределено Тогда
Продолжить;
КонецЕсли;
КомандыПечатиФормы = КомандыПечатиОбъекта(ОбъектМетаданных);
//Небольшая Доработка++
ПроверкаПроведенияПередПечатьюВИстину = Ложь;
Если ТипЗнч(КомандыПечатиФормы) = Тип("ТаблицаЗначений") Тогда
Если КомандыПечатиФормы.Колонки.Найти("ПроверкаПроведенияПередПечатью") <> Неопределено Тогда
ПроверкаПроведенияПередПечатьюВИстину = Истина;
КонецЕсли;
КонецЕсли;
//Небольшая Доработка--
Для Каждого ДобавляемаяКомандаПечати Из КомандыПечатиФормы Цикл
//Небольшая Доработка++
Если ПроверкаПроведенияПередПечатьюВИстину Тогда
Если ДобавляемаяКомандаПечати.ПроверкаПроведенияПередПечатью Тогда
ДобавляемаяКомандаПечати.ПроверкаПроведенияПередПечатью = Ложь;
КонецЕсли;
КонецЕсли;
//Небольшая Доработка--
// Поиск аналогичной ранее добавленной команды печати.
НайденныеКоманды = Новый Массив;
Для Каждого ИмеющаясяКомандаПечати Из КомандыПечати Цикл
Если УникальныйИдентификаторКомандыПечати(ИмеющаясяКомандаПечати) = ДобавляемаяКомандаПечати.УникальныйИдентификатор Тогда
НайденныеКоманды.Добавить(ИмеющаясяКомандаПечати);
КонецЕсли;
КонецЦикла;
Если НайденныеКоманды.Количество() > 0 Тогда
Для Каждого ИмеющаясяКомандаПечати Из НайденныеКоманды Цикл
// Если уже есть такая команда, дополняем список типов объектов, для которых она предназначена.
ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка."));
Если ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Найти(ТипОбъекта) = Неопределено Тогда
ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Добавить(ТипОбъекта);
КонецЕсли;
// Очистим МенеджерПечати в случае, если у имеющейся команды он отличается.
Если ИмеющаясяКомандаПечати.МенеджерПечати <> ДобавляемаяКомандаПечати.МенеджерПечати Тогда
ИмеющаясяКомандаПечати.МенеджерПечати = "";
КонецЕсли;
КонецЦикла;
Продолжить;
КонецЕсли;
Если ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Количество() = 0 Тогда
ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")));
КонецЕсли;
ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Проверяем и радуемся.
Расширение прикладываю с примерами.