gifts2017

РасширПравПользовВ_УБРБД_С_FormEx.dll (Изменённое)

Опубликовал S_S (sergiowood) в раздел Программирование - Практика программирования

Цель - запрет/разрешение исправлений документов в зависимости от автора создателя Документа. Делал для УРБД,а там как душе угодно.
Отдельная благодарность АЛЬФУ за FormEx. Всё от туда. И плюсы ему, а минусы мне.
// Цель -запрет/разрешение исправлений документов в зависимости от автора создателя Документа и Наличия в квартале расчёта Фин рез. //В системе должен быть справочник пользователи // код-число // наименование-строка // в системе констант добавить константу (текст- длинна (по желанию(у меня 5ть))) // эта константа будет разрешать редактировать все документы. // у меня Константа.РедактироватьДок="TROY" // в глобальнике в процедуре ПриНачалеРаботыСистемы добавить // механизм авторства
Спр 
= СоздатьОбъект("Справочник.Пользователи")
;
	Спр
.
НайтиПоНаименованию
(
ИмяПользователя
(), 1)
;
	Пользователь 
=
Спр
.
ТекущийЭлемент
()
;
	
Если
Пользователь
.
Выбран
() = 0 Тогда
Спр
.
Новый
()
;
		Спр
.
Наименование 
=
ИмяПользователя
()
;
		Спр
.
Записать
()
;
		Пользователь 
=
Спр
.
ТекущийЭлемент
()
;
	
КонецЕсли
;
	
Если
Пользователь
="" Тогда
ЗавершитьРаботуСистемы
()
;

	
КонецЕсли
;



///Добавить в глоб. Приначалеработы системы добавить dll-ы Если
ЗагрузитьВнешнююКомпоненту
("TurboMD.dll") = 0 Тогда// не обязательно
Предупреждение
("Неудачная попытка загрузить TurboMD.dll")
;
		СтатусВозврата
(0)
;
		
Возврат
;
	
КонецЕсли
; 
	
Если
ЗагрузитьВнешнююКомпоненту
("1CPP.dll") = 0 Тогда// не обязательно
Предупреждение
("Неудачная попытка загрузить 1CPP.dll")
;
		СтатусВозврата
(0)
;
		
Возврат
;
	
КонецЕсли
;
	
//пытаемся загрузить компоненту в формате штатной ВК Если
ЗагрузитьВнешнююКомпоненту
("FormEx.dll") = 0 Тогда// обязательно
Предупреждение
("Неудачная попытка загрузить FormEx.dll")
;
		СтатусВозврата
(0)
;
// можно глушить, а лучше не глушить Возврат
;
	
КонецЕсли
;


//Добавить в любое удобное место глобального модуяя / ///========================================== Добавил для запрета Работы в УРБД Процедура
ПроверкаРазрешенияРедактирования
(
Конт
) Экспорт
КретДата
=""
;
 	КретДата
=
Конт
.
ДатаДок;
 	
//Сообщить("КретДата=="+КретДата);
ФинРез
=СоздатьОбъект("Документ.ФинансовыеРезультаты")
; 
 	ФинРез
.
ВыбратьДокументы
(
НачКвартала
(
КретДата
),
КонКвартала
(
КретДата
))
; 
 	ДокумЕсть
=0
;
 	
Пока
ФинРез
.
ПолучитьДокумент
()=1 Цикл Если
ФинРез
.
Проведен
()=1 Тогда
Предупреждение
("У ВАС УВАЖАЕМЫЙ ЕСТЬ ФИН РЕЗЕЛЬТАТ, НАДОБНО СДЕЛАТЬ ЕГО НЕ ПРОВЕДЁННЫМ")
;	
 		ДокумЕсть
=1
; 
 		
Если
Конт
.
Проведен
()=0 Тогда
Конт
.
Форма
.
Закрыть
(0)
;
 		
Перейти
~
1
;
 		
Прервать
;
 		
КонецЕсли
;
 		
// Сообщить("ДокФинРез="+ФинРез.ТекущийДокумент()); Прервать
;
 		
 	
КонецЕсли
;
 	
КонецЦикла
;
 	
 	
Если
ДокумЕсть
=0
тогда
 	
Если
СокрЛП
(Константа.
РедактироватьДок
)<>"TROY" Тогда Если
Конт
.
Автор
<>
Пользователь  
Тогда Если
Конт
.
Проведен
()=1 Тогда
Конт
.
Форма
.
ТолькоПросмотр
(1)
;
ФормаРасш 
= СоздатьОбъект("РасширениеФормы")
; 
 ФормаРасш
.
УстановитьФорму
(
Конт
.
Форма
)
;
  
//Идентиф=""; //Заголовок=""; Для
Х 
= 0 По
ФормаРасш
.
КоличествоАтрибутов
() - 1 Цикл //Идентиф= Строка(ФормаРасш.ПолучитьАтрибут(Х).Идентификатор); //Заголовок=Строка(ФормаРасш.ПолучитьАтрибут(Х).Заголовок); Если (
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Тип 
= 3) Тогда // нужно оставить доступ на кнопку "печать" или .... Если (
Строка
(
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Заголовок
)="&Печать")
или 
(
Строка
(
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Заголовок
)="Печать")Тогда
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Доступность 
= 1
; 
 		ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Видимость 
= 1
;  
 	
Иначе
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Доступность 
= 0
; 
 		ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Видимость 
= 0
;
 		
КонецЕсли
;
 	
КонецЕсли
;
 Конеццикла;	
		
КонецЕсли
;
		 
	
КонецЕсли
;	
КонецЕсли
;  

Иначе Если
СокрЛП
(Константа.
РедактироватьДок
)<>"TROY" Тогда
Конт
.
Форма
.
ТолькоПросмотр
(1)
;
ФормаРасш 
= СоздатьОбъект("РасширениеФормы")
; 
 ФормаРасш
.
УстановитьФорму
(
Конт
.
Форма
)
;
  
//Идентиф=""; //Заголовок=""; Для
Х 
= 0 По
ФормаРасш
.
КоличествоАтрибутов
() - 1 Цикл //Идентиф= Строка(ФормаРасш.ПолучитьАтрибут(Х).Идентификатор); //Заголовок=Строка(ФормаРасш.ПолучитьАтрибут(Х).Заголовок); Если (
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Тип 
= 3) Тогда // нужно оставить доступ на кнопку "печать" или .... Если (
Строка
(
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Заголовок
)="&Печать")
или 
(
Строка
(
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Заголовок
)="Печать")Тогда
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Доступность 
= 1
; 
 		ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Видимость 
= 1
;  
 	
Иначе
ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Доступность 
= 0
; 
 		ФормаРасш
.
ПолучитьАтрибут
(
Х
).
Видимость 
= 0
;
 		
КонецЕсли
;
 	
КонецЕсли
;
 Конеццикла;
 
КонецЕсли
;
КонецЕсли
;
 ~
1
:
ДокумЕсть
=0
; 
// страховка КонецПроцедуры //===================== Процедура
ПослеОткрытия
(
Конт
) Экспорт
ФормаРасш 
= СоздатьОбъект("РасширениеФормы")
;
	ФормаРасш
.
УстановитьФорму
(
Конт
.
Форма
)
; 
//Сообщить("Открыта форма: "+ФормаРасш.ПолныйТипОбъекта()+" ["+ФормаРасш.ПолныйПуть()+"]"); Если
ФормаРасш
.
ТипОбъекта
()="Документ" Тогда
ПроверкаРазрешенияРедактирования
(
Конт
)
;
	
КонецЕсли
;

     	
КонецПроцедуры // ======================================

См. также

Подписаться Добавить вознаграждение
Комментарии
1. АЛьФ (АЛьФ) 23.08.07 16:41
Вместо "Перейти ~1;" лучше поставить "Возврат;".