Толстый-толстый клиент. Разминка для ума + Видео-ответ.

Пока у нас готовятся технические инструменты запуска нового потока, предлагаю еще немного размяться.

Выложено видео по этому вопросу.

Речь пойдет о флаге “Вызов сервера” общих модулей.
Всем известно, что он означает.
Представим, что есть общий модуль “МагнитнаяАнамалия” у него установлен только флаг “Сервер”. Есть в модуле метод “Проверка”, объявленный с ключевым словом “Экспорт”. Можно ли вызывать метод данного общего модуля со стороны клиента? Например, из клиентской процедуры управляемой формы? Конечно же нет!?
Проверим.
Обеспечим вызов метода “Проверка” из клиентской процедуры управляемой формы. Далее, не взирая на ошибки синтаксиса запустим приложение в режиме толстого клиента управляемое приложение.
Вызываем метод “Проверка”. Не может быть, работает!?
Предлагаем вам подумать над причинами данного явления..

А вот наш взгляд на эту ситуацию.

комментариев 29 на “Толстый-толстый клиент. Разминка для ума + Видео-ответ.”

  1. Илья Чернов 13.10.2010 в 18:10

    не могу скачать ответ :(

    • Какие симптомы?
      У меня скачивается..

      • Илья Чернов 13.10.2010 в 20:16

        все прошло…качается
        файл не был доступен.

      • Александр Горлов 13.10.2010 в 23:15

        Подтверждаю – не качается. Симптомы: “Соединение закрыто удаленным сервером…”

  2. Денис Гончаренко 13.10.2010 в 09:51

    Компиляция модулей выполняется в нескольких контекстах: контекте сервера и контексте клиента. В случае использования файлового варианта работы эти контексты “сливаются”  и, фактически,  в контексте клиента будут скомпилированы все модули конфигурации.
    По-крайней мере так происходит на платформе  8.1. По аналогии, наверное так происходит и на платформе 8.2 в случае использования толстого клиента, т.е. контексты сервера и клиента “сливаются”.

  3. Попробовал обернуть метода общего модуля директивой #Если Клиент Тогда … #КонецЕсли При запуске в толстом клиенте упр. приложения метод вызывается – следовательно контекст сервера и клиента совпадают  (В СП написано – В файловом варианте все намного проще, а именно, клиентская и серверная сторона считаются “слившимися”) По возможности проверю в клиент-серверном варианте.

    • Можно также попробовать обернуть инструкцией препроцессору #Если Сервер Тогда … #КонецЕсли
      Должен получиться интересный эффект (если я не ошибаюсь)…

  4. Если запустить приложение в режиме толстого клиента управляемого приложения, не взирая на ошибки синтаксиса, то
    1) В файловом варианте все работает без ошибок. Т.к. в этом случае вся функциональность (как серверная, так и клиентская) выполняется на клиенте.
    2) В клиент-серверном варианте возникает ошибка при открытии формы: Переменная не определена (МагнитнаяАномалия)
     <<?>>МагнитнаяАномалия.Проверка();

  5. progr-2008 12.10.2010 в 13:34

    Действительно, сообщает об ошибке для тонкого клиента и работает в толстом клиенте.

    {Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(31,2)}: Переменная не определена (МагнитнаяАномалия)
     <<?>>МагнитнаяАномалия.Проверка();   (Проверка: Тонкий клиент)

    • progr-2008 12.10.2010 в 13:39

      Неявный вызов сервера для толстого клиента?

      • progr-2008 12.10.2010 в 13:43

        Для толстого клиента платформа не контролирует по экспортным функциям и процедурам некоторые свойства общих модулей?

        • progr-2008 12.10.2010 в 19:38

          Может, так и должно быть? Флаг Сервер в свойствах общего модуля задает, где исполняется, а доступность процедур модуля определяется платформой. Для тонкого клиента доступности нет – видим ошибку, для толстого – есть. 

          ОбщийМодуль (CommonModule)
          Описание: Предоставляет доступ к экспортным процедурам и функциям неглобального общего модуля …

          Доступность: Сервер, толстый клиент, внешнее соединение.

  6. Ошибок не возникло при проверке синтаксиса, 8.2.12.75, метод работает тоже без ошибок, причем никаких вызовов сервера не происходит. Все исполняется на клиенте в этом случае?

    • Это в файловом варианте, в клиент-серверном – не прокатывает.

    • >Ошибок не возникло при проверке синтаксиса
      Вот это уже странно. Должна быть ошибка синтаксиса, но код должен отработать.
      Хотя может у вас особые настройки синтакс-контроля…

      • На самом деле, сначала поставил “Вызов сервера”, сохранил, потом снял, сохранил :)

        • Хороший маневр :)
          Ваш прошлый комент пока не одобряю, так как там содержится “зерно” правильного ответа.

  7. Илья Чернов 11.10.2010 в 20:36

    Не могу воспроизвести. выдает ошибку.
     
    {Документ.Документ1.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (МагнитнаяАнамалия)
    <<?>>МагнитнаяАнамалия.Проверка();
    {Документ.Документ1.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (МагнитнаяАнамалия) <<?>>МагнитнаяАнамалия.Проверка();
     
     
    1С:Предприятие 8.2 (8.2.12.80-87)
     
     
     
     

    • Такое возможно, но маловероятно :) Чуть позже поймете о чем я, когда дам ответ.
      Пара вопросов:
      Приложение запускаете в толстом клиенте?
      Эта ошибка возникает во время открытия формы документа?

      • Илья Чернов 12.10.2010 в 12:08

        Понял, как воспроизвести ошибку :) оказывается такое возможно только в файловом варианте(!), в клиент-серверном выдается ошибка при открытии формы.

        • Илья Чернов 12.10.2010 в 13:49

          В комментарии к галочке написано “Выполнение на сервере в клиент-серверном варианте”, очевидно что на этапе проверки, система выдает что ошибка диагностирована только для Тонкого клиента. Стоит полагать что в толстом клиенте файловый вариант, данный вид модуля включается в область видимости клиента.

    • так и должно быть, если клиент тонкий, а вот толстый “проглатывает”
      зы ошибка возникает во время открытия формы
       

      • Коллеги, сейчас говорим только о толстом клиенте, см. название темы.
        В нем не возникает никаких ошибок??

        • Кудрявцев Олег 12.10.2010 в 09:15

          В толстом никаких ошибок не возникает.
          Может быть потому что при работе в толстом клиенте все модули выполняются на клиенте (файловый вариант)

        • нет, 8.2 (8.2.12.78)
          видимо толстому клиенту до сервера “рукой подать” :)

          • Немного не так :)

            • видимо контекст “толстой” формы существует и  на сервере и на клиенте. предположений больше нет :)

        • Если запустить приложение в режиме толстого клиента управляемого приложения, не взирая на ошибки синтаксиса, то
          1) В файловом варианте все работает без ошибок. Т.к. в этом случае вся функциональность (как серверная, так и клиентская) выполняется на клиенте.
          2) В клиент-серверном варианте возникает ошибка при открытии формы: Переменная не определена (МагнитнаяАномалия)
           <<?>>МагнитнаяАномалия.Проверка();