Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Директивы выполнения кода в модулях управляемых форм 1С 8.3

С появлением управляемых форм в модулях форм 1С 8.3 стали активно использоваться директивы компиляции в модулях форм и объектов:

  • &НаКлиенте
  • &НаСервере
  • &НаСервереБезКонтекста
  • &НаКлиентеНаСервереБезКонтекста

Дальше речь пойдет о том, как правильно ими пользоваться и как с их помощью можно оптимизировать работу системы.

Архитектура управляемого приложения 1С 8


Необходимо понимать, как работают управляемые формы в тонком режиме, проще всего представить эту модель в виде веб-сайта: сервер отдельно, клиент отдельно. В момент обращения к форме клиент делает обращение к серверу, и вся работа выполняется на сервере. Клиент (Ваша машина) лишь получает результат работы сервера.

Обратите внимание! Если директива не указана, то по умолчанию она выполняется на сервере.

Особенности компиляции этих директив управляемого приложения

&НаКлиенте

Указывает на то, что процедура или функция выполняется на стороне клиента 1C, все переменные существуют лишь на время жизни клиентской части формы. Такой метод выполняется «у Вас на компьютере», никак не затрагивая серверную часть. С клиента доступны все серверные функции.

На клиенте есть доступ к следующим объектам:

  • методы глобального контекста, у которых есть доступ на клиент (доступные директивы можно увидеть в синтаксис-помощнике);
  • общие модули, которые скомпилированы на сервере;
  • локальный контекст модуля;
  • свойства и методы расширения формы, определяемого основным реквизитом;
  • свойства и методы объекта встроенного языка УправляемаяФорма;
  • реквизиты формы.

&НаСервере

Выполняется на сервере, переменные существуют только на время серверного вызова. С сервера допустим вызов практически любых процедур, кроме клиентских. Если работа происходит в режиме тонкого клиента, вся работа происходит на сервере, а клиент получает лишь результат выполнения.

&НаСервереБезКонтекста

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Это процедура выполняется на сервере, вне контекста формы. Т.е. процедура не имеет доступа к реквизитам формы, выполняется на сервере и возвращает желаемый результат. Хорошо подходит для получения статичных данных. Крайне рекомендуется к использованию для оптимизации клиент-серверного взаимодействия.

&НаКлиентеНаСервереБезКонтекста

Используется, когда к процедуре нужно обращаться и с клиента, и с сервера. В остальном аналог &НаСервереБезКонтекста.

Оптимизация клиент-серверного взаимодействия

При разработке функционала необходимо учитывать следующие нехитрые правила:

  • в первую очередь минимизировать количество северных вызовов 1С с клиента;
  • производить все объемные вычисления на сервере;
  • там, где можно, использовать НаСервереБезКонтекста вместо НаСервере.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 18 на “Директивы выполнения кода в модулях управляемых форм 1С 8.3
  1. Не лишним было бы упомянуть, что если директиву явно не указать, по-умолчанию будет использована директива «&НаСервере»

    Ответить

    • Согласен!
      Примечание добавил:)

      Ответить

      • Только не в модулях форм и не в общих модулях с установленным свойством «Клиент»

        Ответить

  2. Здравствуйте!
    А эти директивы нужны, если я собираюсь работать через Web-интерфейс?
    Спасибо!

    Ответить

    • День добрый!

      Не только в веб-интерфейсе, но при использовании тонкого клиента.

      Ответить

      • Спасибо за ответ! Но смысл я не уловил. Приложение крутится на сервере под апач и с пользователем общается через браузер. Тонкого клиента не ставлю. Директива &НаКлиенте в этом случае (для браузера) какой смысл имеет?

        Ответить

    • Если просто:

      &На Сервере исполняется на сервере 1С, апач в свою очередь просто «транспорт».

      &На Клиенте исполняется в браузере (или тонком клиенте), естественно в нем нельзя сделать никакой запрос к БД. Можно только сделать какие-то простецкие вещи: подсчитать суммы, поиграть с оформлением. Но из клиентской функции можно обратиться за нужными данными «на сервер», для этого мы создаем серверную процедуру и вызываем её из клиентской.

      Так яснее? 🙂

      Ответить

      • Непонятно мне следующее:
        я понимаю, что браузер исполняет некий javascript, сгенерированный на сервере 1С-ом.
        Они что, мой 1С код, помеченный как &НаКлиенте, реально переводят в javascript и шлют в браузер?
        Спасибо!

        Ответить

        • Скорее всего. Другого языка браузер не понимает )

          Ответить

        • Вообще, плохой. Про AJAX стоит почитать, PHP посмотреть. JavaScript — не единственный вариант создания интерактива в браузере. 1С в данном случае делает то же самое, что и PHP, Ruby (который с рельсами), Python + Django и так далее.

          Ответить

        • Андрей, ты — двоечник.

          Ответить

  3. «На клиенте есть доступ к следующим объектам:…общие модули, которые скомпилированы на сервере» — вроде дополнительно в свойствах модуля еще должна стоять галка «Вызов сервера»

    Ответить

  4. &НаСервереБезКонтекста
    «Крайне рекомендуется к использованию для оптимизации клиент-серверного взаимодействия.»
    В чем именно выражается оптимизация клиент-серверного взаимодействия? Желательно со сравнительным анализом, с реальными цифрами, показывающими эту саму оптимизацию.

    Ответить

    • И с шоколадным маслом. )) Директива &НаСервереБезКонтекста не передаёт на сервер состояние формы (не совсем так, но упрощённо — так): значения параметров формы, значения реквизитов, что-то ещё. Соответственно, эта директива применяется с параметрами функции/процедуры для её выполнения. Так как, можно работать и без параметров (и без возвращения результата), то вызов будет стопроцентово быстрым. С директивой же &НаСервере есть ряд скрытых параметров, которые платформа посылает сама (об этом точно написано в документации, но кто мы такие, тратить более двух минут на ответ на твой вопрос, на поиск ссылки … о, нашёл its.1c.ru). Успехов в поиске реальных цифр для сравнительного анализа двух редакторов MS Notepad и 1С:Предприятие. Не забудь опубликовать на открытом ресурсе, чтобы всем стало хорошо.

      Ответить

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

    Ответить

  6. Вопрос. А почему рекомендация использовать объемные вычисления на сервере? Вам не кажется, что лучше их на клиенте производить? Если 1000 пользователей запустят объемные вычисления на сервере, он ляжет. А у пользователей сейчас современные машины и сами в состоянии посчитать не тревожа сервер..

    Ответить

    • Потому что объемные вычисления обычно требуют объемных данных. И разных. На сервере программа обратится к СУБД с некоей периодичностью, что надо получит и обработает. А на клиента для этого нужно всю базу тянуть и для исключения коллизий от редактирования блокировать до конца вычислений.

      Клиент-серверная трёхзвенная архитектура появилась не от того, что клиенты медленные, а от того, что это — самый эффективный способ организовать одновременную работу множества пользователей. Ну и не гонять гигабайты трафика по сети каждому из них, а только то, что надо для показа конкретной картинки.

      Ответить

    • Если на предприятии есть 1000 пользователей, которые могут (имеют права) запустить «объёмные» вычисления, считай 1000 аналитиков и руководителей отделов, то у такого предприятия должно хватить денег на сервер, который не ляжет. У простого операциониста (коих легион) нет прав и и необходимости запускать «объёмные» вычисления.

      Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.