Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамКлиент-серверное взаимодейс…

1С:Предприятие 8.2 /
Разработчикам /
Клиент-серверное взаимодействие и вопросы безопасности

Оглавление

Минимизация количества серверных вызовов

Запуск клиентского приложения

Открытие управляемой формы

Выполнение локальной команды управляемой формы

Выбор из справочника

Выполнение глобальной команды

Выполнение команды формирования отчета

Выполнение подбора элементов

См. также

 

1.1. Разработку управляемого приложения необходимо вести с контролем количества вызовов серверных процедур и функций из клиентского кода (серверных вызовов), а в некоторых случаях – также объем передаваемых данных между клиентом и сервером (трафик).

Общее количество серверных вызовов складывается из

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

1.2. Отдельно для режима с низкой скоростью соединения следует оптимизировать не только количество вызовов, но и объем передаваемых данных между клиентом и сервером (трафик). Отладку клиент-серверного взаимодействия в этом режиме работы рекомендуется проводить в режиме имитации задержек серверных вызовов.

Ниже рассмотрены типовые действия пользователя и даны рекомендации по организации клиент-серверного взаимодействия.

Запуск клиентского приложения

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

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

Пример:

// Фрагмент общего серверного модуля СтандартныеПодсистемыПереопределяемый с повторным использованием возвращаемых значений
Функция ПараметрыРаботыКлиента()
	Параметры = Новый Структура();
	Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая());
	// Инициализация других параметров, необходимых на клиенте при запуске приложения
	// Параметры.Вставить(имя параметра, значение параметра);
	Возврат Параметры;
 КонецФункции 

Пример клиентского кода, использующего функцию ПараметрыРаботыКлиента:

ИнформационнаяБазаФайловая = СтандартныеПодсистемыПереопределяемый. ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая;
Если ИнформационнаяБазаФайловая Тогда
// обработка этого случая в клиентском коде
//…

См. также: Использование значений, влияющих на поведение клиентского приложения

Открытие управляемой формы

3.1. В случае если открытие формы выполняется из кода, следует открывать форму за один вызов с помощью метода глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий - также ОткрытьФормуМодально). Для передачи параметров в форму следует использовать параметр этих методов Параметры.

3.2. При открытии формы не допускается выполнять обращений к серверу из кода модуля формы в обработчиках клиентских событий формы, таких как ПриОткрытии и ПриПовторномОткрытии. При необходимости обращения из них к серверным данным, следует размещать эти данные в реквизитах формы в ПриСозданииНаСервере.

Например, неправильно:

НастройкаПроксиСервера = СерверныйМодуль.НастройкаПроксиСервера();
ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", Новый Структура("Настройка", НастройкаПроксиСервера));

правильно:

ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера");

при этом получение значения константы выполнять в обработчике ПриСозданииНаСервере формы ПараметрыПроксиСервера.

Выполнение локальной команды управляемой формы

4.1. Выполнение локальной команды формы должно приводить не более чем к одному вызову сервера .

ТекущаяСтрока = Элемент.ТекущиеДанные; 
Если ТекущаяСтрока.ЭтоГруппа Тогда
	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = НСтр("ru = 'Выбор группы запрещен.'");
	Сообщение.Сообщить();
	Возврат;
КонецЕсли;

Выбор из справочника

4.2. В общем случае, при выборе из справочника допускается выполнять только один серверный вызов из кода, к которому приводит вызов метода глобального контекста ОткрытьФорму (или ОткрытьФормуМодально).

4.3. В случае если после выбора из справочника необходимо выполнить бизнес-логику, которую возможно отработать только на сервере, то допустимо выполнять ее за один дополнительный серверный вызов.

Выполнение глобальной команды

5.1. При выполнении глобальной команды допускается выполнять только один серверный вызов из кода. В случае если команда открывает форму, то этот вызов должен выполняться при вызове метода глобального контекста ОткрытьФорму (или ОткрытьФормуМодально).

Выполнение команды формирования отчета

6.1. При выполнении команды формирования отчета не допускается выполнять дополнительных серверных вызовов из кода конфигурации.

В частности, при открытии формы отчета не допускается выполнять обращений к серверу из кода модуля формы в обработчиках клиентских событий формы, таких как ПриОткрытии и ПриПовторномОткрытии.

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

&НаКлиенте 
Процедура ПриОткрытии(Отказ)
	ВывестиОтчет();
 КонецПроцедуры 

&НаСервере
Процедура ВывестиОтчет()
	// код по формированию отчета…
КонецПроцедуры

правильно:

Выполнение подбора элементов

7.1. Особенность клиент-серверного взаимодействия при выполнении подбора элементов состоит в необходимости передавать список выбранных элементов между формой объекта и формой подбора. При этом объем передаваемых данных может быть достаточно большим.

В этом случае не рекомендуется передавать потенциально большой массив данных в качестве параметра формы подбора. Потенциально большой массив данных, хранимый в форме подбора в параметре типа ДанныеФормыКоллекция, может оказаться на клиенте не полным за счет оптимизации работы управляемой формы. Как результат – для передачи параметра будет выполнено дополнительное "дочитывание" данных формы с сервера.

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

Проиллюстрируем методику использования формы подбора на примере подбора элементов справочников Товары в табличную часть Товары документа РасходТовара. (Из демонстрационной конфигурации по платформе 1С:Предприятие).

Открытие формы подбора из клиентского кода должно приводить не более чем к двум обращениям на сервер. С этой целью локальная команда открытия формы подбора в модуле формы документа РасходТовара помещает список товаров из табличной части во временное хранилище (первый вызов) и открывает форму подбора (второй вызов), передавая адрес временного хранилища:

&НаКлиенте
Процедура ОбработчикКомандыПодбора()
	АдресТоваровВХранилище = ПоместитьТоварыВХранилище();
	ПараметрыПодбора = Новый Структура("АдресТоваровДокумента, ВидЦен, Склад", АдресТоваровВХранилище, Объект.ВидЦен, Объект.Склад);
	ФормаПодбора = ОткрытьФорму("Документ.РасходТовара.Форма.ФормаПодбора", ПараметрыПодбора, ЭтаФорма);
КонецПроцедуры

&НаСервере
// Функция помещает список товаров во временное хранилище и возвращает адрес 
Функция ПоместитьТоварыВХранилище() 
	Возврат ПоместитьВоВременноеХранилище(Объект.Товары.Выгрузить(,"Товар,Цена,Количество"), УникальныйИдентификатор);
КонецФункции

Форма подбора получает список выбранных товаров из временного хранилища в обработчике ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	АдресТоваровДокумента = Параметры.АдресТоваровДокумента;
	Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровДокумента));КонецПроцедуры

Закрытие формы подбора должно приводить не более чем к двум обращениям на сервер. При закрытии форма подбора помещает список выбранных товаров во временное хранилище (первый вызов):

&НаКлиенте
Процедура ОКВыполнить()
	ЗаписатьПодборВХранилище();
	ВладелецФормы.ОбработатьПодбор();
	Закрыть();
КонецПроцедуры

&НаСервере
Процедура ЗаписатьПодборВХранилище() 
	ПоместитьВоВременноеХранилище(Товары.Выгрузить(), АдресТоваровДокумента);
КонецПроцедуры

Затем форма документа восстанавливает список товаров из временного хранилища (второй вызов на сервер):

&НаКлиенте
Процедура ОбработатьПодбор() Экспорт
	ПолучитьТоварыИзХранилища(АдресТоваровВХранилище); 
КонецПроцедуры

&НаСервере
Процедура ПолучитьТоварыИзХранилища(АдресТоваровВХранилище)
	Объект.Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровВХранилище));
КонецПроцедуры

См. также


Нас находят: присозданиинасервере 1с 8 2, 1с вызов серверных функций с клиента, 1с параметры выполнения команды, {ОбщаяФорма ФормаПодбора Форма(103)}: Значение не является значением объектного типа (ОбработатьПодбор) ВладелецФормы ОбработатьПодбор();, чем полезны серверные вызовы 1С, управляемые формы 1с параметры выполнения команды формы, Управляемое приложение ОткрытьФормуМодально как вернуть параметр, управляемая форма Объект Товары Загрузить данныеформыколлекции 1c8 2, серверные процедуры, Процедура приСозданиинасервере


Подписка на новости RSS

Мы на Facebook