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

28.11.11

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

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

1      Описание

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

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

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

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

2      Реализация

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

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

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

КонецЕсли;

 

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

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

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

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

 

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

Реквизиты

Тип

Комментарий

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

Строка (100)

 

Комментарий

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

 

 

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

 

Тип

Комментарий

Измерения

 

 

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

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

 

Политика

Политика

 

Ресурсы

 

 

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

Дата

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

 

 

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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    32805    TitanLuchs    108    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17901    bayselonarrend    127    

68

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

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    22559    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    39548    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    33575    dsdred    106    

149

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

23.06.2024    29328    bayselonarrend    22    

177

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

13.03.2024    15802    dsdred    22    

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