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

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)

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

13.03.2024    2557    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5890    dsdred    53    

83

Как готовить и есть массивы

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

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

24.01.2024    5845    YA_418728146    25    

68

Планы обмена VS История данных

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

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

11.12.2023    6961    dsdred    36    

113

1С-ная магия

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

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

06.10.2023    19047    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

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

14.09.2023    12758    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9381    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6524    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. iov 406 25.11.11 11:40 Сейчас в теме
(0) Вот только не надо говорить что не знаете про разукрашку.... :!:
+
2. kalyaka 1056 25.11.11 14:40 Сейчас в теме
(1) iov, знаю, пока денег нету :)
+
3. iov 406 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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение