Встроенный язык предназначен для описания алгоритмов функционирования прикладной задачи на стадии разработки конфигурации. Это предметно-ориентированный язык программирования, разработанный с учетом возможности его применения не только профессиональными программистами. В частности, все операторы языка имеют как англоязычное, так и русское написание, которое можно использовать одновременно в одном исходном тексте.
Текст на встроенном языке пишется в модулях, которые расположены в разных частях конфигурации.
Язык обладает некоторыми объектно-ориентированными возможностями, например, правила доступа к свойствам и методам прикладных объектов (документам, справочникам и т. п.) подобны свойствам и методам объектов, используемых в других объектно-ориентированных языках. Однако типы прикладных объектов не могут определяться средствами самого языка, а задаются в визуальном режиме.
Типизация переменных в языке не жесткая, т. е. тип переменной определяется ее значением. Переменные не обязательно объявлять в явном виде. Неявным определением переменной является ее первое упоминание в левой части оператора присваивания. Возможно также явное объявление переменных при помощи оператора Перем. Допускается применение массивов, структур, соответствий и других универсальных коллекций значений.
Подробнее можно прочитать о встроенном языке в документации «1С:Предприятия».
Контекст встроенного языка или просто, контекст, – это набор функций, процедур, свойств, типов, объектов, методов, событий, доступный в некотором модуле, в некотором его методе. Другими словами, находясь в модуле, можно использовать не все то, что описано в синтакс-помощнике, а только некоторую часть синтакс-помощника. Эта часть и называется контекстом.
Наиболее крупными контекстами являются клиентский контекст и серверный контекст. Причина их существования заключается в том, что в самом общем случае прикладные решения работают в клиент-серверном варианте.
В этом варианте работы пользователь взаимодействует с клиентским приложением. В клиентском приложении в определенные моменты времени (события) выполняется программный код, написанный в модулях. Этот код исполняется в клиентском контексте.
Клиентское приложение, в свою очередь, взаимодействует с кластером серверов «1С:Предприятия». В кластере серверов также, в определенные моменты времени (события) или в определенной ситуации (вызов серверного метода), выполняется программный код, написанный в модулях. Этот код исполняется в серверном контексте.
Так как система программ «1С:Предприятие» позволяет работать с прикладными решениями через Интернет, клиентское приложение и кластер серверов могут находиться и исполняться не просто на разных компьютерах, а в разных городах, странах, частях света.
Конечно, в более простых случаях клиентское приложение и кластер серверов могут находиться на одном компьютере, или кластер серверов может вообще не использоваться (в файловом варианте работы). Но это не влияет на то, как пишутся модули: они пишутся один раз и сразу для работы в самом общем, клиент-серверном варианте. А если в реальной ситуации используется более простой вариант развертывания системы, то платформа просто эмулирует нужные контексты при выполнении тех или иных модулей.
Условия, в которых исполняется код клиентских приложений, значительно отличаются от условий, в которых исполняется код кластера серверов. Например, там, где есть клиентское приложение, там есть пользователь, есть возможность интерактивного взаимодействия с ним. Для этого встроенный язык может использовать большой набор интерфейсных типов, которые входят в клиентский контекст.
С другой стороны, там, где исполняется кластер серверов, там нет пользователя. Соответственно и типы, предназначенные для взаимодействия с интерфейсом, в серверном контексте отсутствуют. В то же время кластер взаимодействует с системой управления базами данных, поэтому на сервере во встроенном языке доступны прикладные типы, позволяющие читать прикладные данные из базы и записывать их. Эти типы есть в серверном контексте, однако их нет в клиентском контексте.
Самое очевидное место, где можно увидеть использование клиентского и серверного контекстов – это модули форм. Эти модули могут исполняться и клиентскими приложениями и кластером серверов. Поэтому, как правило, перед каждым методом таких модулей указана директива компиляции. Она определяет, в каком контексте будет существовать этот метод в этом модуле.
Директива &НаСервере значит, что эта процедура будет существовать в модуле, когда он исполняется на сервере. Когда он исполняется на клиенте, в нем этой процедуры не будет.
Пример использования директивы &НаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Директива &НаКлиенте значит, что эта процедура будет существовать в модуле, когда он исполняется на клиенте. Когда он исполняется на сервере, в нем этой процедуры не будет.
Пример использования директивы &НаКлиенте:
&НаКлиенте
Процедура КомандаОткрыть(Команда)
Помимо клиентского и серверного контекстов существуют и более «узкие» контексты. Это связано с тем, что клиентских приложений существует несколько (тонкий клиент, веб-клиент, толстый клиент, мобильный клиент), а серверная часть бывает не только у «настольных» приложений, но и у мобильных. Каждое из клиентских приложений, каждая серверная часть имеют свои особенности исполнения программного кода, имеют свой контекст. Эти контексты можно увидеть в синтакс-помощнике, в описании всех типов, их методов, свойств и событий. Они перечисляются в разделе Доступность.
Например, для типа HTTPСервисЗапрос указано:
Доступность: Сервер, толстый клиент.
Это значит, что тип HTTPСервисЗапрос можно использовать в серверном контексте, а также и в клиентском, но только тогда, когда работает толстый клиент. Если вы попробуете исполнить этот же код в тонком клиенте, вы получите ошибку, т. к. в контексте тонкого клиента этот тип отсутствует.
Для типа Массив указано:
Доступность: Тонкий клиент, веб-клиент, платформа мобильного клиента, сервер, толстый клиент,
внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Это значит, что тип Массив можно использовать практически во всех клиентских и серверных контекстах. В том числе и на мобильных устройствах.
В панели Навигатор нажмите Открыть модуль приложения или Открыть модуль сеанса или Открыть модуль внешнего соединения в контекстном меню конфигурации.
В то же время, если у вас уже открыт редактор свойств конфигурации, можно перейти к этим модулям, нажав на соответствующую вкладку редактора.
В то же время, если у вас уже открыт редактор нужного объекта конфигурации, можно перейти к этим модулям, нажав на соответствующую вкладку редактора.
В то же время, если у вас уже открыт редактор нужной формы, можно перейти к модулю формы, нажав вкладку Модуль.