Создание внешней печатной формы. Управляемое приложение.

1. Tarley 19.06.12 13:47 Сейчас в теме
Доброго дня!
Раньше делала внешние печатные формы в неуправлямом приложении, сейчас столкнулась с необходимостью создавать их в управляемом. С Функцией СведенияОВнешнейОбработке, ПолучитьТаблицуКоманд(), ДобавитьКоманду - разобралась. Решила сделать простую тестовую форму, которая просто выводит номер и дату документа, получаемые запросом. Но тут столкнулась с трудностями.
1) Что передавать в запрос в качестве параметра? Ведь у управляемых форм нет свойства ссылка на объект!
2) Как оформлять функцию Печать? Раньше она была экспортной и без параметров, и вызывалась из формы внешней печатной формы. Но теперь их не делают. Как тогда?
Была бы очень благодарна за простой (без наворотов,как можно более элементарный) пример кода модуля внешней печатной формы для управляемого приложения.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. AlexO 135 19.06.12 13:55 Сейчас в теме
Определить сведения о ВПФ:
Функция СведенияОВнешнейОбработке() Экспорт
    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже
    МассивНазначений = Новый Массив;
    
    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. 
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, 
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", "Заказ клиента (в виде счета)");
    
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", "1.0");    
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Счет' к документу заказ клиента");
    
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавим команду в таблицу
    ДобавитьКоманду(ТаблицаКоманд, "Счет покупателю", "Заказ клиента (в виде счета)", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
КонецФункции

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

   // Создадим пустую таблицу команд и колонки в ней
   Команды = Новый ТаблицаЗначений;

   // Как будет выглядеть описание печатной формы для пользователя
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

   // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

   // Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

   // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

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

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

КонецПроцедуры
Показать

Сделать процедуру Печать в модуле объетка и сформировать ТабличныйДокумент:
// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
//   ИменаМакетов    - Строка    - Имена макетов, перечисленные через запятую
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//
// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
     Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ВПФ Заказ клиента (в виде счета)") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
                     "ВПФ Заказ клиента (в виде счета)", "Счет на оплату", 
                     СформироватьПечатнуюФорму("Счет", МассивОбъектов, ОбъектыПечати));
    КонецЕсли;
КонецПроцедуры // Печать()
Показать

// Функция формирует печатную форму документа.
//
// Параметры:
// Тип - Строка - тип печатной формы: Заказ или Счет
// МассивОбъектов - Массив - массив документов для печати
// ОбъектыПечати - СписокЗначений
//
// Возвращаемое значение:
// ТабличныйДокумент
//
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
....
КонецФункции // СформироватьПечатнуюФорму()
Показать

Подключить ВПФ через справочник "Дополнительные отчеты и обработки"
necropunk; +1 Ответить
3. Tarley 19.06.12 14:52 Сейчас в теме
это я видела. и этот код не работает,ошибка вылетает,при том код использует процедуру,которой в общих модулях торговли нет вообще.
4. Поручик 4674 19.06.12 14:57 Сейчас в теме
(3) Тут уже надо включить мозг и посмотреть, как реализованы процедуры Печать() в управлении торговлей 11.
5. Tarley 19.06.12 15:20 Сейчас в теме
Вопрос снят,разобралась)
6. ef1 19 19.09.12 10:15 Сейчас в теме
Valery1303 добрый день,
мучаюсь примерно с тем же вопросом что и у вас...
пытаюсь на 1С 8.2 УТ11 внешняя обработка/управляемое приложение отобразить форму и на ней показать значение реквизита документа от которого данная форма вызвана, но не используя процедуру Печать в этой ветке форума
(с 1С сталкиваюсь впервые сразу в варианте управляемое приложение)
не осталось ли у вас примеров внешних обработок на эту тему, после того как вы разобрались с этим вопросом?

ps
как и все))) перекопал интернет - но своего не нашел...
7. user635667 138 02.02.20 16:36 Сейчас в теме
Вопрос созрел:
// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
   // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, 
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

А что написать вместо Документ.* - нужно что бы обработка сама попадала в подсистему "ЗапасыИЗакупки". Писал так "Подсистемы.ЗапасыИЗакупки". Но не попадает =(
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот