Имя: Пароль:
1C
 
Подключение внешней обработки к документу
0 falselight
 
20.03.19
13:17
Подключаю внешнюю обработку к документу через внешние обработки.
Управляемый интерфейс такси. Вставил в модуль обработки следующий код.
Выдается ошибка. Код брал из типовой обработки для примера. Что нужно добавить или исправить?

{ВнешняяОбработка.ЗагрузкаСXLSТабличнойЧастиЗаказНаПеремещение_0_3.МодульОбъекта(63)}: Метод объекта не обнаружен (ВывестиОповещение)
    СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(






//
#Область ПрограммныйИнтерфейс
//
Функция СведенияОВнешнейОбработке() Экспорт
    // перед заполнением данной функции
    // 1. Назначьте имя текущей обработки.
    //        Оно должно быть уникальным в пределах справочника внешних обработок.
    //        Например, ПечатьЗаказаСХарактеристиками
    // 2. Назначьте синоним текущей обработки.
    //        Например, "Печать заказа с характеристиками"
    ПараметрыРегистрации     = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Назначение.Добавить("ЗаказНаПеремещение");
    ПараметрыРегистрации.Назначение.Добавить("Документ.*"); // все документы
    //НоваяКоманда               = ПараметрыРегистрации.Команды.Добавить();
    //НоваяКоманда.Представление = "Заполнить заказ на перемещение (сервер)";
    //НоваяКоманда.Идентификатор = "ЗаполнитьЗаказСервер";
    //НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    //НоваяКоманда               = ПараметрыРегистрации.Команды.Добавить();
    //НоваяКоманда.Представление = "Заполнить заказ на перемещение (заполнение формы)";
    //НоваяКоманда.Идентификатор = "ЗаполнитьЗаказЗаполнениеФормы";
    //НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
    //НоваяКоманда               = ПараметрыРегистрации.Команды.Добавить();
    //НоваяКоманда.Представление = "Заполнить заказ на перемещение (клиент)";
    //НоваяКоманда.Идентификатор = "ЗаполнитьЗаказКлиент";
    //НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
    НоваяКоманда               = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Заполнить заказ на перемещение (открытие формы)";
    НоваяКоманда.Идентификатор = "ЗаполнитьЗаказФорма";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    Возврат ПараметрыРегистрации;
КонецФункции
//
Процедура ВыполнитьКоманду(ИмяКоманды, ОбъектыНазначения, ПараметрыВыполнения = Неопределено) Экспорт
    Если ИмяКоманды = "ЗаполнитьЗаказСервер" Тогда
        ЗаполнитьЗаказПоСсылке(ОбъектыНазначения, ПараметрыВыполнения.РезультатВыполнения, ИмяКоманды);
    ИначеЕсли ИмяКоманды = "ЗаполнитьЗаказЗаполнениеФормы" Тогда
        ЗаполнитьФормуЗаказа(ПараметрыВыполнения.ЭтаФорма, ПараметрыВыполнения.РезультатВыполнения, ИмяКоманды);
    КонецЕсли;
КонецПроцедуры
//
#КонецОбласти
//
#Область СлужебныеПроцедурыИФункции
//
Процедура ЗаполнитьЗаказПоСсылке(МассивСсылок, РезультатВыполнения, ИмяКоманды)
    Для Каждого Ссылка Из МассивСсылок Цикл
        Объект      = Ссылка.ПолучитьОбъект();
        Объект.Дата = Объект.Дата + 60*60*24;
        Объект.Записать();
    КонецЦикла;
    СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(
        РезультатВыполнения,
        "Дата документов изменена",
        ,
        БиблиотекаКартинок.УстановитьФлажки);
КонецПроцедуры
//
Процедура ЗаполнитьФормуЗаказа(Форма, РезультатВыполнения, ИмяКоманды)
    Форма.Модифицированность = Истина;
    Объект                   = Форма.Объект;
    Объект.Дата              = Объект.Дата + 60 * 60 * 24;
    СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(
        РезультатВыполнения,
        "Дата документов изменена",
        ,
        БиблиотекаКартинок.УстановитьФлажки);
КонецПроцедуры
//
#КонецОбласти
1 СтарПом
 
20.03.19
13:46
В твоей конфе нет процедуры "ВывестиОповещение" в общем модуле СтандартныеПодсистемыКлиентСервер
как вариант можно закомментить вызов этой процедуры
//    СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(
//       РезультатВыполнения,
//      "Дата документов изменена",
//     ,
//    БиблиотекаКартинок.УстановитьФлажки);
2 falselight
 
20.03.19
13:59
(1) Ок. Удалил старые копии внешней обработки оставил текущую.
Открывает форму обработки. Подскажите пожалуйста как передать в неё ссылку на документ,
из которого она открывается? Подключенная через внешние отчеты обработки.
3 falselight
 
20.03.19
14:21
Ответа нет?
4 falselight
 
20.03.19
14:22
Вроде вопрос очевидный. Создал, добавил внешнюю обработку к документу.
Как при её открытии получить ссылку на этот документ? От куда? Где?
5 СтарПом
 
20.03.19
14:24
6 СтарПом
 
20.03.19
14:27
7 falselight
 
20.03.19
14:29
(5) У меня не внешняя печатная форма. У меня внешняя обработка.
Во внешней, печатной форме я знаю есть процедура печать, там ссылка на объект СсылкаНаОбъект = ОбъектыНазначения[0];
8 falselight
 
20.03.19
14:31
(6) К сожалению нет доступа к ИТС.
У меня вопрос, как во внешней обработке получить ссылку на объект, что бы заполнить реквизит в форме обработки при открытии?
9 СтарПом
 
20.03.19
14:34
(8) ТипКомандыВызовКлиентскогоМетода
Возвращает имя типа команд с вызовом клиентского метода. Для выполнения команд такого типа
   в основной форме внешнего объекта следует определить клиентскую экспортную процедуру по шаблону:
   Для глобальных отчетов и обработок (Вид = "ДополнительнаяОбработка" или Вид = "ДополнительныйОтчет"):
       &НаКлиенте
       Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
        // Реализация логики команды.
       КонецПроцедуры
   Для печатных форм (Вид = "ПечатнаяФорма"):
       &НаКлиенте
       Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
        // Реализация логики команды.
       КонецПроцедуры
   Для обработок создания связанных объектов (Вид = "СозданиеСвязанныхОбъектов"):
       &НаКлиенте
       Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт
        // Реализация логики команды.
       КонецПроцедуры

>>>>>>>>>>>>>>>>>> ТВОЙ СЛУЧАЙ <<<<<<<<<<<<<<<<<<<<<
   Для обработок заполнения и контекстных отчетов (Вид = "ЗаполнениеОбъекта" или Вид = "Отчет"):
       &НаКлиенте
       Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
        // Реализация логики команды.
       КонецПроцедуры


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

============

СсылкаНаОбъект = ОбъектыНазначенияМассив[0];
10 falselight
 
20.03.19
14:49
(9) Скажите пожалуйста, правильно ли я понял?
В модуле формы внешней обработки, которую я дорабатываю, я добавляю процедуру.

//
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
// Реализация логики команды.

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

А в какой момент она вызывается? Что бы мне получить, -

СсылкаНаОбъект = ОбъектыНазначенияМассив[0];
11 СтарПом
 
20.03.19
15:08
(10) а, блин, тебе ж форму показать надо... тогда чуть не так

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

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.>>>ТИП_ТВОЕГО_ДОКУМЕНТА<<<");

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

    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд,
    "Придумай название",
    "Придумай название",
    "ОткрытиеФормы",
    Истина);

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

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

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

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

====================
В модуле формы (если у тебя СсылкаНаОбъект это реквизит формы):

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.СсылкаНаОбъект = Параметры.ОбъектыНазначения[0];
КонецПроцедуры
12 СтарПом
 
20.03.19
15:10
+(11) а да, и самое главное у обработки добавить параметр формы  "ОбъектыНазначения" :)
13 falselight
 
20.03.19
15:11
(12) В смысле реквизит формы?
14 СтарПом
 
20.03.19
15:12
(13) не... именно параметр формы  "ОбъектыНазначения" с типом "Произвольный"
15 falselight
 
20.03.19
15:12
(14) Понял! Добавил, тип ставлю произвольный!
16 СтарПом
 
20.03.19
15:14
17 Вафель
 
20.03.19
15:17
(12) параметры можно не добавлять. они все равно будут
18 falselight
 
20.03.19
15:20
Ок, спасибо продвинулся!!!!
19 СтарПом
 
20.03.19
15:23
(17) https://its.1c.ru/db/bsp246doc#content:31:1:issogl3_вариант_запуска_открытие_формы

Для этого варианта запуска необходимо создать форму обработки, которая будет открыта при выполнении команды:
● для глобальных отчетов и обработок – не требуется дополнительных действий;
● для назначаемых отчетов и обработок – в форме обработки добавить параметр ОбъектыНазначения типа Произвольный. В этот параметр передается массив ссылок на объекты, для которых выполняется дополнительная обработка.

Не мог найти где почитать чем отличается глобальная от назначаемой. Не подскажешь?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан