какие директивы компиляции могут быть в модуле формы управляемые формы

Директивы выполнения кода в модулях управляемых форм 1С 8.3

С появлением управляемых форм в модулях форм 1С 8.3 стали активно использоваться директивы компиляции в модулях форм и объектов:

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

какие директивы компиляции могут быть в модуле формы управляемые формы

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

Обратите внимание! Если директива не указана, то по умолчанию она выполняется на сервере.

Особенности компиляции этих директив управляемого приложения

&НаКлиенте

Указывает на то, что процедура или функция выполняется на стороне клиента 1C, все переменные существуют лишь на время жизни клиентской части формы. Такой метод выполняется «у Вас на компьютере», никак не затрагивая серверную часть. С клиента доступны все серверные функции.

На клиенте есть доступ к следующим объектам:

&НаСервере

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

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

Это процедура выполняется на сервере, вне контекста формы. Т.е. процедура не имеет доступа к реквизитам формы, выполняется на сервере и возвращает желаемый результат. Хорошо подходит для получения статичных данных. Крайне рекомендуется к использованию для оптимизации клиент-серверного взаимодействия.

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

Используется, когда к процедуре нужно обращаться и с клиента, и с сервера. В остальном аналог &НаСервереБезКонтекста.

Оптимизация клиент-серверного взаимодействия

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Директивы компиляции

Директивы компиляции — это директивы которые определяют в какой среде будут исполнятся процедуры и функции модулей форм, модуля команды и общего модуля управляемого приложения.

Перед определением директивы ставится «&».

Если директива отсутствует используется директива по умолчанию — &НаСервере.

Использование нескольких директив вместе невозможно.

Допустимые директивы:

&НаКлиенте (&AtClient)

Определяет выполнение процедуры (функции) на клиенте;

Используется на клиенте, доступны процедуры модуля и доступны данные форм.

&НаСервере (&AtServer)

Определяет выполнение процедуры (функции) на сервере;

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

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

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

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

определяет выполнение процедуры (функции) на сервере и на клиенте, не имеющую доступа к данным формы, переменным. В данном методе имеется доступ к процедурам и функциям клиентских и серверных одновременно.

&НаКлиентеНаСервере (&AtClientAtServer)

определяет выполнение процедуры (функции) на сервере и на клиенте. В данном методе имеется доступ к процедурам и функциям общих модулей – серверных, не глобальных и серверных и клиентских одновременно, не имеющую доступ к переменным.

Источник

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

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. Директивы компиляции:

&НаКлиенте (&AtClient)
&НаСервере (&AtServer)
&НаСервереБезКонтекста (&AtServerNoContext)

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

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

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

Функция КодОсновногоЯзыка() Экспорт
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
#Иначе
Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента(«КодОсновногоЯзыка»);
#КонецЕсли
КонецФункции

Функция КодОсновногоЯзыка() Экспорт
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
#Иначе
Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента(«КодОсновногоЯзыка»);
#КонецЕсли
КонецФункции

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

В то же время, как и в обычных клиентских модулях, допустимо ветвление кода для учета специфики различных режимов работы клиентского приложения: веб-клиент, тонкий или толстый клиент (например, #Если ВебКлиент).

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

Процедура Пример1()
а = 1
#Область ИмяОбласти
+ 2;
#КонецОбласти // разрыв выражения
КонецПроцедуры

Результат = Пример4(Параметр1,
#Если Клиент Тогда
Параметр2, // некорректный вызов функции
#КонецЕсли
Параметр3);

Данные ошибки диагностируются автоматически с помощью среды разработки 1C:Enterprise Development Tools (EDT).

Правильно использовать инструкции препроцессора без разрыва конструкций.

Источник

Модуль формы в 1С 8.3

какие директивы компиляции могут быть в модуле формы управляемые формы

Модуль формы

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

Чтобы открыть модуль формы нужно сначала создать форму. Для этого в окне редактирования свойств объекта нужно перейти на закладку «Формы» и в поле «Элемента» нажать на кнопку с лупой:

какие директивы компиляции могут быть в модуле формы управляемые формы

Откроется конструктор формы. В нем можно выбрать тип формы, указать имя и синоним:

Оставим в конструкторе все без изменений и нажмем кнопку «Готово».

Откроется редактор формы. Для открытия модуля формы нужно внизу выбрать закладку «Модуль»:

какие директивы компиляции могут быть в модуле формы управляемые формы

Добавим в модуль формы код:

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

какие директивы компиляции могут быть в модуле формы управляемые формы

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

Директивы компиляции

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

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

Добавим в модуль формы две процедуры:

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

Для переменных модуля тоже можно использовать директивы компиляции:

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

Обработчики событий модуля формы

В модуле формы тоже есть события, для которых можно создавать обработчики:

какие директивы компиляции могут быть в модуле формы управляемые формы

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

Рассмотрим основные из них:

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

ПриСозданииНаСервере — выполняется как для существующих, так и для новых объектов. Если установить параметр Отказ = Истина, то форма не будет создана и не будет открыта. Директива компиляции &НаСервере.

ПриОткрытии — выполняется при непосредственном открытии формы, можно отказаться от открытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.

ПередЗакрытием — выполняется до закрытия формы. Можно отказаться от закрытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.

ПриЗакрытии — выполняется после закрытия формы, уже нельзя отказаться от закрытия формы. Директива компиляции &НаКлиенте.

Для примера добавим в модуль формы 2 обработки событий: ПриСозданииНаСервере и ПередЗакрытием и добавим туда следующий код:

Источник

Директивы компиляции и инструкции препроцессора

какие директивы компиляции могут быть в модуле формы управляемые формы Программирование системы какие директивы компиляции могут быть в модуле формы управляемые формы24.03.2017 11:49 какие директивы компиляции могут быть в модуле формы управляемые формы8539

Эти конструкции предназначены для явного указания того, где должен выполняться программный код. Для этого во встроенном языке 1с существуют специальные конструкции.

Директивы компиляции

Это новшество реализовано только в управляемом приложении. Использование директив в обычном приложении недоступно. В обычном приложении нет разделения программирования для клиента и сервера. В управляемом приложении перед функциями, процедурами и глобальными переменными можно явно указать где выполнять код (на сервере или на клиенте).

Инструкции препроцессора

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

РусскийАнглийский
#Если#If
#Тогда#Then
#ИначеЕсли#ElsIf
#Иначе#Else
#КонецЕсли#EndIf
#Область#Region
#КонецОбласти#EndRegion
Клиент (для совместимости)Client
НаКлиентеAtClient
Сервер (для совместимости)Server
НаСервереAtServer
МобильноеПриложениеКлиентMobileAppClient
МобильноеПриложениеСерверMobileAppServer
ТолстыйКлиентОбычноеПриложениеThickClientOrdinaryApplication
ТолстыйКлиентУправляемоеПриложениеThickClientManagedApplication
ВнешнееСоединениеExternalConnection
ТонкийКлиентThinClient
ВебКлиентWebClient
ИAND
ИЛИOR
НЕNOT

#Если НаСервере Тогда
#КонецЕсли

#Если НаКлиенте Тогда
#КонецЕсли

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Источник

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

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