Имя: Пароль:
1C
1С v8
УФ, оптимизация, внеконтекстные вызовы и все-все-все.
,
0 H A D G E H O G s
 
25.03.14
15:10
День добрый.

Волей судеб пишу обработку.
В ней есть ОФ (обычные формы), УФ (управляемые формы) идентичной функциональности.

Общие функции вынесены в модуль объекта.

УФ у меня построена целиком на внеконтекстных вызовах.
Единственный контекстный - ПриСозданииНаСервере.

Все хорошо.

Единственная проблема возникает с общими функциями модуля объекта.

Проблема в том, что обработка может использоваться и как внешняя, что исключает использование модуля менеджера.

Копировать функции в модуль УФ исключено из за унификации.

Вызов контекстной функции исключен быстродействием (на клиенте дозвизды данных, миграция на сервер которых не нужна).

Решение - вот оно

&НаКлиенте
Процедура ЗаполнитьДанныеВариант3(Команда)
    ЗаполнитьДанныеНаСервереВариант3(Объект);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьДанныеНаСервереВариант3(Знач Объект)
    ЭтотОбработкаОбъект=ДанныеФормыВЗначение(Объект,Тип("ОбработкаОбъект.ТестоваяОбработка"));  //Все хорошо!
    ЭтотОбработкаОбъект.ТестоваяПроцедура();
КонецПроцедуры

но оно работает только для встроенной обработки.

Для внешней обработки игра с типами приводит либо к ошибке 2 параметра, либо к падению платформы, пример вот он:

http://webfile.ru/b9e7156814d8655af7630696748bc3f7

Ben, i need help
1 bborisko
 
25.03.14
15:13
РеквизитФормыВЗначение("Объект").Процедура()
Но не знаю работает ли это вне контекста
2 vmv
 
25.03.14
15:13
хвастаешься штоле?

где терзающие душу вопросы?
3 VikingKosmo
 
25.03.14
15:14
Для внешней обработки стоило бы указывать тип, соответствующий внешней обработке, и будет тебе счастье.
4 H A D G E H O G s
 
25.03.14
15:15
(1) Нельзя.
5 H A D G E H O G s
 
25.03.14
15:16
(3) Укажи.

Я это делаю в примере по ссылке, 2 способами. Ошибка и падение.
6 toypaul
 
гуру
25.03.14
15:19
вопрос про правильное подключение внешней обработки что ли? если так, то ответ в БСП.
7 H A D G E H O G s
 
25.03.14
15:22
(6) нет, вопрос не об этом.
8 Drac0
 
25.03.14
15:22
(0) Тип будет, вроде бы, Тип("ВнешняяОбработкаОбъект.ТестоваяОбработка")
9 H A D G E H O G s
 
25.03.14
15:23
(8) Прекрасно. Теперь скачай пример.
10 toypaul
 
гуру
25.03.14
15:23
а понял. вопрос про вызов процедуры из модуля внешней обработки.

но если контекстных процедур нет, почему не создать новый экз обработки и вызвать у него метод?
11 toypaul
 
гуру
25.03.14
15:25
для чего цепляться к Объект?
12 H A D G E H O G s
 
25.03.14
15:26
(10) Бррр....
Это будет один в один подход типовых 1С по выгрузке регламентной отчетности, за который хочется сделать плохое сценаристам.

Не будем уподобляться этим безумным людям, скачаем cf-шник, развернем его и нажмем 2 кнопочки. И. Все. Увидим.
13 H A D G E H O G s
 
25.03.14
15:27
(11) Не понял вопроса.
14 vmv
 
25.03.14
15:31
(11) он говорит шо там за сокровища в модуле объекта, которые прям могут быть только там

мое мнение - задача высосана из пальца.

Зачем ставить во главу угла построение фкнкионала на внеконтексте и тут же плевать на это, пытаясь влезть в модуль объекта

байки об унификации не предлагать
15 H A D G E H O G s
 
25.03.14
15:32
(14) Ты cf то скачал?
16 Kondarat
 
25.03.14
15:33
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:

ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)

Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует данные формы в объект прикладного типа.

Доступность:

Сервер, толстый клиент, мобильное приложение(сервер).
Примечание:

Нельзя преобразовать в объект типа Табличная часть.
17 vmv
 
25.03.14
15:33
(15) я телепат
18 H A D G E H O G s
 
25.03.14
15:33
(17) Ванга плачет по тебе кровавыми слезами.
(16) спс кэп.
19 vmv
 
25.03.14
15:34
(16) тока на сервере, а тут задача о двух стульях же
20 Drac0
 
25.03.14
15:41
(9) Скачать не могу. У себя воспроизвел. И вправду странно.
21 H A D G E H O G s
 
25.03.14
15:44
(20) ну хоть один
22 toypaul
 
гуру
25.03.14
15:44
есть мнение, что контекст формы содержить какую-то важную инфо о внешней обработке, которой не хватает для ДанныеФормыВЗначение

потому что РеквизитФормыВЗначение же работает?

можешь уточнить в 1С. может это глюк, может фича. а может так было задумано, но не описано в СП.
23 VikingKosmo
 
25.03.14
15:45
(20) а что странного то? Тип("ОбработкаОбъект.ТестоваяОбработка") ну ни как не равен типу соответствующему внешней обработке. Правда пока вразумительно представить тип внешней обработки я тоже не могу :)
24 Kondarat
 
25.03.14
15:46
(21) 16 - зачеркнуть.

У меня странно то, что третий вариант работает как для встроенной так и для внешней обработки.
25 Drac0
 
25.03.14
15:46
(21) Клади ее в хранилище при создании на сервере :-) РеквизитФормыВЗначение работает нормально.
26 Drac0
 
25.03.14
15:47
(23) Тип указываю тоже соответсвующий: ВнешнняОбработкаОбъект
27 VikingKosmo
 
25.03.14
15:48
(26) мнээээ, я до конца пример не прогонял, но что то не припоминаю типа ВнешняяОбработкаОбъект. Хотя могу и ошибаться.
28 Drac0
 
25.03.14
15:50
(27) Сделай в контекстном серверном вызове РеквизитФормыВЗначение("Объект") и посмотри его тип.
29 H A D G E H O G s
 
25.03.14
15:50
(25) Это вариант 2 в примере. Он приводит к падению платформы.
30 vmv
 
25.03.14
15:50
то что хочет тс невозможно, если он настаивает на использовании в форме внешней обработки только внеконтестных методов и одновременному доступу к функционалу модуля объекта.

пути через задницу эээ через хранилища или сериализаторы не рассматриваем

вброшу безумную идею - нужно поити на маленьку жертву и поюзать еще один контекстный метод ОбработкаОповещения()

а вот функционал из модуля объекта перенести в дополнительную форму обработки. Можно создать даже семейтсво функционалов-форм пристегнутых к одной обработке

и управлять вызовами дополнительных методов путем идентификаторов событий оповещения.

дерзайте, я ж в вас верю
31 H A D G E H O G s
 
25.03.14
15:51
(27) Есть такой тип.
32 H A D G E H O G s
 
25.03.14
15:51
(30) Ты скачал cf?
33 vmv
 
25.03.14
15:54
(32) в эту же проблему я уперся года 2 назад и все шаги которые тут предлагали прошел и ни фига
34 H A D G E H O G s
 
25.03.14
15:57
(33)
"то что хочет тс невозможно, если он настаивает на использовании в форме ВНЕШНЕЙ обработки только внеконтестных методов и одновременному доступу к функционалу модуля объекта. "

Это справедливо только для внешней обработки, и несправедливо для встроенной, так?
35 vmv
 
25.03.14
16:00
(34) да, именно проблема со вшнешней была, на новых релизах я не проверял, но очевидно, что осталась
36 H A D G E H O G s
 
25.03.14
16:01
(35) Ясно
37 H A D G E H O G s
 
25.03.14
16:04
Ладно, пока сделаем

ЗаполнитьНаСервере()
ЗаполнитьНаСервереБезКонтекста()

Хотите быстродействия - встраивайте в конфигурацию, граждане клиенты.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.