"""Начальные шаблоны: создаются при первом запуске."""
import storage
storage.create_template(
name="Модуль печатной формы",
description="Шаблон модуля объекта с функцией ПечатьДокументов для внешней печатной формы",
tags=["печать", "форма", "макет", "внешняя"],
code='''\
// Шаблон внешней печатной формы
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
ОбъектМетаданных = ЭтотОбъект.Метаданные();
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Наименование = ОбъектМетаданных.Синоним;
ПараметрыРегистрации.Информация = ?(ПустаяСтрока(ОбъектМетаданных.Комментарий), ОбъектМетаданных.Синоним, ОбъектМетаданных.Комментарий);
ПараметрыРегистрации.Версия = "<?"", ДатаВремя, "ДФ=dd.MM.yyyy">";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима();
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиШтрихкодов");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
КомандаПечати = ПараметрыРегистрации.Команды.Добавить();
КомандаПечати.Идентификатор = ОбъектМетаданных.Имя;
КомандаПечати.Представление = ОбъектМетаданных.Синоним;
КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
КомандаПечати.ПоказыватьОповещение = Ложь;
КомандаПечати.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
#Область Печать
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ОбъектМетаданных = ЭтотОбъект.Метаданные();
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ОбъектМетаданных.Имя) Тогда
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ОбъектМетаданных.Имя);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
ОбъектМетаданных.Имя,
ОбъектМетаданных.Синоним,
ТабличныйДокумент);
КонецЕсли;
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати, ИмяОбъекта)
УстановитьПривилегированныйРежим(Истина);
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяОбъекта;
Макет = ПолучитьМакет("ПФ_MXL_Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| РеализацияТоваровУслуг.Номер КАК Номер,
| РеализацияТоваровУслуг.Дата КАК Дата,
| РеализацияТоваровУслуг.Организация КАК Организация,
| РеализацияТоваровУслуг.Контрагент КАК Контрагент,
| РеализацияТоваровУслуг.Партнер КАК Партнер,
| РеализацияТоваровУслуг.Склад КАК Склад,
| РеализацияТоваровУслуг.Комментарий КАК Комментарий
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
РезультатЗапроса = Запрос.ВыполнитьПакет();
РезультатШапкаДокументов = РезультатЗапроса[0];
ПервыйДокумент = Истина;
Пока РезультатШапкаДокументов.Следующий() Цикл
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
РеквизитыДокумента = Новый Структура;
РеквизитыДокумента.Вставить("Номер", РезультатШапкаДокументов.Номер);
РеквизитыДокумента.Вставить("Дата", РезультатШапкаДокументов.Дата);
ОбластьШапка.Параметры.Заполнить(РезультатШапкаДокументов);
ТабличныйДокумент.Вывести(ОбластьШапка);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
НомерСтрокиНачало,
ОбъектыПечати,
РезультатШапкаДокументов.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
''',
)
storage.create_template(
name="Отчёт СКД по таблице значений",
description="Шаблон программного отчёта на СКД с источником данных «Таблица значений»",
tags=["СКД", "отчёт", "таблица значений", "схема"],
code='''\
// Шаблон программного отчёта на СКД
// Источник данных — таблица значений, формируемая кодом
Функция СведенияОВнешнейОбработке() Экспорт
//Инициализируем структуру с параметрами регистрации
ПараметрыРегистрации = ПолучитьПараметрыРегистрации();
ПараметрыРегистрации.Вид = "ДополнительныйОтчет";
ПараметрыРегистрации.Версия = "<?"", ДатаВремя, "ДФ=dd.MM.yyyy">";
//Определяем команды для вывода формы
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
ЭтотОбъект.Метаданные().Синоним, // Представление команды в пользовательском интерфейсе
ЭтотОбъект.Метаданные().Имя, // Уникальный идентификатор команды
"ОткрытиеФормы"
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")
Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
КонецЕсли;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
//ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);
Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
КонецЕсли;
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);
Если Не ЗначениеЗаполнено(Информация) Тогда
Информация = ЭтотОбъект.Метаданные().Комментарий;
КонецЕсли;
ПараметрыРегистрации.Вставить("Информация", Информация);
ПараметрыРегистрации.Вставить("Версия", Версия);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
//Представление команды в пользовательском интерфейсе
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
//Уникальный идентификатор команды или имя макета печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
//Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
// "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов
// "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки
// "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
//Показывать оповещение.
//Если Истина, требуется показать оповещение при начале и при завершении работы обработки.
//Имеет смысл только при запуске обработки без открытия формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
//Дополнительный модификатор команды.
//Используется для дополнительных обработок печатных форм на основе табличных макетов.
//Для таких команд должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
КонецПроцедуры
Функция ПолучитьТаблицуДанных(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ 1";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
ТаблицаДанных = Запрос.Выполнить().Выгрузить();
Возврат ТаблицаДанных;
КонецФункции
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьПривилегированныйРежим(Истина);
Период = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
ТаблицаДанных = ПолучитьТаблицуДанных(Период.ДатаНачала, Период.ДатаОкончания);
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаДанных",ТаблицаДанных);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Функция ПолучитьЗначениеПараметра(ИмяПараметра)
Возврат КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра).Значение;
КонецФункции
''',
)