Действующие политики или именованные булевы Константы

28.11.11

Разработка - Механизмы платформы 1С

Как часто Вам приходилось использовать временные именованные булевы константы в коде? Ключевое здесь слово «временные». Не всегда удобно вводить константу, чтобы потом ее удалить или использовать уже по другому назначению...

1      Описание

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

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

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

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

2      Реализация

Примеры использования политик:

//
//  Присвоение переменной булевого значения действия политики
КонтрольСтатусов   = ДействуетПолитика("КонтрольСтатусаОбъектов", ТекущаяДата());
//
//  Проверка действия хотя бы одной из политик
ДействуетПолитикаКонтроля = Не ДействуетПолитика("НЕ_ИСПОЛЬЗОВАТЬ_КОНТРОЛЬ_ТЧ_ДДС|Администратор", Дата);
//
//  Проверка действия политики для кода, который находится в режиме тестирования
Если ДействуетПолитика("ТЕСТ_ПРОВЕДЕНИЯ_ЗАЯВКА_НА_ОПЛАТУ") Тогда

КонецЕсли;
//
//  Выполнение действия для группы пользователей, определенной для опроса
Если ДействуетПолитика("ОпросПользователей", ТекущаяДата()) Тогда

КонецЕсли;

 

3      Спецификация

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

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

Структура объектов метаданных:

 

Таблица 1. Справочник Политики

Реквизиты

Тип

Комментарий

Наименование

Строка (100)

 

Комментарий

Неограниченная строка

 

 

Таблица 2. Регистр сведений ДействующиеПолитики

 

Тип

Комментарий

Измерения

 

 

Пользователь

Пользователи, ГруппыПользователей

 

Политика

Политика

 

Ресурсы

 

 

ДатаОкончания

Дата

Может быть пустой

 

 

// ДействуетПолитика
//
// Параметры
//  сПолитика    – строка – Имя политики или список имен политик, разделенных знаком "|" (знак означает ИЛИ)
//                        Пример: ИМЯ_ПОЛИТИКИ1|ИМЯ_ПОЛИТИКИ2|ИМЯ_ПОЛИТИКИ3
//  ДатаДействия – дата, на которую проверяется действие политики (включительно), параметр необязателен
//
// Возвращаемое значение:
//   Булево      – Истина - одна из политик действует, Ложь - ни одна не действует
//  Автор: Калякин А.Г. infostart.ru, 2011
Функция ДействуетПолитика(сПолитика, ДатаДействия=Неопределено) Экспорт
   
МассивТокенов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(сПолитика);
   
Запрос = Новый Запрос("
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |   ДействующиеПолитики.Пользователь,
        |   ДействующиеПолитики.Политика
        |ИЗ
        |   РегистрСведений.ДействующиеПолитики.СрезПоследних("
+?(ДатаДействия=Неопределено, "", "&ДатаДействия")+", Политика В
        |                   (ВЫБРАТЬ
        |                       Политики.Ссылка
        |                   ИЗ
        |                       Справочник.Политики КАК Политики
        |                   ГДЕ
        |                       Политики.Наименование В (&МассивТокенов))
        |               И (Пользователь = &Пользователь
        |                   ИЛИ Пользователь = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
        |                   ИЛИ Пользователь В (
        |                       ВЫБРАТЬ
        |                           ГруппыПользователей.Ссылка
        |                       ИЗ
        |                           Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователей
        |                       ГДЕ
        |                           ГруппыПользователей.Пользователь = &Пользователь
        |                   )
        |                   ИЛИ Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)
        |)) КАК ДействующиеПолитики
        |"
+?(ДатаДействия=Неопределено, "", " ГДЕ &ДатаДействия )
    );
   
Запрос.УстановитьПараметр("ДатаДействия" , ?(ДатаДействия=Неопределено, Неопределено, НачалоДня(ДатаДействия)) );
   
Запрос.УстановитьПараметр("ПустаяДата"   , '00010101');
   
Запрос.УстановитьПараметр("Пользователь" , ПараметрыСеанса.ТекущийПользователь);
   
Запрос.УстановитьПараметр("МассивТокенов", МассивТокенов);
   
Действует = Не Запрос.Выполнить().Пустой();
    Возврат
Действует;
КонецФункции

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

23.06.2024    7451    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5943    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    17672    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11224    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

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

06.10.2023    23761    SeiOkami    48    

135

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18831    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    14732    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. iov 407 25.11.11 11:40 Сейчас в теме
(0) Вот только не надо говорить что не знаете про разукрашку.... :!:
2. kalyaka 1105 25.11.11 14:40 Сейчас в теме
(1) iov, знаю, пока денег нету :)
3. iov 407 25.11.11 14:42 Сейчас в теме
4. Tiger77 69 25.11.11 18:40 Сейчас в теме
Огромный плюс за идею и ее реализацию. Небольшой минус за оформление.
5. it_nazarov 01.12.11 11:12 Сейчас в теме
Отличная идея и хорошая реализация, как с точки зрения программиста и аналитика, так и с точки зрения пользователя и управленца. Не вижу ни одного отрицательного момента.
6. пользователь 02.12.11 22:14
Сообщение было скрыто модератором.
...
Оставьте свое сообщение