Внешние печатные формы Управляемого режима 1С 8.3



Добавляем «быстро» печатную форму для УТ 11.x

Переход на новую базу "УТ 11" очень порадовал функционалом, но разработчики, написав тонну кода, все же не хотят доделать все тонкости для полноценной работы, и приходится дорабатывать мелочи, которые в итоге перетекают в большую доработку. Править конфигурацию не будем, и поэтому пробуем добавить внешную печатную форму, находим статью по подключению "Создание внешней печатной формы под Управляемое приложение" //infostart.ru/public/180159, все отлично, но результат не получается, и чего-то не хватает. Макет копируем из конфигурации и вносим в обработку. Модуль объекта обработки оставляем как в примере по ссылке, а вот форму меняем на следующий код:

&НаКлиенте
Процедура Печать(Команда, ОбъектыНазначения) Экспорт

ТабДок = Новый ТабличныйДокумент;

ПечатьСервер(ТабДок, ОбъектыНазначения); //Отправляем документ на сервер, там его можно будет объявить и так будет удобней получать реквизиты. Пробовал обработать массив если в журнале выделенно несколько строк документов, но приходит всегда только первый. Если у кого есть решение на этот счет подскажите плиз, в пабликах ни чего не нашел.

ТабДок.ОтображатьСетку     = Ложь;
ТабДок.Защита              = Истина;
ТабДок.ТолькоПросмотр      = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();

КонецПроцедуры
&НаСервере
Процедура ПечатьСервер(ТабличныйДокумент, ОбъектыНазначения)
Док = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ОбъектыНазначения[0].УникальныйИдентификатор());
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПФ_MXL_ТоварнаяНакладная");

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьЗаголовок.Параметры.ТекстЗаголовка = "Накладная " + Док.Номер + " от " + Док.Дата;
ТабличныйДокумент.Вывести(ОбластьЗаголовок);

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.ПредставлениеСклада = Док.Склад;
ТабличныйДокумент.Вывести(ОбластьШапка);

ОбластьПокупатель = Макет.ПолучитьОбласть("Покупатель");
ОбластьПокупатель.Параметры.ПредставлениеПартнера = Док.Партнер;
ТабличныйДокумент.Вывести(ОбластьПокупатель);

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);

ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы");

ИтогКолУпаковок = 0;
ИтогКоличество  = 0;

ТабЧасть = Док.Товары;
Для i = 0 по ТабЧасть.Количество() - 1 Цикл

СтрокаТЧ =  ТабЧасть.Получить(i);

ОбластьСтрокаТаблицы.Параметры.НомерСтроки    = СтрокаТЧ.НомерСтроки;
ОбластьСтрокаТаблицы.Параметры.ЗначениеКода   = СтрокаТЧ.Номенклатура.Код;
ОбластьСтрокаТаблицы.Параметры.Товар          = СтрокаТЧ.Номенклатура;
ОбластьСтрокаТаблицы.Параметры.Количество     = СтрокаТЧ.Количество;
ОбластьСтрокаТаблицы.Параметры.ПредставлениеБазовойЕдиницыИзмерения    = СтрокаТЧ.Номенклатура.ЕдиницаИзмерения;
ОбластьСтрокаТаблицы.Параметры.КоличествоУпаковок  = СтрокаТЧ.КоличествоУпаковок;
ОбластьСтрокаТаблицы.Параметры.ПредставлениеЕдининицыИзмеренияУпаковки = СтрокаТЧ.Упаковка.ЕдиницаИзмерения;

ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);

ИтогКолУпаковок = ИтогКолУпаковок + СтрокаТЧ.КоличествоУпаковок;
ИтогКоличество  = ИтогКоличество  + СтрокаТЧ.Количество;

КонецЦикла;

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

ОбластьПодписи = Макет.ПолучитьОбласть("Подписи");
ТабличныйДокумент.Вывести(ОбластьПодписи);

ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ВывестиВертикальныйРазделительСтраниц();
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();

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

Что получаем в итоге, за две минуты подключаем внешнюю форму и добавляем в нее любой реквизит. Макет используется внешний, и подправить его труда не составит. На планируемые два десятка внешних форм сэкономим немного времени, а вообще 1С уже пора сделать конструктор клиентский для подобных вещей, настройка шапки и таб. части для печати документа не такая уже великая задача.Smile На данную тему есть пример платной обработки //infostart.ru/public/262490/, но стоимость ее немного пугает.

 

 СПРАВКА Б

 Между тем, не обращая внимание на "позитивные" комментарии, добавляем форму Справки Б. Принцип используем тот же самый, копируем макет старых версий, и в onepage расписываем код. Пока писал текст, возникла идея парсера макетов, который бы формировал код исходя из объявленных параметров печатной формы макета. Возможно данная публикация по "Конвертации макетов 7.7->8.x" в этом поможет, на вид вроде что-то похожее, только правая часть будет фомируемый код модуля: //infostart.ru/public/147611/

 

 Текстовый макет

 Для поклонников текстовых макетов и печати на матречных принтерах Smile, полезными будут материалы:

  http://its.1c.ru/db/metod8dev/content/2584/hdoc

  http://v8.1c.ru/overview/Term_000000303.htm

2 Comments

  1. fishca

    Публикация ниочЁм.

    Reply
  2. JetBrain

    (1) fishca, Вам со знанием С++ зачем ее было вообще читать? Понятно было что уровень для новичка!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *