1с прав в запросе

Использовать конструкцию «ВЫРАЗИТЬ»:
Код 1C v 8.х

С целью приведения строк неограниченной длины к строкам ограниченной длины рекомендуется использовать операцию приведения типа ВЫРАЗИТЬ() :
Код 1C v 8.х

« Как стать программистом 1С » Язык 1С » 1С Сред, 1С Лев, 1С Прав — подстрока

1С Сред, 1С Лев, 1С Прав — подстрока

Функции 1С Сред(Строка, СПозиции, КоличествоСимволов), 1С Лев(Строка, КоличествоСимволов) и 1С Прав(Строка, КоличествоСимволов) возвращают часть строки (т.е. подстроку).

  • Выполняем 1С Сред(«Ежик смеялся и кушал кактус», 6, 7) //с позиции буквы «х» — 7й, 6 букв
  • 1С возвращает «смеялся»
  • Выполняем 1С Лев(«Ежик смеялся и кушал кактус», 4) //с начала (слева) 4 букв
  • 1С возвращает «Ежик»
  • Выполняем 1С Прав(«Ежик смеялся и кушал кактус», 6) //с конца (справа) 6 букв
  • 1С возвращает «кактус»

Усовершенствуем наш анализатор текста. Пусть на вход ему будет подаваться номер телефона, а он форматирует его, например «89015553366 в +7(901)555-33-66», с использованием функций 1С Сред, 1С Лев, 1С Прав.

В результате выполнения нашей усовершенствованной функции, 1С нам сообщит:
Было: 89015553366
Было (отформатировано): 9015553366
Стало: +7(901)55-53-66

Проголосовать за этот пост:

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

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

Михаил Сайко

Конструкцию «РАЗРЕШЕННЫЕ» можно часто увидеть в запросах в системах 1С, в которых используются ограничения доступа на уровне записей. Это достаточно полезный механизм, позволяющий тонко настроить права для пользователей в зависимости от их значений. К примеру, разные менеджеры по продажам должны видеть документы только своих контрагентов. И если они пользуются одним отчетом, то именно использование оператора «РАЗРЕШЕННЫЕ» в запросе поможет избежать ошибки.

Возникновение ошибки

Если по какой-то причине не использовалась конструкция «РАЗРЕШЕННЫЕ», а в запросе выбираются данные пользователями, у которых настроено RLS, возникнет ошибка. Система 1С сообщит нам о том, что у текущего пользователя не хватает прав, чтобы выполнить запрос. При обычной выборке 1С последовательно берет записи из таблицы базы данных и читает их с правами пользователя. Когда попадается строка с данными скрытыми от пользователя с помощью RLS, запрос останавливается с ошибкой.

При добавлении команды «РАЗРЕШЕННЫЕ» после ключевого слова «ВЫБРАТЬ» ошибка уйдет, и наш запрос успешно выполнится независимо от настроек RLS. Помните, что данный оператор добавляется только в выборку верхнего уровня и влияет на весь запрос целиком и вложенные алгоритмы. Многие программисты так и поступают практически в каждом случае, считая это идеальным решением. Конечно, добавить «РАЗРЕШЕННЫЕ» – простейшее действие, но оно имеет существенный недостаток.

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

Именно поэтому при написании запроса с использованием оператора «РАЗРЕШЕННЫЕ» необходимо помнить про его особенности. Грамотное его применение способно существенно облегчить работу пользователей и убрать лишнюю информацию из их интерфейса. Но и слишком частое его использование приведет к тому, что отдельным сотрудникам может подаваться недостоверная информация. Это означает, что необходимо найти пути отражения ограниченной информации без использования «РАЗРЕШЕННЫЕ» в запросе 1С.

Как можно обойтись без «РАЗРЕШЕННЫЕ»?

После решения о том, что для важных отчетов лучше обойтись без использования конструкции «РАЗРЕШЕННЫЕ», нужно решить, как избежать ошибок. Исходя из вышенаписанного, нам нужно, чтобы при выполнении запроса система выбирала только те записи, права на которые есть у пользователя. Существует два способа получить нужный результат.

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

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

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

Избавиться от нее можно с помощью конструкции «Попытка», написав более дружелюбное сообщение об ошибке. Это поможет пользователям самостоятельно осознать свои ошибки и исправить их, не обращаясь за помощью к администраторам. Если отчет написан на СКД, то, чтобы воспользоваться этим методом, придется написать код исполнения отчета вручную в модуле объекта.

Разграничение прав доступа на уровне записей – достаточно сложная и тонкая настройка, особенно в системах с множеством пользователей. Оператор «РАЗРЕШЕННЫЕ» существенно облегчает учет ограничений в запросах. Но подходить к его использованию нужно, предварительно продумав, не возникнет ли впоследствии недопонимания между пользователями. Иногда лучше обязать сотрудников настраивать лишний фильтр, чем выискивать источники несоответствия в будущем.

Оперативная помощь по 1С — от простых консультаций до сложных внедрений. Протестируйте качество нашей работы — получите первую консультацию в подарок.

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: