Автоматизация бизнеса

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

e-mail: info@programmist1c.ru

Минимальный объем работ от 50 000 рублей
  •   Удаленный админ
  •   Карта сайта
  •   Контакты


  • Поиск
     

    v8: Контроль над исполнением всех запросов в 1С

    Способ, позволяющий перехватить выполнение всех запросов в 1С. Полезно для контроля прав доступа.
    Автор статьи: Гений 1С | Редакторы: Волшебник
    Последняя редакция №2 от 12.09.06 |


    Ключевые слова: запрос,права доступа


    Введение


    В контроле прав доступа остается одно узкое место - нет возможности проконтролировать запросы, которые выполняют пользователи.
    Было бы неплохо, если можно было бы отлавливать событие - ПередВыполнениемЗапроса(Запрос), но увы, 1С не предоставляет нам такой возможности.

    Но не все потеряно, парсинг творит чудеса.

    Методика


    Объект запроса не может быть создан иначе как через вызов конструкции вида:
    Запрос=Новый Запрос(ТекстЗапроса);

    Возможные варианты этого конструктора:
    Запрос=Новый Запрос;
    Запрос=Новый Запрос();
    Запрос=Новый Запрос(ТекстЗапроса);


    Следовательно мы должны заменить все обращения к конструктору на конструкции вида:
    Запрос=Обработки.ЛовушкаЗапроса.Создать().УстановитьТекст(ТекстЗапроса);

    Где УстановитьТекст возвращает сам экзмепляр обработки-ловушки.

    Ну или, заведя глобальную функцию можно сделать красиво:
    Запрос=НовыйЗапрос(ТекстЗапроса);


    Т.е. обрабатываем все тексты модулей и там, где встречаем конструктор запроса, заменяем "Новый Запрос" или "Новый Запрос(" на "Обработки.ЛовушкаЗапроса.Создать().УстановитьТекст(ТекстЗапроса)" или на "НовыйЗапрос(".

    Таким образом, вместо объекта "Запрос" создается обработка "Ловушка запроса", которая содержит такие же свойства и методы, что и объект "Запрос".

    Теперь, при выполнении запроса, сначала сработает метод "Выполнить" ловушки, произойдет контроль прав доступа, автоматическое ограничение условий и только после этого выполнение кода запроса.

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

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

    Дополнительные соображения


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

    Данный метод позволит обойтись без РЛС. Таким образом, пользователи, запускающие например оборотно-сальдовую ведомость, будут видеть результаты только по доступным им счетам, а по остальным счетам не увидят никаких данных.

    Просто, красиво, элегантно, как всегда - от Гения 1С. Идея родилась у меня в ходе неспешного обсуждения в аське с TormozIT вопросов парсинга текста запроса.
    21.02.18 | 10:31


    30.11.16 | 20:25


    28.11.16 | 09:22


    26.11.16 | 08:19


    22.11.16 | 20:17


    19.11.16 | 10:14


    18.11.16 | 20:09




    Внедрение 1С Автоматизация 1С Доработка 1С Сопровождение 1С Обслуживание 1С Программирование 1С 8 Hастройка 1С Карта сайта Контакты