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

05.06.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Расширение с примерами
.cfe 8,32Kb
50
50
1 SM
Скачать Купить за 1 850 руб.
Печать непроведенных документов ЗаказПокупателя (через расширение):
.cfe 11,38Kb
0
0
1 SM
Скачать Купить за 1 850 руб.

Проблема: Есть люди, которые хотят печатать не проведённые документы, но типовой механизм не дает им этого делать. Рассмотрим на примере документа Заказ Клиента. Выполнил проверку на 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 Тогда
				ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")));
			КонецЕсли;
			ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати);
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры

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

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

Обновлено 05.06.2024

Добавлено новое расширение с примером для Заказов покупателей, для свежей Розницы.

Проверено в Рознице 2.3.19.24 на документе ЗаказПокупателя

1 Изменяем процедуру ЗаполнитьКомандыПечатиДляСпискаОбъектов в Модуле УправлениеПечатью.

Код:

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

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

В менеджер документа добавляем код:

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

&ИзменениеИКонтроль("ПечатьЗаказаПокупателя")
// Функция формирует табличный документ с печатной формой.
//
// Возвращаемое значение:
//  ТабличныйДокумент - печатная форма.
//
Функция Расш1_ПечатьЗаказаПокупателя(МассивОбъектов, ОбъектыПечати)

	КолонкаКодов       = ФормированиеПечатныхФормСервер.ИмяДополнительнойКолонки();
	ВыводитьКоды       = ЗначениеЗаполнено(КолонкаКодов);
	ВыводитьУпаковки   = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	ТабличныйДокумент  = Новый ТабличныйДокумент;
	РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
	СинонимДокумента   = НСтр("ru='Заказ покупателя'");
	
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_Накладная";
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Номер КАК Номер,
	|	Документ.Дата КАК Дата,
	|	Документ.Магазин КАК Магазин,
	|	ВЫБОР
	|		КОГДА Документ.Организация.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОрганизацияЮридическоеЛицо,
	|	Документ.Организация КАК Поставщик,
	|	Документ.Контрагент КАК Получатель,
	|	Документ.СуммаДокумента КАК СуммаДокумента,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Магазин) КАК МагазинПредставление,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Организация) КАК ПредставлениеПоставщика,
	|	Документ.Ответственный.ФизическоеЛицо КАК Ответственный,
	|	Документ.УчитыватьНДС,
	|	Документ.ЦенаВключаетНДС
	|ИЗ
	|	Документ.ЗаказПокупателя КАК Документ
	|ГДЕ
	|	Документ.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И Документ.Проведен
	#КонецУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	Дата
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ТаблицаТовары.НомерСтроки КАК НомерСтроки,
	|	ТаблицаТовары.Номенклатура КАК Номенклатура,
	|	" + ?(ВыводитьКоды, "ТаблицаТовары.Номенклатура." + КолонкаКодов +" КАК КолонкаКодов,", "") + "
	|	ТаблицаТовары.Номенклатура.Представление КАК Товар,
	|	ТаблицаТовары.Номенклатура.НаименованиеПолное КАК НоменклатураПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Характеристика) КАК ХарактеристикаПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
	|			ТОГДА ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Упаковка.ЕдиницаИзмерения)
	|		ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения)
	|	КОНЕЦ КАК ЕдиницаИзмерения,
	|	ТаблицаТовары.Количество КАК КоличествоВБазовыхЕдиницах,
	|	ТаблицаТовары.КоличествоУпаковок КАК Количество,
	|	ВЫБОР КОГДА ТаблицаТовары.КоличествоУпаковок = 0 ТОГДА ТаблицаТовары.КоличествоУпаковок
	|	ИНАЧЕ ТаблицаТовары.Сумма / ТаблицаТовары.КоличествоУпаковок
	|	КОНЕЦ КАК Цена,
	|	ТаблицаТовары.Сумма КАК Сумма,
	|	ТаблицаТовары.Ссылка КАК Ссылка,
	|	ТаблицаТовары.Сумма +
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК СуммаБезСкидки,
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК Скидка,
	|	ТаблицаТовары.СуммаНДС,
	|	ТаблицаТовары.СтавкаНДС
	|ИЗ
	|	Документ.ЗаказПокупателя.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И ТаблицаТовары.Ссылка.Проведен
	#КонецУдаления
	|	И НЕ ТаблицаТовары.Отменено
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	НомерСтроки
	|ИТОГИ ПО
	|	Ссылка");
	
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	Результаты = Запрос.ВыполнитьПакет();
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЗаказПокупателя.ПФ_MXL_ЗаказПокупателя");
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	
	ОбластьШапкаНомера         = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
	ОбластьШапкаКодов          = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
	ОбластьШапкаДанных         = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
	ОбластьШапкаСкидок         = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
	ОбластьШапкаСуммы          = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
	
	ОбластьКолонкаТовар = Макет.Область("Товар");
	Если Не ВыводитьКоды Тогда
		ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
		                                  + Макет.Область("КолонкаКодов").ШиринаКолонки;
	КонецЕсли;
	ОбластьСтрокаНомера         = Макет.ПолучитьОбласть("Строка|НомерСтроки");
	ОбластьСтрокаКодов          = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
	ОбластьСтрокаДанных         = Макет.ПолучитьОбласть("Строка|Данные");
	ОбластьСтрокаСкидок         = Макет.ПолучитьОбласть("Строка|Скидка");
	ОбластьСтрокаСуммы          = Макет.ПолучитьОбласть("Строка|Сумма");
	
	ОбластьИтогоНДСНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
	ОбластьИтогоНДСКодов  = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
	ОбластьИтогоНДСДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
	ОбластьИтогоНДССкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
	ОбластьИтогоНДССуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
	
	// Вывести Итого.
	ОбластьИтогоНомера         = Макет.ПолучитьОбласть("Итого|НомерСтроки");
	ОбластьИтогоКодов          = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
	ОбластьИтогоДанных         = Макет.ПолучитьОбласть("Итого|Данные");
	ОбластьИтогоСкидок         = Макет.ПолучитьОбласть("Итого|Скидка");
	ОбластьИтогоСуммы          = Макет.ПолучитьОбласть("Итого|Сумма");
	
	ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
	ОбластьПодписей      = Макет.ПолучитьОбласть("Подписи");
	
	
	ВыборкаПоДокументам = Результаты[0].Выбрать();
	ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	
	Пока ВыборкаПоДокументам.Следующий() Цикл
		
		Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если НЕ ПервыйДокумент Тогда
			
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
			
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
		ОбластьЗаголовок.Параметры.Заполнить(ВыборкаПоДокументам);
		
		ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);
		
		ПредставлениеПоставщика = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Поставщик, ВыборкаПоДокументам.Дата), "ПолноеНаименование,");
		ПредставлениеПолучателя = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Получатель, ВыборкаПоДокументам.Дата), "ПолноеНаименование, ФактическийАдрес, Телефоны");
		
		СтруктураПредставлений = Новый Структура("ПредставлениеПоставщика, ПредставлениеПолучателя", ПредставлениеПоставщика, ПредставлениеПолучателя);
		ЗаполнитьЗначенияСвойств(ОбластьЗаголовок.Параметры, СтруктураПредставлений);
		
		ТабличныйДокумент.Вывести(ОбластьЗаголовок);
		
		// Шапка
		
		ТабличныйДокумент.Вывести(ОбластьШапкаНомера);
		Если ВыводитьКоды Тогда
			ОбластьШапкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
			ТабличныйДокумент.Присоединить(ОбластьШапкаКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьШапкаДанных);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСкидок);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСуммы);
		
		
		ВсегоНаименований = 0;
		Сумма             = 0;
		ВсегоСкидок       = 0;
		ВсегоБезСкидок    = 0;
		СуммаНДС          = 0;
		
		// СТРОКИ ТЧ
		Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
			Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура) Тогда
				Продолжить;
			КонецЕсли;

			ОбластьСтрокаНомера.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Вывести(ОбластьСтрокаНомера);

			Если ВыводитьКоды Тогда
				
				ОбластьСтрокаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
				ТабличныйДокумент.Присоединить(ОбластьСтрокаКодов);
				
			КонецЕсли;

			ОбластьСтрокаДанных.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ОбластьСтрокаДанных.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаДанных);
			
			ОбластьСтрокаСкидок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСкидок);

			ОбластьСтрокаСуммы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСуммы);
			
			ВсегоНаименований = ВсегоНаименований + 1;
			
			Сумма          = Сумма       + ВыборкаПоСтрокамТЧ.Сумма;
			ВсегоСкидок    = ВсегоСкидок + ВыборкаПоСтрокамТЧ.Скидка;
			ВсегоБезСкидок = Сумма       + ВсегоСкидок;
			СуммаНДС       = СуммаНДС    + Окр(ВыборкаПоСтрокамТЧ.СуммаНДС, 2, 1);
			
		КонецЦикла;
		
		ТабличныйДокумент.Вывести(ОбластьИтогоНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоКодов);
		КонецЕсли;
		
		ТабличныйДокумент.Присоединить(ОбластьИтогоДанных);
		ОбластьИтогоСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;
		ОбластьИтогоСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСкидок);
		ОбластьИтогоСуммы.Параметры.Всего = Сумма;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСуммы);
		
		
		// Вывести ИтогоНДС
		ТабличныйДокумент.Вывести(ОбластьИтогоНДСНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоНДСКодов);
		КонецЕсли;
		
		ОбластьИтогоНДСДанных.Параметры.НДС = ?(ВыборкаПоДокументам.ЦенаВключаетНДС, НСтр("ru = 'В том числе НДС:'"), НСтр("ru = 'Сумма НДС:'"));
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДСДанных);
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССкидок);
		
		Если НЕ ВыборкаПоДокументам.УчитыватьНДС Тогда
			СуммаНДССтрока = НСтр("ru = 'Без НДС'");
		Иначе
			СуммаНДССтрока = Строка(СуммаНДС);
		КонецЕсли;
		
		ОбластьИтогоНДССуммы.Параметры.ВсегоНДС = СуммаНДССтрока;
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССуммы);
		
		
		// Вывести Сумму прописью.
		
		ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%, на сумму %Итого%'");
		
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%", ФормированиеПечатныхФормСервер.ФорматСумм(Сумма));
		
		ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
		ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ФормированиеПечатныхФормСервер.СформироватьСуммуПрописью(Сумма);
		
		ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);
		
		// ПОДПИСИ
		ОбластьПодписей.Параметры.Заполнить(ВыборкаПоДокументам);
		ОбластьПодписей.Параметры.ОтветственныйПредставление = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный);
		ТабличныйДокумент.Вывести(ОбластьПодписей);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
		
	КонецЦикла;
	
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Возврат ТабличныйДокумент;
КонецФункции

Обратите внимание на то, что в функции ПечатьЗаказаПокупателя были проверки на «Проведен».

Документ.Проведен и ТаблицаТовары.Ссылка.Проведен

Соответственно эти проверки тоже пришлось убрать. Весь код выполнен с аннотацией &ИзменениеИКонтроль

 

Проверено на следующих конфигурациях и релизах:

  • Розница, редакция 2.3, релизы 2.3.19.24

Расширение печать печать не проведенных документов документов БСП Команды печати не проведенный Пакетная печать

См. также

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

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

29400 руб.

29.06.2023    5185    11    5    

20

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

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

7200 руб.

02.08.2023    3558    8    0    

27

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

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    4765    dimanich70    15    

21

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

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

01.03.2024    3785    dimanich70    8    

16

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

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

1 стартмани

27.10.2023    2832    21    avmartynov    14    

53
Отзывы
2. dsdred 3493 13.05.18 15:55 Сейчас в теме
(1)Я думаю не только эти отчеты. Проверка проведенности в некоторых случаях лишняя, а где участвуют регистры она как заглушка. Разработчики 1С таким образом себе уменьшили объем работы.

Чаще всего отчеты добавляли через дополнительные отчеты и обработки команду печати, причем типовые кишки тупо копировали и меняли запрос который формирует данные для вывода. Я и сам года 2-2,5 назад на предыдущем месте работы делал отчет по ТОРГ12 с возможностью печать не проведенных документов. В итоге в кнопке печати с каждым таким доп отчетом +1 пункт.

Сейчас достаточно по каждому такому отчету в расширение там где собирается запрос использовать аннотацию &Вместо.
Ну и вышеописанную инструкцию.
36. dsdred 3493 05.06.24 21:24 Сейчас в теме
(34)Посмотрел.
Во-первых изменилась процедура "ЗаполнитьКомандыПечатиДляСпискаОбъектов" в модуле "УправлениеПечатью"

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


Во-вторых Вы выбрали документ в котором в запросе получения данных для печатной формы (менеджер документа ЗаказПокупателя, функция ПечатьЗаказаПокупателя) идет проверка "Документ.Проведен" и "ТаблицаТовары.Ссылка.Проведен"

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

&ИзменениеИКонтроль("ПечатьЗаказаПокупателя")
// Функция формирует табличный документ с печатной формой.
//
// Возвращаемое значение:
//  ТабличныйДокумент - печатная форма.
//
Функция Расш1_ПечатьЗаказаПокупателя(МассивОбъектов, ОбъектыПечати)

	КолонкаКодов       = ФормированиеПечатныхФормСервер.ИмяДополнительнойКолонки();
	ВыводитьКоды       = ЗначениеЗаполнено(КолонкаКодов);
	ВыводитьУпаковки   = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	ТабличныйДокумент  = Новый ТабличныйДокумент;
	РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
	СинонимДокумента   = НСтр("ru='Заказ покупателя'");
	
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_Накладная";
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Номер КАК Номер,
	|	Документ.Дата КАК Дата,
	|	Документ.Магазин КАК Магазин,
	|	ВЫБОР
	|		КОГДА Документ.Организация.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОрганизацияЮридическоеЛицо,
	|	Документ.Организация КАК Поставщик,
	|	Документ.Контрагент КАК Получатель,
	|	Документ.СуммаДокумента КАК СуммаДокумента,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Магазин) КАК МагазинПредставление,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Организация) КАК ПредставлениеПоставщика,
	|	Документ.Ответственный.ФизическоеЛицо КАК Ответственный,
	|	Документ.УчитыватьНДС,
	|	Документ.ЦенаВключаетНДС
	|ИЗ
	|	Документ.ЗаказПокупателя КАК Документ
	|ГДЕ
	|	Документ.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И Документ.Проведен
	#КонецУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	Дата
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ТаблицаТовары.НомерСтроки КАК НомерСтроки,
	|	ТаблицаТовары.Номенклатура КАК Номенклатура,
	|	" + ?(ВыводитьКоды, "ТаблицаТовары.Номенклатура." + КолонкаКодов +" КАК КолонкаКодов,", "") + "
	|	ТаблицаТовары.Номенклатура.Представление КАК Товар,
	|	ТаблицаТовары.Номенклатура.НаименованиеПолное КАК НоменклатураПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Характеристика) КАК ХарактеристикаПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
	|			ТОГДА ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Упаковка.ЕдиницаИзмерения)
	|		ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения)
	|	КОНЕЦ КАК ЕдиницаИзмерения,
	|	ТаблицаТовары.Количество КАК КоличествоВБазовыхЕдиницах,
	|	ТаблицаТовары.КоличествоУпаковок КАК Количество,
	|	ВЫБОР КОГДА ТаблицаТовары.КоличествоУпаковок = 0 ТОГДА ТаблицаТовары.КоличествоУпаковок
	|	ИНАЧЕ ТаблицаТовары.Сумма / ТаблицаТовары.КоличествоУпаковок
	|	КОНЕЦ КАК Цена,
	|	ТаблицаТовары.Сумма КАК Сумма,
	|	ТаблицаТовары.Ссылка КАК Ссылка,
	|	ТаблицаТовары.Сумма +
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК СуммаБезСкидки,
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК Скидка,
	|	ТаблицаТовары.СуммаНДС,
	|	ТаблицаТовары.СтавкаНДС
	|ИЗ
	|	Документ.ЗаказПокупателя.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И ТаблицаТовары.Ссылка.Проведен
	#КонецУдаления
	|	И НЕ ТаблицаТовары.Отменено
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	НомерСтроки
	|ИТОГИ ПО
	|	Ссылка");
	
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	Результаты = Запрос.ВыполнитьПакет();
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЗаказПокупателя.ПФ_MXL_ЗаказПокупателя");
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	
	ОбластьШапкаНомера         = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
	ОбластьШапкаКодов          = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
	ОбластьШапкаДанных         = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
	ОбластьШапкаСкидок         = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
	ОбластьШапкаСуммы          = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
	
	ОбластьКолонкаТовар = Макет.Область("Товар");
	Если Не ВыводитьКоды Тогда
		ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
		                                  + Макет.Область("КолонкаКодов").ШиринаКолонки;
	КонецЕсли;
	ОбластьСтрокаНомера         = Макет.ПолучитьОбласть("Строка|НомерСтроки");
	ОбластьСтрокаКодов          = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
	ОбластьСтрокаДанных         = Макет.ПолучитьОбласть("Строка|Данные");
	ОбластьСтрокаСкидок         = Макет.ПолучитьОбласть("Строка|Скидка");
	ОбластьСтрокаСуммы          = Макет.ПолучитьОбласть("Строка|Сумма");
	
	ОбластьИтогоНДСНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
	ОбластьИтогоНДСКодов  = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
	ОбластьИтогоНДСДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
	ОбластьИтогоНДССкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
	ОбластьИтогоНДССуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
	
	// Вывести Итого.
	ОбластьИтогоНомера         = Макет.ПолучитьОбласть("Итого|НомерСтроки");
	ОбластьИтогоКодов          = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
	ОбластьИтогоДанных         = Макет.ПолучитьОбласть("Итого|Данные");
	ОбластьИтогоСкидок         = Макет.ПолучитьОбласть("Итого|Скидка");
	ОбластьИтогоСуммы          = Макет.ПолучитьОбласть("Итого|Сумма");
	
	ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
	ОбластьПодписей      = Макет.ПолучитьОбласть("Подписи");
	
	
	ВыборкаПоДокументам = Результаты[0].Выбрать();
	ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	
	Пока ВыборкаПоДокументам.Следующий() Цикл
		
		Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если НЕ ПервыйДокумент Тогда
			
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
			
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
		ОбластьЗаголовок.Параметры.Заполнить(ВыборкаПоДокументам);
		
		ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);
		
		ПредставлениеПоставщика = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Поставщик, ВыборкаПоДокументам.Дата), "ПолноеНаименование,");
		ПредставлениеПолучателя = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Получатель, ВыборкаПоДокументам.Дата), "ПолноеНаименование, ФактическийАдрес, Телефоны");
		
		СтруктураПредставлений = Новый Структура("ПредставлениеПоставщика, ПредставлениеПолучателя", ПредставлениеПоставщика, ПредставлениеПолучателя);
		ЗаполнитьЗначенияСвойств(ОбластьЗаголовок.Параметры, СтруктураПредставлений);
		
		ТабличныйДокумент.Вывести(ОбластьЗаголовок);
		
		// Шапка
		
		ТабличныйДокумент.Вывести(ОбластьШапкаНомера);
		Если ВыводитьКоды Тогда
			ОбластьШапкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
			ТабличныйДокумент.Присоединить(ОбластьШапкаКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьШапкаДанных);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСкидок);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСуммы);
		
		
		ВсегоНаименований = 0;
		Сумма             = 0;
		ВсегоСкидок       = 0;
		ВсегоБезСкидок    = 0;
		СуммаНДС          = 0;
		
		// СТРОКИ ТЧ
		Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
			Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура) Тогда
				Продолжить;
			КонецЕсли;

			ОбластьСтрокаНомера.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Вывести(ОбластьСтрокаНомера);

			Если ВыводитьКоды Тогда
				
				ОбластьСтрокаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
				ТабличныйДокумент.Присоединить(ОбластьСтрокаКодов);
				
			КонецЕсли;

			ОбластьСтрокаДанных.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ОбластьСтрокаДанных.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаДанных);
			
			ОбластьСтрокаСкидок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСкидок);

			ОбластьСтрокаСуммы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСуммы);
			
			ВсегоНаименований = ВсегоНаименований + 1;
			
			Сумма          = Сумма       + ВыборкаПоСтрокамТЧ.Сумма;
			ВсегоСкидок    = ВсегоСкидок + ВыборкаПоСтрокамТЧ.Скидка;
			ВсегоБезСкидок = Сумма       + ВсегоСкидок;
			СуммаНДС       = СуммаНДС    + Окр(ВыборкаПоСтрокамТЧ.СуммаНДС, 2, 1);
			
		КонецЦикла;
		
		ТабличныйДокумент.Вывести(ОбластьИтогоНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоКодов);
		КонецЕсли;
		
		ТабличныйДокумент.Присоединить(ОбластьИтогоДанных);
		ОбластьИтогоСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;
		ОбластьИтогоСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСкидок);
		ОбластьИтогоСуммы.Параметры.Всего = Сумма;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСуммы);
		
		
		// Вывести ИтогоНДС
		ТабличныйДокумент.Вывести(ОбластьИтогоНДСНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоНДСКодов);
		КонецЕсли;
		
		ОбластьИтогоНДСДанных.Параметры.НДС = ?(ВыборкаПоДокументам.ЦенаВключаетНДС, НСтр("ru = 'В том числе НДС:'"), НСтр("ru = 'Сумма НДС:'"));
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДСДанных);
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССкидок);
		
		Если НЕ ВыборкаПоДокументам.УчитыватьНДС Тогда
			СуммаНДССтрока = НСтр("ru = 'Без НДС'");
		Иначе
			СуммаНДССтрока = Строка(СуммаНДС);
		КонецЕсли;
		
		ОбластьИтогоНДССуммы.Параметры.ВсегоНДС = СуммаНДССтрока;
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССуммы);
		
		
		// Вывести Сумму прописью.
		
		ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%, на сумму %Итого%'");
		
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%", ФормированиеПечатныхФормСервер.ФорматСумм(Сумма));
		
		ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
		ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ФормированиеПечатныхФормСервер.СформироватьСуммуПрописью(Сумма);
		
		ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);
		
		// ПОДПИСИ
		ОбластьПодписей.Параметры.Заполнить(ВыборкаПоДокументам);
		ОбластьПодписей.Параметры.ОтветственныйПредставление = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный);
		ТабличныйДокумент.Вывести(ОбластьПодписей);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
		
	КонецЦикла;
	
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Возврат ТабличныйДокумент;
КонецФункции
Показать


Сейчас обновлю статью с данными комментариями.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tigrandis 346 13.05.18 11:41 Сейчас в теме
жаль при печати документов реализации не корректно работает торг12 ,сф и упд
2. dsdred 3493 13.05.18 15:55 Сейчас в теме
(1)Я думаю не только эти отчеты. Проверка проведенности в некоторых случаях лишняя, а где участвуют регистры она как заглушка. Разработчики 1С таким образом себе уменьшили объем работы.

Чаще всего отчеты добавляли через дополнительные отчеты и обработки команду печати, причем типовые кишки тупо копировали и меняли запрос который формирует данные для вывода. Я и сам года 2-2,5 назад на предыдущем месте работы делал отчет по ТОРГ12 с возможностью печать не проведенных документов. В итоге в кнопке печати с каждым таким доп отчетом +1 пункт.

Сейчас достаточно по каждому такому отчету в расширение там где собирается запрос использовать аннотацию &Вместо.
Ну и вышеописанную инструкцию.
3. tigrandis 346 14.05.18 11:54 Сейчас в теме
в моей публикации https://infostart.ru/public/828144/ печатные формы УПД, СФ и Торг 12 обощел этот момент )
4. dsdred 3493 14.05.18 12:15 Сейчас в теме
(3) То есть функции с формированием запросов вы не трогали?
Значит заменили таб. часть с товарами, дописав нее данные из не проведенных документов.

В любом случае работы там немного. Тем более если есть уже готовые доп отчеты (их если нет сил самому нарисовать можно и скачать).
5. user970589 11 16.05.18 18:57 Сейчас в теме
Может вы в курсе и как обойти вопрос печати чека (реализация-поступление наличных, реализация - операция по карте) без создания счета или создание счета автоматически? 1с согласно ФЗ требует счета и без него выводит чек без номенклатуры. Тут была старая разработка, но она какая-то кривая, допилить ее до нового релиза не получается, а очень нужно решение. Навыков своих к сожалению мало для создания самостоятельно.
Буду очень благодарен ( в пределах разумного ;) ) за помощь.
6. dsdred 3493 16.05.18 20:57 Сейчас в теме
(5)Думаю вам проще тендер объявить https://infostart.ru/project/
7. dexxxqqq 07.11.18 00:25 Сейчас в теме
Спасибо большое за статью. Можно ли как-то сделать возможность печати непроведенным конкретного макета только? А не для всего документа? Не знаю, за что бы зацепиться. А то в НепроведенныеДокументы только документы, без макетов.
8. dexxxqqq 07.11.18 01:27 Сейчас в теме
(7) Сам и отвечу. В процедуре ВыполнитьОткрытиеПечатнойФормы в общем модуле УправлениеПечатьюСлужебныйКлиент передал в УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов дополнительный параметр "Параметры". Ну а дальше в ПроверитьПроведенностьДокументов можно обратиться к Параметры.ИдентификаторКоманды, который и содержит нужную информацию
atdonya; klaus38; dsdred; +3 Ответить
12. atdonya 107 11.05.21 18:24 Сейчас в теме
(8)
ВыполнитьОткрытиеПечатнойФормы
Спасибо.
9. user592625_lomakinalexey77 07.02.19 14:31 Сейчас в теме
Подскажите как настроить печать СчетаФактурыВыданной в составе комплекта на основании непроведенного документа реализации в УТ 11.4
10. dsdred 3493 07.02.19 22:36 Сейчас в теме
(9)На вскидку не скажу. Надо смотреть.
11. Kennik 14 19.03.21 17:43 Сейчас в теме
Работает на переписанной в хлам УТ 11.
Автору плюс.
13. burgomister 59 13.05.21 06:45 Сейчас в теме
А что так много наворотили? В УТ 11 сделал так:

ОбщийМодуль.ПодключаемыеКомандыКлиент

&Перед("ПродолжитьВыполнениеКоманды")
Процедура Расш1_ПродолжитьВыполнениеКоманды(ПараметрыВыполнения)
	
	Если ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "РасходнаяНакладная" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "Накладная" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "ТОРГ12" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "СчетНаОплату" Тогда
		ПараметрыВыполнения.ТребуетсяПроведение = Ложь;
	КонецЕсли;
	
КонецПроцедуры
Показать
14. dsdred 3493 13.05.21 22:20 Сейчас в теме
(13) Давно дело было... У меня такое ощущение, что у параметра "ТребуетсяПроведение " какой-то другой смысл и данное решение аукнецо при подключаемых командах.
15. burgomister 59 14.05.21 04:38 Сейчас в теме
(14) Сейчас работает. Посмотрим что дальше будет.
16. Afellay 31.05.21 13:13 Сейчас в теме
Подскажите а для Розницы 2.3 есть что-то подобное?
17. dsdred 3493 31.05.21 15:19 Сейчас в теме
(16)посмотрел Розницу 2.3.6.27. Там все так же
Прикрепленные файлы:
18. Afellay 31.05.21 19:47 Сейчас в теме
(17)Сделал как Вы написали, при печати выдает такую картину: Печатная форма недоступна.
Прикрепленные файлы:
21. dsdred 3493 11.06.21 10:02 Сейчас в теме
(18)Какой документ пытаетесь распечатать?
Разверну на досуге розницу и попробую.
32. user1622149 05.06.24 10:46 Сейчас в теме
(18) Добрый день. Удалось победить в Рознице 2.3 сообщение "Печатная форма недоступна." ?
33. dsdred 3493 05.06.24 11:33 Сейчас в теме
(32)Добрый день. Не побеждал. Я у коллеги запросил тип документа в котором не получается и ответа не получил.
34. user1622149 05.06.24 12:59 Сейчас в теме
(33) Вчера приобрел Ваше расширение (пример).

Все было сделано как в коментарии (24).

Сможете помочь с Розницей 2.3 (2.3.19.24).

Пытаюсь добавить в документ ЗаказПокупателя,
но при печати выходит страница с сообщением "Печатная форма недоступна."
Прикрепленные файлы:
35. dsdred 3493 05.06.24 13:05 Сейчас в теме
(34)Попробую сегодня вечером дома найти Розницу и проверю.
36. dsdred 3493 05.06.24 21:24 Сейчас в теме
(34)Посмотрел.
Во-первых изменилась процедура "ЗаполнитьКомандыПечатиДляСпискаОбъектов" в модуле "УправлениеПечатью"

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


Во-вторых Вы выбрали документ в котором в запросе получения данных для печатной формы (менеджер документа ЗаказПокупателя, функция ПечатьЗаказаПокупателя) идет проверка "Документ.Проведен" и "ТаблицаТовары.Ссылка.Проведен"

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

&ИзменениеИКонтроль("ПечатьЗаказаПокупателя")
// Функция формирует табличный документ с печатной формой.
//
// Возвращаемое значение:
//  ТабличныйДокумент - печатная форма.
//
Функция Расш1_ПечатьЗаказаПокупателя(МассивОбъектов, ОбъектыПечати)

	КолонкаКодов       = ФормированиеПечатныхФормСервер.ИмяДополнительнойКолонки();
	ВыводитьКоды       = ЗначениеЗаполнено(КолонкаКодов);
	ВыводитьУпаковки   = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
	ТабличныйДокумент  = Новый ТабличныйДокумент;
	РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
	СинонимДокумента   = НСтр("ru='Заказ покупателя'");
	
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_Накладная";
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Номер КАК Номер,
	|	Документ.Дата КАК Дата,
	|	Документ.Магазин КАК Магазин,
	|	ВЫБОР
	|		КОГДА Документ.Организация.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОрганизацияЮридическоеЛицо,
	|	Документ.Организация КАК Поставщик,
	|	Документ.Контрагент КАК Получатель,
	|	Документ.СуммаДокумента КАК СуммаДокумента,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Магазин) КАК МагазинПредставление,
	|	ПРЕДСТАВЛЕНИЕ(Документ.Организация) КАК ПредставлениеПоставщика,
	|	Документ.Ответственный.ФизическоеЛицо КАК Ответственный,
	|	Документ.УчитыватьНДС,
	|	Документ.ЦенаВключаетНДС
	|ИЗ
	|	Документ.ЗаказПокупателя КАК Документ
	|ГДЕ
	|	Документ.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И Документ.Проведен
	#КонецУдаления
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	Дата
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ТаблицаТовары.НомерСтроки КАК НомерСтроки,
	|	ТаблицаТовары.Номенклатура КАК Номенклатура,
	|	" + ?(ВыводитьКоды, "ТаблицаТовары.Номенклатура." + КолонкаКодов +" КАК КолонкаКодов,", "") + "
	|	ТаблицаТовары.Номенклатура.Представление КАК Товар,
	|	ТаблицаТовары.Номенклатура.НаименованиеПолное КАК НоменклатураПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Характеристика) КАК ХарактеристикаПредставление,
	|	ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
	|	ВЫБОР
	|		КОГДА ТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
	|			ТОГДА ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Упаковка.ЕдиницаИзмерения)
	|		ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения)
	|	КОНЕЦ КАК ЕдиницаИзмерения,
	|	ТаблицаТовары.Количество КАК КоличествоВБазовыхЕдиницах,
	|	ТаблицаТовары.КоличествоУпаковок КАК Количество,
	|	ВЫБОР КОГДА ТаблицаТовары.КоличествоУпаковок = 0 ТОГДА ТаблицаТовары.КоличествоУпаковок
	|	ИНАЧЕ ТаблицаТовары.Сумма / ТаблицаТовары.КоличествоУпаковок
	|	КОНЕЦ КАК Цена,
	|	ТаблицаТовары.Сумма КАК Сумма,
	|	ТаблицаТовары.Ссылка КАК Ссылка,
	|	ТаблицаТовары.Сумма +
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК СуммаБезСкидки,
	|	ТаблицаТовары.СуммаРучнойСкидки +
	|	ТаблицаТовары.СуммаАвтоматическойСкидки   КАК Скидка,
	|	ТаблицаТовары.СуммаНДС,
	|	ТаблицаТовары.СтавкаНДС
	|ИЗ
	|	Документ.ЗаказПокупателя.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка В(&МассивОбъектов)
	#Удаление 
	|	И ТаблицаТовары.Ссылка.Проведен
	#КонецУдаления
	|	И НЕ ТаблицаТовары.Отменено
	|
	|УПОРЯДОЧИТЬ ПО
	|	Ссылка,
	|	НомерСтроки
	|ИТОГИ ПО
	|	Ссылка");
	
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	Результаты = Запрос.ВыполнитьПакет();
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЗаказПокупателя.ПФ_MXL_ЗаказПокупателя");
	
	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
	
	ОбластьШапкаНомера         = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
	ОбластьШапкаКодов          = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
	ОбластьШапкаДанных         = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
	ОбластьШапкаСкидок         = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
	ОбластьШапкаСуммы          = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
	
	ОбластьКолонкаТовар = Макет.Область("Товар");
	Если Не ВыводитьКоды Тогда
		ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
		                                  + Макет.Область("КолонкаКодов").ШиринаКолонки;
	КонецЕсли;
	ОбластьСтрокаНомера         = Макет.ПолучитьОбласть("Строка|НомерСтроки");
	ОбластьСтрокаКодов          = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
	ОбластьСтрокаДанных         = Макет.ПолучитьОбласть("Строка|Данные");
	ОбластьСтрокаСкидок         = Макет.ПолучитьОбласть("Строка|Скидка");
	ОбластьСтрокаСуммы          = Макет.ПолучитьОбласть("Строка|Сумма");
	
	ОбластьИтогоНДСНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
	ОбластьИтогоНДСКодов  = Макет.ПолучитьОбласть("ИтогоНДС|КолонкаКодов");
	ОбластьИтогоНДСДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
	ОбластьИтогоНДССкидок = Макет.ПолучитьОбласть("ИтогоНДС|Скидка");
	ОбластьИтогоНДССуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
	
	// Вывести Итого.
	ОбластьИтогоНомера         = Макет.ПолучитьОбласть("Итого|НомерСтроки");
	ОбластьИтогоКодов          = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
	ОбластьИтогоДанных         = Макет.ПолучитьОбласть("Итого|Данные");
	ОбластьИтогоСкидок         = Макет.ПолучитьОбласть("Итого|Скидка");
	ОбластьИтогоСуммы          = Макет.ПолучитьОбласть("Итого|Сумма");
	
	ОбластьСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
	ОбластьПодписей      = Макет.ПолучитьОбласть("Подписи");
	
	
	ВыборкаПоДокументам = Результаты[0].Выбрать();
	ВыборкаПоТабличнымЧастям = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ПервыйДокумент = Истина;
	
	Пока ВыборкаПоДокументам.Следующий() Цикл
		
		Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
			
			Продолжить;
			
		КонецЕсли;
		
		ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если НЕ ПервыйДокумент Тогда
			
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
			
		КонецЕсли;
		
		ПервыйДокумент = Ложь;
		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
		
		ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
		ОбластьЗаголовок.Параметры.Заполнить(ВыборкаПоДокументам);
		
		ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, СинонимДокумента);
		
		ПредставлениеПоставщика = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Поставщик, ВыборкаПоДокументам.Дата), "ПолноеНаименование,");
		ПредставлениеПолучателя = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Получатель, ВыборкаПоДокументам.Дата), "ПолноеНаименование, ФактическийАдрес, Телефоны");
		
		СтруктураПредставлений = Новый Структура("ПредставлениеПоставщика, ПредставлениеПолучателя", ПредставлениеПоставщика, ПредставлениеПолучателя);
		ЗаполнитьЗначенияСвойств(ОбластьЗаголовок.Параметры, СтруктураПредставлений);
		
		ТабличныйДокумент.Вывести(ОбластьЗаголовок);
		
		// Шапка
		
		ТабличныйДокумент.Вывести(ОбластьШапкаНомера);
		Если ВыводитьКоды Тогда
			ОбластьШапкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
			ТабличныйДокумент.Присоединить(ОбластьШапкаКодов);
		КонецЕсли;
		ТабличныйДокумент.Присоединить(ОбластьШапкаДанных);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСкидок);
		ТабличныйДокумент.Присоединить(ОбластьШапкаСуммы);
		
		
		ВсегоНаименований = 0;
		Сумма             = 0;
		ВсегоСкидок       = 0;
		ВсегоБезСкидок    = 0;
		СуммаНДС          = 0;
		
		// СТРОКИ ТЧ
		Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
			Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура) Тогда
				Продолжить;
			КонецЕсли;

			ОбластьСтрокаНомера.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Вывести(ОбластьСтрокаНомера);

			Если ВыводитьКоды Тогда
				
				ОбластьСтрокаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
				ТабличныйДокумент.Присоединить(ОбластьСтрокаКодов);
				
			КонецЕсли;

			ОбластьСтрокаДанных.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ОбластьСтрокаДанных.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаДанных);
			
			ОбластьСтрокаСкидок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСкидок);

			ОбластьСтрокаСуммы.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
			ТабличныйДокумент.Присоединить(ОбластьСтрокаСуммы);
			
			ВсегоНаименований = ВсегоНаименований + 1;
			
			Сумма          = Сумма       + ВыборкаПоСтрокамТЧ.Сумма;
			ВсегоСкидок    = ВсегоСкидок + ВыборкаПоСтрокамТЧ.Скидка;
			ВсегоБезСкидок = Сумма       + ВсегоСкидок;
			СуммаНДС       = СуммаНДС    + Окр(ВыборкаПоСтрокамТЧ.СуммаНДС, 2, 1);
			
		КонецЦикла;
		
		ТабличныйДокумент.Вывести(ОбластьИтогоНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоКодов);
		КонецЕсли;
		
		ТабличныйДокумент.Присоединить(ОбластьИтогоДанных);
		ОбластьИтогоСкидок.Параметры.ВсегоСкидок    = ВсегоСкидок;
		ОбластьИтогоСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСкидок);
		ОбластьИтогоСуммы.Параметры.Всего = Сумма;
		ТабличныйДокумент.Присоединить(ОбластьИтогоСуммы);
		
		
		// Вывести ИтогоНДС
		ТабличныйДокумент.Вывести(ОбластьИтогоНДСНомера);
		Если ВыводитьКоды Тогда
			ТабличныйДокумент.Присоединить(ОбластьИтогоНДСКодов);
		КонецЕсли;
		
		ОбластьИтогоНДСДанных.Параметры.НДС = ?(ВыборкаПоДокументам.ЦенаВключаетНДС, НСтр("ru = 'В том числе НДС:'"), НСтр("ru = 'Сумма НДС:'"));
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДСДанных);
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССкидок);
		
		Если НЕ ВыборкаПоДокументам.УчитыватьНДС Тогда
			СуммаНДССтрока = НСтр("ru = 'Без НДС'");
		Иначе
			СуммаНДССтрока = Строка(СуммаНДС);
		КонецЕсли;
		
		ОбластьИтогоНДССуммы.Параметры.ВсегоНДС = СуммаНДССтрока;
		ТабличныйДокумент.Присоединить(ОбластьИтогоНДССуммы);
		
		
		// Вывести Сумму прописью.
		
		ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%, на сумму %Итого%'");
		
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", ВсегоНаименований);
		ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%Итого%", ФормированиеПечатныхФормСервер.ФорматСумм(Сумма));
		
		ОбластьСуммаПрописью.Параметры.ИтоговаяСтрока = ТекстИтоговойСтроки;
		ОбластьСуммаПрописью.Параметры.СуммаПрописью  = ФормированиеПечатныхФормСервер.СформироватьСуммуПрописью(Сумма);
		
		ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);
		
		// ПОДПИСИ
		ОбластьПодписей.Параметры.Заполнить(ВыборкаПоДокументам);
		ОбластьПодписей.Параметры.ОтветственныйПредставление = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный);
		ТабличныйДокумент.Вывести(ОбластьПодписей);
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
		
	КонецЦикла;
	
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Возврат ТабличныйДокумент;
КонецФункции
Показать


Сейчас обновлю статью с данными комментариями.
19. bulas 213 11.06.21 06:53 Сейчас в теме
Что нужно добавить для вашего расширения, чтобы была возможность печатать внешнюю печатную форму у не проведённых документов, например: есть внешняя печатная форма Товарный чек для документа Реализация товаров и услуг?
20. dsdred 3493 11.06.21 09:01 Сейчас в теме
(19)Некоторые документы печатаются на основании регистров.
Соответственно если документ не проведен записей в регистре нет.

В этом случае надо точечно смотреть:
1 Как документ делает движения.
2 В том месте где запросом собираются данные для отчета добавить вариант для не проведенного документа.

Вариант 2
создать внешний отчет только для не проведенных документов и всю логику перенести в него.
22. Lurie 23.12.21 17:48 Сейчас в теме
Я один это на отдельную роль в расширении завязал?
23. dsdred 3493 24.12.21 21:55 Сейчас в теме
(22)Этот вопрос на битву экстрасенсов тянет ;))
24. jasand 18.02.22 10:52 Сейчас в теме
У меня 1С 8.3.15.1700 УТ 11.4.10.62
Вроде сделал всё по вашей инструкции, прога всё равно просит проведения. Мне нужно без проведения отправить на печать только документ "Реализация товаров и услуг". Приведу свой алгоритм действий. Поправьте, где не прав, пожалуйста:

1. Открываю Конфигуратор
2. Меню Конфигурация > Расширения конфигурации
3. В открывшемся окне нажимаю Добавить (зеленый крестик)
4. В отрквшемся окошке:
Имя: Расширение1
Синоним: Расширение1
Префикс: Расш1_
Назначение: Адаптация
5. Нажимаю ОК
6. В списке расширений напротив созданного расширения убираю галочку Безопасный режим, так как потом обязательно выйдет ошибка: "Расширение модуля запрещено из-за того, что оно подключено в безопасном режиме".
7. Кроме этого галочки по умолчанию остаются еще на трёх параметрах Активно, Защита от опасных действий, Использовать основные роли для всех пользователей.
8. В дереве Конфигурации нахожу свой документ: Документы > РеализацияТоваровУслуг
9. Нажимаю на него ПКМ, в контекстном меню выбираю "Добавить в расширение".
10. В расширении на появившемся документе РеализацияТоваровУслуг нажимаю ПКМ и в контекстном меню выбираю "Открыть модуль менеджера"
11. В этом модуле написал указанный вами код:

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


12. Нажал на панели кнопку "Обновить конфигурацию базы данных".
13. Закрыл Конфигуратор
14. Открыл УТ в пользовательском режиме. Создал документ Реализация товаров и услуг. Сохранил, но не провел. Нажал Печать, выбрал Расходная накладная. БАЦ!!: "Для выполнения команды необходимо предварительно провести документ. Выполнить проведение документа и продолжить?"
25. dsdred 3493 18.02.22 12:43 Сейчас в теме
(24)
ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");

Индентификатор не тот
Посмотрите в основной конфигурации в модуле менеджере по документу Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

скорее всего "Накладная" -> ПараметрыОтбора.Вставить("Идентификатор", "Накладная")
26. jasand 18.02.22 13:10 Сейчас в теме
(25) Как же я не обратил на это внимание?! О_о В коде же ЗаказКлиента стоял )) Спасибо!

Но теперь, когда я нажимаю на Печать > Реализация товаров (выводить скидки) всё работает прекрасно!
Но когда нажимаю на Печать > Реализация товаров (не выводить скидки) выскакивает ошибка: "Деление на 0 значения типа Numeric"
27. dsdred 3493 18.02.22 13:12 Сейчас в теме
(26)посмотрите код в Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
видимо нужно еще и проверки поставить


	Если ЭтоПартнер ИЛИ ПолучитьФункциональнуюОпцию("НеВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров';
											|en = 'Goods sales'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Порядок = 11;
	КонецЕсли;

	Если НЕ ЭтоПартнер
		 И ПолучитьФункциональнуюОпцию("ВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров (не выводить скидки)
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров (не выводить скидки)';
											|en = 'Goods sales (do not display discounts)'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьСкидки", Ложь);
		КомандаПечати.Порядок = 12;
	КонецЕсли;

	Если НЕ ЭтоПартнер
		 И ПолучитьФункциональнуюОпцию("ВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров (выводить скидки)
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров (выводить скидки)';
											|en = 'Goods sales (display discounts)'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьСкидки", Истина);
		КомандаПечати.Порядок = 13;
	КонецЕсли;
Показать
28. jasand 18.02.22 13:38 Сейчас в теме
(27) Я понял в чём проблема! Спасибо огромное!
Просто была необходимость в печати документов без указанного количества и суммы, только с ценами. Поэтому-то и выдаёт ошибку, когда дело коснулось скидок. На 0 же делить нельзя ))
29. Farpost 116 27.09.23 02:47 Сейчас в теме
Как все было просто и понятно в обычных формах и УТ-10....
Фирма 1С, как всегда придумала "супер-лайнер" из анекдота...
30. aleksey2 87 29.11.23 10:51 Сейчас в теме
Это способ как напечатать ПФ из конфы.
А как из внешней формы печатать? (ВПФ)
31. dsdred 3493 29.11.23 17:13 Сейчас в теме
(30) я не готов писать статью на эту тему.
Надо всю логику сделать не на данных регистров, а на документе. Начать с того что нужно посмотреть в какие регистры и как делаются движения.
Оставьте свое сообщение