Использование параметров сеанса
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. Параметры сеанса предназначены для хранения значений определенных типов для каждого клиентского сеанса на время работы этого сеанса. Инициализацию параметров сеанса следует выполнять в модуле сеанса (см. ниже раздел 2.1), а их значения рекомендуется использовать в запросах и условиях ограничения доступа к данным для текущего сеанса.
Примеры параметров сеанса:
В этом случае, для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
Также они могут использоваться в текстах ограничений доступа, например:
ГДЕ Документ.Автор = &ТекущийПользователь
В последнем случае для получения значения параметра сеанса наличия у текущего пользователя соответствующего права не требуется.
1.2. Не рекомендуется использовать параметры сеанса для хранения значений, используемых исключительно в клиентской логике. Поскольку в клиент-серверном варианте 1С:Предприятия параметры сеанса хранятся на сервере, то любое их считывание или изменение в процессе работы на клиенте потребует дополнительного серверного вызова и увеличит объем передаваемых данных с клиента на сервер и обратно.
В таких случаях следует использовать глобальные переменные модуля управляемого приложения (и обычного приложения – для режима обычного приложения, соответственно).
1.3. Также не рекомендуется использовать параметры сеанса для кеширования вычисленных значений, которые многократно используются в серверной бизнес-логике. В таких случаях следует определять функцию в серверном общем модуле с повторным использованием возвращаемых значений. Исключение составляют случаи, когда время вычисления результата функции модуля с повторным использованием возвращаемых значений соизмеримо с периодом сброса платформенного кеша.
Установка параметров сеанса «по требованию»
2.1. Не следует производить инициализацию параметров сеанса при запуске программы, так как:
Правильным способом установки значений параметров сеанса является установка значений «по требованию» в обработчике УстановкаПараметровСеанса модуля сеанса. Т.е. параметры сеанса должны быть инициализированы только в тот момент, когда к ним происходит первое обращение, как к неустановленным.
Пример установки параметров сеанса «по требованию»:
Если ИменаПараметровСеанса = Неопределено Тогда
// Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено)
// Выполняется установка параметров сеанса, которые можно инициализировать
// при начале работы системы
Иначе
// Установка параметров сеанса «по требованию»
// Параметры сеанса, инициализация которых требует обращения к одним и тем же данным
// следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации,
// имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры
УстановленныеПараметры = Новый Массив;
Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);
КонецЦикла;
Если ИмяПараметра = «ТекущийПользователь» Тогда
ПараметрыСеанса.ТекущийПользователь = ;
ПараметрыСеанса. = ;
УстановленныеПараметры.Добавить(ИмяПараметра);
УстановленныеПараметры.Добавить(» «);
КонецЕсли;
«Нарушение прав доступа» во внешних обработках 1С 8.3
Программы 1С можно дорабатывать через Конфигуратор. В таких случаях немного осложняется обновление конфигурации.
Поэтому широкое распространение получили внешние обработки — с помощью них выполняются необходимые действия, а конфигурация остается типовой.
Внешние обработки можно подключить в 1С в список дополнительных отчетов и обработок и разместить в нужном для себя разделе.
Но не все обработки поддерживают такую функцию, также бывает, что обработку нужно открыть разово или использовать редко. В таких случаях используется интерактивное открытие обработки и тогда часто выходит ошибка «Нарушение прав доступа».
Разберем, почему происходит такая ситуация в 1С 8.3, и как ее решить.
Как открыть обработку интерактивно
При интерактивном открытии обработки ее не нужно никуда подключать. Достаточно зайти в раздел «Сервис и настройки — Файл — Открыть» или нажать CTRL + O на клавиатуре.
Получите понятные самоучители по 1С бесплатно:
Затем выбираем саму обработку. В этот момент и выходит ошибка.
Как исправить ошибку
Для исправления ошибки назначим пользователю роль, которая позволяет открывать обработки интерактивно. Роль так и называется — Интерактивное открытие внешних отчетов и обработок. Отметим, что эту роль нужно назначить даже пользователю с полными правами.
Установка ролей построена таким образом: роли указываются в профилях групп доступа, а профили назначаются пользователям.
Сначала рассмотрим, где находится нужный профиль, а затем разберем, как назначить ее пользователю.
Профиль для открытия внешних обработок
Зайдем в меню «Администрирование — Настройки программы — Настройки пользователей и прав».
Раскроем раздел «Группы доступа» и перейдем по ссылке «Профили групп доступа».
Нужный профиль в программе уже создан и называется «Открытие внешних отчетов и обработок».
Откроем его и увидим, что в нем содержится единственная роль «Интерактивное открытие внешних отчетов и обработок».
Как назначить профиль пользователю
В том же разделе, где находится профиль групп доступа, откроем справочник «Пользователи».
Выберем пользователя, которому нужно назначить профиль. Перейдем по ссылке «Права доступа». Ставим флажок для пункта «Открытие внешних отчетов и обработок» и нажмем «Записать» для сохранения настроек.
Обязательно закрываем 1С и запускаем заново. Открываем обработку и ошибки больше не будет.
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Параметры сеанса в 1С 8.3
Параметры сеанса
Параметры сеанса предназначены для хранения каких-либо значений в течении всего сеанса пользователя. Например, имя текущего пользователя.
Параметры сеанса находятся в узле метаданных Общие — Параметры сеанса:
При создании нового параметра сеанса для него нужно указать имя и тип. Перечень возможных типов ограничен:
Помимо ссылочных типов, примитивных типов и других типов, можно указывать такие типы как: ФиксированныйМассив, ФиксированноеСоответствие и ФиксированнаяСтруктура.
Значения параметров сеанса хранятся отдельно для каждого пользователя, в течении всего сеанса пользователя.
Значения параметров сеанса сохраняются в сеансовых данных, на сервере. Изменять и читать значения параметров сеанса можно только на сервере. Если попытаться обратиться к параметрам сеанса на клиенте будет вызвана ошибка «Переменная не определена (ПараметрыСеанса)».
Для параметров сеанса можно назначать права доступа: на получение и на установку.
Если у пользователя нет права «Установка» для параметра сеанса, то установить параметр можно только в привилегированном общем модуле или в модуле сеанса (который всегда выполняется в привилегированном режиме).
Модуль сеанса
Данный модуль выполняется самым первым при загрузке конфигурации. Он всегда выполняется без контроля прав доступа (в привилегированном режиме).
В модуле сеанса есть только один обработчик УстановкаПараметровСеанса с одним параметром ТребуемыеПараметры (при этом ничто не мешает переименовать данный параметр). Данный обработчик предназначен для инициализации параметров сеанса.
При запуске системы и вызове данного обработчика, параметр ТребуемыеПараметры будет равен Неопределено. В дальнейшем, если обратиться к неинициализированному параметру сеанса, то будет вызван данный обработчик, а в параметре ТребуемыеПараметры будет содержаться массив с именами параметров сеанса, к которым было выполнено обращение. Если после вызова хотя бы один из параметров сеанса из данного массива все еще будет равен Неопределено, то будет вызвано исключение «Попытка получения неинициализированного значения параметра сеанса».
Работа с параметрами сеанса из встроенного языка
К параметрам сеанса можно обращаться только на сервере. Причем, можно как получать значения параметров, так и изменять. Обращение выполняется через свойство ПараметрыСеанса, после которого указывается имя параметра:
Параметры сеанса.
Что из себя представляют параметры сеанса.
Система прав доступа позволяет описывать наборы прав, соответствующие должностям пользователей или виду деятельности. Структура прав определяется конкретным прикладным решением.
Кроме этого, для объектов, хранящихся в базе данных (справочники, документы, регистры и т.д.) могут быть определены права доступа к отдельным полям и записям. Например, пользователь может оперировать документами (накладными, счетами и т.д.) определенных контрагентов и не иметь доступа к аналогичным документам других контрагентов.
Все права, поддерживаемые системой 1С:Предприятие, можно разделить на две большие группы: основные и интерактивные. Основные права описывают действия, выполняемые над элементами данных системы или над всей системой в целом и проверяются всегда, независимо от способа обращения к данным. Интерактивные права описывают действия, которые могут быть выполнены пользователем интерактивно. Соответственно проверяются они только при выполнении интерактивных операций стандартными способами, причем в клиент-серверном варианте все проверки прав (кроме интерактивных) выполняются на сервере.
Основные и интерактивные права взаимосвязаны. Например, существует основное право Удаление, которому соответствуют два интерактивных права: Интерактивное удаление и Интерактивное удаление помеченных. Если пользователю запрещено Удаление, то и все интерактивные «удаления» также будут запрещены для него. В то же время, если пользователю разрешено Интерактивное удаление помеченных, это значит, что Удаление ему также разрешается.
Кроме того, основные права могут зависеть друг от друга. В результате образуются довольно сложные цепочки взаимосвязей, которые отслеживаются системой автоматически: как только разработчик снимает разрешение на какое-либо право, система сама снимает разрешения на все права, которые зависят от этого права. Так же наоборот, при установке какого-либо права разработчиком, система сама устанавливает все права, от которых это право зависит.
Например, для того, чтобы пользователь имел право Итерактивное удаление помеченных, ему необходимо обладать интерактивными правом Редактирование. Это право, в свою очередь, требует наличия интерактивного права Просмотр.
Право Интерактивное удаление помеченных требует наличия основного права Удаление. Интерактивное право Редактирование требует наличия основного права Изменение. Интерактивное право Просмотр требует наличия основного права Чтение.
Кроме этого основные права Изменение и Удаление требуют наличия основного права Чтение.
Среди действий над объектами, хранящимися в базе данных (справочниками, документами и т.д.), есть действия, отвечающие за чтение или изменение информации, хранящейся в базе данных. К таким действиям относятся:
Для этих действий в процессе настройки ролей могут быть заданы дополнительные условия на данные (ограничение доступа к данным). В этом случае над конкретным объектом, хранимым в базе данных, может быть выполнено запрошенное действие только в том случае, если ограничение доступа к данным для данных этого объекта принимает значение «истина». Аналогичные условия могут быть заданы и для таблиц базы данных, не имеющих объектной природы (регистров).
При этом в самих запросах значение параметров сеанса не устанавливается. Система точно знает, что это параметр сеанса.
Посмотрим на типы данных, которые могут принимать параметры сеансов:
Среди доступных типов мы можем видеть не только стандартные типы (ссылочные типы, примитивные типы данных), но и такие типы как «Фиксированный массив», «Фиксированная структура», «Фиксированное соответствие».
Важно отметить, что «Модуль сеанса» всегда исполняется в привилегированном режиме, т.е. контроля прав в этом модуле не существует.
Вообще, касательно привелегированных модулей:
Существует возможность назначения привилегированных модулей. В такие модули могут быть перенесены операции, использующие данные, на которые у текущего пользователя нет прав.
Например, пользователю могут быть назначены права, позволяющие создавать новый документ. Однако никаких прав на регистр, в котором этот документ создает движения при проведении, пользователю не дано. В такой ситуации процедура проведения документа может быть вынесена в привилегированный модуль, который выполняется на сервере без проверки прав. В результате, несмотря на то, что соответствующий регистр для пользователя недоступен, пользователь все же сможет проводить созданные им документы.
Привилегированный режим исполнения кода, аналогичный режиму работы кода привилегированных модулей, можно включить/выключить средствами встроенного языка. Для этого в глобальном контексте предусмотрена процедура УстановитьПривилегированныйРежим(), а также функция ПривилегированныйРежим(), которая позволяет определить, включен привилегированный режим, или нет.
Использование привилегированного режима позволяет, во-первых, ускорить работу, так как не будут накладываться ограничения на доступ к данным, а во-вторых, позволяет выполнять операции с данными от лица пользователей, которым эти данные недоступны.
Привилегированный режим рекомендуется использовать тогда, когда с логической точки зрения нужно отключить проверку прав, или когда можно отключить проверку прав, чтобы ускорить работу. Допустимо использовать привилегированный режим тогда, когда работа с данными от лица некоторого пользователя не нарушает установленные для этого пользователя права доступа.
Обычно значения параметров сеанса берутся из служебных объектов, например из регистра сведения считываются значения, соответствующие пользователю, входящему в систему. В дальнейшем мы можем обращаться к параметрам сеанса, т.е. читать значения, перезаписывать в любом серверном программном коде. Следует отметить, что если мы попытаемся обратиться к параметрам сеанса, значения которых не инициализировано, то произойдет ошибка.
Поскольку параметры сеанса являются объектами конфигурации, мы можем выставить для них права доступа:
Для каждой роли мы можем указать возможность получения параметра сеанса и возможность установки. Таким образом для обычного пользователя мы можем указать, что он может параметры сеанса получать, т.е. обращаться к нему, но поменять значение параметра сеанса он не сможет. Это очень важный момент, поскольку при ограничении прав доступа на уровне записей мы позволяем себе опираться на значения которые содержатся в параметрах сеанса. И если вдруг пользователь смог бы превысить свои полномочия, т.е. переустановит параметры сеанса (в нашем случае добавить еще один регион), он мог бы увидеть те документы, которые не должен.
Причем здесь важно понимать, что при старте приложения в модуле сеанса у нас параметры сеанса спокойно инициализируются, даже не смотря на то, что у нас нет прав на его изменение. Это особенность привелегированного режима, т.е. контроля прав доступа в нем нет.
Мы рассмотрели объект параметры сеанса и может возникнуть такой соблазн, использовать параметры сеанса как глобальные переменные. Действительно ведь у нас, те переменные, которые объявляются в модуле управляемого приложения доступны только на «клиенте», а как таковых серверных глобальных переменны у нас нет. А параметры сеанса как раз доступны на «сервере».
Например, при создании документа, неплохо было бы знать его автора. Создаем новый параметр и задаем ему имя «ТекущийПользователь»:
Заполняем свойства параметра:
Теперь нам необходимо задать параметру имя текущего пользователя. Открываем модуль сеанса:
Нарушение прав доступа в 1С
Ошибка в 1С 8.3 Нарушение прав доступа появляется при попытках обращения пользователя к объекту, прав на который у него нет. Очень часто это происходит при вводе нового пользователя в 1С, доработке программного кода и обновлении программы.
Прочитав эту статью, вы:
Причины ошибки
С ошибкой Нарушение прав доступа сталкиваются многие пользователи 1С после доработки программного кода и обновления программы. Возможные причины появления ошибки:
Ошибка обновления
При обновлении программы текущая конфигурация 1С заменяется новой версией, в которой содержатся выполненные разработчиками доработки. Все изменения, внесенные перед публикацией нового релиза, тестируются, но время от времени ошибки все-таки случаются. Если это произошло, ошибки регистрируются в специальном реестре 1С и исправляются в последующих релизах.
Получите понятные самоучители 2021 по 1С бесплатно:
При появлении ошибки Нарушение прав доступа после обновления программы нужно выполнить следующие действия:
Восстановите программу из копии и ждите исправления ошибки в следующем релизе обновления.
БухЭксперт8 советует всегда делать перед обновлением архивные копии базы данных. Это поможет восстановить базу при неудачном обновлении.
Нарушение прав доступа при чтении данных
Каждая Роль включает набор свойств для работы с объектами 1С. Они задают права на чтение, просмотр, изменение, редактирование и т. д. данных в справочниках, документах и регистрах программы.
У роли Чтение контрагентов установлено свойство Чтения на:
Нарушение прав доступа при записи данных
При записи изменений данных в справочниках, документах и регистрах программа проверяет наличие соответствующих прав у пользователя также, как и при чтении данных,
У роли Добавление и изменение сотрудников установлено свойство Изменение на:
Работа с внешними отчетами и обработками
Для работы с внешними отчетами и обработками пользователю нужно назначить одну из ролей:
Пользователь Бухгалтер при открытии файла внешней обработки: кнопка Главное меню — Файл — Открыть — файл Нарушение прав доступа получает ошибку:
Для исправления ситуации нужно добавить роль Интерактивное открытие внешних отчетов и обработок пользователю, работающему с внешней обработкой.
Добавление нового пользователя
В 1С заложена автоматическая проверка прав того набора объектов 1С, который определяется профилем групп доступа:
Программа скроет все объекты, на которые у пользователя нет прав:
Использование типовых Профилей групп доступа сводит к минимуму риск возникновения ошибки.
Ответы на вопросы
Ошибка при проведении документа Реализация (акт, накладная)
В чем может быть причина?
При записи документа должно быть установлено право изменения этого документа у пользователя. Но при проведении документа помимо него самого задействуются и другие объекты — создаются записи в различные регистры.
Ошибка при попытке открыть карточку контрагента под определенным пользователем
Если в подробном описании ошибки программа не указывает регистр, при записи данных в который происходит ошибка, вам придется выяснить это самостоятельно. Для недоработанной типовой конфигурации Бухгалтерия 3.0 при открытии справочника Контрагенты могут использоваться:
Проверьте, что у пользователя есть права на эти регистры. Более серьезный анализ ситуации выполняется по программному коду процедуры открытия формы справочника.
Эта работа требует особой подготовки и квалификации.
Ошибка при открытии внешнего отчета
См. также:
Если Вы еще не являетесь подписчиком системы БухЭксперт8:
После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Похожие публикации
Карточка публикации
(1 оценок, среднее: 5,00 из 5)
Вы можете задать еще вопросов
Доступ к форме «Задать вопрос» возможен только при оформлении полной подписки на БухЭксперт8
Нажимая кнопку «Задать вопрос», я соглашаюсь с
регламентом БухЭксперт8.ру >>