База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как программно выполнить запрос с клиента на сервере в 1С? › Ответ в теме: Как программно выполнить запрос с клиента на сервере в 1С?
Чтобы программно создать и выполнить запрос с клиентской части на сервере в 1С (клиент-серверный режим), нужно использовать объект Запрос и обеспечить выполнение именно на сервере. Для этого:
1. Создаёте объект Запрос в клиентском коде.
2. Пишете текст запроса.
3. Выполняете запрос — он автоматически будет выполнен на сервере, если база работает в клиент-серверном режиме.
4. Получаете результат.
Пример кода на клиенте:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Создаем объект запроса Запрос = Новый Запрос; // Текст запроса (пример) Запрос.Текст = |ВЫБРАТЬ | Контрагенты.Ссылка КАК Контрагент, | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Активность = ИСТИНА; // Выполняем запрос (в клиент-серверном режиме запрос выполнится на сервере) Результат = Запрос.Выполнить(); // Получаем выборку Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Контрагент + " - " + Выборка.Наименование); КонецЦикла; |
Важно:
— В клиент-серверном режиме 1С сама направляет запрос на сервер, если он создаётся и выполняется на клиенте.
— Если нужно явно выполнить код на сервере из клиентского контекста, можно использовать серверные процедуры (Общего модуля с атрибутом «НаСервере») или серверные методы объекта.
— Запросы всегда выполняются на сервере, если вызываются в серверном контексте. Если вызываются на клиенте, 1С сама перенаправит их на сервер.
Если хотите программно создать запрос и выполнить его именно на сервере из клиентского кода, лучше оформить вызов через серверную процедуру:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// В общем модуле с атрибутом "НаСервере" Процедура ПолучитьКонтрагентов() Экспорт Запрос = Новый Запрос; Запрос.Текст = |ВЫБРАТЬ | Контрагенты.Ссылка КАК Контрагент, | Контрагенты.Наименование |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Активность = ИСТИНА; Результат = Запрос.Выполнить(); Возврат Результат.Выгрузить(); КонецПроцедуры |
И на клиенте:
|
1 |
Результат = ОбщиеМодули.МодульСерверный.ПолучитьКонтрагентов(); |
Так вы гарантируете выполнение запроса на сервере.
Рекомендую посмотреть здесь:
https://its.1c.ru/db/v83doc#bookmark:dev:TI000000113
https://infostart.ru/public/1113459/ — примеры работы с запросами в клиент-серверном режиме