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

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

1с 8.3 ут 11.1
Есть внешняяобработка в ней идет обработка Документов(заказ клиента)
В ней модуль
Параметры1 =Новый Структура(«Ключ»,ЗаказОбъект);
Форма1 = ПолучитьФорму(«Документ.ЗаказКлиента.ФормаОбъекта»,Параметры1);
Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Форму получает при передаче

<Форма.Форма.Форма(409)>: Ошибка при вызове метода контекста (ЗаполнитьОбеспечениеВУстановленномПорядке)
Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘УправляемаяФорма’

Как я понял Основная проблема в том что я передаю Управляемую Форму на Сервер
&НаСервере
Функция ЗаполнитьОбеспечениеВУстановленномПорядке(ПорядокОбеспечения,ЗаказОбъект1,Форма1)
ЗаказОбъект = ЗаказОбъект1.ПолучитьОбъект();
ЭтаФорма1 = Форма1;
ДанныеДляОбеспечения = Документы.ЗаказКлиента.ПодготовитьДанныеДляОбеспечения(ЗаказОбъект, ЭтаФорма1, «СтрокиТовары»);
ТаблицаОбеспечения = ОбеспечениеСервер.ТаблицаОбеспечения(ДанныеДляОбеспечения, ПорядокОбеспечения);
ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения(
Объект, ЭтаФорма1, «СтрокиТовары», ТаблицаОбеспечения, ЗаказОбъект.ПараметрыУказанияСерий, ЗависимыеРеквизиты());

РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма1);
СтруктураИтогов = Новый Структура(«РазличныеСклады, ЕстьИзЗаказов»);
ОбойтиТаблицуОбновитьЗависимыеРеквизиты(СтруктураИтогов,ЭтаФорма1);

Возврат Новый Структура(«Ошибки, Оповещение», ДанныеДляОбеспечения.Ошибки, ТекстОповещения);

Что посоветуете как можно обойти или другой вариант реализации передачи формы?
Или как можно обратиться к форме например по УникальномуИндефикатору?
Если можно напишите с командами заранее БЛАГОДАРЕН

(0) НЕ НАДО передавать УФ на сервер

Клиент и сервер это 2 в одном флаконе в исполнении 1С, не важно что оно на одном компе к примеру работает, всегда лучше считать что оно раздельно пашет и сервер это там далеко куда надо отправлять данные и получать а не передавать млин формы на сервер

Если надо передать форму то нужно использовать специальные механизмы придуманные на этот случай (ЗначениеВРеквизитФормы и РеквизитФормыВЗначение)

но лучше просто передать данные из формы а не всю форму.

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

по-моему передавал не форму, а структуру с минимальным набором реквизитов

Источник

[ Наглядно о непонятном ] – Как работает серверный вызов в 1С

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

Это будет полезно начинающим разработчикам и тем, у кого есть пробелы в области клиент-серверного взаимодействия – всё объясним «на пальцах» 🙂

передача формы с клиента на сервер 1с. Line Breaker8. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-Line Breaker8. картинка передача формы с клиента на сервер 1с. картинка Line Breaker8. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Клиент-серверная архитектура заложена в платформе изначально – со времен «1С:Предприятие 8.0».

Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере.

Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере – другой. Клиент и сервер «общаются» между собой с помощью серверного вызова.

Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

Немного базовой теории

Перед тем, как перейти к содержательной части, договоримся о некоторых ограничениях:

Далее, освежим в памяти немного теории.

Директивы, в имени которых упоминается «Клиент», устанавливают ограничение на обращение к базе данных.

Процедуры или функции, написанные под директивой «Без контекста», не имеют доступа к контексту (данным) формы. Исходя из этой информации, легко представить ограничения директив по доступу к данным в виде следующей таблицы:

ДирективаДанные формыБаза данных
&НаКлиенте+
&НаСервере++
&НаСервереБезКонтекста+
&НаКлиентеНаСервереБезКонтекста

Опережая вопрос «Для чего же директива с самым длинным названием, если она ограничивает и использование контекста форм, и обращения к базе данных?», напомню: любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.

Отсюда делаем вывод: у методов, описанных под директивой «&НаКлиентеНаСервереБезКонтекста», единственным источником данных являются эти самые переданные параметры.

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

То есть из метода, описанного под директивой «&НаКлиенте», можно вызывать процедуры и функции, описанные под любой директивой. А вот «из-под» директивы «&НаСервереБезКонтекста» можно вызывать только то, что описано под директивой «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста».

Теперь про серверный вызов

Серверный вызов – это передача какой-то информации с клиентской части «1С:Предприятие 8» на серверную часть с целью вернуть обратно некий набор данных.

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

передача формы с клиента на сервер 1с. server call pict01 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict01 1. картинка передача формы с клиента на сервер 1с. картинка server call pict01 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

«Оу! При чём тут Библиотека?!» – спросите Вы.

передача формы с клиента на сервер 1с. server call pict02. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict02. картинка передача формы с клиента на сервер 1с. картинка server call pict02. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Обратите внимание, что доступ к базе данных есть только на серверной части, а соединение между клиентом и сервером имеет ограниченную пропускную способность. Это и неудивительно – ведь соединение между клиентской и серверной частью может быть установлено даже по нестабильному низкоскоростному каналу связи (например, посредством мобильного интернета).

Кроме этого, передача данных между клиентом и сервером возможна только посредством серверного вызова.

Но, для того чтобы перейти к основной теме данной статьи, необходимо сначала разобраться – где будет выполняться программный код, написанный под определенными директивами. То есть на какой части приложения «1С:Предприятие 8» будут доступны процедуры и функции, описанные под директивами «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста»:

передача формы с клиента на сервер 1с. server call pict03. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict03. картинка передача формы с клиента на сервер 1с. картинка server call pict03. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Видим, что на стороне клиента у нас будут доступны процедуры и функции, написанные под двумя директивами из четырёх, а на стороне сервера – под тремя из четырёх.

Сразу возникают вопросы: «Зачем такое многообразие и чем оно полезно?», «Как метод, описанный под директивой «&НаКлиентеНаСервереБезКонтекста» может выполняться и на клиенте, и на сервере?».

Сейчас мы постараемся понять особенности работы системы при использовании директив и почему необходимо уметь правильно использовать каждую из существующих директив компиляции.

И в этом нам помогут наши новые друзья, знакомьтесь!

передача формы с клиента на сервер 1с. server call pict04. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict04. картинка передача формы с клиента на сервер 1с. картинка server call pict04. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

передача формы с клиента на сервер 1с. server call pict05. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict05. картинка передача формы с клиента на сервер 1с. картинка server call pict05. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

передача формы с клиента на сервер 1с. server call pict06. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict06. картинка передача формы с клиента на сервер 1с. картинка server call pict06. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Итак, давайте рассмотрим несколько особенностей работы программного кода в «1С:Предприятие 8», написанного под разными директивами.

Действие 1. Открытие пользователем формы с данными.

передача формы с клиента на сервер 1с. server call pict07 4. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict07 4. картинка передача формы с клиента на сервер 1с. картинка server call pict07 4. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

передача формы с клиента на сервер 1с. server call pict08 2. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict08 2. картинка передача формы с клиента на сервер 1с. картинка server call pict08 2. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Действие 2. Получение из открытой Пользователем формы дополнительных данных из Базы данных.

передача формы с клиента на сервер 1с. server call pict09 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict09 1. картинка передача формы с клиента на сервер 1с. картинка server call pict09 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Получение этих данных может быть описано под двумя директивами – «&НаСервере» и «&НаСервереБезКонтекста». Рассмотрим оба случая.

Явление 1. Директива «&НаСервере»

передача формы с клиента на сервер 1с. server call pict10 6. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict10 6. картинка передача формы с клиента на сервер 1с. картинка server call pict10 6. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

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

Явление 2. Директива «&НаСервереБезКонтекста»

передача формы с клиента на сервер 1с. server call pict11 5. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict11 5. картинка передача формы с клиента на сервер 1с. картинка server call pict11 5. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

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

Из примеров видно, что далеко не всегда оправдано указание директивы компиляции «&НаСервере» с точки зрения использования контекста (данных) формы на сервере.

Если возможно решить возникшую задачу путём отправки на сервер только определённого набора данных, то надо эту возможность использовать и описывать метод под директивой «&НаСервереБезКонтекста». Это позволит уменьшить нагрузку на серверный вызов, а также не занимать сервер обработкой и хранением ненужной в текущий момент информации.

До этого момента при каждом изменении свойства «Видимость» происходил серверный вызов, как при использовании директивы «&НаСервере».

Но использование директивы «&НаСервереБезКонтекста» не является панацеей. Помимо нагрузки на серверный вызов, всегда необходимо задумываться ещё над одним параметром.

Действие 3. Обработка данных табличной части формы с получением дополнительной информации из Базы данных.

передача формы с клиента на сервер 1с. server call pict12 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict12 1. картинка передача формы с клиента на сервер 1с. картинка server call pict12 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

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

Мы уже знаем – лучше использовать директиву «&НаСервереБезКонтекста».

передача формы с клиента на сервер 1с. server call pict13 2. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict13 2. картинка передача формы с клиента на сервер 1с. картинка server call pict13 2. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

передача формы с клиента на сервер 1с. server call pict14 2. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict14 2. картинка передача формы с клиента на сервер 1с. картинка server call pict14 2. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Явление 2. Предварительная обработка табличной части на стороне клиента с целью подготовки требуемых к обработке на сервере данных и «упаковки» их в набор параметров. Затем передача этого набора на сервер для получения дополнительной информации из базы данных.

Используем всё ту же директиву «&НаСервереБезКонтекста».

передача формы с клиента на сервер 1с. server call pict15 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict15 1. картинка передача формы с клиента на сервер 1с. картинка server call pict15 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Большое количество текущих серверных вызовов может свидетельствовать о неоптимальном программном коде.

Избегайте создания серверных вызовов внутри цикла. Подготовьте набор параметров и единожды выполните его передачу для обработки на сервер. Если предполагается сложная обработка большого количества данных формы – передайте её полностью на сервер (при помощи директивы «&НаСервере») и выполните все действия на стороне сервера.

С директивой «&НаСервереБезКонтекста» вроде бы разобрались. Она нужна для того, чтобы уменьшить объем информации, передаваемой в рамках одного серверного вызова. Дополнительно разобрались с количеством текущих серверных вызовов – необходимо стремиться к их минимизации.

Давайте теперь попробуем разобраться, для чего нужна директива «&НаКлиентеНаСервереБезКонтекста».

Действие 4. Выполнение обработки данных.

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

передача формы с клиента на сервер 1с. server call pict16 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict16 1. картинка передача формы с клиента на сервер 1с. картинка server call pict16 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Та-дам!

передача формы с клиента на сервер 1с. server call pict17. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict17. картинка передача формы с клиента на сервер 1с. картинка server call pict17. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Для копирования у нас есть ксерокс. Но куда его поставить? На сторону клиента или сервера? Под какой директивой его разместить?

Как было озвучено ранее – любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.

Давайте для начала попробуем разместить копировальный аппарат на стороне клиента. Для этого описываем процедуру или функцию «Ксерокс» под директивой «&НаКлиенте». Тогда процесс клиентской части в любой момент сможет без проблем обратиться к ней и все действия будут выполнены в соответствии с программным кодом.

Но что произойдёт, если потребность в копировании возникнет на стороне сервера? Например, для подготовки данных, передаваемых на сторону клиента, потребуется сделать копию? Напомню – процесс серверной части не имеет возможности самостоятельно инициировать клиентские вызовы.

передача формы с клиента на сервер 1с. server call pict19 2. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict19 2. картинка передача формы с клиента на сервер 1с. картинка server call pict19 2. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Получается, что использовать директиву «&НаКлиенте» неправильно, а директиву «&НаСервере», как мы изучили ранее – нежелательно. Давайте посмотрим поведение системы при использовании директивы «&НаСервереБезКонтекста».

передача формы с клиента на сервер 1с. server call pict20 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict20 1. картинка передача формы с клиента на сервер 1с. картинка server call pict20 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Вроде бы результат достигнут – и с сервера, и с клиента доступно копирование. Но для того, чтобы получить копию данных, используемых на клиенте, приходится делать серверный вызов. А это опять ведет к лишней нагрузке на соединение и временным затратам.

Избавиться от излишней передачи на сервер при сохранении возможности копирования на клиенте и на сервере можно при помощи директивы «&НаКлиентеНаСервереБезКонтекста».

передача формы с клиента на сервер 1с. server call pict21 1. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-server call pict21 1. картинка передача формы с клиента на сервер 1с. картинка server call pict21 1. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Не углубляясь в детали, отметим, что метод, описанный под данной директивой управления, создаётся в двух копиях – и на стороне клиента, и на стороне сервера. Это позволяет выполнить необходимые действия там, где появилась потребность в них (клиент/сервер), без лишних серверных вызовов.

С точки зрения выполнения программы результат будет одинаков. Но объяснение «почему так не надо делать» – это уже совершенно другая тема…

Вместо заключения

В данной статье мы на наглядных примерах рассмотрели влияние различных директив компиляции на такое явление системы «1С:Предприятие 8», как серверный вызов. Как видно, основная причина для выбора правильной директивы – производительность транспортировки данных между клиентской и серверной частью.

Придерживайтесь при разработке следующих правил:

Учитывайте потребность в доступности тех или иных видов данных, обоснованность передачи управления и не стесняйтесь при необходимости дробить процедуры и функции. И будет Вашему серверному вызову всегда легко, а Вы от пользователей Вашей программы получите «молчаливую благодарность»!

Программист Иван при доработке 1С на своём предприятии сделал ошибку в выборе директивы компиляции. Из-за неё длительность одного из серверных вызовов была больше возможной на полсекунды.

Пользователей, применяющих этот функционал, – 25 человек, и каждый из них за рабочий день в среднем совершает 110 таких операций. Всего впустую за рабочий месяц потрачено 28875 секунд (21 рабочий день * 25 человек * 110 операций * 0,5 секунды) = 8,02 часов.

Иван, каково тебе осознавать, что за месяц ты задолжал своему предприятию целый рабочий день?

Об авторе

передача формы с клиента на сервер 1с. PavelVanin. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-PavelVanin. картинка передача формы с клиента на сервер 1с. картинка PavelVanin. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);

Автор статьи – Павел Ванин

Источник

РеКС — друг в мире компьютеров

передача формы с клиента на сервер 1с. p2248. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-p2248. картинка передача формы с клиента на сервер 1с. картинка p2248. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);Управляемые формы — это интерфейсная часть Управляемого приложения, предназначенная главным образом для отображения на Клиенте данных, которые находятся на Сервере, поэтому эти данные, когда ими оперируют в форме на Клиенте несколько отличаются от того, как ими оперируют на Сервере.Управляемое приложение пришло на смену Обычному приложению, в котором программный код исполнялся в однородной среде, контролирующей одновременно интерфейс и данные приложения, что не позволяло реализовать эффективную удаленную и распределенную работу большого числа пользователей одновременно.

Эта публикация посвящена нюансам программного управления клиентским интерфейсом на управляемых формах.

Клиент-серверная архитектура

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

Диалоговые окна и Управляемые формы

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

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

Простые конструкции

Проверка значений реквизитов формы

Проверка отсутствия значения в реквизите в модуле формы

Перечисления

Перечисления полноценно доступны только &НаСервере в коллекции объектов метаданных Перечисления, которое недоступно &НаКлиенте и в запросе непосредственно, а только через

Изменения внесенные в данные формы программно не контролируются формой, поэтому для управления сохранением внесенных изменений необходимо устанавливать свойство Модифицированность формы

Формы

В конфигураторе набор отображаемых свойств формы существенно зависит от реквизита с установленным свойством Основной реквизит.

Передача данных управляемой формы между Сервером и Клиентом

передача формы с клиента на сервер 1с. p2094 cd. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-p2094 cd. картинка передача формы с клиента на сервер 1с. картинка p2094 cd. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);Ограничения при передаче данных в управляемую форму

Оптимизация ресурсоемкости передачи данных между Сервером и Клиентом

Когда форма выполняет серверный вызов процедуры &НаСервере, все данные формы упаковываются и передаются на Сервер, а в сложной форме таких данных может быть много, и это приводит к затратам ресурсов и Клиента, и Сервера. Для снижения затрат ресурсов при серверных вызовах везде, где это возможно, следует использовать процедуры &НаСервереБезКонтекста и параметры передаваемые по значению.

В обычном случае реквизит формы сложного типа обрабатывается на Сервере только после преобразования в значение, а затем значение необходимо преобразовать обратно к реквизиту. Выполняются эти преобразования доступными только &НаСервере процедурами:

При оптимизации серверного вызова для выполнения процедур &НаСервереБезКонтекста используется другая пара процедур:

Важно учесть, что выполнять возврат из серверного вызова допустимо не для любого реквизита формы, для Диаграммы это допустимо, а для ТаблицыЗначений, ДереваЗначений нет и приведет к ошибке « Нельзя изменять поле, содержащее объект данных формы «. В таких случаях для серверного вызова в параметре придется использовать копию реквизита, а после вызова для обновления реквизита придется воспользоваться функцией КопироватьДанныеФормы().

Динамический список

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

передача формы с клиента на сервер 1с. p2248 hl. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-p2248 hl. картинка передача формы с клиента на сервер 1с. картинка p2248 hl. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);Режим отображения иерархии в динамическом списке

Пример кода открытия формы с установкой необходимого режима отображения списка:

Это замечание имеет значение не только для управляемых форм. Любая форма с динамическим списком Подчиненного справочника без отбора элементов по владельцу отображает его в режиме Список, независимо от установленного программно или в конфигураторе режима отображения (иерархия групп отображаться корректно не будет)!

Программное управление порядком сортировки динамического списка

Код установки сортировки по ДатаРеализации и Клиент:

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

передача формы с клиента на сервер 1с. p2248 dls. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-p2248 dls. картинка передача формы с клиента на сервер 1с. картинка p2248 dls. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);Отбор данных в динамическом списке

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

Отбор в основной таблице

Для отбора следует добавить элемент отбора в коллекцию .Отбор.Элементы, как показано на примере:

Отбор в произвольном запросе

Таблица значений

передача формы с клиента на сервер 1с. draft. передача формы с клиента на сервер 1с фото. передача формы с клиента на сервер 1с-draft. картинка передача формы с клиента на сервер 1с. картинка draft. 1с 8.3 ут 11.1 Есть внешняяобработка в ней идет обработка Документов(заказ клиента) В ней модуль Параметры1 =Новый Структура("Ключ",ЗаказОбъект); Форма1 = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта",Параметры1); Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение,ЗаказОбъект,Форма1);Для отображения в управляемой форме табличных данных, в форме должен быть создан реквизит типа ТаблицаЗначений, который будет доступен и на Клиенте, и на Сервере, при этом функционально будет несколько отличаться.

Важно! Строковое значение используется для поиска по подстроке

Дерево значений

Для отображения в управляемой форме иерархической структуры в форме должен быть создан реквизит типа ДеревоЗначений, который может отображаться на форме элементами типа Таблица. В списке реквизитов формы реквизит отображается типом (ДеревоЗначений) в скобках, потому что он проявляет амбивалентность. Реквизит дерева создается и обладает типом ДеревоЗначений на Сервере, но на Клиенте он имеет тип ДанныеФормыДерево, эти два типа отличаться по составу свойств, методов и типов хранимых данных.

При вызове методов формы &НаСервере xdto-преобразование реквизита от типа к типу выполняется прозрачно, но при передаче в возвращаемых параметра серверных вызовов необходимо применять преобразование функциями ЗначениеВРеквизитФормы(), ЗначениеВДанныеФормы(), РеквизитФормыВЗначение(), ДанныеФормыВЗначение().

Типы, свойства и методы для работы с ДеревоЗначений &НаКлиенте и &НаСервере

&НаКлиенте&НаСервере
Тип ДереваДанныеФормыДеревоДеревоЗначений
колонки.Колонки
корневые строки.ПолучитьЭлементы().Строки
методыСкопировать()
Тип коллекции строкДанныеФормыКоллекцияЭлементовДереваКоллекцияСтрокДереваЗначений
Ссылка на владельца коллекции..Родитель
Изменение состава..Добавить(), Вставить(), Сдвинуть(), Удалить(), Очистить()
Управление порядком..Сортировать()
Анализ содержания..Итог(), Количество()
..ВыгрузитьКолонку(), ЗагрузитьКолонку()
..
..
..
Тип строкиДанныеФормыЭлементДереваСтрокаДереваЗначений
Коллекция строк верхнего уровня..Родитель
Коллекция строк нижнего уровня..Строки
..Владелец()
Свойства строки.ПолучитьИдентификатор()*.Уровень()*
Тип коллекции колонокКоллекцияКолонокДереваЗначений
..
..
..
..
Тип колонкиКолонкаДереваЗначений
..
..
..
..
Тип элемента формы
.
.
.
.

&НаСервере

Для работы с Деревом значений на Сервере применяется более функциональная иерархия типов работы со строками и колонками:

Табличный документ

Диаграмма

. Для отображения в управляемой форме иерархической структуры, в форме должен быть создан реквизит типа ДеревоЗначений, который будет доступен и на Клиенте, и на Сервере, при этом функционально будет несколько отличаться.

Блокировка данных

Открытие форм

Форма нового объекта с заполнением

Новый объект (справочника, документа) может быть создан в форме до того, как он будет записан в ИБ (а возможно, не будет записан вовсе). При этом форме можно передать данные для начального заполнения. Общие свойства создаваемого объекта задаются структурой ПараметрыФормы, с предопределенным набором свойств, среди которых есть свойство ЗначенияЗаполнения типа структура, задающая значения для заполнения реквизитов объекта (ключи свойств должны соответствовать именам реквизитов заполняемого объекта):

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *