Имя: Пароль:
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_вариант_запуска_открытие_формы

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

Не мог найти где почитать чем отличается глобальная от назначаемой. Не подскажешь?