v8: Правильность понимания &НаСервере и &НаСервереБезКонтекста в общих модулях #704124


#0 by Fedor-1971
Провёл простой эксперимент на 8.2: 1. сделал общий модуль с флагами Сервер и Вызов сервера 2. написал экспортную процедуру 3. вызвал оную из обработчика события в документе (как из процедуры НаКлиенте, так и из процедуры НаСервере) Отладчиком проверил наличие контекста формы документа внутри серверной процедуры общего модуля - отсутствует (что собственно и ожидалось) Получается процедуры(функции) в общих модулях компилируются как  &НаСервереБезКонтекста. Тогда не совсем понято почему исключена возможность контекстного вызова процедуры из общего модуля. По ходу для 8.3 оставлена та же логика компиляции общих модулей или всё таки сделана возможность использования контекстных вызовов общих модулей?
#1 by H A D G E H O G s
Непонятно, что тебя смущает
#2 by H A D G E H O G s
Модуль формы   В модуле формы доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаСервереБезКонтекста, &НаКлиентеНаСервереБезКонтекста. Модуль команды   В модуле команды доступны директивы компиляции – &НаКлиенте, &НаСервере, &НаКлиентеНаСервере. Общий модуль   В общем модуле доступны директивы компиляции – &НаКлиенте, &НаСервере. Контекст формы к этому значения не имеет и доступен только в модуле формы.
#3 by Господин ПЖ
>Тогда не совсем понято почему исключена возможность контекстного вызова процедуры из общего модуля. переведи...
#4 by GROOVY
Контекст образуют данные формы, данные формы вне пределов формы недоступны.
#5 by Лефмихалыч
у процедур и функций общих модулей ни когда не было контекста формы и ни когда не будет. Думаю сабж возник от непонимания или внезапного прочтения слова "контекст"
#6 by Господин ПЖ
и что такое - контекстный вызов процедуры (чьей процедуры? формы?) из общего модуля? типа дернуть форму находясь на сервере хочет?
#7 by H A D G E H O G s
Доступны
#8 by Fedor-1971
перевожу уточняю   Есть форма со своим клиентским контекстом при переходе на сервер, создаётся её серверный контекст. Соответственно что мешает из оного дёрнуть серверную процедуру общего модуля оставаясь в контексте (он уже создан, инициализирован)? ан нет, вызов процедуры общего модуля выполняется внеконтекстно, что не совсем логично.
#9 by Лефмихалыч
мешает то, что у серверного модуля нет, не было и ни когда не будет контекста формы. Если тебе нужно выполнять код в контексте формы, то код должен располагаться в модуле формы.
#10 by H A D G E H O G s
Хреново у вас с логикой.
#11 by Fedor-1971
Так он ему и не нужен, в нормальном состоянии процедура выполняется в той среде из которой вызвана (например, в С) Почему?
#12 by Адский плющ
А кто мешает форму в параметрах кинуть?
#13 by Fedor-1971
ни кто не мешает, но это внеконтекстный вызов.
#14 by Лефмихалыч
именно! Не нужен, потому его там и нет. А код выполняется в разн... короче, контекст формы может существовать только в модуле форму. Живите с этим.
#15 by H A D G E H O G s
Насчет логики. Поскрипи извилинами. Была 8.1. Были серверные модули. Контекстом формы на сервере вообще не пахло. И вот появляется 8.2, конфигурации переползают на нее и в серверных модулях появляется какой-то контекст. Это как в 8.3 у ОМ появился контекст ЭтотОбъект, вот у меня батхерта было.
#16 by Fedor-1971
придётся смириться. С системной точки зрения такая несправедливость очень просто объясняется: общие модули работают без контекста, т.к. не понятно откуда он вызван (прямо с клиента или с сервера - в обеих случаях контексты вызова разные), а отслеживать место вызова - лишняя головная боль системе. В давние времена такие модули назывались реентерабельными - программируй в расчёте только на имеющиеся данные (параметры вызова и константы). вот и я про то-же, при появлении контекста в последующих версиях платформы придётся менять логику (данность) вызова процедур из ОМ и может случиться большой ОЙ, когда старая процедура таки отработает в контексте вызова оной.
#17 by H A D G E H O G s
т.к. не понятно откуда он вызван (прямо с клиента или с сервера - в обеих случаях контексты вызова разные) Плохо.. #ИначеЕсли ТонкийКлиент Тогда Возврат 20; #ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда #Конец КонецПроцедуры
#18 by H A D G E H O G s
Процедура -> Функция
#19 by Fedor-1971
Это не совсем то, в этом примере выделены несколько вариантов компиляции функции для работы в разных средах. Если  с клиента вызвать данную функцию, то и останешься на клиенте. В я писал с точки зрения системы: вызвали серверную процедуру из ОМ сразу встаёт вопрос "откуда?" и два варианта Клиент и Сервер, потому система говорит "да ну нах..! Работай без контекста!".
#20 by Fedor-1971
+ хотя сам писал в про 8.3 и контекст ЭтотОбъект у ОМ
#21 by H A D G E H O G s
Ты мысли свои яснее можешь выражать?
#22 by Fedor-1971
да в общем мысль была в следующем: сейчас ОМ работают без контекста и по ходу развитие идёт в направлении появления контекста вызова у ОМ. Получается процедуры ОМ нужно разрабатывать с применением &НаСервереБезКонтекста дабы не влететь в будущем на непонятные эффекты.
#23 by H A D G E H O G s
"и по ходу развитие идёт в направлении появления контекста вызова у ОМ. " Счегобыэто?
#24 by vmv
у меня чувство, что тут меня пытаються обмануть(
#25 by Fedor-1971
а 8.3 и ЭтотОбъект у ОМ из ?
#26 by Fedor-1971
кто?
#27 by MSII
Так недоступна же эта директива в ОМ.
#28 by H A D G E H O G s
И на этом - все. Что то новое - ждите в 8.4. И вряд ли это будет контекст формы в ОМ.
#29 by vmv
ОМ - это по сути алгоритмы(методы) в абстракциях уходящие в дух. Контекст - это по сути данные(ощущения) в абстрации уходящие в материю предлагаю позвать Канта и вновь поднять проблему "курицы и яйца"
#30 by MrStomak
Это вообще-то для того, чтобы передавать контекст этого модуля куда-то еще. А контекст модуля - это его экспортные методы. Частный случай применения - ОМ работы с торговым оборудованием. К формам вообще отношения не имеет.
#31 by Fedor-1971
до 8.3 пока ещё не добрался, но ЭтотОбъект - не есть модуль, правильно?
#32 by Fedor-1971
Всем спасибо, пойду использовать полученные знания.
#33 by vmv
Я надеюсь разработчики платформ филофофски подкованы неплохо и не будут идти на поводу голого популизма
#34 by MrStomak
А что же еще? Модуль.
#35 by H A D G E H O G s
Непонятен смысл передачи этого контекста.
#36 by H A D G E H O G s
У нас все работает без всяких контекстов
#37 by MrStomak
Так он для другого случая, когда нужно передать себя в другой модуль: КонецФункции
#38 by 13_Mult
Начиная с "Преобразование прикладных данных в данные формы"
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С