к каким объектам базы данных можно обратиться на клиенте

Как получить реквизит от ссылочного значения на клиенте

На стороне клиента нельзя обратиться к данным базы, в т.ч. получить реквизит от ссылочного значения. Рассмотрим как все же можно решить эту задачу.

На стороне клиента код вида

приведет к ошибке. Такие конструкции возможны только на сервере.

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

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

Внимание!

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

Рассмотрим пример: на форме документа рядом с полем ввода контрагента должен выводиться его ИНН. Для этого перенесем реквизит ИНН на форму:

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

В пользовательском режиме при указании контрагента, его ИНН будет автоматически отображен на форме. Никакого программирования в этом случае не потребовалось.

Остались вопросы?
Спросите в комментариях к статье.

Источник

Как получить доступ к реквизитам объекта?

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

Получить массив реквизитов объекта можно при помощи самого объекта:

Получив массив реквизитов, можно организовать Цикл для просмотра имен реквизитов:

Для того, чтобы получить значения реквизитов объекта вообще говоря надо обратиться с запросом к БД, типа:

В запрос надо передать ссылку на объект и имя реквизита. Запрос вернет таблицу или выборку со значением реквизита.

Поскольку в функцию ПолучитьЗначенияРеквизитов() во второй параметр надо передать структуру, то мы создали структуру и организовали Цикл ее инициализации данными из массива имен реквизитов объекта. Возвращает функция так же структуру (ключ-значение), с которой удобно работать. Для просмотра этой структуры можно воспользоваться циклом, либо вызвать функцию СканПростойСтруктуры(), которой передать структуру для просмотра.

Если исследуемый объект использует так же еще и общие реквизиты, и их необходимо найти, то можно воспользоваться функцией МассивИменРеквизитовОбъекта(), которая находит не только реквизиты объекта но и общие и даже стандартные реквизиты, которые использует объект:

Тогда программа будет выглядеть так:

Как получить значение отдельного реквизита объекта?

Иногда необязательно получать значения всего массива реквизитов. Программист как правило знает имя реквизита, значение которого необходимо получить. К отдельному реквизиту объекта можно обратиться просто по его имени:

Получить значение этого реквизита можно так же через запрос, написанный специально для этого реквизита. Но можно воспользоваться все той же функцией ПолучитьЗначенияРеквизитов(). Цикл для настройки структуры в этом случае не нужен, так как нам надо найти значение всего одного элемента:

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

Как найти имена реквизитов в таб части объекта?

Функция определяет есть ли реквизит в таб части документа:

Сообщить имя реквизитов таб части:

Как найти значение всех реквизитов всех таб частей документа через запрос

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

Результат для документа «Реализация товаров услуг»:

Имя таб части: Товары
///Функция ПоказатьТаблицу///
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Вентилятор настольный
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры: Н-908, С-890 от 01.01.2003
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 445,5
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 450
15 Склад: Магазин «Бытовая техника»
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 3
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
0 ЕдиницаИзмерения: шт
1 ЕдиницаИзмеренияМест:
2 Качество: Новый
3 Количество: 1
4 КоличествоМест: 0
5 Коэффициент: 1
6 Номенклатура: Набор вентиляторов
7 ПроцентСкидкиНаценки: 0
8 СерияНоменклатуры:
9 СпособСписанияОстаткаТоваров: Со склада
10 СтавкаНДС: Без НДС
11 Сумма: 1948,32
12 СуммаНДС: 0
13 ХарактеристикаНоменклатуры:
14 Цена: 1968
15 Склад: Магазин «Бытовая техника»
16 ПроцентАвтоматическихСкидок: 1
17 УсловиеАвтоматическойСкидки: По виду дисконтных карт
18 ЗначениеУсловияАвтоматическойСкидки: Серебряная карта
19 КлючСтроки: 4
20 КлючСвязи: 0
21 ЗаказПокупателя: Заказ покупателя ТД000000001 от 08.06.2008 12:00:00
///Конец Функция ПоказатьТаблицу///

Имя таб части: ВозвратнаяТара
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: Услуги
///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: СерийныеНомера

///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: СерийныеНомераСоставНабора

///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Имя таб части: ДокументыРасчетовСКонтрагентом

///Функция ПоказатьТаблицу///
///Конец Функция ПоказатьТаблицу///

Источник

&НаКлиенте, &НаСервере, &НаСервереБезКонтекста

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

Немного теории о стороне выполнения кода. При работе 1С в режиме клиент-сервера, запускается несколько процессов. На компьютере пользователя запускается 1cv8.exe, на сервере 1С запускается rphost.exe, rmngr.exe и ragent.exe.

ragent.exe

Приложение ragent.exe это по сути и есть наша служба агента 1С, которую мы можем посмотреть в списке служб Windows. Данное приложение отвечает за запуск всех остальных приложений и за распределение нагрузки между рабочими rphost.

rphost.exe

Приложение rphost.exe обслуживает подключения пользователей, выполняет код, написанный в конфигурации 1С. В консоли кластера rphost отображается в блоке «Рабочие процессы»

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

rmngr.exe

В общем случае данное приложение отвечает за выполнение регламентных заданий.

Сторона выполнения кода

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

&НаКлиенте

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

&НаСервере

Код выполняется на сервере 1С, в процессе rphost. Файлы, созданные в процедурах &НаСервере, будут сохранены на сервере и смогут быть записаны только в те папки, на которые у пользователя службы агента 1С есть доступ на запись. &НаСервере уже можно свободно писать запросы, обращаться к предопределенным данным и к реквизитам ссылки через точку.

&НаСервереБезКонтекста

Это самый интересный вариант, разберемся для начала, что такое контекст формы. Управляемая форма представляется на уровне платформы в виде XML файла описания расположения элементов и значения реквизитов формы. Соответственно, чем больше элементов на форме и чем больше данных хранится в реквизитах формы, тем больше будет контекст.

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

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

И вот здесь нам как раз может помочь директива &НаСервереБезКонтекста.

Рассмотрим для примера такую ситуацию: у нас есть форма, в реквизитах формы есть таблица значений с 100 000 строк и реквизит с именем «Реквизит1». Нам необходимо в этот реквизит значение перечисления.

В данном примере произойдет следующее: описание формы, таблица значений с 100000 строк и реквизит1 будут преобразованы в XML, отправлены на сервер. На сервере будет выполнен небольшой неявный запрос к СУБД, в значение реквизит1 будет записан результат этого запроса, все данные опять преобразуются в XML и отправятся на сервер. Учитывая, что таблица значений очень большая, то получится, что мы большой объем данных дважды в холостую передали между клиентом и сервером. Это не оптимально.

Во втором примере мы не стали передавать контекст формы, в итоге произошла только передача ссылки на элемент перечисления с сервера на клиент.

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

Пример 3, предположим, у нас есть название для перечисления, которое хранится в реквизите Реквизит2, мы можем его передать в качестве параметра функции:

Ну и напоследок еще один пример, как делать не надо:

Если мы в качестве параметра передаем ЭтаФорма, то по факту мы внеконтекстный вызов превращаем в контекстный. Если без этого не обойтись, то стоит делать контекстный вызов.

Источник

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

Та-дам!

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

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

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

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

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

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

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

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

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

Об авторе

к каким объектам базы данных можно обратиться на клиенте. Смотреть фото к каким объектам базы данных можно обратиться на клиенте. Смотреть картинку к каким объектам базы данных можно обратиться на клиенте. Картинка про к каким объектам базы данных можно обратиться на клиенте. Фото к каким объектам базы данных можно обратиться на клиенте

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

Источник

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

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