Контроль записи/проведения документов в заданном интервале дней

17.11.15

Администрирование - Информационная безопасность

Данное решение позволяет гибко настраивать правила записи и проведения документов для пользователей, групп пользователей.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Конфигурация с объектами
.cf 23,31Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

Решение не претендует на оригинальность, но, возможно, поможет кому-нибудь.

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

Настройка правил

Кроме регистра добавлена подписка на событие записи документа.

Количество дней записи/проведения документа определяется следующим образом: ищутся правила, заданные именно для пользователя, если их нет, то ищем правила, заданные для группы, в которой состоит пользователь, из них выбирается минимальное количество дней. Если нет заданных правил для документа - то запись/проведение разрешается. Если правила есть, то дата документа проверяется на вхождение в заданный временной интервал, при прохождении проверки запись разрешается, в противном случае пользователю выдается сообщение, и запись прерывается.

 

Функция ПроверитьВозможностьЗаписиДокумента(СсылкаДок, Пользователь, РежимЗаписи)
	КолДней = Неопределено;
	
	//проверим есть ли в регистре правила контроля по данному документу для переданного
	//пользователя, либо группы в которую он входит
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПравилаКонтроляДокументов.КолДнейПроведение КАК КолДнейПроведение,
	|	ПравилаКонтроляДокументов.КолДнейЗапись КАК КолДнейЗапись
	|ИЗ
	|	РегистрСведений.ПравилаКонтроляДокументов КАК ПравилаКонтроляДокументов
	|ГДЕ
	|	ПравилаКонтроляДокументов.Пользователь = &Пользователь
	|	И ТИПЗНАЧЕНИЯ(ПравилаКонтроляДокументов.Документ) = ТИПЗНАЧЕНИЯ(&Документ)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ГруппыДоступа.Ссылка КАК ГруппаДоступа,
	|	ПравилаКонтроля.КолДнейПроведение КАК КолДнейПроведение,
	|	ПравилаКонтроля.КолДнейЗапись КАК КолДнейЗапись
	|ИЗ
	|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступа
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПравилаКонтроляДокументов КАК ПравилаКонтроля
	|		ПО (ПравилаКонтроля.Пользователь = ГруппыДоступа.Ссылка)
	|ГДЕ
	|	ГруппыДоступа.Пользователь = &Пользователь
	|	И ТИПЗНАЧЕНИЯ(ПравилаКонтроля.Документ) = ТИПЗНАЧЕНИЯ(&Документ)
	|";
	
	Запрос.УстановитьПараметр("Документ", СсылкаДок.Ссылка);
	Запрос.УстановитьПараметр("Пользователь", Пользователь);
		
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	//сначала проверим есть ли правило для пользователя
	Выборка = РезультатЗапроса[0].Выбрать();
	Если Выборка.Следующий() Тогда
		КолДней = ?(РежимЗаписи = РежимЗаписиДокумента.Запись, Выборка.КолДнейЗапись, Выборка.КолДнейПроведение);
	КонецЕсли; 
	
	//для пользователя правил нету, возможно есть правило для групп в которых находится пользователь
	Если КолДней = Неопределено Тогда
		ПравилаПоГруппам = РезультатЗапроса[1].Выгрузить();
		Если ПравилаПоГруппам.Количество() Тогда
			КолДнейПроведение = Неопределено;
			КолДнейЗапись = Неопределено;
			//выбираем наименьшее количество дней из выбранных правил
			Для каждого ТекПравило Из ПравилаПоГруппам Цикл
				КолДнейПроведение = ?((КолДнейПроведение = Неопределено) 
					ИЛИ (ТекПравило.КолДнейПроведение < КолДнейПроведение И ТекПравило.КолДнейПроведение <> -1), 
					ТекПравило.КолДнейПроведение, КолДнейПроведение);
				КолДнейЗапись = ?((КолДнейЗапись = Неопределено) 
					ИЛИ (ТекПравило.КолДнейЗапись < КолДнейЗапись И ТекПравило.КолДнейЗапись <> -1), 
					ТекПравило.КолДнейЗапись, КолДнейЗапись);	
			КонецЦикла; 
			
			КолДней = ?(РежимЗаписи = РежимЗаписиДокумента.Запись, КолДнейЗапись, КолДнейПроведение);
		КонецЕсли; 
	КонецЕсли; 
	
	Если КолДней <> Неопределено И КолДней <> -1 Тогда 
		//ищем разницу в днях между текущей датой и датой документа, 
		//проверяем чтобы она не превышала заданое в правилах количество
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|   РАЗНОСТЬДАТ(&ДатаДокумента, &ТекущаяДата, ДЕНЬ) КАК РазностьДат
		|";
		
		Запрос.УстановитьПараметр("ДатаДокумента", СсылкаДок.Дата);
		Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			Если Выборка.РазностьДат > КолДней Тогда
				Возврат Ложь;
			КонецЕсли; 
		КонецЕсли; 
	КонецЕсли; 
	
	//по данному документу для пользователя не заданно явных правил, контроль пройден
	Возврат Истина;
КонецФункции

Процедура ПодпискаНаСобытиеЗаписиДокументаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
	//Проверяем есть ли заданное количество дней для данного документа
	КонтрольПройден = ПроверитьВозможностьЗаписиДокумента(Источник, ПараметрыСеанса.ТекущийПользователь, РежимЗаписи);
	Если НЕ КонтрольПройден Тогда
		Отказ = Истина;
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Согласно правилам контроля документов, вам отказано в "
			+ ?(РежимЗаписи = РежимЗаписиДокумента.Запись, "записи",
				?(РежимЗаписи = РежимЗаписиДокумента.Проведение, "проведении", "отмене проведения")) 
			+ " документа! Обратитесь к системному администратору!";
		Сообщение.Сообщить();
	КонецЕсли; 
КонецПроцедуры


Данное решение в минимальное объеме использует функционал типовых решений 1С. Достаточно просто встраивается в типовые решения, для самописных придется немного поработать напильником. Для этого вам потребуется перенести в свою конфигурацию: регистр сведений "ПравилаКонтроляДокументов", общий модуль "МодульКонтроляДокументов" и подписку на событие "ПодпискаНаСобытиеЗаписиДокумента". Используются управляемые формы.

Решение прошло обкатку на УТ 11.

запись проведение правила документы

См. также

Информационная безопасность Системный администратор Программист Платные (руб)

AUTO VPN (portable) - автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    15427    25    32    

35

Информационная безопасность Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Предлагается внешняя обработка для просмотра данных в формате ASN1. Есть 2 режима: загрузка из бинарного формата и из BASE64. Реализована функция извлечения всех сертификатов, которые можно найти в ASN1-файле. В дополнении к этому продукту предлагается методическая помощь по вопросам, связанным с технической реализацией криптографии и шифрования в 1С.

2400 руб.

29.08.2016    30079    9    1    

10

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    6352    kamisov    17    

60

Информационная безопасность Программист Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    7611    PROSTO-1C    10    

39

Информационная безопасность Программист Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    2461    platonov.e    1    

23

Информационная безопасность Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    6299    20    soulner    8    

32

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    7362    50    Silenser    12    

24
Оставьте свое сообщение