-
Ваша корзина пуста!
Приступим! Заходим в конфигуратор 1С 8.3 и создаем новую обработку(Я буду делать на примере своей, которую делал для УТ 11 - это будет расписка о получении товаров курьером). В отличие от обычного приложения чтобы просто добавить вашу внешнюю печатную форму ( далее ВПФ ) в вашу конфигурацию, нужно написать код с описанием вашей ВПФ иначе система просто откажет в её добавлении и напишет что отсутствует функция "СведенияОВнешнейОбработке()" в которой и должны находиться данные сведения. Начнём писать, откроем модуль нашей обработки и напишем требуемую функцию. Код я опишу ниже и там же его подробно прокомментирую:
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить("Документ.ЗаказКлиента"); //здесь мы добавляем в ша массив документ или несколько документов(если несколько - такой же строкой кода добавляем еще вид) к которому делаем внешнюю печ. форму ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть – ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов…Здесь выбираем вид, в нашем случае это Печатная форма ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); //Добавляем наш массив со списком документов ПараметрыРегистрации.Вставить("Наименование", "Распика о получении товаров"); //здесь будет имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Печать расписки о получении ТМЦ курьером для доставки"); //здесь пишем описание ТаблицаКоманд = ПолучитьТаблицуКоманд(); // добавляем строки команд, особо не мудря можно оставить все по стандарту ДобавитьКоманду(ТаблицаКоманд, "Расписка о получении товаров", "РаспискаОПолученииТоваров", "ВызовСерверногоМетода", Истина, "ПечатьMXL"); // заполняем наши строки данными из параметров ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); // создаём те самые сведения о ВПФ которые запросит управляемое приложение при добавлении оной в конфигурацию. Возврат ПараметрыРегистрации; //возвращаем их при запросе конфигурации КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); //как будет выглядеть описание ВПФ для пользователя Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета ВПФ Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода или Клиентского метода Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры
<span style="font-size: 1em; line-height: 1.25em;">Сохраним и попробуем добавим нашу пустую обработку в конфигурацию с одними лишь её сведениями. Откроем справочник внешних обработок и жмём добавить. Если всё хорошо - то видим сформировавшееся окно ВПФ, с теми сведениями которые мы писали.</span>
Ну и также открыв любой документ или список документов ( к которым мы его привязывали ) мы увидим что в печати доступна наша внешняя печатная форма.
Теперь давайте сделаем так чтобы при нажатии на нашу кнопку( да, да ту самую на которую вы возможно потыкали и ничего не произошло ) происходила стандартная и красивая обработка печати нашей формы.
Идём в конфигуратор в нашу обработку и создаём макет (табличный документ). У меня это будет "РаспискаОПолученииТоваров", тут отнеситесь внимательно, название вашего Макета должно совпадать с названием макета в сведениях о внешней обработке, иначе платформа просто
не заполнит макет и выдаст ошибку.
Путём нехитрых манипуляций с встроенными фишками для работы с табличным документом, я создал вот такой простенький макет:
(на скрине ошибочка - на самом деле макет называется "РаспискаОПолученииТоваров"
Прокомментирую некоторые иероглифы, слева находятся области таблицы, сделанные для удобства и поэтапного вывода (все пробелы не находящиеся в областях не выведутся и документ схлопнутся и документ будет выглядеть довольно красиво при печати) . Например в коде я буду выводить табличную часть так: сначала выведу область "Строка" как шапку ТЧ, а потом циклом буду выводить область "Строка" и количество строк в печатном документе с наименованием товара у меня совпадет с количеством строк самого документа из который будет печататься данная печатная форма, а итоге получу табличную часть аналогичную тем которые сделаны в счет, торг12 и т.д.
обозначение типа является Параметром в который в коде будет попадать значение из конкретного документа ( в моем случае заказа ), например МойМакет.Параметры.МойПараметр = Значение;
обозначение типа является шаблоном (смешанным типом), он собственно и применяется когда в 1 строке должен быть и тексти параметры ( поглядите на область "шапка" ).
Давайте теперь вернемся в наш модуль и попробуем заполнить и распечатать наш макет:
Добавляем код:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода, Отладка=ложь) Экспорт //стандартная процедура печати, она вызовется в тот момент когда вы нажмете "Печать" УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "РаспиcкаОПолученииТоваров", "Распика о получении товаров", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)); Конецпроведуры
Дабы все было красиво используем процедуру из нашей конфигурации и добавим внутрь только нашу функцию в 4ый параметр "СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)" и опишем её чуть ниже
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РаспиcкаОПолученииТоваров"; МакетОбработки = ПолучитьМакет("РаспиcкаОПолученииТоваров"); //заполняем шапку ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка"); ОбластьШапка.Параметры.ТекДата = Формат(ТекущаяДата(),"ДЛФ=ДД"); ОбластьШапка.Параметры.Организация = СсылкаНаДокумент.Организация.Наименование; ОбластьШапка.Параметры.ФИО = СсылкаНаДокумент.Курьер; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументыФизическихЛицСрезПоследних.Серия, | ДокументыФизическихЛицСрезПоследних.Номер, | ДокументыФизическихЛицСрезПоследних.ДатаВыдачи, | ДокументыФизическихЛицСрезПоследних.СрокДействия, | ДокументыФизическихЛицСрезПоследних.КемВыдан |ИЗ | РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(, Физлицо = &Владелец) КАК ДокументыФизическихЛицСрезПоследних |ГДЕ | ДокументыФизическихЛицСрезПоследних.ВидДокумента = &ВидДокумента"; Запрос.УстановитьПараметр("Владелец",СсылкаНаДокумент.Курьер); Запрос.УстановитьПараметр("ВидДокумента",ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ")); //выводим шапку в табличный документ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ОбластьШапка.Параметры.Серия = Выборка.Серия; ОбластьШапка.Параметры.Номер = Выборка.Номер; КонецЕсли; ТабличныйДокумент.Вывести(ОбластьШапка); //заполняем строки ТЧ ОбластьСтроки = МакетОбработки.ПолучитьОбласть("Строка"); ТабличныйДокумент.Вывести(ОбластьСтроки); ОбластьСтрокиТЧ = МакетОбработки.ПолучитьОбласть("СтрокаТЧ"); Для Каждого ТекущаяСтрока Из СсылкаНаДокумент.Товары Цикл Если ТекущаяСтрока.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар Тогда ОбластьСтрокиТЧ.Параметры.Номенклатура = ТекущаяСтрока.Номенклатура; ОбластьСтрокиТЧ.Параметры.НомерСтроки = ТекущаяСтрока.НомерСтроки; ОбластьСтрокиТЧ.Параметры.Цена = ТекущаяСтрока.Цена; ОбластьСтрокиТЧ.Параметры.Количество = ТекущаяСтрока.Количество; ОбластьСтрокиТЧ.Параметры.ЕдиницаИзмерения = ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения; ОбластьСтрокиТЧ.Параметры.Сумма = ТекущаяСтрока.Сумма; ТабличныйДокумент.Вывести(ОбластьСтрокиТЧ); КонецЕсли; КонецЦикла; //Заполняем Итого ОбластьИтого = МакетОбработки.ПолучитьОбласть("Итого"); ОбластьИтого.Параметры.Итого = СсылкаНаДокумент.СуммаДокумента; ОбластьИтого.Параметры.Валюта = СсылкаНаДокумент.Валюта; ТабличныйДокумент.Вывести(ОбластьИтого); //заполняем подвал ОбластьПодвал = МакетОбработки.ПолучитьОбласть("Подвал"); ОбластьПодвал.Параметры.Адрес = СсылкаНаДокумент.АдресДоставки; ТабличныйДокумент.Вывести(ОбластьПодвал); ТабличныйДокумент.АвтоМасштаб = Истина; Возврат ТабличныйДокумент; КонецФункции
Немного комментариев: Прежде всего нужно получить наш макет методом
ПолучитьМакет();
далее получаем Области нашего макета
ОбластьИтого = МакетОбработки.ПолучитьОбласть("Итого");
В области заполняем параметры
ОбластьИтого.Параметры.ТутНазваниеВашегоПараметра = СсылкаНаДокумент.ВашРеквизит
Как только вы заполнили нужные параметры нужно вывести область
ТабличныйДокумент.Вывести(ОбластьПодвал);
Если вам нужно вывести таблицу , то циклом заполняем одну и ту же область и выводим её, будьте внимательны и не прихватите лишних полей , пустых например - получится некрасиво. Ну вот в общем то и все :)