Универсальная пакетная печать документов / справочников для типовых конфигураций 1С 8.2 - 8.3

26.05.24

Задачи пользователя - Пакетная печать

Печатает указанные печатные формы по списку документов с возможностью отправки сразу на принтер. Предназначено для использования в конфигурациях на основе БСП это типовые и самописные конфигурации с интегрированной подсистемой печати БСП. Выбираете тип документа / справочника (Реализация товаров и услуг, Заказ клиента, номенклатура). Выбираете печатные формы. Нажимаете кнопки Все или Выделенные (печатаем все документы, что попадают в фильтр списка, или выделяем нужные строки для печати). Если нужно отправить сразу на принтер, то ставим галку На принтер.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Универсальная пакетная печать документов для платформы до 8.3.24.1201
.epf 20,14Kb
236
236 Скачать (1 SM) Купить за 1 850 руб.
Универсальная пакетная печать документов для платформы от 8.3.24.1201
.epf 24,91Kb
6
6 Скачать (1 SM) Купить за 1 850 руб.
Расширение для УТ 11 исправляет ошибку печати Товарно-транспортная накладная (1-Т)
.cfe 5,94Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

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

 

А теперь с самого начала разберемся, как она работает по внутренностям.

В процедуре формы ПриСозданииНаСервере заполняем список типов документов / справочников используя функцию УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати, функция вернет массив менеджеров объектов, по которым подключена подсистема печати, по менеджеру объекта получим метаданные для получения имени метаданного и его синонима.

&НаКлиенте
Перем СписокОконДоПечати, 
СписокДокументов, 
СтрокиПечать;

#Область СобытияФормы

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОкнаПечатиФоново = Новый Массив;
	
	//Производим первоначальную инициализацию элементов при сохраненной настройке ВидОбъекта
	Если ЗначениеЗаполнено(ВидОбъекта) Тогда
		ВидДокументовПриИзмененииСервер();
	КонецЕсли;	
	
КонецПроцедуры

#КонецОбласти

#Область СобытияЭлементовФормы

&НаКлиенте
Процедура ВидДокументовПриИзменении(Элемент)
	
	ВидДокументовПриИзмененииСервер();
	
КонецПроцедуры

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

//Проставим нулевое количество во всех строчках и сохраним настройки
&НаКлиенте
Процедура ОтметитьВсе(Команда)
	
	Для Каждого Стр Из ПечатныеФормы Цикл
		Если Стр.Количество = 0 Тогда
			Стр.Количество = 1;
		КонецЕсли;	
	КонецЦикла;	
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
	
	Если НеВозможнаПечать() Тогда
		Возврат;
	КонецЕсли;
	
	СписокДокументов = ПолучитьДокументыПоДинамическомуСписку();
    ПечатьПоСпискам();
	
КонецПроцедуры

&НаКлиенте
Процедура ПечатьВыделенные(Команда)
	
	Если НеВозможнаПечать() Тогда
		Возврат;
	КонецЕсли;	
	
	ВыделенныеЭлементы = Элементы.ТаблицаДокументов.ВыделенныеСтроки;	
	СписокДокументов = ПолучитьДокументыПоДинамическомуСписку(ВыделенныеЭлементы);
	
	ПечатьПоСпискам();
	
КонецПроцедуры

&НаКлиенте
Функция НеВозможнаПечать()

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

&НаКлиенте
Процедура ПечатьПоСпискам()
		
	ВыделенныеЭлементы = Элементы.ТаблицаДокументов.ВыделенныеСтроки;	
	СписокДокументов = ПолучитьДокументыПоДинамическомуСписку(ВыделенныеЭлементы);
	СтрокиПечать = ПолучитьПараметрыПечатиСервер();
	
	ВыполнитьПечатьПоСпискуДокументовКлиент(СтрокиПечать);	
	
КонецПроцедуры	

&НаКлиенте
Процедура СнятьВсе(Команда)	
	
	Для Каждого Стр Из ПечатныеФормы Цикл
		
		Стр.Количество = 0;
		
	КонецЦикла;
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьНастройку(Команда)
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

#КонецОбласти

#Область ПрограмныйИнтерфейс

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

&НаСервере
Процедура ЗаполнитьПечатныеФормыНаСервере()
	
	ПечатныеФормы.Очистить();    	
	
	ТаблКомандПечати = ПолучитьКомандыПечатиСервер(ВидОбъекта);
	
	ВосстановитьНастройку(ТаблКомандПечати);
	
КонецПроцедуры

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

//Получаем команды печати для формы объекта из ВидОбъекта
&НаСервереБезКонтекста
Функция ПолучитьКомандыПечатиСервер(Знач ВидОбъекта)	
	
	ДанныеОбъекта = ПолучитьДанныеВидаОбъекта(ВидОбъекта);
	
	Если ДанныеОбъекта = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;		
	
	МетаданныеДокумента = Метаданные[ДанныеОбъекта.ТипОбъекта][ДанныеОбъекта.ИмяОбъекта];
	
	Если ТипЗнч(МетаданныеДокумента.ОсновнаяФормаСписка) = Тип("ОбъектМетаданных") Тогда
		ФормаОбъекта = МетаданныеДокумента.ОсновнаяФормаСписка;
	ИначеЕсли ТипЗнч(МетаданныеДокумента.ОсновнаяФормаОбъекта) = Тип("ОбъектМетаданных") Тогда	
		ФормаОбъекта = МетаданныеДокумента.ОсновнаяФормаОбъекта;
	Иначе 	
		ВызватьИсключение "Для объекта " 
		+ ДанныеОбъекта.ИмяОбъекта
		+ " не задана основная форма"; 
	КонецЕсли;	
	
	КомандыПечатиФормы = УправлениеПечатью.КомандыПечатиФормы(ВидОбъекта + ".Форма." + ФормаОбъекта.Имя);	
	
	Возврат КомандыПечатиФормы;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура ПостОбработкаКлиентПечать(МассивОбработкаНаСервере, СоответствиеПечФорм)

	МассивОбработкаКлиент = ОбработатьПечатьИзОткрытыхОконСервер(МассивОбработкаНаСервере);
	
	Если МассивОбработкаКлиент <> Неопределено Тогда
		
		Для Каждого Эл Из МассивОбработкаКлиент Цикл 
			
			ПечатнаяФорма = СоответствиеПечФорм.Получить(Эл.ИДПечформы);

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

&НаКлиенте
Процедура ЗаполнитьСоответствиеФорматовСохраненияТабличногоДокумента()
		
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.PDF_A_3, "pdf");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.MXL, "mxl");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.XLSX, "xlsx");	
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.XLS, "xls");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.ODS, "ods");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.DOCX, "docx");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.HTML5, "html");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.TXT, "txt");
	СоответствиеФорматов.Добавить(ТипФайлаТабличногоДокумента.ANSITXT, "txt");
	
КонецПроцедуры 	

&НаСервере
Функция ЗначениеИзСтрокиXML(СтрокаXML)
	
	Возврат ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML);
	
КонецФункции	

&НаСервере
Функция ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, Название)
	
	Возврат УправлениеПечатью.ИмяФайлаПечатнойФормыОбъекта(ОбъектПечати, ЗаданныеИменаПечатныхФорм, Название);
	
КонецФункции	

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

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

&НаСервере
Функция ОбработатьПечатьИзОткрытыхОконСервер(МассивОбработкаНаСервере)
	
	МассивОбработкаКлиент = Новый Массив;
	
	Для Каждого Эл Из МассивОбработкаНаСервере Цикл 
		
		Если Эл.ВидОбработки = "ЗаписьВФайл" Тогда
															
			Элемент_РасширениеФайла = СоответствиеФорматов.НайтиПоЗначению(Эл.ФорматСохранения_Значение);
			РасширениеФайла = Элемент_РасширениеФайла.Представление;
			
			ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(Эл.ОбъектПечати, 
			Эл.ЗаданныеИменаПечатныхФорм, 
			Эл.НастройкаПечатнойФормы_Название);
			
			ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла);
			
			ИмяФайлаСРасширением = ИмяФайла + "." + РасширениеФайла;
			ПолноеИмяФайла = КаталогСохраненияПоУмолчанию + "\" + ИмяФайлаСРасширением;
			
			МаксимальнаяДлина = 218; // https://docs.microsoft.com/en-us/office/troubleshoot/office-suite-issues/error-open-document
			Если Эл.ФорматСохранения_Значение = ТипФайлаТабличногоДокумента.XLS И СтрДлина(ПолноеИмяФайла) > МаксимальнаяДлина Тогда
				МаксимальнаяДлина = МаксимальнаяДлина - 5; // Резерв для формирования уникального имени.
				Если СтрДлина(КаталогСохраненияПоУмолчанию) < МаксимальнаяДлина Тогда
					ИмяФайла = Лев(ИмяФайла, МаксимальнаяДлина - СтрДлина(КаталогСохраненияПоУмолчанию) - СтрДлина(РасширениеФайла) - 1);
					ИмяФайлаСРасширением = ИмяФайла + "." + РасширениеФайла;
					ПолноеИмяФайла = КаталогСохраненияПоУмолчанию + ИмяФайлаСРасширением;
				КонецЕсли;
			КонецЕсли;
			
			ПолноеИмяФайла = ФайловаяСистемаСлужебныйКлиентСервер.УникальноеИмяФайла(ПолноеИмяФайла);								
			
			МассивОбработкаКлиент.Добавить(Новый Структура("ВидОбработки, ПолноеИмяФайла, ТипФайла, ИДПечформы", 
			Эл.ВидОбработки,
			ПолноеИмяФайла,
			Эл.ФорматСохранения_Значение, 
			Эл.ИДПечформы));		                                            
			
		ИначеЕсли Эл.ВидОбработки = "ПрикрепитьКДокументу" Тогда
			
			УИДХранения = Новый УникальныйИдентификатор();
			
			АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(Эл.ДвоичныеДанныеФайла, УИДХранения);
			
			Элемент_РасширениеФайла = СоответствиеФорматов.НайтиПоЗначению(Эл.ФорматСохранения_Значение);
			РасширениеФайла = Элемент_РасширениеФайла.Представление;			
			
			ИмяФайла = ИмяФайлаПечатнойФормыОбъекта(Эл.ОбъектПечати, Эл.ЗаданныеИменаПечатныхФорм, Эл.НастройкаПечатнойФормы_Название);
			ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла);
			
			ИмяФайлаСРасширением = ИмяФайла + "." + РасширениеФайла;
			
			МаксимальнаяДлина = 218; // https://docs.microsoft.com/en-us/office/troubleshoot/office-suite-issues/error-open-document
			Если Эл.ФорматСохранения_Значение = ТипФайлаТабличногоДокумента.XLS И СтрДлина(ИмяФайлаСРасширением) > МаксимальнаяДлина Тогда
				МаксимальнаяДлина = МаксимальнаяДлина - 5; // Резерв для формирования уникального имени.
				ИмяФайла = Лев(ИмяФайла, МаксимальнаяДлина - СтрДлина(РасширениеФайла) - 1);
				ИмяФайлаСРасширением = ИмяФайла + "." + РасширениеФайла;
			КонецЕсли;
			
			ИмяФайлаСРасширением = ФайловаяСистемаСлужебныйКлиентСервер.УникальноеИмяФайла(ИмяФайлаСРасширением);
			
			ПрикрепитьФайлСервер(АдресФайлаВоВременномХранилище, 
			Эл.ОбъектПечати, 
			ИмяФайлаСРасширением);
			
		КонецЕсли;
		
	КонецЦикла;								
	
	Возврат МассивОбработкаКлиент;
	
КонецФункции	

&НаСервере
Процедура ПрикрепитьФайлСервер(АдресФайлаВоВременномХранилище, ОбъектПечати, ИмяФайла)
	
	ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыФайла.ВладелецФайлов = ОбъектПечати;
	ПараметрыФайла.ИмяБезРасширения = ИмяФайла;
	РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, 
	АдресФайлаВоВременномХранилище);	
	
КонецПроцедуры	

//Разделяя строку ВидОбъекта через . получаем ИмяОбъекта и ТипОбъекта
&НаСервереБезКонтекста
Функция ПолучитьДанныеВидаОбъекта(Знач ВидОбъекта)
	
	РазделеннаяСтрокаВидаОбъекта = СтрРазделить(ВидОбъекта, ".");
	
	Если РазделеннаяСтрокаВидаОбъекта.ВГраница() < 1 Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Перевыберите вид документа / справочника";
		Сообщение.Поле = "ВидОбъекта";
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецЕсли;	
	
	ТипОбъекта = РазделеннаяСтрокаВидаОбъекта[0];	
	
	Если ТипОбъекта = "Справочник" Тогда
		ТипОбъекта = "Справочники";
	ИначеЕсли ТипОбъекта = "Документ" Тогда
		ТипОбъекта = "Документы";
	КонецЕсли;	
	
	ИмяОбъекта = РазделеннаяСтрокаВидаОбъекта[1];
	
	СтруктураРезультат = Новый Структура("ТипОбъекта, ИмяОбъекта",
	ТипОбъекта, ИмяОбъекта);
	
	Возврат СтруктураРезультат;
	
КонецФункции	

#КонецОбласти

#Область НастройкиПользователя

//Сохраним настройки ПечатныеФормы в ХранилищеОбщихНастроек
&НаСервере
Процедура СохранитьНастройкиСервер()
	
	ТаблПечатныеФормы = ПечатныеФормы.Выгрузить();
	
	ХранилищеОбщихНастроек.Сохранить("УниверсальнаяПакетнаяПечатьДокументов",
	ВидОбъекта,
	ТаблПечатныеФормы);		
	
КонецПроцедуры		

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

&НаСервере
Процедура ТаблицаДокументовПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)
	
	Элементы.ТаблицаДокументов.СоздатьЭлементыФормыПользовательскихНастроек(Элементы.СписокКомпоновщикНастроекПользовательскиеНастройки,
	РежимОтображенияНастроекКомпоновкиДанных.БыстрыйДоступ);
	
КонецПроцедуры

//Сохраним в ХранилищеПользовательскихНастроекДинамическихСписков ПользовательскиеНастройки для ТаблицаДокументов
&НаСервере
Процедура ТаблицаДокументовПриСохраненииПользовательскихНастроекНаСервере(Элемент, Настройки)
	
	Если ЗначениеЗаполнено(ТаблицаДокументов.КлючТекущихПользовательскихНастроек) Тогда
		ХранилищеПользовательскихНастроекДинамическихСписков.Сохранить("УППД", 
		ТаблицаДокументов.КлючТекущихПользовательскихНастроек,
		ТаблицаДокументов.КомпоновщикНастроек.ПользовательскиеНастройки, 
		, 
		ПараметрыСеанса.ТекущийПользователь);	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПечатныеФормыПриИзменении(Элемент)
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

//Скопируем строчку печатной формы и сохраним настройки
&НаКлиенте
Процедура СкопироватьПечатнуюФорму(Команда)
	
	ТекСтр = Элементы.ПечатныеФормы.ТекущиеДанные;
	
	Если ТекСтр = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	НоваяСтрока = ПечатныеФормы.Вставить(ПечатныеФормы.Индекс(ТекСтр) + 1);
	ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтр);
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

//Удалим строчку печатной формы и сохраним настройки
&НаКлиенте
Процедура УдалитьПечатнуюФорму(Команда)
	
	ТекСтр = Элементы.ПечатныеФормы.ТекущиеДанные;
	
	Если ТекСтр = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ИндексТекущейСтроки = ПечатныеФормы.Индекс(ТекСтр);
	
	Отб = Новый Структура("Идентификатор, Представление");
	
	ЗаполнитьЗначенияСвойств(Отб, ТекСтр);
	
	НайденныеСтроки = ПечатныеФормы.НайтиСтроки(Отб);
	
	Если НайденныеСтроки.Количество() < 2 Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Последняя строчка печатной формы не удаляется";
		Сообщение.Поле = "ПечатныеФормы[" + Формат(ИндексТекущейСтроки, "ЧГ=0") + "]";
		Сообщение.Сообщить();
		Возврат;
	КонецЕсли;	
	
	ПечатныеФормы.Удалить(ИндексТекущейСтроки);
	
	СохранитьНастройкиСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура Настройки(Команда)
	
	ОповещениеПослеЗакрытияНастроек = Новый ОписаниеОповещения("ПослеЗакрытияОкнаНастроек", 
	ЭтаФорма);
	
	ПараметрыФормы = Новый Структура("ПодокументнаяОтправка, 
	|МассивФорматов,
	|ВариантСохранения, 
	|КаталогСохраненияПоУмолчанию",
	ПодокументнаяОтправка,
	ВыбранныеФорматыСохранения.ВыгрузитьЗначения(),
	ВариантСохранения, 
	КаталогСохраненияПоУмолчанию);
	
	ОткрытьФорму("ВнешняяОбработка.дк_УниверсальнаяПакетнаяПечатьДокументов.Форма.ФормаНастройки",
	ПараметрыФормы, 
	ЭтаФорма,
	,
	,
	,
	ОповещениеПослеЗакрытияНастроек);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияОкнаНастроек(РезультатЗакрытия,
	ДополнительныеПараметры) Экспорт
	
	Если РезультатЗакрытия = Истина Тогда
		ЗагрузитьОбщиеНастройки();           
	КонецЕсли;
	
КонецПроцедуры	

&НаСервере
Процедура ЗагрузитьОбщиеНастройки()
	
	Перем МассивФорматов;
	
	ОбщиеНастройки = ХранилищеОбщихНастроек.Загрузить("УниверсальнаяПакетнаяПечатьДокументов",
	"ОбщиеНастройки");
	
	Если ТипЗнч(ОбщиеНастройки) = Тип("Структура") Тогда
		
		ОбщиеНастройки.Свойство("ПодокументнаяОтправка", ПодокументнаяОтправка);	
		ОбщиеНастройки.Свойство("КаталогСохраненияПоУмолчанию", КаталогСохраненияПоУмолчанию);
		
		Если ОбщиеНастройки.Свойство("МассивФорматов", МассивФорматов) Тогда
			ВыбранныеФорматыСохранения.ЗагрузитьЗначения(МассивФорматов);
		КонецЕсли;
		
		ОбщиеНастройки.Свойство("ВариантСохранения", ВариантСохранения);
		
	КонецЕсли;
	
	Настройки_ПутьВывода = ХранилищеОбщихНастроек.Загрузить("УниверсальнаяПакетнаяПечатьДокументов",
	"ПутьВывода");
	
	Если ТипЗнч(Настройки_ПутьВывода) = Тип("Массив") Тогда
		ПутьВывода.ЗагрузитьЗначения(Настройки_ПутьВывода);
	КонецЕсли;
	
	Если ПутьВывода.Количество() = 0 Тогда
		ПутьВывода.Добавить("На экран", 
		"На экран", 
		Истина);	
	КонецЕсли;	
	
КонецПроцедуры	

&НаКлиенте
Процедура ПутьВыводаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ДанныеВыбора = Новый СписокЗначений;
	ДанныеВыбора.Добавить("На принтер", "На принтер", Ложь);
	ДанныеВыбора.Добавить("На экран", "На экран", Ложь);
	ДанныеВыбора.Добавить("Сохранить", "Сохранить", Ложь);
	
КонецПроцедуры

&НаСервере
Процедура ПутьВыводаПриИзмененииНаСервере()
	
	ХранилищеОбщихНастроек.Сохранить("УниверсальнаяПакетнаяПечатьДокументов",
	"ПутьВывода",
	ПутьВывода.ВыгрузитьЗначения());		
	
КонецПроцедуры

&НаКлиенте
Процедура ПутьВыводаПриИзменении(Элемент)
	
	ПутьВыводаПриИзмененииНаСервере();
	
КонецПроцедуры

#КонецОбласти

Можно скачать файл обработки для всех платформ 1С и так же для версии от 8.3.24.1201, использующий добавленный функционал работы со списками.

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

  • Управление торговлей, редакция 11, релизы 11.5.13.109
  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.153.18

Печатаем полной пачкой на принтер

См. также

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    14020    36    7    

69

Пакетная печать Регламентированный учет и отчетность Файловый обмен (TXT, XML, DBF), FTP Загрузка и выгрузка в Excel Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Быстрое формирование сразу нескольких видов стандартных бухгалтерских отчетов - .Анализ счета, Карточка счета, Оборотно-сальдовая ведомость по счету, Отчет по проводкам. В периоды проведения проверок со стороны ФНС в деятельности предприятий часто возникает необходимость предоставления сведений из бухгалтерского учета. Обработка сократит время на формирование отчетов бухгалтеру.

6000 руб.

30.03.2023    6337    5    0    

7

Пакетная печать Банковские операции Кассовые операции Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Обработка для групповой печати чеков ККМ с настройкой, загруженных из банковской выписки. На основании документа Поступление на расчетный счет!

4800 руб.

21.08.2019    20181    73    10    

24

Печатные формы Пакетная печать Оптовая торговля Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Мастер пакетной печати отгрузочных и товаросопроводительных документов. Продукт оптимизирован для алкогольной продукции. Поддерживает печатные формы ТОРГ-12, счет-фактура, разделы А и Б справки к ТТН, копии сертификатов, ТТН (1-Т), а также ТН (Приложение4). Все формы заполняются автоматически, а данные в полях формы (актуально для ТН и ТТН) сохраняются для каждого документа и не требуют заполнения при повторных открытиях. Предназначена для конфигурации "1С:Управление торговлей" , ред. 10.3, ред. 11.1, "1С:Бухгалтерия предприятия, ред. 3.0". Не требует изменений конфигурации. Печать суммы акциза в с/ф, УПД и справке А. Поддержка требований торговых сетей "Метро" и "Ашан".

6000 руб.

04.04.2013    129602    142    188    

112

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

Внешние печатные формы УПД (Универсальный передаточный документ), Счет-фактура (+ корректировочный) (+ "в валюте") в редакции постановления Правительства РФ №1096 от 01.10.2024 для 1С 8 Управление торговлей 11.5, Комплексная автоматизация, Управление предприятием ERP 2.5 для документов вида "Реализация товаров и услуг", "Счет-фактура (выданный)". С данными прослеживаемости.

1 стартмани

27.09.2024    1591    210    zhuravlev_as    9    

6

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

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

2 стартмани

22.08.2023    3258    52    progmaster    8    

4

Инструментарий разработчика Пакетная печать Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример выполнения печати на принтер на сервере 1С используя библиотеку Ghostscript

1 стартмани

17.10.2022    4931    29    prog-1s    1    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. LavinVladik 229 07.01.16 05:15 Сейчас в теме
не мешало бы добавить , флаг для выбора документов в левом окне

на
1С:Предприятие 8.3 (8.3.6.2390)
Бухгалтерия предприятия, редакция 3.0 (3.0.41.51

выдает ошибку
{ОбщийМодуль.УправлениеПечатью.Модуль(1274)}: При формировании печатной формы "УниверсальныйПередаточныйДокумент" возникла ошибка. Обратитесь к администратору.
{ОбщийМодуль.УправлениеПечатью.Модуль(1274)}: При формировании печатной формы "СчетФактура" возникла ошибка. Обратитесь к администратору.

если раскопаю в чем причина дополнительно напишу
2. Free_Danial 59 07.01.16 14:37 Сейчас в теме
Спасиб за комментарий.
Баги пификсены, модератор скоро выложит свежую версию.
Флаг для выбора документов ожидает скоро в новых версиях.
3. spec8s 840 07.01.16 19:52 Сейчас в теме
4. LavinVladik 229 07.01.16 23:20 Сейчас в теме
(3) spec8s,

наверно в этом
"UPD: Для Бухгалтерии 3.0 обработки не будет, ввиду ограничения самой конфигурации."
5. jobkostya1c_ERP 100 31.05.16 12:34 Сейчас в теме
Плюс автору что не поленился описать типовые алгоритмы для пакетной печати. Сейчас сам думаю как лучше начать. Надо чтоб для БП 2.0 было, но на управляемой форме и чтоб безболезненно перевести на БП 3.0. Пока надо изучить типовые механизмы.
6. gitty 1 09.11.18 06:18 Сейчас в теме
в обработке, которую я скачала есть только две кнопки печати, ни выбора документа/справочника ни выбора печатных форм, какой смысл было выкладывать это для скачивания?
11. Free_Danial 59 05.07.21 15:36 Сейчас в теме
выбор типа документа при открытии вначале, обратиться можете в скайп в демонстрации покажу как пользоваться
7. ys_2008 16 11.03.20 16:54 Сейчас в теме
Плюсую - спасибо большое. Кучу времени сэкономило.
8. Letos 267 29.06.21 23:33 Сейчас в теме
Как можно напечатать список документов, но с сортировкой указанной на форме?
Дело в том что при печати печатные фомры сортируются по Дате документа, а не по у казанной сортировке.
9. Letos 267 05.07.21 10:45 Сейчас в теме
(8) В БУХ 3.0 на 05.07.2021 это сделать не возможно. Нужно редактировать тексты запросов которые получаются при печати. Чаще всего они находятся в МодулеМенеджера, документа который вы печатаете и имеют название, что-то тип: ТекстЗапросаПечать[Название печатной формы]. В этом тексте установлена сортировка по Дате.
12. Free_Danial 59 05.07.21 15:53 Сейчас в теме
Версия с возможностью печати по сортировке из списка скоро будет выложена, на данный момент находится на модерации.
10. Free_Danial 59 05.07.21 14:57 Сейчас в теме
На конфигурациях где возможна реализация печати по сортировке из списка в скором времени будет реализована печать с сортировкой из списка
13. Free_Danial 59 21.08.21 11:06 Сейчас в теме
Выложена новая версия с реализованной сортировкой из списка, добавлением возможности сохранения настроек.
14. Free_Danial 59 10.10.21 12:00 Сейчас в теме
Как считаете, потребуется ли кому нибудь, указание количества печатных форм перед печатью?
15. Winlin 17.01.22 04:14 Сейчас в теме
Обработка группирует печатные формы по документу? Т.е. на принтер отправляет как штатная при массовой печати, сначала все упд потом все накладные, например. Или по каждому документу свой набор, упд+накладная, упд+накладная и т.д. ?
16. Free_Danial 59 17.01.22 08:27 Сейчас в теме
Печатает по документы сначала все печатные формы, потом по другому документу.
17. Winlin 02.02.22 04:03 Сейчас в теме
(16)
Печатает по документы сначала все печатные формы, потом по другому документу.

не могу написать в личные. Можете ответить на почту
rr.yy.88Собакаbk.ru ?
18. Free_Danial 59 02.02.22 07:59 Сейчас в теме
(17)сначала печатает все выбранные печатные формы по одному документу, потом все выбранные печатные формы по другому документу т.е. берется один документ для него все печатается и переходится к другому документу
19. Winlin 02.02.22 10:42 Сейчас в теме
Это я понял :) . Просто связаться хотел, чтобы не писать тут.
20. Winlin 04.02.22 15:17 Сейчас в теме
Не подскажите в чем может быть проблема. Встроенные печатные формы при флаге "Сразу на принтер" уходят сразу на печать, а вот внешние вызывают диалог выбора принтера, и печатают по одному экземпляру, вызывая диалог выбора принтера столько раз , сколько задано экземпляров.
Из встроенной в УТ пакетной печати все уходит сразу на принтер.
22. Free_Danial 59 04.02.22 19:25 Сейчас в теме
(20)можете ли прислать образец вашей печатной формы под нее отлажу пакетную печать
21. Winlin 04.02.22 15:50 Сейчас в теме
Пока вышел из положения так. Настроил встроенный комплект печати и его уже отправляю из обработки. Печатает все сразу на принтер.
23. Winlin 05.02.22 04:48 Сейчас в теме
24. Free_Danial 59 10.02.22 18:40 Сейчас в теме
(23)В обработке устранен недостаток по лишнему вызову диалога выбора принтера, новая версия на модерации и скоро будет доступна для скачивания.
25. Free_Danial 59 10.02.22 18:41 Сейчас в теме
(23)Спасибо вам за обращение, обратная связь от вас помогает улучшать обработку.
26. Вова 110 17.03.22 23:47 Сейчас в теме
Добрый вечер, подскажите, (24). Если при печати поставить, например, Товарных накладных -2 шт. Счет фактура -2 шт. они в таком же порядке и на принтере распечатаются?
29. Free_Danial 59 19.03.22 10:05 Сейчас в теме
(26)Печать будет порядке указания сначала все печатные формы формы по одному документу потом все печатные формы по другому документу.
27. Вова 110 18.03.22 18:40 Сейчас в теме
Значение не является значением объектного типа (Имя)
{ВнешняяОбработка.УниверсальнаяПакетнаяПечатьДокументов.Форма.Форма.Форма(314)}: КомандыПечатиФормы = УправлениеПечатью.КомандыПечатиФормы(ВидОбъекта + ".Форма." + ФормаОбъекта.Имя);
{ВнешняяОбработка.УниверсальнаяПакетнаяПечатьДокументов.Форма.Форма.Форма(258)}: ТаблПечать = ПолучитьКомандыПечатиСервер(ВидОбъекта);
{ВнешняяОбработка.УниверсальнаяПакетнаяПечатьДокументов.Форма.Форма.Форма(53)}: ЗаполнитьПечатныеФормыНаСервере();
{ВнешняяОбработка.УниверсальнаяПакетнаяПечатьДокументов.Форма.Форма.Форма(32)}: ВидДокументовПриИзмененииСервер();
В чем проблема, подскажите?
28. Free_Danial 59 19.03.22 10:04 Сейчас в теме
(27)Проблема с документом, какая у вас конфигурация и какой документ выбираете?
30. Free_Danial 59 19.03.22 10:09 Сейчас в теме
(27)Можете мне в личку написать адаптирую обработку под вас.
Вова; +1 Ответить
31. Вова 110 20.03.22 00:55 Сейчас в теме
32. Free_Danial 59 20.03.22 12:55 Сейчас в теме
Ошибка исправлена, публикация на модерации и скоро будет доступна для скачивания.
Вова; +1 Ответить
33. Free_Danial 59 20.03.22 15:30 Сейчас в теме
Вышла новая версия с исправленным порядком печати при печати сразу на принтер.
Вова; +1 Ответить
34. Sanario 27 23.03.22 21:27 Сейчас в теме
Работает только для встроенных печатных форм? Или внешние подхватывать может?
35. Free_Danial 59 24.03.22 09:34 Сейчас в теме
(34)Внешние тоже подхватывает
36. JuLyAk 23.05.22 07:57 Сейчас в теме
Здравствуйте, в Унф 1.6.25.166 выдает ошибку Метод объекта не обнаружен (ВыполнитьПодключаемуюКомандуПечатиЗавершение)
37. Free_Danial 59 23.05.22 18:48 Сейчас в теме
(36)Добрый вечер. Что печатаете, из какого документа?
38. JuLyAk 26.05.22 07:55 Сейчас в теме
Здравствуйте, разобралась спасибо, а можно как то отборы задавать не через "Еще" а вытащить на форму сразу например по организациями?
39. Free_Danial 59 28.05.22 12:01 Сейчас в теме
(38)Добрый день. Добавление отборов в процессе реализации.
40. Free_Danial 59 28.05.22 19:18 Сейчас в теме
(38)Добрый вечер. Добавлена возможность помещать настройки в быстрый доступ.
41. JuLyAk 06.07.22 09:23 Сейчас в теме
Здравствуйте, подскажите пожалуйста каким образом можно в табличной части вывести столбцы помимо даты и номера еще например контрагента и сумму документа?
42. Free_Danial 59 08.07.22 21:20 Сейчас в теме
(41)Добрый вечер. Возможность добавления пользователями колонок в список на реализации и ожидается в следующих релизах.
43. Free_Danial 59 09.07.22 14:26 Сейчас в теме
(41)Выпущена новая версия в ней через Еще - Изменить форму - Встать на документ или справочник - Добавить поля, сможете добавлять реквизиты документов или справочников в форму списка.
44. Vitvarg51 30.11.22 09:37 Сейчас в теме
Добрый день! Подскажите, можно ли в Вашей обработке задавать определённую последовательность выводимых на печать документов?
45. Free_Danial 59 01.12.22 11:19 Сейчас в теме
(44) Ожидается в будущих версиях
46. Free_Danial 59 04.12.22 16:23 Сейчас в теме
(44)Выпушена свежая версия с возможностью менять порядок печатных форм, так же возможно отсортировать документы в настройках списка.
47. leriko 4 05.12.22 09:46 Сейчас в теме
Добрый день! Очень просят пользователи такой порядок документов: УПД, Сертификаты, Транспортная накладная и ещё раз УПД. А можно в обработке доработать возможность добавления в список печатной формы повторно?
48. Free_Danial 59 05.12.22 19:09 Сейчас в теме
(47)Добрый вечер. Возможно получится реализовать в будущих версиях.
49. Free_Danial 59 25.12.22 11:22 Сейчас в теме
(47)Доброе утро!
В новой версии добавлена возможность произвольной настройки порядка печатных форм.
50. AlexK_2012 27.01.23 16:52 Сейчас в теме
Добрый день! Подскажите можно ли как-то сделать чтобы каждый документ из массива документов отдельно на принтер отправлялся?
Этой обработкой или типовой функционал доработать.

Конфигурация БП
Есть проблема с друхсторонней печатью.
Пример:
Печатают 2шт ТОРГ12 по 3 страницы, контрагент один, грузополучатели разные, в результате печатается 3 листа, а нужно чтобы получилось 4, т.е. 1лист - стр 1+2, 2 лист - стр 3, 3й лист - стр 1+2, 4й лист - стр 3.
52. Free_Danial 59 29.01.23 12:55 Сейчас в теме
(50)Выложена новая версия с добавленной настройкой по документной печати для отправки на печать версий печатных форм по отдельности.
51. Free_Danial 59 28.01.23 16:47 Сейчас в теме
(50) Добрый день. На данный момент каждый документ вызывается на печать отдельно, при этом количество различных копий объединяется в пакет печати, вероятно у вас количество экземпляров более 1 и при объединении в пакет происходит некорректная печать. Можно проверить, точно ли при объединении нескольких экземпляров происходит ошибочное объединение в пакет напечатав один документ с несколькими экземплярами, если в этом месте ошибка то можно добавить отправку на печать каждого экземпляра отдельно в обработке или разобраться в БСП конфигурации или платформе где ошибка.
53. ELbailador 30.01.23 12:49 Сейчас в теме
Здравствуйте. В вашей обработке имеется возможность сохранять печатную форму документов в файлы без открытия самой печатной формы. Скажем пакетное сохранение документов в pdf ?
64. Free_Danial 59 18.02.24 16:53 Сейчас в теме
(53) Добрый день. Выпущена версия обработки "Универсальная пакетная печать документов для платформы от 8.3.24.1201" с возможностью настройки печати с сохранением в каталог.
54. Free_Danial 59 31.01.23 09:02 Сейчас в теме
(53) На данный момент такого функционала нет, в будущих версиях возможно появится.
55. skylinegtr 02.10.23 14:09 Сейчас в теме
Добрый день
В свежих версиях БСП формирование печатных форм выполняется в фоне, из-за этого обработка перестала отправлять печатные формы сразу на принтер. Подскажите, вы планируете дорабатывать обработку под новые версии БСП, чтобы можно было выводить доки сразу на принтер?
57. Free_Danial 59 07.10.23 16:17 Сейчас в теме
(55)Добрый день.
В какой версии БСП у вас не отправляется на принтер?
У вас проблема с типовой конфигурацией или самописная на основе БСП?
58. skylinegtr 07.10.23 16:59 Сейчас в теме
(57)Добрый день
типовой ЗУП КОРП. Проблема в том, что теперь сначала вылазит окошко длительной операции "Подготовка печатных форм. Пожалуйста, подождите...", и обработка пытается "распечатать" табличный документ из него и вываливается в исключение на строке ФормаОткрытая.Копий = ЧислоЭкземпляров
59. Free_Danial 59 07.10.23 18:45 Сейчас в теме
(58)А на какой печатной форме какого документа ошибка?
60. skylinegtr 08.10.23 03:41 Сейчас в теме
(59)на любой печатной форме любого документа при установленной галке "на принтер" документ не выводится на принтер. Печатная форма просто отображается на экране. Версия зупа 3.1.27.90, но повторюсь, что это из-за БСП и фоновой печати документов
63. Free_Danial 59 16.10.23 13:46 Сейчас в теме
Обработка адаптирована для печати фоновом режиме, после прохождения модерации будет доступна для скачивания.
56. Free_Danial 59 02.10.23 19:24 Сейчас в теме
(55) Добрый день.
В будущих версиях обработки планируется адаптация под новые версии БСП функционала печати сразу на принтер.
61. skylinegtr 09.10.23 11:33 Сейчас в теме
62. Free_Danial 59 15.10.23 21:52 Сейчас в теме
(60)Обработка адаптирована для печати фоновом режиме, после прохождения модерации будет доступна для скачивания.
65. Myst_ 65 15.04.24 14:10 Сейчас в теме
Бухгалтерия предприятия, редакция 3.0 (3.0.150.33)
1С:Предприятие 8.3 (8.3.23.2040)


Не выполняет печать "на принтер" Дополнительных внешних печатных форм: Только выводит на экран сформированные формы.
66. Free_Danial 59 12.05.24 19:16 Сейчас в теме
(65)Устранено в версии Универсальная пакетная печать документов для платформы от 8.3.24.1201, в даленйшем будет корректировка версии для прошлых релизов платформ.
Оставьте свое сообщение