Толстый-толстый клиент. Разминка для ума + Видео-ответ.
Пока у нас готовятся технические инструменты запуска нового потока, предлагаю еще немного размяться.
Выложено видео по этому вопросу.
Речь пойдет о флаге “Вызов сервера” общих модулей.
Всем известно, что он означает.
Представим, что есть общий модуль “МагнитнаяАнамалия” у него установлен только флаг “Сервер”. Есть в модуле метод “Проверка”, объявленный с ключевым словом “Экспорт”. Можно ли вызывать метод данного общего модуля со стороны клиента? Например, из клиентской процедуры управляемой формы? Конечно же нет!?
Проверим.
Обеспечим вызов метода “Проверка” из клиентской процедуры управляемой формы. Далее, не взирая на ошибки синтаксиса запустим приложение в режиме толстого клиента управляемое приложение.
Вызываем метод “Проверка”. Не может быть, работает!?
Предлагаем вам подумать над причинами данного явления..
А вот наш взгляд на эту ситуацию.
не могу скачать ответ :(
Какие симптомы?
У меня скачивается..
все прошло…качается
файл не был доступен.
Подтверждаю – не качается. Симптомы: “Соединение закрыто удаленным сервером…”
Попробуйте сейчас.
Компиляция модулей выполняется в нескольких контекстах: контекте сервера и контексте клиента. В случае использования файлового варианта работы эти контексты “сливаются” и, фактически, в контексте клиента будут скомпилированы все модули конфигурации.
По-крайней мере так происходит на платформе 8.1. По аналогии, наверное так происходит и на платформе 8.2 в случае использования толстого клиента, т.е. контексты сервера и клиента “сливаются”.
Попробовал обернуть метода общего модуля директивой #Если Клиент Тогда … #КонецЕсли При запуске в толстом клиенте упр. приложения метод вызывается – следовательно контекст сервера и клиента совпадают (В СП написано – В файловом варианте все намного проще, а именно, клиентская и серверная сторона считаются “слившимися”) По возможности проверю в клиент-серверном варианте.
Можно также попробовать обернуть инструкцией препроцессору #Если Сервер Тогда … #КонецЕсли
Должен получиться интересный эффект (если я не ошибаюсь)…
Если запустить приложение в режиме толстого клиента управляемого приложения, не взирая на ошибки синтаксиса, то
1) В файловом варианте все работает без ошибок. Т.к. в этом случае вся функциональность (как серверная, так и клиентская) выполняется на клиенте.
2) В клиент-серверном варианте возникает ошибка при открытии формы: Переменная не определена (МагнитнаяАномалия)
<<?>>МагнитнаяАномалия.Проверка();
Действительно, сообщает об ошибке для тонкого клиента и работает в толстом клиенте.
{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(31,2)}: Переменная не определена (МагнитнаяАномалия)
<<?>>МагнитнаяАномалия.Проверка(); (Проверка: Тонкий клиент)
Неявный вызов сервера для толстого клиента?
Для толстого клиента платформа не контролирует по экспортным функциям и процедурам некоторые свойства общих модулей?
Может, так и должно быть? Флаг Сервер в свойствах общего модуля задает, где исполняется, а доступность процедур модуля определяется платформой. Для тонкого клиента доступности нет – видим ошибку, для толстого – есть.
ОбщийМодуль (CommonModule)
Описание: Предоставляет доступ к экспортным процедурам и функциям неглобального общего модуля …
Доступность: Сервер, толстый клиент, внешнее соединение.
Ошибок не возникло при проверке синтаксиса, 8.2.12.75, метод работает тоже без ошибок, причем никаких вызовов сервера не происходит. Все исполняется на клиенте в этом случае?
Это в файловом варианте, в клиент-серверном – не прокатывает.
>Ошибок не возникло при проверке синтаксиса
Вот это уже странно. Должна быть ошибка синтаксиса, но код должен отработать.
Хотя может у вас особые настройки синтакс-контроля…
На самом деле, сначала поставил “Вызов сервера”, сохранил, потом снял, сохранил :)
Хороший маневр :)
Ваш прошлый комент пока не одобряю, так как там содержится “зерно” правильного ответа.
Не могу воспроизвести. выдает ошибку.
{Документ.Документ1.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (МагнитнаяАнамалия)
<<?>>МагнитнаяАнамалия.Проверка();
{Документ.Документ1.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (МагнитнаяАнамалия) <<?>>МагнитнаяАнамалия.Проверка();
1С:Предприятие 8.2 (8.2.12.80-87)
Такое возможно, но маловероятно :) Чуть позже поймете о чем я, когда дам ответ.
Пара вопросов:
Приложение запускаете в толстом клиенте?
Эта ошибка возникает во время открытия формы документа?
Понял, как воспроизвести ошибку :) оказывается такое возможно только в файловом варианте(!), в клиент-серверном выдается ошибка при открытии формы.
В комментарии к галочке написано “Выполнение на сервере в клиент-серверном варианте”, очевидно что на этапе проверки, система выдает что ошибка диагностирована только для Тонкого клиента. Стоит полагать что в толстом клиенте файловый вариант, данный вид модуля включается в область видимости клиента.
так и должно быть, если клиент тонкий, а вот толстый “проглатывает”
зы ошибка возникает во время открытия формы
Коллеги, сейчас говорим только о толстом клиенте, см. название темы.
В нем не возникает никаких ошибок??
В толстом никаких ошибок не возникает.
Может быть потому что при работе в толстом клиенте все модули выполняются на клиенте (файловый вариант)
нет, 8.2 (8.2.12.78)
видимо толстому клиенту до сервера “рукой подать” :)
Немного не так :)
видимо контекст “толстой” формы существует и на сервере и на клиенте. предположений больше нет :)
Если запустить приложение в режиме толстого клиента управляемого приложения, не взирая на ошибки синтаксиса, то
1) В файловом варианте все работает без ошибок. Т.к. в этом случае вся функциональность (как серверная, так и клиентская) выполняется на клиенте.
2) В клиент-серверном варианте возникает ошибка при открытии формы: Переменная не определена (МагнитнаяАномалия)
<<?>>МагнитнаяАномалия.Проверка();