Просто комбо, два в одном, или как напечатать два макета (стандартный и измененный) одной печатной формы

26.06.19

Разработка - Инструментарий разработчика

Алгоритм и расширение (как пример) демонстрируют механизм одновременного использования двух макетов (стандартного и измененного), принадлежащих одной записи регистра «Макеты печатных форм» («ПользовательскиеМакетыПечати») в конфигурации «1С:Бухгалтерия предприятия, редакция 3.0».

Скачать файл

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

Наименование По подписке [?] Купить один файл
24083-БУХ_3-2019 - Расширение для печати измененного варианта макета
.cfe 11,31Kb
1
1 Скачать (1 SM) Купить за 1 850 руб.

Традиционно начну с того, что искал и не нашёл готового решения, позволяющего в момент печати из документа в «1С:Бухгалтерия предприятия, редакция 3.0» (БП 3.0) выбрать какой именно из макетов печатных форм отправить на печать: стандартный, встроенный в конфигурацию, или макет, изменённый пользователем. По умолчанию БП 3.0 позволяет использовать только один из вариантов макета: стандартный ИЛИ измененный, хотя в конфигурации одновременно хранятся оба макета. Захотелось уйти от «ИЛИ» к «И», не прибегая к внешним печатным формам, оставив пользователю штатную возможность редактирования встроенных макетов печатных форм. Предлагаю своё решение как один из возможных вариантов, не претендующих на уникальность, но позволяющих решить поставленную задачу. В приложенном расширении демонстрируется пример использования двух печатных форм «Акта об оказании услуг» для документа «Реализация (акты, накладные)» («РеализацияТоваровУслуг»).

Алгоритм решения задачи следующий (все модули в моём случае прописываются в расширении к конфигурации БП 3.0). Внесённые изменения в стандартные процедуры обозначены через «скобки»: //дельта стало теперь НАЧАЛО и //дельта стало теперь КОНЕЦ. Это может пригодиться для понимания того, какие были внесены изменения в стандартные процедуры.

1. В модуле менеджера соответствующего документа (в примере это документ «Реализация (акты, накладные)») в процедуру «Печать» добавляем текст, касающийся второй измененной пользователем печатной формы. Ниже приведена часть данной процедуры:

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

//…
//здесь оставшийся текст процедуры
//…

ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,
		КоллекцияПечатныхФорм,
		ОбъектыПечати,
		ПараметрыВывода);
КонецПроцедуры

2. В модуле менеджера соответствующего документа (в примере это «Реализация (акты, накладные)») в процедуру «ДобавитьКомандыПечати» добавляем текст, касающийся второй печатной формы. Ниже приведен весь текст данной процедуры:

&После("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати)
	
	// Акт об оказании услуг
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "АктСПодписями";
	КомандаПечати.Представление = НСтр("ru = 'Акт об оказании услуг (с подписями)'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.СписокФорм    = "ФормаСписка,ФормаВыбора,ФормаДокументаОбщая,ФормаДокументаУслуги";
	КомандаПечати.Порядок = 30;

КонецПроцедуры

3. В общем модуле «ПечатьТорговыхДокументов» изменяем процедуру печати необходимой печатной формы (в случае примера это процедура «ПечатьАктаОбОказанииУслуг»). Ниже приведена часть данной процедуры:

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

	//дельта стало теперь 2019-06-11 НАЧАЛО
	Если СтруктураПараметровПечати.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Акт_Подписи" Тогда
		//используем исправленный макет
		Макет = УправлениеПечатью.МакетПечатнойФормы(СтруктураПараметровПечати.ИмяМакетаПечати);
	Иначе
		//используем типовой макет
		Макет = д_МакетПечатнойФормы(СтруктураПараметровПечати.ИмяМакетаПечати);
	КонецЕсли;
	//дельта стало теперь 2019-06-11 КОНЕЦ
	
	ПервыйДокумент = Истина;

//…
//здесь оставшийся текст процедуры
//…
Возврат ТабличныйДокумент;
КонецФункции

4. В общем модуле «ПечатьТорговыхДокументов» добавляем свою процедуру печати необходимой печатной формы (в случае примера это процедура «д_МакетПечатнойФормы»). Ниже приведен весь текст данной процедуры:

Функция д_МакетПечатнойФормы(ПутьКМакету) Экспорт
	ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'Макет ""%1"" не существует. Операция прервана.'"), ПутьКМакету);
	ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина);
	Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()];
	ЧастиПути.Удалить(ЧастиПути.ВГраница());
	ИмяОбъекта = СтрСоединить(ЧастиПути, ".");
	
	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	ПользовательскиеМакетыПечати.Макет КАК Макет,
	|	ПользовательскиеМакетыПечати.ИмяМакета КАК ИмяМакета
	|ИЗ
	|	РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати
	|ГДЕ
	|	ПользовательскиеМакетыПечати.Объект = &Объект
	|	И ПользовательскиеМакетыПечати.ИмяМакета ПОДОБНО &ИмяМакета
	|	И ПользовательскиеМакетыПечати.Использование";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.Параметры.Вставить("Объект", ИмяОбъекта);
	Запрос.Параметры.Вставить("ИмяМакета", "%" + ИмяМакета + "%");
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	СписокМакетов = Новый Соответствие;
	
	//дельта стало теперь 2019-06-11 НАЧАЛО
	//Пока Выборка.Следующий() Цикл
	//	СписокМакетов.Вставить(Выборка.ИмяМакета, Выборка.Макет.Получить());
	//КонецЦикла;
	//дельта стало теперь 2019-06-11 КОНЕЦ
	
	ИменаПоиска = Новый Массив;
	Если СтрНайти(ИмяМакета, "ПФ_DOC_") > 0 
		Или СтрНайти(ИмяМакета, "ПФ_ODT_") > 0 Тогда // Для обратной совместимости.
		
		ТекущийЯзык = ТекущийЯзык();
		Если ТипЗнч(ТекущийЯзык) <> Тип("ОбъектМетаданных") Тогда
			ТекущийЯзык = Метаданные.ОсновнойЯзык;
		КонецЕсли;
		КодЯзыка = ТекущийЯзык.КодЯзыка;
		ИменаПоиска.Добавить(ИмяМакета + "_" + КодЯзыка);
		Если КодЯзыка <> Метаданные.ОсновнойЯзык.КодЯзыка Тогда
			ИменаПоиска.Добавить(ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка);
		КонецЕсли;
		
	КонецЕсли;
	ИменаПоиска.Добавить(ИмяМакета);
	
	Для Каждого ИмяПоиска Из ИменаПоиска Цикл
		НайденныйМакет = СписокМакетов[ИмяПоиска];
		Если НайденныйМакет <> Неопределено Тогда
			Возврат НайденныйМакет;
		КонецЕсли;
	КонецЦикла;
	
	ЭтоОбщийМакет = СтрРазделить(ИмяОбъекта, ".").Количество() = 1;
	
	КоллекцияМакетов = Метаданные.ОбщиеМакеты;
	Если Не ЭтоОбщийМакет Тогда
		ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъекта);
		Если ОбъектМетаданных = Неопределено Тогда
			ВызватьИсключение ТекстОшибки;
		КонецЕсли;
		КоллекцияМакетов = ОбъектМетаданных.Макеты;
	КонецЕсли;
	
	Для Каждого ИмяПоиска Из ИменаПоиска Цикл
		Если КоллекцияМакетов.Найти(ИмяПоиска) <> Неопределено Тогда
			Если ЭтоОбщийМакет Тогда
				Возврат ПолучитьОбщийМакет(ИмяПоиска);
			Иначе
				УстановитьОтключениеБезопасногоРежима(Истина);
				УстановитьПривилегированныйРежим(Истина);
				Возврат ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяОбъекта).ПолучитьМакет(ИмяПоиска);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	ВызватьИсключение ТекстОшибки;
КонецФункции

После выполнения всех этих действий у вас в соответствующем документе станет доступным печать обоих макетов одной печатной формы. Расширение подключается к конфигурации «1С:Бухгалтерия 3.0» и после перезапуска базы в соответствующем документе появляется возможность печати обоих вариантов макета одной печатной формы. Подключается расширение в меню «Администрирование → Печатные формы, отчеты и обработки → Расширения», после этого надо перезапустить базу. Разработка и тестирование осуществлялись на типовом релизе «1С:Бухгалтерия предприятия, редакция 3.0» 3.0.70.50 и платформе 1С 8.3.14.1779.

Примечания:

- предложенный механизм использования того или иного макета работает только в процессе формирования печатной формы через кнопку «Печать» и не отрабатывает событие, если печатные формы формируются как вложения в электронное письмо при нажатии кнопку отправки электронного письма на форме документа.

Макеты печатных форм ПользовательскиеМакетыПечати Акт об оказании услуг расширение печать стандартного и измененного макетов

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171838    962    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14342    109    46    

108

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

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

22200 руб.

06.10.2023    17304    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27296    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    11909    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    191259    1152    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18096    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1124    2    0    

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