Имя: Пароль:
1C
1С v8
"ПолучитьФорму" внешней обработки
0 Zhuravlik
 
11.09.20
17:32
Всем привет. С огромным удивлением обнаружил, что для внешней обработки, инициализированной через метод "Создать" (не "Подключить") этот метод возвращает неопределено. Вот такой код:

&НаСервере
Функция ПодключитьОбработку(Адрес)
Рез = ВнешниеОбработки.Создать(Адрес);
Возврат Рез.Метаданные().Имя;
КонецФункции

&НаКлиенте
Процедура ВызватьМетодФормы()
Имя = ПодключитьОбработку("D:\МояОбработка.epf");
ФормаНастроек = ПолучитьФорму("ВнешняяОбработка." + Имя + "Форма.ФормаНастроек"); // = Неопределено O_o
//...

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

Причем, метод "ОткрытьФорму" отрабатывает нормально. Суть этой задачи - по включенной галке отлаживаться через подключение внешних обработок, вместо внутренних. И все работает, кроме "ПолучитьФорму".
Подумалось, может меня глючит... Или, может кто знает о такой ошибке платформы, и кинется ссылкой на партнерку? Я там что-то не нашел..
1 Zhuravlik
 
11.09.20
17:34
+ 1С:Предприятие 8.3 (8.3.14.2095), серверная база
2 RomanYS
 
11.09.20
17:41
(0) А что мешает подключить?
3 RomanYS
 
11.09.20
17:44
(0) Это не ошибка платформы, а задокументированное поведение.

СП:
Для внешних отчетов и обработок имя формы задается следующим образом:
ВнешнийОтчет.<имя отчета>.Форма.<имя формы>;
ВнешнийОтчет.<имя отчета>.<имя стандартной формы>;
ВнешняяОбработка.<имя обработки>.Форма.<имя формы>;
ВнешняяОбработка.<имя обработки>.<имя стандартной формы>.
При этом внешний отчет или обработка должны быть предварительно зарегистрированы в системе. Для регистрации отчета следует использовать метод Подключить. Для регистрации обработки следует использовать метод Подключить. <Имя отчета> и <имя обработки> - это имена, под которыми зарегистрированы внешний отчет или обработка.
4 Ёпрст
 
11.09.20
17:44
забавный код..
и что там, имя то какое тебе возвращает ?
5 RomanYS
 
11.09.20
17:46
(4) Имя из метаданных обработки, здесь вроде ничего удивительного
6 Zhuravlik
 
11.09.20
17:50
(2) это нужно, для того чтобы в отладчике тормозится в методе этой обработки. Если "Подключить", этого соотв. не произойдет, т.к. подключение происходит через адрес вх.
7 Zhuravlik
 
11.09.20
17:51
(3) да, действительно.. Спасибо. Тогда думаю, закрыта тема. Очень странная реализация - открыть форму при таком подходе можно, а получить нельзя. "Было-бы смешно, если б не было так грустно".
8 Ёпрст
 
11.09.20
17:52
(5) оно же одинаковым будет для разных файлов
9 RomanYS
 
11.09.20
18:01
(7) То что открыть форму можно - скорее всего как раз баг. В (3) вырезка из описания как раз ОткрытьФорму, в ПолучитьФорму они подробности опустили. Может как раз поэтому предложение "Для регистрации обработки следует использовать метод Подключить." задвоено :)).

(8) может быть. У ТС вероятно имена уникальные или он об этом не задумывается.

Даже чисто теоретически: откуда программа может знать где лежит обработка, форму которой хотят открыть?
10 Zhuravlik
 
11.09.20
18:08
(8)(9) Имена уникальные. А зачем создавать две внешние обработки с одинаковым именем?
(9) Добавляем константу "КаталогОтладки", и для обращения ко всем обработкам делаем метод-обертку: если в каталоге отладки находится epf с именем файла = имени обработки, использовать его. Таким образом без перезапуска конфы легко и просто отлаживается любая обработка, затем заменяется из внешней. При работе из едт например, с проектом внешних обработок - очень удобно.
11 Zhuravlik
 
11.09.20
18:11
(9) да, чудеса...
12 RomanYS
 
11.09.20
18:21
(10) ну с учетом (6) "легко и просто отлаживается любая обработка" отменяется))
13 Zhuravlik
 
11.09.20
18:28
(12) не, не отменяется. ПолучитьФорму - это частный случай, порожденный отсутствием нормальной клиент-серверной реализации у внешних обработок. Хотел распределить кодовую базу. Но как правило используется отладка объекта (модуль + реквизиты), и она прекрасно работает.
Вот замечание про "ОткрытьФорму" - это неприятный момент, но не страшный. Если вдруг когда-то эту багофичу поправят, можно использовать метод получить форму самого объекта внешней обработки, только при этом придется отлаживаться в толстом УФ клиенте, а финишную проверку выполнять в тонком.
14 RomanYS
 
11.09.20
18:35
(13) ты в шаге от разработки клюшечного #ЗагрузитьИзФайла :)
В современных типовых всё чаще основной функционал обработок пишется в модуль менеджера. Во внешних его нет, ещё один костыль придумаешь?
15 Zhuravlik
 
11.09.20
18:48
(14) нет, здесь ничего изобретать не стану. Если есть текст модуля менеджера, придется отлаживать как есть. Но с типовыми практически не работаю, отлаживаю то что сам и писал. А сам в менеджере обработок не использую, имхо это зло. Вообще внешние обработки это какие-то сплошные слезы. Если речь идет о чем-то более сложном чем "открыть \ нажать кнопку \ закрыть", то выходит так, что это неэффективная модель, каковой приходится пользоваться за неимением ничего другого.
Я б рад был, если разработчики платформы озаботились вопросом упрощения отладки. Если Orefkov когда-то смог ТурбоМД написать, неужели так сложно придумать нормальный способ компиляции, без постоянного перезапуска конфы? Одно это может отожрать до 30% времени, которое лучше посвятить разработке.