prod_1c‎ > ‎Заметки 1С: 8.3‎ > ‎

Встроенная система печати в Управлении Торговлей 11

Отправлено 24 июн. 2013 г., 6:21 пользователем Nikolay Nikolaev   [ обновлено 25 июл. 2013 г., 1:42, автор: Nikolay Nikolaev ]
Задача:
Создать и зарегистрировать внешний отчет

Решение:
  1. Создать epf + Макеты (названия в дереве метаданных типа ПФ_MXL_ИмяОбработки).
  2. Описать функции и процедуры: СведенияОВнешнейОбработке(), Печать(), СформироватьПечатнуюФормуИмяОбработки()
  3. Программный код поместить в менеджер обработки.
  4. Зарегистрировать обработку в Администрирование -> Дополнительные отчеты и обработки
Функция СведенияОВнешнейОбработке() Экспорт - передает описание, привязки к дереву метаданных, создает комманду для вызова
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - точка входа
Функция СформироватьПечатнуюФормуИмяОбработки(МассивОбъектов, ОбъектыПечати) - заполнение ТабличныйДокумент

// Интерфейс для регистрации обработки.
// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//
// Возвращаемое значение:
// Структура:
// Вид - строка - возможные значения: "ДополнительнаяОбработка"
// "ДополнительныйОтчет"
// "ЗаполнениеОбъекта"
// "Отчет"
// "ПечатнаяФорма"
// "СозданиеСвязанныхОбъектов"
//
// Назначение - массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
// Например, "Документ.СчетЗаказ" или "Справочник.*"
// Прим. параметр имеет смысл только для назначаемых обработок
//
// Наименование - строка - наименование обработки, которым будет заполнено
// наименование справочника по умолчанию - краткая строка для
// идентификации обработки администратором
//
// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
// используется при загрузке обработок в информационную базу
// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
// Более подбробная информация в справке.
//
// Информация - Строка- краткая информация по обработке, описание обработки
//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует
// одной команде
// колонки:
// - Представление - строка - представление команды конечному пользователю
// - Идентификатор - строка - идентефикатор команды. В случае печатных форм
// перечисление через запятую списка макетов
// - Использование - строка - варианты запуска обработки:
// "ОткрытиеФормы" - открыть форму обработки
// "ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки
// "ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
// - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале
// и при окончании запуска обработки. Прим. Имеет смысл только
// при запуске обработки без открытия формы.
// - Модификатор – строка - для печатных форм MXL, которые требуется
// отображать в форме ПечатьДокументов подсистемы Печать
// требуется установить как "ПечатьMXL"
//

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Печатная форма: Имя Обработки'"));
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Обработка формирования печатной формы: ""ИмяОбработки""'"));

ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду( ТаблицаКоманд, НСтр("ru = 'Имя Обработки''"), "ИмяОбработки", "ВызовСерверногоМетода",
Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ИмяОбработки") Тогда

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ИмяОбработки",
"ИмяОбработки",
СформироватьПечатнуюФормуИмяОбработки(МассивОбъектов, ОбъектыПечати) );
КонецЕсли;

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

// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Функция ПолучитьНазначениеОбработки()

Назначение = Новый Массив;
Назначение.Добавить("Документ.ИмяДокумента"); // объект для печати, привязки к метаданным
Возврат Назначение;
КонецФункции

Функция ПолучитьТаблицуКоманд()

Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование,
                                                    ПоказыватьОповещение = Ложь, Модификатор = "")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры


Функция РазложитьМассивПоТипамОбъектов(МассивОбъектов)

СтруктураТипов = Новый Структура;
Для Каждого Объект Из МассивОбъектов Цикл

Если ТипЗнч(Объект) = Тип("ДокументСсылка.ЗаказКлиента") Тогда

Если НЕ СтруктураТипов.Свойство("ЗаказКлиента") Тогда

МассивПоступлений = Новый Массив;
СтруктураТипов.Вставить("ЗаказКлиента", МассивПоступлений);
КонецЕсли;
СтруктураТипов.ЗаказКлиента.Добавить(Объект);
КонецЕсли;

КонецЦикла;

Возврат СтруктураТипов;
КонецФункции