Книга знаний

1С:Предприятие / Приемы программирования / Встроенный язык

Программирование для системы клиент-сервер в 1С 80 для чайников

Как правильно пользоваться разделением кода на клиентскую и серверную часть.Автор статьи: Гений 1С | Редакторы: ZolotarevAA, 1C-Nick
Последняя редакция №5 от 17.06.10 | История
URL: http://kb.mista.ru/article.php?id=218

Ключевые слова: клиент,сервер,язык,чайник


В 80 появилась возможность указывать, какая часть кода будет компилироваться для сервера, какая для клиента, какая - для обоих сразу.
Для общего модуля в свойствах можно указать, где будет копилироваться его код - на клиенте, сервере, или на обоих сразу.
В модулях объектов можно выделить участки кода, которые будут компилироваться на клиенте или на сервере.
#Если Клиент Тогда

#КонецЕсли


#Если Сервер Тогда

#КонецЕсли


Для модулей форм нет смысла указывать такое разделение - формы выполняются только на клиенте.

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

Часто начинающие программисты попадают на ошибку, когда они объявляют функцию в участке для клиента и эта функция недоступна на сервере. Таким образом при запуске программы у них выдается ошибка компиляции модуля - функция такая-то не определена.

На сервере не скомпилируется код, содержащий обращения к интерфейсу (Сообщить, Состояние, Вопрос) и на сервере не определены клиентские интерфейсные типы данных (Макет, Таблица и т.п.).

На сервере невозможна отладка, отладчик 1С не работает на сервере.

Для проверки правильности написания кода и разделения его по клиенту и серверу в конфигураторе существует пункт меню "Контроль конфигурации" - указав галки "Клиент" и "Сервер" можно проверить, правильно ли скомпилируется программа для клиента и для сервера.

Если функция или процедура скомпилирована и на сервере и на клиенте, то место ее выполнения совпадает с расположением выдывающей команды. Т.е. если она вызывается из процедуры, расположеной на сервере, то выполнится код, скомпилированный на сервере, а если вызывающая функция расположена на клиенте (например форма документа), то выполнится код, скомпилированный на клиенте.

Общие рекомендации такие:

* Функции общего назначения помещайте в блок для клиента и сервера. Если в такой функции встречаются клиентские вызовы, например Сообщить или Состояние, то берите их в скобки ЕслиКлиент.

* Обычно в модуле объекта нужно выделить только клиентские участки скобками ЕслиКлиент, например процедура печати документа. Остальные процедуры чаще всего носят общий характер.

Из опыта Гения 1С - когда у меня начался бардак с клиент-сервером, я поборол его так:

В основном все модули у меня были клиент-серверные.
В каждом модуле я сначала выделил скобками ЕслиКлиент явные интерфейсные функции.
Затем я пробежался по функциям общего назначения и выделил скобками ЕслиКлиент различные вызовы Сообщить, Состояние.
За несколько итераций вызова "Контроль конфигурации" я добился, чтобы не было ошибок клиент-сервера.

UPD В 8.1 Сообщить доступно для выполнения на сервере.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика