Где находится модуль сеанса 1с


Модуль сеанса 1Сv8 — КинтВики

Модуль сеанса

Модулем сеанса называется модуль, который автоматически выполняется при старте системы 1С:Предприятие 8 в момент загрузки конфигурации.

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

Модуль сеанса может содержать только определения процедур и функций.

Модуль сеанса не содержит экспортируемых процедур и функций и может использовать процедуры из общих модулей конфигурации.

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

Модуль сеанса должен содержать обработчик УстановкаПараметровСеанса (SessionParametersSetting), другим способом он не может получить управление.

Особенности

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

Первый вызов процедуры "УстановкаПараметровСеанса" - это самый первый программно доступный обработчик событий.

Уже после него вызываются обработчики ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы модулей клиенских приложений.

Обработчики событий

УстановкаПараметровСеанса

Синтаксис:

УстановкаПараметровСеанса(<Параметры сеанса>)

Параметры:
<Параметры сеанса>

Тип: Массив; Неопределено.

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

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

Описание:

Событие предназначено для инициализации параметров сеанса.

Вызывается системой:
  • при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра "Параметры сеанса" - Неопределено;
  • перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра "Параметры сеанса" является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

Общие модули в 1С 8.3 и 8.2

Общие модули 1С — объект метаданных конфигурации 1С 8.3 и 8.2, который хранит в себе программный код, который часто вызывается в конфигурации. Функцию/процедуру можно вызвать из любого места конфигурации (если она экспортная).

Как использовать общий модуль

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

Типичный пример общего модуля — обработка проведения по какому-то регистру, получение количества разницы рабочих дней, пересчет курсов валют, пересчет количества/цены/суммы в табличной части и другие функции.

Свойства общих модулей

Одно из основных особенностей общих модулей от других модулей — нельзя объявлять общие переменные.

Получите 267 видеоуроков по 1С бесплатно:

Рассмотрим подробнее палитру свойств общего модуля:

  • Глобальный — если флаг установлен, функции и процедуры из этого модуля становятся доступны в глобальном контексте. Т.е. их можно вызвать в любом месте конфигурации, обращаясь без названия общего модуля. Однако добавляется условие — название процедур и функций в этом общем модуле должны быть уникальны в рамках глобального контекста.
  • Сервер — процедуры и функции данного общего модуля могут быть выполнены на сервере.
  • Внешнее соединение — программные коды данного общего модуля могут быть выполнены при подключении внешним источником (например, COM).
  • Клиент (управляемое приложение) — процедуры и функции данного общего модуля могут быть использованы в толстом клиенте в режиме управляемого приложения.
  • Клиент (обычное приложение) — программные коды данного общего модуля могут быть использованы в толстом клиенте в режиме обычного приложения.
  • Вызов сервера  — флаг, разрешающий на клиенте использовать процедуры и функции из этого общего модуля.
  • Привилегированный — если установлена Истина, в этом общем модуле будет отключена проверка прав доступа.
  • Повторное использование — определяет настройки возвращаемых значений, если опция включена, то после первого выполнения система запомнит значение для данных входных параметров и будет возвращать уже готовое значение. Может принимать следующие значения: не используется — отключение, на время вызова — на время выполнения определенной процедуры, на время сеанса — пока пользователь не закрыл сеанс (программу).

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

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

1С 8.2: Где какие модули выполняются

Модуль управляемого приложения

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

Общие модули

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

Модули Объектов

Вызывается при интерактивном создании объекта(документа, элемента справочника) пользователем либо при программном создании объекта средствами встроенного языка (СоздатьЭлемент(), СоздатьДокумент()), а также при различных действиях с этим объектом (справочником, документом), которые влекут за собой вызов предопределенных процедур, которые могут быть описаны в модуле объекта, например, «ПриЗаписи()».

Модули формы

Модуль формы исполняется при создании объекта УправляемаяФорма — программно (ПолучитьФорму(), ОткрытьФорму()) или интерактивно при открытии формы пользователем.

Модуль сеанса

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

Модуль сеанса - второе объяснение

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

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

Модуль внешнего соединения

Используется для размещения процедур, прорабатываемых в сессии внешнего соединения.

Модуль менеджеров

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

Модуль команды

Команды — объекты, подчиненные прикладным объектам и конфигурации в целом. У каждой команды есть модуль команды, в котором можно описать предопределенную процедуру ОбработкаКоманды() для выполнения этой команды.

Параметры сеанса в 1С 8.3 и 8.2

Параметры сеансы 1С 8.3 — переменная, в которой хранится значение нужного параметра на время сеанса пользователя. По сути, это некая глобальная переменная, привязанная к сеансу текущего пользователя.

Использование параметров сеанса в 1С

Параметры сеанса задаются только программно, универсального интерфейса для установки параметров сеанса в системе нет. Обычно они задаются при старте системы, в «Модуле сеанса». Если параметр не определен, во время обращения к нему будет вызвана ошибка.

Пример установки параметра сеанса 1С

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

В древе метаданных создадим новый параметр сеанса — ТекущийПользователь, назначим ему тип — СправочникСсылка.ФизическиеЛица:

Получите 267 видеоуроков по 1С бесплатно:

В модуле сеанса создадим процедуру, в которой будет определяться текущий параметр сеанса:

Код процедуры:

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
 
 //ищем физ. лицо по имени пользователя
 ТекПользователь = Справочники.ФизическиеЛица.НайтиПоНаименованию(ИмяПользователя());
 //если не нашли - создадим нового
 Если ТекПользователь.Пустая() Тогда
 НовПользователь = Справочники.ФизическиеЛица.СоздатьЭлемент();
 НовПользователь.Наименование = ИмяПользователя();
 НовПользователь.Записать();
 ТекПользователь = НовПользователь.Ссылка;
 КонецЕсли;
 //присваиваем параметру сеанса ТекущийПользователь ссылку на справочник физ.лиц
 ПараметрыСеанса.ТекущийПользователь = ТекПользователь;
 
 КонецПроцедуры
 

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

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

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

Расширение модулей | 1С:Зазеркалье

24.03.2016

Реализовано в версии 8.3.9.1818.

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

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

  • Общие модули;
  • Модули объектов (модуль объекта, модуль менеджера и т.п.) для всех типов объектов;
  • Модуль сеанса;
  • Модуль управляемого приложения;
  • Модуль внешнего соединения;
  • Модули команд;
  • Модули форм;
  • и т.д.

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

Здесь и дальше, чтобы вам было проще читать, вместо словосочетания «процедура/функция» мы будем использовать слово «метод». Итак, все изменения, которые вы можете выполнять в модулях, можно разделить на 4 группы:

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

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

Собственные модули
Вы можете создавать в расширении собственные общие модули.

Вызов
И, наконец, вы можете вызывать в своём расширении любые методы типовой конфигурации.

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

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

Перехват вызовов методов

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

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

Аннотация &Перед("Процедура1") означает, что перехватывается типовая процедура с именем Процедура1. Имя аннотации Перед означает, что сначала будет выполнена ваша процедура-перехватчик Расш_Проц1(), а затем - типовая Процедура1().

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

Аннотация &Перед

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

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

Аннотация &После

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

Аннотация &Вместо

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

На одну и ту же типовую процедуру вы можете установить в своём расширении одну из следующих комбинаций перехватчиков:

  • &Перед;
  • &После;
  • &Вместо;
  • &Перед и &После.

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

Если же вы перехватываете типовую функцию, а не процедуру, то вы можете использовать только перехватчик &Вместо.

Вызов метода, перекрытого аннотацией &Вместо

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

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

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

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

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

Что лучше, &Перед, &После или &Вместо?

Когда вы перехватываете методы типовой конфигурации, всегда полезно помнить о двух вещах:

  • После того, как вы написали своё расширение, типовая конфигурация будет изменяться;
  • Ваша цель – добавить свою функциональность, а не навсегда отказаться от того, что есть, и что будет в типовой конфигурации.

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

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

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

Последовательность вызовов при перехвате методов

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

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

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

Что в конфигураторе, что в режиме 1С:Предприятие, последнее подключенное расширение находится в списке последним.

Таким образом, в этом примере внизу находится типовая, наверху находится Расширение2, а между ними – Расширение1. Каждое следующее расширение перехватывает (расширяет) то, что находится под ним.

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

Пример 1

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

  • Сначала будет вызван перехватчик из Расширения2, потому что оно сверху. Это будет перехватчик &Перед, потому что у него такая аннотация;
  • Затем будет вызван перехватчик из Расширения1, потому что оно следующее в пироге. Это будет снова &Перед, потому что у него такая аннотация;
  • После этого будет вызван типовой метод, потому что больше нет перехватчиков, препятствующих его исполнению;
  • Затем, в обратной последовательности «пирога», будут вызваны перехватчик &После из Расширения1 и перехватчик &После из Расширения2.

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

Пример 2

Если в перехватчиках используется метод ПродолжитьВызов(), то действует тот же самый принцип «пирога».

  • Сначала будет вызван перехватчик из Расширения3, потому что оно сверху. Это будет перехватчик &Вместо, потому что у него такая аннотация;
  • При попытке вызвать типовой метод, будет анализироваться оставшийся «пирог». Анализироваться он будет точно таким же образом, как было описано в предыдущем примере;
  • В результате исполнение кода вернётся в перехватчик &Вместо, а по его завершении – в типовую конфигурацию.

Пример 3

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

В этом примере будет выполнен только перехватчик &Вместо из Расширения2. Потому что он перекрывает собой типовой метод, то есть весь «пирог», который находится под ним.

Пример 4

Это, по сути, вариация на тему второго примера, но когда под верхним расширением находится расширение, также «прокидывающее» вниз вызов типовой процедуры.

По сути, он просто лишний раз визуализирует тот факт, что вызов типового метода относится ко всему «пирогу», находящемуся под расширением. Именно поэтому после вызова перехватчика из Расширения2, будет вызван перехватчик из Расширения1. Потому что в оставшемся «пироге» именно он перекрывает вызов типового метода, до которого хочется «дотянуться» Расширение2.

Перехват обработчиков событий и собственные обработчики в модулях объектов, менеджеров и т.п.

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

Во-первых, в качестве имени перехватываемого метода указывается имя события. Например, ПередЗаписью:

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

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

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

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

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

Внешне перехватчик события в модуле формы выглядит следующим образом:

То есть аннотация не используется, а тип перехватчика указывается в палитре свойств. Делается это довольно просто. При создании в расширении обработчика по кнопке «лупа» открывается диалог. Он позволяет вам, помимо контекста, указать тип перехватчика (Перед, После или Вместо).

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

Если вы перекрываете типовой обработчик (Вместо), то это будет просто точка.

Если вы создаёте перехватчик Перед или После, то это будет точка рядом с вертикальной чертой. Местонахождение точки, перед или после черты, обозначает тип перехватчика. А кроме этого в палитре свойств появляется второе (пустое) поле рядом с этим событием. С его помощью вы можете задать парный перехватчик, если есть необходимость обрамить типовой обработчик парой Перед - После.

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

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

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

Общие модули

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

  • Они не должны быть глобальными серверными;
  • Они не должны быть привилегированными.

Когда вы расширяете общий модуль типовой конфигурации, тоже есть аналогичные ограничения:

  • Нельзя заимствовать глобальные серверные модули;
  • Код из вашего расширения будет исполняться только в непривилегированном режиме (если иное не разрешено в профиле безопасности).

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

Серверные методы расширяются не всегда

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

Если прикладное решение работает в файловом варианте или в клиент-серверном варианте без профилей безопасности, то при подключении вашего расширения:

  • В обычном режиме исполнения встроенного языка - будут расширяться все методы типового решения, и клиентские, и серверные;
  • В безопасном режиме исполнения встроенного языка - будут расширяться только клиентские методы и серверные обработчики форм. К остальным серверным процедурам / функциями расширение применяться не будет.

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

Для этого в профиль безопасности мы добавили несколько новых свойств.

Самое простое из них – это флажок к расширению всех модулей в группе Разрешен полный доступ. Он «одним махом» разрешает расширение серверного контекста.

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

  • Если полный доступ к расширениям вы не разрешали, то в поле Доступные для расширения модули вы перечисляете имена тех модулей, для которых расширение серверного контекста допустимо и не страшно;
  • Если вы разрешили полный доступ к расширениям, то в поле Недоступные для расширения модули вы перечисляете некоторые модули, в которых всё-таки не нужно допускать расширения серверного контекста. 
Рассказать друзьям:

Модули 1С | Всё о программировании на 1С:Предприятие


Любая современная программа состоит из определённого программного кода. Это написанные на специальном языке последовательности действий, которые обязательно должны быть выполнены. Подобная программа, написанная в каком-либо редакторе, обязательно должна где-то находиться. Современные программисты в большинстве случаев пишут код программ в особых текстовых файлах с разным расширением: *.html, *.php, *.cpp и др.

 

Что такое 1С Модуль?

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

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

 

Как используется модуль 1С?

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

1. Определённая реакция на события.
2. Метод объекта.

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

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

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

События можно разделить на пользовательские и на системные.

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

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

 

Работа с объектом 1С

Работа с модулем определённого объекта 1С производится в режиме Конфигуратора 1С. С помощью окна конфигурации можно его открыть.

В конфигурации 1С существуют совершенно разные модули:

  • Модули приложения. После нажатия правой кнопкой мыши в верхней части окна конфигурации можно выбрать модули точек входа в программу;


  • Общие модули расположены в ветке с одноимённым названием: Общие ? Общие модули. Достаточно просто нажать на неё двойным кликом мыши;


  • Модули форм 1С, в которых обычно прописывается реакция на произведённое нажатие кнопок, меню и иные интерфейсные объекты, находятся в специальном редакторе формы. Чтобы воспользоваться ими, достаточно просто открыть любую ветку выбранного объекта, нажать двойным кликом на форму и сразу откроется редактор, внизу которого присутствует три закладки: Диалог, Модуль, Реквизиты. Одна из них и является модулем формы 1С.


  • Модули объектов 1С. Эти модули принадлежат непосредственно объектам конфигурации. Получить к ним доступ можно, щёлкнув правой кнопкой мыши на соответствующем объекте и выбрав пункт «Открыть модуль объекта».


Состав модуля 1С

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


Сообщение между модулями 1С

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

 

Контекст

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

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

 

Нравится статья? Подпишитесь прямо сейчас и получайте обновления на свой E-Mail:

Facebook

Twitter

Мой мир

Вконтакте

Одноклассники

Google+

Похожее

 Распечатать статью

Модули платформы 1С:Предприятие 8.3, 8.2

Модули платформы 1С:Предприятие 8.3, 8.2

Общие модули

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

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

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

Флаг "Глобальный"

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

 Флаг "Сервер"

Функции такого модуля могут выполняться на сервере.

Флаг "Клиент (обычное приложение)"

Функции такого модуля могут выполняться на клиенте в режиме обычного приложения.

Флаг "Клиент (управляемое приложение)"

Функции такого модуля могут выполняться на клиенте в режиме управляемого приложения.

Флаг "Вызов сервера"

Флаг доступен для модулей с установленным флагом "Сервер".  Разрешает вызов на клиенте экспортных функций этого модуля (которые будут выполняться на сервере).

 Флаг "Внешнее соединение"

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

Флаг "Привилегированный"

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

Параметр "Повторное использование"

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

Модуль приложения

Предназначен для обработки событий запуска и завершения приложения. Бывает двух видов: для обычного и управляемого приложений.

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

Модуль сеанса

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

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

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

Нажмите одну из кнопок, чтобы поделиться:

Параметры сеанса,Установка Параметров Сеанса, УстановкаПараметровСеанса – Ваш петербургский программист 1С

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

● Параметры сеанса являются объектами метаданных, что позволяет «1С:Предприятию» осуществлять повышенный контроль за их использованием.
● Параметры сеанса имеют тип. Набор типов параметров сеанса ограничен. Их важной общей чертой является невозможность изменения внутреннего
состояния для объектов этих типов.
● Для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
● В клиент-серверном варианте «1С:Предприятия» значения параметров сеанса хранятся на сервере и доступны как с сервера, так и с клиента.
● Параметры сеанса доступны как из встроенного языка «1С:Предприятия», например:

ПараметрыСеанса.ТекущийПользователь = ИмяПользователя();

Так и из ограничений доступа к данным, например:

Документ.Отчет.Пользователь = &ТекущийПользователь;

В последнем случае для получения значения параметра сеанса у текущего пользователя наличия соответствующего права не требуется.
Примечание 1. Если параметру сеанса установлен один из следующих типов: ФиксированныйМассив, ФиксированнаяКоллекция или
ФиксированнаяСтруктура, то в качестве значения элемента коллекции может выступать значение Неопределено.
Примечание 2. Объем данных, перемещаемых между клиентом и сервером, для установки одного параметра сеанса, не должен превышать 4 Gb (в сериализованном виде).

Поделиться ссылкой:

Понравилось это:

Нравится Загрузка...

Похожее

Автор публикации

0 Комментарии: 14Публикации: 440Регистрация: 25-12-2016

Разбор тестирования 1С:Профессионал и PMP: Модули 1С

Программный код прикладного решения располагается в его модулях; модулей существует несколько видов:

Подробно о каждом по ссылке.

Все модули, кроме Общих и Модуля сеанса, структурированы следующим образом:

  • раздел объявления переменных
  • раздел процедур и функций
  • раздел основной программы

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

Процедуры и функции каждого модуля можно просмотреть списком, по хоткею Ctrl + Alt + P, либо через соответствующий пункт меню:

***

Вопрос 06.01 экзамена 1С:Профессионал по платформе. Какие виды программных модулей существуют в "1С:Предприятие 8"?

  1. Общие модули, модуль сеанса, модули форм
  2. Модуль обычного приложения, модуль управляемого приложения, общие модули, модуль сеанса, модули объектов, модули форм
  3. Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, общие модули и модули форм
  4. Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, общие модули, модули форм и модули макетов
  5. Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, модуль команды, общие модули, модули менеджера, модули форм, модули объектов и модули набора записей
  6. Модуль приложения, модуль внешнего соединения, модуль сеанса, общие модули, модули форм, модули макетов, модули объектов и модули набора записей

Правильный ответ пятый, перечень выше.

***

Вопрос 06.07 экзамена 1С:Профессионал по платформе. Какой должен быть порядок определения процедур и функций в программном модуле?

  1. Описание функций должно идти выше описания процедур и раздела основной программы
  2. Описание вызываемых процедур и функций должно идти выше вызывающих
  3. Порядок следования процедур и функций не имеет значения
  4. Порядок следования процедур и функций зависит от типа модуля
Правильный ответ третий, неважно, как процедуры и функции расположены внутри своего раздела.

***

Вопрос 06.09 экзамена 1С:Профессионал по платформе. Только определения процедур и функций может содержать только следующий вид модуля:

  1. модуль приложения
  2. общий модуль
  3. модуль сеанса
  4. модуль объекта
  5. верны ответы 2,3
  6. верны ответы 2,4
Правильный ответ пятый, см. выше.

Объект 1С "Параметры сеанса" | FLAGMAN.TOP

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)

 

Если ИменаПараметровСеанса = Неопределено Тогда

// Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено). 

//Выполняется установка параметров сеанса, которые можно инициализировать при начале работы системы

 

Иначе

// Установка параметров сеанса "по требованию"

// Параметры сеанса, инициализация которых требует обращения к одним и тем же

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

// их повторной инициализации, имена уже установленных параметров сеанса сохраняются

// в массиве УстановленныеПараметры

 

УстановленныеПараметры = Новый Массив;

Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл

УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);

КонецЦикла;

 

КонецЕсли;

 

КонецПроцедуры

 

// Установить значения параметров сеанса и возвратить имена установленных

// параметров сеанса в параметре УстановленныеПараметры.

//

// Параметры

// ИмяПараметра - Строка - имя параметра сеанса, который требуется установить (проинициализировать).

// УстановленныеПараметры - Массив, в который добавляются имена установленных (проинициализированных) параметров.

 

Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)

 

// Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже был установлен - возврат.

 

Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда

Возврат;

 

КонецЕсли;

 

Если ИмяПараметра = "ТекущийПользователь" Тогда

ПараметрыСеанса.ТекущийПользователь = <значение>;

ПараметрыСеанса.<другой параметра сеанса> = <значение>;

УстановленныеПараметры.Добавить(ИмяПараметра);

УстановленныеПараметры.Добавить("<другой параметра сеанса>");

КонецЕсли;

 

КонецПроцедуры

Модуль 1С

Любая программа состоит из программного кода, то есть собственно из написанных на каком-либо языке последовательности действий, которые должны быть выполнены.

Однако эта самая программа должна быть где-то написана, то есть где-то находиться. В большинстве случаев код программы пишется в обычных текстовых файлов. Разница только в том, что расширение в них не .txt, а .cpp или .php.

Где пишется программа 1С?

 

Что такое Модуль 1С?

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

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

Каждый объект 1С, включая некоторые вложенные, имеет свой Модуль – некий текстовый файл, который содержит программный код.

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

Таким образом в 1С нет «единой» программы. Есть набор модулей для написания программного кода для каждого объекта конфигурации 1С.

 

Как используются Модули 1С?

Всю программу можно грубо поделить на два вида:

  • Метод объекта
  • Реакция на события.

Методы. Как мы уже говорили ранее – объект 1С является цельной структурой, которая включает в себя как данные, так и способы их обработки. Эти способы – это набор действий (методов), которые можно вызывать для обработки данных. Пример такого действия СправочникОбъект.Записать() – записывает элемент справочника в базу данных.

Методы многих объектов 1С могут быть стандартными (т.е. запрограммированными в платформе 1С) и написанными программистом на языке 1С. С помощью вторых – можно расширять функционал объектов 1С по своему желанию.

События. События есть во множестве других средств разработки. Цель программы не только что-то вычислить при запуске, но и поддерживать работу пользователя.

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

Системные события – мы записали объект 1С в базу данных. Возникло системное событие «Запись объекта». Возможно настроить реакцию, которая возникнет на события, вызванные не пользователем (которые нажал на кнопку или что-то еще сделал), а самой системой. Яркий пример такого события – при запуске программы.

 

Порядок выполнения модулей 1С

Во многих языках есть такое понятие как «точка входа». Это та самая первая строчка или функция которая будет выполнена при запуске программы.

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

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

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

 

Работа с модулями 1С

Производится в конфигураторе. Открыть модуль можно с помощью окна Конфигурация.

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

  • Общие, независимые от объектов 1С модули, находятся в ветке Общие / Общие модули. Просто нажмите на него два раза мышкой и он откроется.

  • Модули форм, где прописывается реакция на нажатие кнопок, меню и прочего интерфейсного находятся непосредственно в редакторе формы. Раскройте любую ветку объекта (справочник, документ и т.п.) до форм, нажмите два раза мышкой на форму – отроется редактор. Внизу редактора будет три закладки, одна из которых – модуль.

  • В 1С версии 8.2 появилось понятие Команда 1С. Это самостоятельное действие, которое можно вытащить на форму в виде кнопки или меню. В ветке Общие / Общие команды находятся команды, которые можно использовать в любом другом месте конфигурации. Каждая из команд имеет свой собственный модуль.

  • Модули объектов. У каждого объекта 1С (справочник, документ и прочее) есть свой модуль. Там могут быть прописаны реакции на такие системные события как Запись() или Удаление(), а также созданы новые методы объекта. Нажмите правой кнопкой мыши на конкретный объект, например справочник Номенклатура. Модуль объекта – это модуль конкретного элемента этого справочника. Модуль менеджера – это модуль управления элементами справочника (документа..).

  •  

    Состав модуля 1С

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

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

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

    Обычно его используют для начального заполнения переменных расположенных в начале модуля.

     

    Клиент и сервер 1С

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

    У общих модулей (Общие / Общие модули) есть свойства. Нажмите правой кнопкой мыши и далее – свойства. Галочками можно отметить где будет доступен этот модуль.

    Также один модуль может выглядеть по разному если запущен на сервере или клиенте. Для этого есть специальные директивы, указываемые прямо в коде программы: #Если Клиент и #Если Сервер.

    Клиент и Сервер видят только те части модуля, которые находятся между этими директивами. Если директив нет – модуль виден весь.

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

     

    Сообщение между модулями 1С

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

    Если мы хотим создать метод или переменную, видимую из другого модуля, она помечается словом ЭКСПОРТ.

    Однако большое количество модулей и правил клиент-сервера пораждает некоторое количество проблем у программиста с использованием модуля извне. Где-то все просто, а где-то можно тупить пол часа – почему написано ЭКСПОРТ, но вызов оканчивается ошибкой «метод не найден..».

     

    Контекст

    Контекст – это очень сложное потому что очень расплывчатое понятие.

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

    Что бы это значило? 🙂


Смотрите также

Описание: