|
v8: Правильность понимания &НаСервере и &НаСервереБезКонтекста в общих модулях | ☑ | ||
---|---|---|---|---|
0
Fedor-1971
03.04.14
✎
12:29
|
Провёл простой эксперимент на 8.2:
1. сделал общий модуль с флагами Сервер и Вызов сервера 2. написал экспортную процедуру 3. вызвал оную из обработчика события в документе (как из процедуры НаКлиенте, так и из процедуры НаСервере) Отладчиком проверил наличие контекста формы документа внутри серверной процедуры общего модуля - отсутствует (что собственно и ожидалось) Получается процедуры(функции) в общих модулях компилируются как &НаСервереБезКонтекста. Тогда не совсем понято почему исключена возможность контекстного вызова процедуры из общего модуля. По ходу для 8.3 оставлена та же логика компиляции общих модулей или всё таки сделана возможность использования контекстных вызовов общих модулей? |
|||
1
H A D G E H O G s
03.04.14
✎
12:34
|
Непонятно, что тебя смущает
|
|||
2
H A D G E H O G s
03.04.14
✎
12:36
|
Модуль формы
В модуле формы доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Модуль команды В модуле команды доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаКлиентеНаСервере. Общий модуль В общем модуле доступны директивы компиляции – &НаКлиенте, &НаСервере. Контекст формы к этому значения не имеет и доступен только в модуле формы. |
|||
3
Господин ПЖ
03.04.14
✎
12:36
|
>Тогда не совсем понято почему исключена возможность контекстного вызова процедуры из общего модуля.
переведи... |
|||
4
GROOVY
03.04.14
✎
12:38
|
(3) Контекст образуют данные формы, данные формы вне пределов формы недоступны.
|
|||
5
Лефмихалыч
03.04.14
✎
12:40
|
(0) у процедур и функций общих модулей ни когда не было контекста формы и ни когда не будет. Думаю сабж возник от непонимания или внезапного прочтения слова "контекст"
|
|||
6
Господин ПЖ
03.04.14
✎
12:43
|
(4) и что такое - контекстный вызов процедуры (чьей процедуры? формы?) из общего модуля?
типа дернуть форму находясь на сервере хочет? |
|||
7
H A D G E H O G s
03.04.14
✎
12:44
|
(4) Доступны
|
|||
8
Fedor-1971
03.04.14
✎
12:49
|
(3) перевожу
(5) уточняю Есть форма со своим клиентским контекстом при переходе на сервер, создаётся её серверный контекст. Соответственно что мешает из оного дёрнуть серверную процедуру общего модуля оставаясь в контексте (он уже создан, инициализирован)? ан нет, вызов процедуры общего модуля выполняется внеконтекстно, что не совсем логично. |
|||
9
Лефмихалыч
03.04.14
✎
12:51
|
(8) мешает то, что у серверного модуля нет, не было и ни когда не будет контекста формы. Если тебе нужно выполнять код в контексте формы, то код должен располагаться в модуле формы.
|
|||
10
H A D G E H O G s
03.04.14
✎
12:55
|
(8) Хреново у вас с логикой.
|
|||
11
Fedor-1971
03.04.14
✎
12:58
|
(9) Так он ему и не нужен, в нормальном состоянии процедура выполняется в той среде из которой вызвана (например, в С)
(10) Почему? |
|||
12
Адский плющ
03.04.14
✎
12:59
|
(8) А кто мешает форму в параметрах кинуть?
|
|||
13
Fedor-1971
03.04.14
✎
13:01
|
(12) ни кто не мешает, но это внеконтекстный вызов.
|
|||
14
Лефмихалыч
03.04.14
✎
13:02
|
(11) именно! Не нужен, потому его там и нет. А код выполняется в разн...
короче, контекст формы может существовать только в модуле форму. Живите с этим. |
|||
15
H A D G E H O G s
03.04.14
✎
13:08
|
(11) Насчет логики. Поскрипи извилинами.
Была 8.1. Были серверные модули. Контекстом формы на сервере вообще не пахло. И вот появляется 8.2, конфигурации переползают на нее и в серверных модулях появляется какой-то контекст. Это как в 8.3 у ОМ появился контекст ЭтотОбъект, вот у меня батхерта было. |
|||
16
Fedor-1971
03.04.14
✎
13:15
|
(14) придётся смириться. С системной точки зрения такая несправедливость очень просто объясняется: общие модули работают без контекста, т.к. не понятно откуда он вызван (прямо с клиента или с сервера - в обеих случаях контексты вызова разные), а отслеживать место вызова - лишняя головная боль системе.
В давние времена такие модули назывались реентерабельными - программируй в расчёте только на имеющиеся данные (параметры вызова и константы). (15) вот и я про то-же, при появлении контекста в последующих версиях платформы придётся менять логику (данность) вызова процедур из ОМ и может случиться большой ОЙ, когда старая процедура таки отработает в контексте вызова оной. |
|||
17
H A D G E H O G s
03.04.14
✎
13:18
|
т.к. не понятно откуда он вызван (прямо с клиента или с сервера - в обеих случаях контексты вызова разные)
Плохо.. Процедура СделатьДляВсех() Экспорт #Если Сервер Тогда Возврат 10; #ИначеЕсли ТонкийКлиент Тогда Возврат 20; #ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда Возврат 30; #Конец КонецПроцедуры |
|||
18
H A D G E H O G s
03.04.14
✎
13:18
|
Процедура -> Функция
|
|||
19
Fedor-1971
03.04.14
✎
13:28
|
(17) Это не совсем то, в этом примере выделены несколько вариантов компиляции функции для работы в разных средах. Если с клиента вызвать данную функцию, то и останешься на клиенте.
В (16) я писал с точки зрения системы: вызвали серверную процедуру из ОМ сразу встаёт вопрос "откуда?" и два варианта Клиент и Сервер, потому система говорит "да ну нах..! Работай без контекста!". |
|||
20
Fedor-1971
03.04.14
✎
13:29
|
(19)+ хотя сам писал в (15) про 8.3 и контекст ЭтотОбъект у ОМ
|
|||
21
H A D G E H O G s
03.04.14
✎
13:29
|
(19) (20) Ты мысли свои яснее можешь выражать?
|
|||
22
Fedor-1971
03.04.14
✎
13:34
|
(21) да в общем мысль была в следующем: сейчас ОМ работают без контекста и по ходу развитие идёт в направлении появления контекста вызова у ОМ.
Получается процедуры ОМ нужно разрабатывать с применением &НаСервереБезКонтекста дабы не влететь в будущем на непонятные эффекты. |
|||
23
H A D G E H O G s
03.04.14
✎
13:35
|
"и по ходу развитие идёт в направлении появления контекста вызова у ОМ. "
Счегобыэто? |
|||
24
vmv
03.04.14
✎
13:35
|
у меня чувство, что тут меня пытаються обмануть(
|
|||
25
Fedor-1971
03.04.14
✎
13:36
|
а 8.3 и ЭтотОбъект у ОМ из (15)?
|
|||
26
Fedor-1971
03.04.14
✎
13:36
|
(24) кто?
|
|||
27
MSII
03.04.14
✎
13:37
|
(22) Так недоступна же эта директива в ОМ.
|
|||
28
H A D G E H O G s
03.04.14
✎
13:38
|
(25) И на этом - все. Что то новое - ждите в 8.4. И вряд ли это будет контекст формы в ОМ.
|
|||
29
vmv
03.04.14
✎
13:39
|
ОМ - это по сути алгоритмы(методы) в абстракциях уходящие в дух.
Контекст - это по сути данные(ощущения) в абстрации уходящие в материю предлагаю позвать Канта и вновь поднять проблему "курицы и яйца" |
|||
30
MrStomak
03.04.14
✎
13:49
|
(25) Это вообще-то для того, чтобы передавать контекст этого модуля куда-то еще. А контекст модуля - это его экспортные методы. Частный случай применения - ОМ работы с торговым оборудованием. К формам вообще отношения не имеет.
|
|||
31
Fedor-1971
03.04.14
✎
13:54
|
(30) до 8.3 пока ещё не добрался, но ЭтотОбъект - не есть модуль, правильно?
|
|||
32
Fedor-1971
03.04.14
✎
13:56
|
Всем спасибо, пойду использовать полученные знания.
|
|||
33
vmv
03.04.14
✎
13:57
|
Я надеюсь разработчики платформ филофофски подкованы неплохо и не будут идти на поводу голого популизма
|
|||
34
MrStomak
03.04.14
✎
14:02
|
(31) А что же еще? Модуль.
|
|||
35
H A D G E H O G s
03.04.14
✎
14:11
|
(30) Непонятен смысл передачи этого контекста.
|
|||
36
H A D G E H O G s
03.04.14
✎
14:13
|
У нас все работает без всяких контекстов
Функция ПолучитьКаталогПользователя() Экспорт ИдентификаторКонфигурации=_ОбщегоНазначенияПовтИсп.ПолучитьИдентификаторКонфигурации(); Если ИдентификаторКонфигурации="УТ11" Тогда ОМ_УправлениеПользователями=_ОбщегоНазначенияКлиентСервер.ОбщийМодуль("_УправлениеПользователями"); Иначе ОМ_УправлениеПользователями=_ОбщегоНазначенияКлиентСервер.ОбщийМодуль("УправлениеПользователями"); КонецЕсли; Каталог=ОМ_УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(,"ОсновнойКаталогФайлов"); Возврат Каталог; КонецФункции Функция ОбщийМодуль(Имя) Экспорт Попытка Модуль = Вычислить(Имя); Исключение Модуль = Неопределено; КонецПопытки; Возврат Модуль; КонецФункции |
|||
37
MrStomak
03.04.14
✎
14:57
|
(36) Так он для другого случая, когда нужно передать себя в другой модуль:
//ОбщийМодуль, передающий себя Функция СделатьЧтоТо() Экспорт ДлинаИмени = МодульВсякихДействий.ПолучитьДлинуИмениМодуля(ЭтотОбъект); Возврат "Длина имени модуля "+ДлинаИмени; КонецФункции //МодульВсякихДействий Функция ПолучитьДлинуИмениМодуля(Модуль) Экспорт Возврат СтрДлина(Модуль) КонецФункции |
|||
38
13_Mult
03.04.14
✎
15:21
|
Начиная с "Преобразование прикладных данных в данные формы"
http://langslab.com/ebooks/prof-dev2/tome1/pr-dev-t1-ch08/pr-dev-t1-ch08-1 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |