Привилегированный 1с общий модуль что значит

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

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

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

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

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

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

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

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

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

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

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

Источник

Использование привилегированного режима

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

1.1. Привилегированный режим позволяет

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

1.2. Привилегированный режим следует использовать

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

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

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

Например, в конфигурации имеются объекты метаданных:

  • Документ.ОприходованиеТоваров
  • РегистрНакопления.ОстаткиНаСкладах
  • Отчет.ОстаткиНаСкладах.

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

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

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

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

Например, в случае если в конфигурации есть объекты метаданных

  • Документ.РеализацияТоваровИУслуг
  • РегистрНакопления.Продажи
  • РегистрНакопления.Взаиморасчеты

и необходимо, чтобы

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

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

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

Пример 2. Параметр сеанса «Текущий пользователь» не доступен ни в одной роли. Для получения значения используется функция:

Функция ТекущийПользователь() Экспорт
УстановитьПривилегированныйРежим(Истина);
Возврат ПараметрыСеанса.ТекущийПользователь;
КонецФункции

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

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

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа
// Изменяем данные в привилегированном режиме
.

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

// Изменяем данные
// (при этом если у пользователя недостаточно прав для выполнения операции над данными, то будет вызвано исключение)
.

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

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

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

  • при выполнении запроса без ключевого слова РАЗРЕШЕННЫЕ ;
  • при вызове метода ПолучитьОбъект «от» недоступной ссылки на объект;
  • при вызове недоступного метода глобального контекста;
  • и в других аналогичных случаях.

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

Процедура ИзменитьИлиУдалитьДанные(. ) Экспорт

ВыполнитьПроверкуПравДоступа(. ); // Если у пользователя недостаточно прав, то будет вызвано исключение
УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав доступа

// Изменяем данные в привилегированном режиме
.

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

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

// Код подготовки запроса, которому требуется проверка прав

// Код выполнения запроса, для которого требуется отключить проверку прав
Выборка = Запрос.Выполнить().Выбрать();

// Обработка результатов запроса, где требуется проверка прав.

// Код подготовки запроса

УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);

// Обработка результатов запроса

4. Для перехода в привилегированный режим следует использовать следующие возможности платформы 1С:Предприятие :


    При реализации логики проведения и отмены проведения документов в обработчиках модуля документа ОбработкаПроведения и ОбработкаУдаленияПроведения :

УстановитьПривилегированныйРежим(Истина)
// фрагмент кода в привилегированном режиме
// …
УстановитьПривилегированныйРежим(Ложь)

Источник

Общий модуль в 1С 8.3

Зачем нужны общие модули

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

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

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

Вызов общего модуля

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

Для примера добавим в конфигурацию новый общий модуль. Общие модули расположены в узле Общие — Общие модули:

В свойствах общего модуля установим флаг Клиент:

В самом модуле добавим следующий код:

В модуле обработки вызовем оба метода общего модуля:

Вызов метода ТестОдин отработает корректно, а при вызове метода ТестДва возникнет ошибка «Метод объекта не обнаружен», потому что у процедуры нет ключевого слова Экспорт.

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

Клиентский общий модуль

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

Серверный общий модуль

Если установлен только флаг Сервер, то к методам такого модуля можно будет обращаться только на сервер.

Вызов сервера

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

Клиент-серверный общий модуль

У такого общего модуля в свойствах нужно установить и флаг Клиент и флаг Сервер.

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

Вызывать серверные методы общего модуля можно только на сервере:

Глобальный общий модуль

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

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

Привилегированный общий модуль

Общий модуль с таким флагом всегда выполняется без проверки прав доступа. Такой общий модуль может быть только серверным.

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

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

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

Есть два варианта повторного использования возвращаемых значений:

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

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

  • Если в рабочем процессе сервера 1С не хватает оперативной памяти
  • Рабочий процесс был перезапущен
  • Клиент был переключен на другой рабочий процесс
  • Прошло 20 минут после сохранения или 6 минут после последнего использования
  • Если вызвать метод ОбновитьПовторноИспользуемыеЗначения

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

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

  • Дата
  • Булево
  • Строка
  • Число
  • Неопределено
  • Null
  • Ссылка
  • Структура, только со значениями примитивных типов или ссылок.

Источник

Оцените статью