§ 0.5. Клиент и сервер: пользователь здесь, данные там

Откройте карточку поступления № 12, поменяйте в ней количество и закройте окно, не нажимая «Записать». Введённое исчезнет. Новички считают это придирчивостью программы, а на самом деле здесь видно её устройство — и вопрос, который за ним стоит: где находится то, что мы видим на экране, — у нас на компьютере или там, где хранится база?

1. Две стороны одной программы

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

Программа 1С устроена так же. Всё, что вы видите и трогаете, — окна, поля, кнопки — находится у вас. Данные — товары, документы, остатки — лежат в базе, за стеной. Сторона пользователя называется клиентом, сторона данных — сервером.

гдечто тамкто там работает
клиентокна, формы, всё видимое и трогаемоепользователь
сервербаза: данные и правила работы с нимиплатформа
между нимиописание формы, её данные и обращения к серверу—

Данные живут на сервере, пользователь — на клиенте. Между ними ходят описание формы, её данные и обращения к серверу; окно формы — на клиенте.

2. Строже: клиент и сервер — роли

Строже: клиент — часть платформы, которая показывает интерфейс и принимает действия пользователя; сервер — часть, которая работает с базой: читает из неё данные, проверяет их и записывает. Это роли, а не обязательно два разных компьютера.

вариант базыгде клиентгде сервер
файловая, как наши «Канцтовары»ваш компьютертот же компьютер, та же запущенная программа
клиент-серверная, как на предприятииваш компьютеротдельный сервер 1С

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

Клиент и сервер — роли, а не обязательно два компьютера.

Где увидеть, какой у вас вариант: в окне запуска выделите базу и нажмите «Изменить…». Файловая база записана там как папка на этом компьютере или в локальной сети, клиент-серверная — как адрес сервера 1С и имя базы на нём.

3. Что происходит, когда открывается форма

Откроем карточку поступления № 12 и проследим, кто что делает.

шагклиентсервер
1просит открыть поступление № 12
2читает документ из базы, готовит данные формы
3отправляет описание формы и её данные
4строит окно и показывает его

Окно рисует клиент — по описанию и с данными, которые прислал сервер. Описание формы — это её чертёж: какие на ней поля, в каком порядке, с какими надписями и кнопками; данные — то, что в этих полях стоит. Архивариус из нашего сравнения приносит только дело, а чертёж окна — отдельная бумага; кто её пишет — вопрос следующего параграфа. Отсюда первое практическое следствие: открытие формы — не мгновенное дело. Между щелчком и окном прошло обращение к серверу и ответ от него, и на медленной сети эта пауза заметна.

4. Что происходит, когда вы вводите и записываете

Теперь изменим в карточке количество и посмотрим, куда оно попадёт.

шагклиентсервер
1вы ввели в поле новое количествоничего не знает
2значение в данных формы, на экранев базе прежнее
3нажата «Записать»: данные уходят на сервер
4проверяет и записывает в базу
5получает ответ, окно обновляетсяв базе новое

Пока не нажата «Записать», новое значение живёт в данных формы, у клиента. В базе его нет, другие пользователи его не видят, и если закрыть окно, отказавшись сохранять, оно пропадёт. Это и есть ответ на вопрос, с которого начался параграф: введённое в поле не сохраняется само, потому что поле — у клиента, а база — у сервера.

Пока не нажата «Записать», новое значение живёт в данных формы и в базу не попадает.

5. Почему так устроено

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

клиент 1 ──┐
клиент 2 ──┼──► сервер ──► база
клиент 3 ──┘

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

6. «Форма ушла на сервер»: как говорят и как точнее

Разработчики говорят быстро: «форма ушла на сервер», «форма пришла с сервера». Образ удобный, но неточный, и разницу стоит видеть с самого начала.

как говоряткак точнее
форма ушла на серверформа обратилась к серверу и отправила ему свои данные
форма пришла с серверасервер прислал описание формы и данные, клиент построил окно
программа думаетклиент ждёт ответа сервера

Окно никуда не ходит: его строит и держит клиент. Путешествуют данные и обращения к серверу — разработчики называют их серверными вызовами. Эта поправка ещё пригодится в главе о списках.

7. В режиме Предприятия

Увидеть два клиента одной базы можно на одном компьютере: каждый запуск программы — отдельный клиент.

  1. Запустите «Канцтовары» в режиме Предприятия, а затем, не закрывая первое окно, — ещё раз. Теперь у вас два клиента одной базы.

  2. В первом окне откройте товар «Ручка шариковая» и замените артикул на «РУЧ-01-Т». Пока не записывайте.

  3. Во втором окне откройте тот же товар. Артикул — прежний, «РУЧ-01»: изменение живёт только в первом клиенте.

  4. В первом окне нажмите «Записать и закрыть». Во втором закройте карточку и откройте снова: теперь артикул новый.

  5. Верните товару прежний артикул «РУЧ-01» и запишите: дальше книга опирается на него.

Главное в одном абзаце

У программы 1С две стороны: клиент, где окна, поля и кнопки и где работает пользователь, и сервер, где лежит база и выполняется всё, что связано с данными. Это роли, а не обязательно два компьютера: в файловой базе обе живут в одной запущенной программе, на предприятии сервер — отдельная машина. Когда форма открывается, сервер читает данные и присылает клиенту описание формы и её данные, а окно строит клиент. Когда вы вводите значение, оно остаётся на клиенте и попадает в базу только после записи, поэтому введённое в поле не сохраняется само. Так устроено потому, что клиентов много, а база одна, и правду о данных держит сервер. Образ «форма ушла на сервер» неточен: окно остаётся у клиента, путешествуют данные и обращения к серверу.


Окно строит клиент — по описанию, которое прислал сервер. Но кто написал это описание? И почему в нём нет ни одной фразы вида «когда нажмут кнопку, сделай то-то»?

Контрольные вопросы

  1. Что находится на клиенте, а что — на сервере?
  2. Почему клиент и сервер называют ролями, а не компьютерами?
  3. Кто строит окно формы и из чего?
  4. Где находится новое значение, которое вы ввели в поле, но ещё не записали?
  5. Почему правду о данных держит сервер, а не каждый клиент?
  6. Что неточного во фразе «форма ушла на сервер»?

Упражнения

Два клиента. Повторите опыт из параграфа и для каждого шага запишите, где в этот момент находится артикул «РУЧ-01-Т»: только на первом клиенте, на сервере или уже у обоих клиентов.

Своё окошко. Найдите клиент и сервер в бытовой системе, которой не было в параграфе: банкомат и банк, касса и магазин, кассир и кухня в кафе. Что в ней ходит между сторонами? Где лежит «правда»?

Ловушка: «у нас нет сервера». Бухгалтер небольшой фирмы говорит: «У нас база файловая, на одном компьютере, сервера нет — значит, всё, что я ввожу, сохраняется сразу». В чём он ошибается дважды?

Где это происходит. Для каждого события скажите, где оно происходит — на клиенте или на сервере: окно карточки стало шире; из базы прочитаны строки поступления; в поле появилась набранная буква; документ записан в базу; пользователь переключился на другое открытое окно.

Ответы — в конце части.