Имя: Пароль:
1C
 
Вопрос по контексту общих модулей
0 never_sleep
 
03.05.17
07:25
Гуглил, но до конца не понял.
Флаг "Сервер"
Функции такого модуля могут выполняться на сервере.
Флаг "Вызов сервера"
Флаг доступен для модулей с установленным флагом "Сервер".  Разрешает вызов на клиенте экспортных функций этого модуля (которые будут выполняться на сервере).
Флаг "Клиент (управляемое приложение)"
Функции такого модуля могут выполняться на клиенте в режиме управляемого приложения.
Не совсем понятно, почему можно одновременно поставить одновременно все 3 галки?
Я прочитал объяснение, вроде как логика в том, чтобы
В модуля, которые "Сервер" накидать процедуры, которые выполняются чисто на сервере и на клиенте их вообще не должно быть видно.
В модуля, которые "Вызов сервера" накидать процедуры, которые выполняются чисто на сервере, но которые по логике могут понадобиться на клиенте.
А в модуля, которые "Клиент (управляемое приложение)" накидать процедуры, которые выполняются чисто на клиенте.
Но зачем тогда давать эти галки ставить вместе? Или я не совсем правильно понимаю логику этих галок?
Гуглил - все ссылки либо коротенькие отписки, как я привел выше, либо на мистовские темы 10-12 года, где судя по ответам истины никто сам не знал.
1 Неверный Параметр И
 
03.05.17
07:40
Чтобы иметь в одном экземпляре код, существующий одновременно на клиенте и на сервере и доступный для вызова как с клиента так и с сервера. Например, обработка строк. Так-то!
2 never_sleep
 
03.05.17
08:23
(1) В вашей голове наверняка все логично и по полочкам разложено, в моей же пусто и гуляет ветер. Не совсем понял что вы сказали, помогите, пожалуйста, заткнуть дыры в понимании. Я пример с обработкой строк никак не понял((( нуб я пока
3 бомболюк
 
03.05.17
08:40
(0) если тебя это утешит - я тоже этого не знаю ;-)
4 Неверный Параметр И
 
03.05.17
08:47
(2) Вот есть у тебя алгоритм проверки названия на запрещённые комбинации символов. Вызывается при вводе наименования на клиенте и при загрузке из файла на сервере. Кладется в общий модуль с двумя этими галочками. И все. Клиент вызывает с клиента, сервер с сервера, никакая информация по дохлому сетевому каналу не ходит. А алгоритм один. И правится в одном месте.
5 бомболюк
 
03.05.17
08:49
(4) ну про 2 галки ("Клиент", "Сервер") ты все складно растолковал, а что насчет 3й ("Вызов сервера")?
6 Неверный Параметр И
 
03.05.17
09:01
(5) Позволяет передавать управления на сервер. Если одновременно стоят клиент и вызов сервера, то по умолчанию вызовется "ближайший", клиентский экземпляр кода. Для понимания принципа разруливания кто где - читай глубже, про директивы компиляции препроцессора, которые разбрасывают код по контекстам внутри программного модуля.
7 never_sleep
 
03.05.17
09:04
вот тут еще неплохо по нашей теме:
http://www.obrabotki.com/1s-commonmodule-managedforms/
перевариваю.
8 never_sleep
 
03.05.17
09:05
так как раз про ближайший вызов написано.
9 never_sleep
 
03.05.17
09:12
(6) Т.е. если у модуля стоит только дона галка "клиент", то я смогу из клиента обратиться только к клиентским процедурам внутри этого модуля. А если "Вызов сервера", то мне фактически станут доступны все процедуры данного модуля?
10 бомболюк
 
03.05.17
09:12
(7) в примере, насколько я понял, установка флага "Вызов сервера" в дополнение к 2м другим ("Клиент", "Сервер") не приводит к изменениям работы модуля?
11 never_sleep
 
03.05.17
09:13
А с сервера, я в любом случае смогу вызвать только серверные процедуры данного модуля, в случае серверного вызова, мне галки "Клиент" и "Вызов сервера" вообще неинтересны?
12 never_sleep
 
03.05.17
09:15
(10) Как я понял, влияет повлияет только на доступность процедур при вызове с клиента. С сервера вообще никак не изменится.
13 Buster007
 
03.05.17
09:15
галка Клиент - процедуры доступны только на клиенте
галка Сервер - процедуры доступны только на сервере
Галка вызов сервера - доступны на клиенте и на сервере
14 Buster007
 
03.05.17
09:16
+(13) к "вызов сервера" ВСЕ процедуры доступны на клиенте
15 never_sleep
 
03.05.17
09:17
(13) а вот и неправильно. плохое объяснение. по вашей логике установка 2х галок "клиент" и "сервер" равнозначна "Вызов сервера"
16 never_sleep
 
03.05.17
09:18
(14) ну с допиской да.
17 Buster007
 
03.05.17
09:20
(16) торопиться делать выводы не надо ;)
18 h-sp
 
03.05.17
09:21
(15) непонятно, что вы хотите? Чтобы там какие-то галки были недоступны? Так это очень неудобно. Путь лучше как сейчас - все галки доступны, а программист сам выбирает, какие сочетания возможны.
19 Buster007
 
03.05.17
09:23
(18) все эти галки должны быть всегда доступны, а если закралась мысль о том, что какие-то галку должны быть недоступны, то это значит есть какой-то пробел в знании
20 never_sleep
 
03.05.17
09:25
(18) Да теперь уже вроде просветление наступило. Галки нужны, совместное их использование тоже.  Вопросов вроде нет. Спасибо, Неверный Параметр И, ваши ответы и пример с проверкой строки крайне помогли в понимании.
21 youalex
 
03.05.17
09:28
вызов сервера - имеет смысл только, если стоит галка Сервер, как ни странно, да)
22 never_sleep
 
03.05.17
09:30
Ну как бы не странно. Логично, что если в модуле нет серверных процедур, то галка "Вызов сервера" не нужна, хватит "клиент". А если есть серверные, то логично дать возможность их вызывать и с сервера (галка "сервер")
23 never_sleep
 
03.05.17
09:32
Единственный вопрос остался. Директивы по умолчанию.
Не указание места компиляции процедуры, по умолчанию всегда приводит к &НаСервере? Независимо от того какие галки стоят у модуля?
Напишу модуль, нигде не поставлю директивы, поставлю галку клиент, и не смогу обратиться ни к одной процедуре?
24 Buster007
 
03.05.17
09:34
(23) ну а ты как думаешь? Если модуль клиентский и его на сервере вообще не существует, то почему система будет ставить директиву НаСервере?
25 never_sleep
 
03.05.17
09:37
(24) Да вот мне ближе все-таки унификация "умолчаний".
В моем примере, получается, если стоит только одна галка "клиент", то умолчание "&НаКлиенте", а если ставлю еще и сервер, то сразу умолчание меняется на &НаСервере? Фигово это, имхо.
26 Неверный Параметр И
 
03.05.17
09:37
(23) Такое поведение будет только в модуле УФ, так как она одновременно существует и там и там, а галочек нет. В общем модуле по умолчанию  будет использоватся расстановка флажков контекстов.
27 never_sleep
 
03.05.17
09:41
(26) т.е. я все-таки правильно понял  Buster007? Что если в модуле только одна галка "клиент", то по умолчанию "&НаКлиенте. Как только появилась галка "сервер", то умолчание сразу &НаСервере?
28 never_sleep
 
03.05.17
09:43
а хотя нет. Те у которых нет директив будут скомпилированы как на клиенте так и на сервере?
29 Неверный Параметр И
 
03.05.17
09:44
(27) Если галки не одновременные, то да.
Вообще забей ты на эти конструкции с амперсендами, они только для модулей УФ нужны. Есть православные #Если Клиент Тогда специально для этого предназначенные.
Читаешь какой нибудь модуль внешнего соединения после таких "спецов", плакать хочется...
30 never_sleep
 
03.05.17
09:44
в этом и смысл вашего примера с проверкой строки. Не ставлю директиву компиляции, ставлю галки Сервер и Клинет и процедура попадает и в клиентскую часть и в сервеную часть модуля
31 Неверный Параметр И
 
03.05.17
09:45
(28) Если галки одновременно стоят, то да.
32 never_sleep
 
03.05.17
09:47
(31) Все, как будто Будда коснулся моей головы)) Спасибо!
33 ptiz
 
03.05.17
10:16
Я тоже не очень понимаю.
С клиента нельзя вызвать процедуру модуля с галкой "сервер" без галки "вызов сервера"?
Т.е. галка нужна только чтобы разрешить вызывать процедуры с клиента? Тогда её назвали странно, т.к. её суть: "вызов с клиента".
И в чем смысл такого ограничения?
34 Naf2017
 
03.05.17
10:19
(33) уменьшить количество информации, которую должен знать клиент для серверных вызовов
35 Мимохожий Однако
 
03.05.17
10:20
(22) Не просто так разработчики типовых пишут его свойства в названии модуля
36 Timon1405
 
03.05.17
10:24
(33) Галка вызов сервера (точнее ее отсутствие) нужна для защиты серверного кода от внешних обработок(точнее вызовов с клиента). до такого кода нельзя добраться с клиента, то есть, теоретически, злоумышленник не сможет с клиента вытянуть данные из БД, если запрос на их получение в серверном модуле
37 ptiz
 
03.05.17
17:21
(36) Злоумышленник в своей обработке сделает процедуру &НаСервере и вызовет всё, что нужно. Не так?
38 Timon1405
 
03.05.17
17:26
(37) Если не стоит вызов сервера, ему будет сообщение "процедура не найдена"