Имя: Пароль:
1C
 
Вызов процедуры внешней обработки?
0 Demetres
 
03.06.15
13:46
Добрый день! Столкнулся с бидэ, пытаюсь открыть внешнюю обработку из двоичных данных и вызвать экспортную процедуру модуля объекта этой обработки, выдает ошибку нет такого метода. Все в обычном приложении.
Код:
///////////////////////////////////
    ДвоичныеДанные      = Base64Значение(Строка64Base);
    АдресВХД            = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
    Попытка
        АдресОбработки  = ВнешниеОбработки.Подключить(АдресВХД,, Ложь);
        Обработка        = ВнешниеОбработки.Создать(АдресОбработки, Ложь);
    Исключение
        Результат = Новый Структура("Результат, ТекстОшибки", Ложь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ПоместитьВоВременноеХранилище(Результат, АдресВременногоХранилища);
        Возврат;
    КонецПопытки;
    
    Результат = Неопределено;
    
    Попытка
        Обработка.ВыполнитьДействияОбработки(Параметры, Результат);
    Исключение
        Результат = Новый Структура("Результат, ТекстОшибки", Ложь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
///////////////////////////////////

текст ошибки:
{ОбщийМодуль.УниверсальныеМеханизмы.Модуль(3528)}: Метод объекта не обнаружен (ВыполнитьДействияОбработки)
        Обработка.ВыполнитьДействияОбработки(Параметры, Результат);

Если кто знает в чем проблема подскажите
1 Волшебник
 
модератор
03.06.15
13:47
сделай её экспортной
2 Demetres
 
03.06.15
13:47
Ой
3 ДенисЧ
 
03.06.15
13:47
Я знаю только один способ столкнуться с бидэ....
4 Demetres
 
03.06.15
13:47
Вроде дошло
5 Demetres
 
03.06.15
13:47
Ложная тревога, вопрос актуален
6 Demetres
 
03.06.15
13:49
(1) вот она из модуля объекта обработки:

Процедура ВыполнитьДействияОбработки(СтруктураПараметров, Результат) Экспорт

как сделать её ещё экспортней, не знаю :(
7 EugeniaK
 
03.06.15
13:51
(6) Смотри, что в объекте "Обработка"
8 Demetres
 
03.06.15
13:53
(7) Там:
ИспользуемоеИмяФайла    "e1cib\tempstorage\7aa5283c-673f-4a56-bf0d-8d8b99be5046"    Строка
ЭтотОбъект    ВнешняяОбработкаОбъект.ВнешняяОбработка    ВнешняяОбработкаОбъект.ВнешняяОбработка
9 asady
 
03.06.15
13:55
(0) код у тебя где выполняется?
10 Demetres
 
03.06.15
13:55
(9) на сервере
11 Demetres
 
03.06.15
13:57
Похоже так не получиться вызвать процедуру модуля объекта этой внеш. обработки, в СП написано что можно только к реквизитам обращаться.

ВнешняяОбработка (ExternalDataProcessor)
Свойства:

<Имя реквизита> (<Attribute name>)
<Имя табличной части> (<Tabular section name>)
ИспользуемоеИмяФайла (UsedFileName)
ЭтотОбъект (ThisObject)

Методы:

Метаданные (Metadata)
ПолучитьМакет (GetTemplate)
ПолучитьФорму (GetForm)
ПроверитьЗаполнение (CheckFilling)

События:

ОбработкаПроверкиЗаполнения (FillCheckProcessing)
12 Demetres
 
03.06.15
14:07
Может есть другой способ, запустить её и вызвать процедуру модуля объекта?
13 Demetres
 
03.06.15
14:29
Ребята, может у кого есть умная идея? Очень бы пригодилось.
14 shpioleg
 
03.06.15
15:39
(11) Все там можно обращаться.
Напутал ты просто где-то.
15 shpioleg
 
03.06.15
15:44
+(14) Попробуй без второго параметра, просто
Обработка        = ВнешниеОбработки.Создать(АдресОбработки);
16 Demetres
 
03.06.15
15:47
(15) Спасибо за поддержку, пробовал без создания, все равно пишет что "Метод объекта не обнаружен (ВыполнитьДействияОбработки)". Нашел код похожий, тоже вызывается процедура Модуля объекта обработки, почему у меня не срабатывает не пойму???
17 shpioleg
 
03.06.15
15:53
Ну у меня прекрасно работает

Процедура ПодключитьВнешнююОбработку(ЗНАЧ АдресХранилища) Экспорт
    ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища,,Ложь);
    МояОбработка = ВнешниеОбработки.Создать(ИмяОбработки);
    ЗначениеИзОбработки = МояОбработка.Возврат1();
    ПеремТест = МояОбработка.Тест;
КонецПроцедуры
18 shpioleg
 
03.06.15
15:57
Вариант синтаксиса: По имени обработки

Синтаксис:

Создать(<Имя>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Имя внешней обработки, полученное после подключения.
Описание варианта метода:

Предварительно обработка должна быть подключена методом Подключить.
Возвращаемое значение:

Тип: ВнешняяОбработка.
19 Demetres
 
03.06.15
15:57
(17) Блин, в чем же дело, почему у меня тогда не работает, вроде все тоже самое
20 Demetres
 
03.06.15
15:59
(18) Да вроде же и подключение есть, надо разбираться дальше, главное что теперь точно известно что так можно
21 shpioleg
 
03.06.15
16:06
Так ты поменял Обработка        = ВнешниеОбработки.Создать(АдресОбработки, Ложь);

вот на это
Обработка        = ВнешниеОбработки.Создать(АдресОбработки);

?
Ты используешь синтаксис по пути к файлу Вариант синтаксиса: По имени файла

Синтаксис:

Создать(<ПолноеИмяФайла>, <БезопасныйРежим>)
22 Михаил Козлов
 
03.06.15
16:07
(20) В типовых так работают внешние печатные формы и обработки таб. частей (через экспортные процедуры модулей объектов).
23 Demetres
 
03.06.15
16:16
(21) Сейчас как раз пробую
24 Demetres
 
03.06.15
16:23
(21) Тоже самое {ОбщийМодуль.УправлениеПечатьюВызовСервера.Модуль(267)}: Метод объекта не обнаружен (ВыполнитьДействияОбработки)
Прописал:
АдресОбработки  = ВнешниеОбработки.Подключить(АдресВХД);
25 НЕА123
 
03.06.15
16:24
может обработка не та, или все-таки процедура в форме.
26 shpioleg
 
03.06.15
16:31
(24) А причем здесь метод Подключить? Я как бы про Создать писал. Создай просто экспортную переменную в модуле обработки. Ее должно быть видно в отладчике в твоей переменной Обработка.
27 Demetres
 
03.06.15
16:34
(25) Точно модуль объекта, уже 100 раз это проверил
(26) А реквизиты должны быть видны после создания или нет?
28 shpioleg
 
03.06.15
16:37
(27) После создания. Ты отладчик запускал, смотрел что у тебя в переменных?
29 Demetres
 
03.06.15
16:40
(28) у меня там только то что в (8) реквизитов нет почему-то? наверное создание неправильно сделал?
30 shpioleg
 
03.06.15
16:43
(29) А я о чем? :) У метода Создать 2 варианта синтаксиса. Тебе нужен второй, по имени обработки(то что вернул метод Подключить), а не по имени файла, как у тебя.
31 Demetres
 
03.06.15
16:57
(30) Ясно. Сейчас буду пробовать, только пока база мертвая нужно подождать немного
32 Demetres
 
03.06.15
17:14
(30) Все равно
        АдресОбработки  = ВнешниеОбработки.Подключить(АдресВХД,, Ложь);
        ТекОбработка         = ВнешниеОбработки.Создать(АдресОбработки);

не пойму что с х...
33 Demetres
 
03.06.15
17:47
(30) А как у вас получается реквизит АдресХранилища?
34 Demetres
 
04.06.15
08:00
Нужно использовать не "ВнешниеОбработки.Создать(" а "ВнешниеОтчеты.Создать(". Всем спасибо!