Исполнение на клиенте/сервере для общих модулей #147868


#0 by Хочу спросить
Читаю "Конфигурирование и администрирование", и не понял такую вещь. Если флажки "Клиент" и "Сервер" для общего модуля стоят, а директив препроцессора нет, то ГДЕ в результате всё будет исполняться? Вообще, в кните не совсем понятно это как-то освещается - везде употребляются слова "может", "можно" и т.д., а где "будет" фактически исполняться, неясно...
#1 by France
Если нет директив: клиент-серверном режиме, исполнение на сервере, в файл серверном - на клиенте.
#2 by Хочу спросить
Спасибо. Насчёт файлового варианта я понял так: как флажки, так и директивы игнорируются (всё всегда на клиенте). Теперь насчёт клиент-серверного варианта: флажки "Клиент" и "Сервер" просто "включают" соответствующие директивы (если такие директивы имеются), так что ли? При этом, если директивы вокруг процедуры нет (или соответствующий флажок для директивы этого вида не установлен), то процедура исполняется всегда на сервере. Я правильно понял?
#3 by Хочу спросить
+ Написал и понял: нелогично как-то... Получается, что "серверная" директива и флажок "Сервер" не нужны, т.к. это умолчание. Зачем они тогда?
#4 by France
Если Клиент Тогда "Сообщить("На сервере сие не сработает")" КонецЕсли;
#5 by Хочу спросить
С экспериментами плоховато будет, т.к. у меня файловый вариант стоит. А понять хотелось бы...
#6 by France
а поставь сервер и вперед.
#7 by Хочу спросить
У меня нет $1200, а ломать не хочу. P.S. Вот вам и прелести лицензирования софта :))
#8 by France
а зачем ломать?... к тому же, вряд ли сумееш это сделать... есть более простые и легкие пути..
#9 by Хочу спросить
Что за пути?
#10 by France
ну, хотя бы работу найти, где есть клиент сервер)).. 2. в инете найти;))
#11 by Хочу спросить
В инете найти что? У меня работа, где нет клиент-сервера (пока). А чтобы он появился, надо что-то написать (конфигурацию в смысле).
#12 by Хочу спросить
Вообще, мы в сторону ушли... Скажи, в - чушь или нет?
#13 by France
в Волшебнику - он ас.
#14 by Хочу спросить
Ладно, подождём до завтра, может, Волшебник придёт :)
#15 by Vozhd
Если у модуля стоит флажок "Исполнять на сервере", то данный модуль будет скомпилирован на сервере предприятия. А вот будет он там исполняться или нет - это уже зависит от того, как этот модуль вызывается (именно это разруливается директивами препроцессора). Описание этого есть в штатной документации.
#16 by Хочу спросить
Флажка  "Исполнять на сервере" не существует. Есть флажки "Клиент" и "Сервер". Странные вещи говоришь... А если у модуля стоят оба флажка ("Клиент" и "Сервер"), то где он будет скомпилирован? P.S. Именно "штатную документацию" и читаем.
#17 by Vozhd
Если стоят оба флажка, то модуль будет скомпилирован и на клиенте и на сервере.
#18 by Хочу спросить
Спасибо, картинка начинает вырисовываться... Теперь вопросец: если стоят оба флажка, а директив нет, всё будет исполняться на сервере?
#19 by Vozhd
Если стоят оба флажка, а дериктив нет, тогда модуль скомпилируется и на сервере и на клиенте. Допустим на клиенте вызывается какая-то функция их этого модуля. Тогда платформа первым делом ищет эту функцию в скомпилированном на клиенте модуле, если функция найдена, то ей передается управление. Если же на клиенте функция не найдена, то она ищется на сервере, и если она найдена там, то управление передается туда. Если же не нашли функцию нигде, тогда будет ошибка. Все процедуры встроенного языка вызываются как следствие каких-то событий. Все события инициируются пользователем, т.е. всегда на клиенте (кроме редких случаев, типа внешнего соединения). Чтобы передать управление на сервер, необходимо с клиента вызвать функцию, которая скомпилирована для сервера и не скомпилирована для клиента. Такого поведения можно добиться либо снятием флажка "Клиент" у общего модуля, либо директивами препроцессора, которые "вырежут" кусок кода при компиляции на клиенте. Когда код выполняется на сервере, то процедуры, определенные на клиенте, не доступны. Т.е. переход "точки выполнения" может происходить только в одну сторону: от клиента к серверу.
#20 by Хочу спросить
Спасибо!
#21 by Хочу спросить
Ещё несколько вопросов. А что произойдёт, если флажки "Клиент" и "Сервер" у общего модуля оба НЕ установлены? И ещё по поводу флажков: в верно сказано, или нет? То есть: если, к примеру, флажок "Сервер" НЕ установлен, то директива "#Если Сервер..." просто игнорируется? В "штатной документации" кстати, именно про флажки - маловато...
#22 by Vozhd
Директивы всегда отрабатываются, вопрос лишь в том, определены ли символы "Сервер" и "Клиент". Если флажки "Клиент" и "Сервер" не установлены, то я бы предположил, что данный модуль не будет компилироваться на клиенте и на сервере. А чего еще про флажки писать то? Флажок установлен - модуль компилируется, не установлен - не компилируется.
#23 by Хочу спросить
В бухгалтерии 1.5.2.3 нет общих модулей, у которых не стояли бы оба флажка ("Клиент" и "Сервер"). Тогда остаётся предположить, что если оба флажка не стоят, модуль будет вообще нерабочим (ну или только для внешнего соединения, опять-таки, если такой флажок стоит). И насчёт "директивы всегда отрабатываются": если флажок "Сервер" снят, то директива "#Если Клиент...", имхо, лишена смысла, т.к. служит лишь для исключения чего-то при компиляции на сервере, а компиляции на сервере в этом случае не будет.
#24 by Хочу спросить
Кстати, про документацию: в описании языка про флажки по-моему вообще ничего нет (там только про инструкции препроцессора), а в описании конфигуратора в рассуждениях про флажки слово "компиляция" не употребляется. Так что в целом довольно мутненько... "Флажок установлен - модуль компилируется, не установлен - не компилируется" - вот этого в документации похоже вообще нет. Кстати, на ИТС статей про все эти дела я тоже не нашёл, так что форум рулит.
#25 by ValeriTim
А вот у меня недопонятки ... в типовых действительно на общих модулях стоят две галки. Тогда возникает вопрос зачем ? Если модуль компилируется и на клиенте и на сервере и первым делом ищется на клиенте, тогда нахождение модуля насервере бессмысленно, если конечно туда принудительно не передается управление, но принудительной передачи управления я незамечал. Что нетак ?
#26 by Хочу спросить
На самом деле в типовых на общих модулях не "стоят две галки", а везде по-разному. И директивы тоже попадаются.
#27 by ValeriTim
подниму
#28 by ValeriTim
Ну, пусть даже так. Но зачем тогда при установленной галке "Сервер" давать возможность поставить галку "Клиент" ?
#29 by Vozhd
Когда клиент вызывает функцию сервера, то по сети проходят как минимум два пакета (вызов и результат), а это может быть много дольше, чем вызов этой же функции на клиенте.
#30 by France
иногда лучше молчать
#31 by Хочу спросить
Сейчас фтыкал документацию так, что крыша немного съехала :) Есть мнение, что если, к примеру, флажок "Сервер" не стоит, но использована инструкция #Если Сервер..., то код внутри этой инструкции всё же будет скомпилирован на сервере, что противоречит сказанному в - "Флажок установлен - модуль компилируется, не установлен - не компилируется". Если кому не сильно в лом, прошу проверить это...
#32 by Хочу спросить
Вопрос в всё ещё актуален.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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