v8: Программирование для системы клиент-сервер в 1С 80 для чайников
Как правильно пользоваться разделением кода на клиентскую и серверную часть. | Автор статьи: Гений 1С | Редакторы: ZolotarevAA Последняя редакция №3 от 18.12.06 | |
Ключевые слова: клиент,сервер,язык,чайник
В 80 появилась возможность указывать, какая часть кода будет компилироваться для сервера, какая для клиента, какая - для обоих сразу.
Для общего модуля в свойствах можно указать, где будет копилироваться его код - на клиенте, сервере, или на обоих сразу.
В модулях объектов можно выделить участки кода, которые будут компилироваться на клиенте или на сервере.
#Если Клиент Тогда #КонецЕсли #Если Сервер Тогда #КонецЕсли
Для модулей форм нет смысла указывать такое разделение - формы выполняются только на клиенте.
Что означает разделение на клиентскую и серверную часть? Просто из большого куска программы (понимаем совокупность всех модулей) формируется подкусок для клиента и подкусок для сервера.
Часто начинающие программисты попадают на ошибку, когда они объявляют функцию в участке для клиента и эта функция недоступна на сервере. Таким образом при запуске программы у них выдается ошибка компиляции модуля - функция такая-то не определена.
На сервере не скомпилируется код, содержащий обращения к интерфейсу (Сообщить, Состояние, Вопрос) и на сервере не определены клиентские интерфейсные типы данных (Макет, Таблица и т.п.).
На сервере невозможна отладка, отладчик 1С не работает на сервере.
Для проверки правильности написания кода и разделения его по клиенту и серверу в конфигураторе существует пункт меню "Контроль конфигурации" - указав галки "Клиент" и "Сервер" можно проверить, правильно ли скомпилируется программа для клиента и для сервера.
Если функция или процедура скомпилирована и на сервере и на клиенте, то место ее выполнения совпадает с расположением выдывающей команды. Т.е. если она вызывается из процедуры, расположеной на сервере, то выполнится код, скомпилированный на сервере, а если вызывающая функция расположена на клиенте (например форма документа), то выполнится код, скомпилированный на клиенте.
Общие рекомендации такие:
* Функции общего назначения помещайте в блок для клиента и сервера. Если в такой функции встречаются клиентские вызовы, например Сообщить или Состояние, то берите их в скобки ЕслиКлиент.
* Обычно в модуле объекта нужно выделить только клиентские участки скобками ЕслиКлиент, например процедура печати документа. Остальные процедуры чаще всего носят общий характер.
Из опыта Гения 1С - когда у меня начался бардак с клиент-сервером, я поборол его так:
В основном все модули у меня были клиент-серверные.
В каждом модуле я сначала выделил скобками ЕслиКлиент явные интерфейсные функции.
Затем я пробежался по функциям общего назначения и выделил скобками ЕслиКлиент различные вызовы Сообщить, Состояние.
За несколько итераций вызова "Контроль конфигурации" я добился, чтобы не было ошибок клиент-сервера.