Наочно про незрозуміле

У цій статті ми покажемо, як взаємодіють клієнтська і серверна частини платформи і які є особливості у використанні директив компіляції.

Це буде корисно початківцям розробникам і тим, у кого є прогалини в області клієнт-серверної взаємодії - все пояснимо «на пальцях» :)

Клієнт-серверна архітектура закладена в платформі спочатку - з часів «1С: Підприємство 8.0».

Однак при розробці на 8.0 і 8.1 про поділ коду на клієнтську і серверну частину можна було не турбуватися. оскільки на клієнті (на товстому клієнті) був доступний той же функціонал, що і на сервері.

Все змінилося з виходом платформи «1С: Підприємство 8.2», коли з'явився тонкий клієнт. Тепер на клієнті доступний один функціонал, на сервері - інший. Клієнт і сервер «спілкуються» між собою за допомогою серверного виклику.

Звичайно, це ускладнило процес розробки, але з іншого боку - можна створювати більш оптимальні (швидкі) рішення, оскільки всі складні завдання виконуються на сервері.

Трохи базової теорії

Перед тим, як перейти до змістовної частини, домовимося про деякі обмеження:

  • Ми маємо на увазі, що Ви знаєте про існування чотирьох директив компіляції, доступних в модулях форми: «# 038; НаКліенте», «# 038; НаСервере», «# 038; НаСервереБезКонтекста» і «# 038; НаКліентеНаСервереБезКонтекста».
  • Всі приклади будуть спиратися на роботу «1С: Підприємство 8» в клієнт-серверному режимі. Файловий варіант по суті є емуляцією клієнт-серверного режиму, з невеликими відхиленнями (для даної статті це не критично)
  • В рамках цього матеріалу розглядається виключно взаємодія клієнта і сервера 1С. Робота з базою даних, перетворення даних і інші нюанси роботи системи - це теми інших статей.

Далі, освіжимо в пам'яті трохи теорії.

Директиви, в імені яких згадується «Клієнт», встановлюють обмеження на звернення до бази даних.

Процедури або функції, які перебувають під директивою «Без контексту», не мають доступу до контексту (даними) форми. Виходячи з цієї інформації, легко уявити обмеження директив щодо доступу до даних у вигляді такої таблиці:

Випереджаючи питання «Для чого ж директива з найдовшою назвою, якщо вона обмежує і використання контексту форм, і звернення до бази даних?», Нагадаю: будь-яка процедура і функція підтримує обробку інформації, переданої в неї в якості параметрів.

Звідси робимо висновок: у методів, описаних під директивою «# 038; НаКліентеНаСервереБезКонтекста», єдиним джерелом даних є ці самі передані параметри.

Не варто забувати і про доступність виклику одних процедур і функцій з інших. Для цього варто запам'ятати, що можна викликати тільки ті процедури і функції, які знаходяться під однойменною (з батьківським методом) директивою або під директивою, що знаходиться нижче (чим у батьківського методу) згідно зі списком:

  • # 038; НаКліенте
  • # 038; НаСервере
  • # 038; НаСервереБезКонтекста
  • # 038; НаКліентеНаСервереБезКонтекста.

Тобто з методу, описаного під директивою «# 038; НаКліенте», можна викликати процедури та функції, описані під будь-який директивою. А ось «з-під» директиви «# 038; НаСервереБезКонтекста» можна викликати тільки те, що описано під директивою «# 038; НаСервереБезКонтекста» або «# 038; НаКліентеНаСервереБезКонтекста».

Тепер про серверний виклик

Серверний виклик - це передача якоїсь інформації з клієнтської частини «1С: Підприємство 8» на серверну частину з метою повернути назад якийсь набір даних.

«Оу! При чому тут Бібліотека ?! »- запитаєте Ви.

Все дуже просто:

Зверніть увагу, що доступ до бази даних є тільки на серверної частини, а з'єднання між клієнтом і сервером має обмежену пропускну здатність. Це й не дивно - адже з'єднання між клієнтської і серверної частиною може бути встановлено навіть по нестабільного низкоскоростному каналу зв'язку (наприклад, за допомогою мобільного інтернету).

Крім цього, передача даних між клієнтом і сервером можлива тільки за допомогою серверного виклику.

Але, для того щоб перейти до основної теми даної статті, необхідно спочатку розібратися - де буде виконуватися програмний код, написаний під певними директивами. Тобто на якій частині додатка «1С: Підприємство 8» будуть доступні процедури і функції, описані під директивами «# 038; НаКліенте», «# 038; НаСервере», «# 038; НаСервереБезКонтекста» і «# 038; НаКліентеНаСервереБезКонтекста»:

Бачимо, що на стороні клієнта у нас будуть доступні процедури і функції, написані під двома директивами з чотирьох, а на стороні сервера - під трьома з чотирьох.

Відразу виникають питання: «Навіщо таке різноманіття і чим воно корисне?», «Як метод, описаний під директивою« # 038; НаКліентеНаСервереБезКонтекста »може виконуватися і на клієнті, і на сервері?».

Зараз ми постараємося зрозуміти особливості роботи системи при використанні директив і чому необхідно вміти правильно використовувати кожну з існуючих директив компіляції.

І в цьому нам допоможуть наші нові друзі, знайомтеся!

Це процес серверної частини програми «1С: Підприємство 8». Він існує на сервері 1С. Знає, які клієнтські сеанси в даний момент запущені, але самостійно не може ініціювати взаємодію з ними. Працює з клієнтською частиною тільки через отриманий від неї серверний виклик.

А це серверний виклик. Як було сказано вище, він породжується процесом клієнтської частини і покликаний «прислужувати» йому. Він передає запити з боку клієнта на сторону сервера, а також займається транспортуванням даних з клієнта на сервер і назад.

Отже, давайте розглянемо кілька особливостей роботи програмного коду в «1С: Підприємство 8», написаного під різними директивами.

Дія 1. Відкриття користувачем форми з даними.

У момент натискання Користувачем кнопки відкриття форми з інтерфейсу, відбувається передача керування на Сервер. За переданими параметрами виходять необхідні для побудови дані з БД і відбувається формування контексту форми, який потім відправляється на клієнтську частину. У користувача на екрані відображається запитана форма.

Дія 2. Отримання з відкритою Користувачем форми додаткових даних з бази даних.

Отримання цих даних може бути описано під двома директивами - «# 038; НаСервере» і «# 038; НаСервереБезКонтекста». Розглянемо обидва випадки.

Явище 1. Директива «# 038; НаСервере»

При виклику процедури або функції під директивою «# 038; НаСервере» з форми з боку клієнта відбувається «упаковка» всього контексту форми і відправка його на сторону сервера.

Після виконання методу на сервері, весь цей «пакет» транспортується назад. Таким чином, форма з усіма елементами і даними двічі проходить через найвужче місце системи.

Явище 2. Директива «# 038; НаСервереБезКонтекста»

При виклику процедури або функції під директивою «# 038; НаСервереБезКонтекста» з форми з боку клієнта відбувається передача на сторону сервера тільки тих даних, які були вказані в якості параметрів. Зворотно ж передається тільки необхідна інформація в уже підготовленому вигляді.

Таким чином, серверний виклик не несе зайвого навантаження, і для передачі даних між клієнтом і сервером буде потрібно менше ресурсів.

З прикладів видно, що далеко не завжди виправдано вказівку директиви компіляції «# 038; НаСервере» з точки зору використання контексту (даних) форми на сервері.

Якщо можливо вирішити задачу шляхом відправки на сервер тільки певного набору даних, то треба цю можливість використовувати і описувати метод під директивою «# 038; НаСервереБезКонтекста». Це дозволить зменшити навантаження на серверний виклик, а також не позичати сервер обробкою і зберіганням непотрібної в поточний момент інформації.

До речі, саме тому до версії платформи 8.3.7.1759 на складних формах для управління видимістю елементів рекомендувалося використовувати панелі зі сторінками, а не властивість «Видимість». Тільки починаючи з цього релізу відпрацювання зміни видимості елементів стала виконуватися на стороні клієнта.

До цього моменту при кожній зміні властивості «Видимість» відбувався серверний виклик, як при використанні директиви «# 038; НаСервере».

Але використання директиви «# 038; НаСервереБезКонтекста» не є панацеєю. Крім навантаження на серверний виклик, завжди необхідно замислюватися ще над одним параметром.

Крок 3. Обробка даних табличній частині форми з отриманням додаткової інформації з Бази даних.

Явище 1. Построчная обробка табличній частині на стороні клієнта з організацією серверного виклику для отримання додаткової інформації з бази даних.

Ми вже знаємо - краще використовувати директиву «# 038; НаСервереБезКонтекста».

Цікаве виклад, однозначно +++, але звичайно для себе звичайно нічого нового не знайшов.
Вважаю що 1С сама винна в тому що зробив такий підхід, що 95% користується директивою НаСервере. Їм як мінімум треба було б поміняти значень директив, тобто НаСервере - щоб виконувалося без контексту (і створювалося за замовчуванням, а директива НаСеререСКонтекстом - вже з контекстом, тоді вільно / мимоволі але більшість розробників б стало більш правильно використовувати їх.

Всі ці контексти - це винахід 1С, як зазвичай. Нормальні середовища розробки самі визначають, де виконуватися коду. Клієнт-сервер - це низький рівень, навіщо туди 1С з надбудови над мовою верхнього рівня полізла - незрозуміло.

  • Наочно про незрозуміле
  • інтеграція 1С / налагодження запитів / проведення документів / месенджер в 1С / індикація операцій ">
    Наочно про незрозуміле
  • Стартував перший потік курсу «Об'ємно-календарне планування в 1С: ERP 2, КА 2 і УТ 11» ">
  • Пільгова ціна на курс «Об'ємно-календарне планування в 1С: ERP 2, КА 2 і УТ 11» скасована ">
  • STEM-навчання для дітей і знижки на курси по 1С для тих, хто постарше :) ">
    Наочно про незрозуміле

    Схожі статті