1С:Предприятие 8.2 (8.2.14.533), Управление торговлей, редакция 11.0 (11.0.7.2)
Макеты можем отредактировать на Администрирование - Макеты печатных форм. Наши будут в самом низу
Режим конфигуратор, изменения:
Регистр Сведений - ПользовательскиеМакетыПечати
Открываем форму МакетыПечатныхФорм и вносим следующие изменения
//********************************************************************************************
&НаСервере
Процедура ЗаполнитьСписокМетаданных(Фильтр = Неопределено)
СписокМакетовДерево = РеквизитФормыВЗначение("СписокМакетов");
ЗаполнитьДеревоПоКоллекцииМетаданных(СписокМакетовДерево, Метаданные.Документы, Ложь, Фильтр);
ЗаполнитьДеревоПоКоллекцииМетаданных(СписокМакетовДерево, Метаданные.Обработки, Ложь);
ЗаполнитьДеревоПоКоллекцииМетаданных(СписокМакетовДерево, Метаданные.ОбщиеМакеты, Истина);
//+gavrikprog
//тут не запрос, потому что так быстро отлажиматься - у меня одна внешняя форма в тесте
Выборка=Справочники.ДополнительныеОтчетыИОбработки.Выбрать();
Пока Выборка.Следующий() Цикл
абОбработкаEPF=Выборка.Ссылка.ХранилищеОбработки.Получить();
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
абОбработкаEPF.Записать(ИмяВременногоФайла);
абОбработка=ВнешниеОбработки.Создать(ИмяВременногоФайла );
ДобавитьКоллекциюМакетов(абОбработка.Метаданные().Макеты,
СписокМакетовДерево,
"Справочники.ДополнительныеОтчетыИОбработки/"+Выборка.Ссылка.УникальныйИдентификатор()+"#",
Выборка.Ссылка.Наименование,
Фильтр);
КонецЦикла;
//-gavrikprog
Если СписокМакетовДерево.Строки.Количество() > 0 Тогда
//********************************************************************************************
Также изменения модуля УправлениеПечатью
//********************************************************************************************
Функция ПолучитьМакет(ПолныйПутьКМакету) Экспорт
ЧастиПути = СтрЗаменить(ПолныйПутьКМакету, ".", Символы.ПС);
Если СтрЧислоСтрок(ЧастиПути) = 3 Тогда
//+gavrikprog
Если Лев(ПолныйПутьКМакету,12)="Справочники." Тогда
абПозиция=Найти(ПолныйПутьКМакету,"/");
абПозиция1=Найти(ПолныйПутьКМакету,"#");;
Если абПозиция<>0 Тогда
СтрокаУИД=Сред(ПолныйПутьКМакету,абПозиция+1,абПозиция1-абПозиция-1);
УИД=Новый УникальныйИдентификатор(СтрокаУИД);
абОбъект=Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(УИД);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПользовательскиеМакетыПечати.ИмяМакета,
| ПользовательскиеМакетыПечати.Объект,
| ПользовательскиеМакетыПечати.Макет,
| ПользовательскиеМакетыПечати.Использование
|ИЗ
| РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати
|ГДЕ
| ПользовательскиеМакетыПечати.Объект ПОДОБНО &Объект";
Запрос.УстановитьПараметр("Объект", "%"+СтрокаУИД+"%");
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
абМакет=ВыборкаДетальныеЗаписи.Макет.Получить();
Результат = ПолучитьТабличныйДокументПоДвоичнымДанным(абМакет);
Возврат Результат;
Иначе
Если абОбъект<>Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
абОбработкаEPF=абОбъект.ХранилищеОбработки.Получить();
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
абОбработкаEPF.Записать(ИмяВременногоФайла);
абОбработка=ВнешниеОбработки.Создать(ИмяВременногоФайла );
абМакет=абОбработка.ПолучитьМакет("аб_ПФ_MXL_Заказ");
Возврат абМакет;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1) + "." + СтрПолучитьСтроку(ЧастиПути, 2);
ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 3);
КонецЕсли;
//ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1) + "." + СтрПолучитьСтроку(ЧастиПути, 2);
//ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 3);
//-gavrikprog
ИначеЕсли СтрЧислоСтрок(ЧастиПути) = 2 Тогда
ПутьКМетаданным = СтрПолучитьСтроку(ЧастиПути, 1);
ПутьКОбъектуМетаданных = СтрПолучитьСтроку(ЧастиПути, 2);
Иначе
ВызватьИсключение НСтр("ru = 'Некорректные параметры функции.'");
КонецЕсли;
//********************************************************************************************
Общий модуль "ДополнительныеОтчетыИОбработки"
//********************************************************************************************
Процедура ПечатьПоВнешнемуИсточнику(ИсточникДанных,
ПараметрыИсточника,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода) Экспорт
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ПараметрыИсточника.ИдентификаторКоманды);
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечати = Новый СписокЗначений;
ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(ИсточникДанных, ПараметрыИсточника.БезопасныйРежим);
//+gavrikprog
ПараметрыВывода.Вставить("абОбработка", ИсточникДанных);
//-gavrikprog
//********************************************************************************************
Изменения во внешней обработке:
Когда получаем макет выполняем свою функцию(тут сами крутитесь - думаю несложно)
но когда получаем макет -
Макет=абПолучитьМакет(абОбработка);
В модуле объекта внешней формы;
//********************************************************************************************
Перем абОбработка;
Процедура Печать(МассивОбъектов,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода) Экспорт
//+gavrikprog
ПараметрыВывода.Свойство("абОбработка", абОбработка);
//-gavrikprog
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Заказ") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"Заказ", "заказ",
абПечатьЗаказ(МассивОбъектов, ОбъектыПечати), ,
"Документ.абЗаказНаПеревозку.ПФ_MXL_Заказ");
КонецЕсли;
КонецПроцедуры
//+gavrikprog
Функция абПолучитьМакет(СсылкаНаЭлементСправочникаДополнительныеОтчетыИОбработки)
УстановитьПривилегированныйРежим(Истина);
Результат1=ПолучитьМакет("аб_ПФ_MXL_Заказ");
Если абОбработка<>Неопределено Тогда
СтрокаУИД=Строка(СсылкаНаЭлементСправочникаДополнительныеОтчетыИОбработки.УникальныйИдентификатор());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПользовательскиеМакетыПечати.ИмяМакета,
| ПользовательскиеМакетыПечати.Объект,
| ПользовательскиеМакетыПечати.Макет,
| ПользовательскиеМакетыПечати.Использование
|ИЗ
| РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати
|ГДЕ
| ПользовательскиеМакетыПечати.Объект ПОДОБНО &Объект";
Запрос.УстановитьПараметр("Объект", "%"+СтрокаУИД+"%");
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
абМакет=ВыборкаДетальныеЗаписи.Макет.Получить();
Результат1 = ПолучитьТабличныйДокументПоДвоичнымДанным(абМакет);
КонецЕсли;
КонецЕсли;
Возврат Результат1;
КонецФункции
Функция ПолучитьТабличныйДокументПоДвоичнымДанным(ДвоичныеДанные) Экспорт
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.Прочитать(ИмяВременногоФайла);
//УдалитьФайлы(ИмяВременногоФайла);
Возврат ТабличныйДокумент;
КонецФункции
//-gavrikprog
//********************************************************************************************
Иполнитель: 2011 г. www.rt-finance.ru