gifts2017

Универсальная подсистема «Дополнительные права для документов» v 1.1

Опубликовал Александр Венгер (venger) в раздел Администрирование - Сервисные утилиты

Позволяет запрещать пользователям системы изменять уже введенные документы тех или иных авторов (запись, проведение, отмена проведения, пометка на удаление, изменение времени). Возможности настройки довольно гибки, для каждого автора каждому виду документов можно указать списки пользователей, которым запрещено изменение или разрешено. После настройки доп. прав, в случае если пользователь, откроет документ, который ему запрещено изменять, изменит его и попытается провести или записать, то это действие будет отменено и ему будет выдано соответствующее сообщение. Тоже в случае попытки отмены проведения уже проведенного документа, пометки на удаление или изменения времени документа в журналах документов.

Используются внешние компоненты:
1С++: http://www.1cpp.ru
FormEx: http://www.dorex.ru

Использование класса "Перехватчик" компоненты 1С++ позволяет минимизировать изменения конфигурации при установке надстройки. По сути, объединить конфигурации, добавить несколько строк в глобальном модуле в процедуре "ПриНачалеРаботыСистемы" для версии 1.1. Подробнее по установке в файле "setup.doc" в архиве.

В архиве лежит демо конфа, в которой есть все необходимое, чтобы ознакомиться с надстройкой и посмотреть ее в действии, пару простеньких видов документов (приход, расход товаров), общий журнал доков, регистр и отчетик по остаткам товаров, справочники товаров и пользователей, а также данная подсистема доп. прав. Все в главном меню "Наше меню". Также md'шка этой конфы Вам понадобится при установке. И в архиве лежат файлы описания подсистемы - "readme.txt", и порядка установки этой подсистемы в другую конфигурацию – "setup.doc".

Просмотр и настройка дополнительных прав производится в специальной одноименной обработке. См. скриншот. Слева в дереве двойным щелчком левой кнопкой мышки выбираем вид документа некоторого автора, после чего справа в списках пользователей будет отображено, каким пользователям запрещено изменять данный вид документа данного автора, а каким разрешено. Настройка осуществляется переносом пользователей из списка запрещенных в список разрешенных и обратно. Перенос можно производить, как двойным нажатием левой кнопкой мышки на пользователе в списке разрешенных или запрещенных, таким образом он будет перемещен в противоположный список. Или кнопками переноса всех или выделенного пользователя между списками. Кнопки со стрелочками, указывающими направление переноса, расположены между этими списками.
В случае, если добавлен новый пользователь в 1С, то, чтобы он появился в списке пользователей (как авторов документов, так и в списках запрещенных/разрешенных), нужно, чтобы он зашел (достаточно одного раза) под собой в базу 1С в режиме предприятия.

 

Дальнейшее развитие этой подсистемы идет тут:

Подсистема "Фабрика событий"

http://infostart.ru/public/71084/


Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ConfExtRightsDocs_v1.1.zip
.zip 744,29Kb
26.07.10
185
.zip 744,29Kb 185 Скачать
ConfExtRightsDocs_v1.0.zip
.zip 744,25Kb
26.07.10
168
.zip 744,25Kb 168 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Венгер (venger) 07.09.09 23:44
(0) Результат, так сказать, ознакомления с перехватчиком в 1С++ и Дерево+Таблица в FormEx:-))) Все простенько, по минимуму...
2. larissa builova (larisab) 08.09.09 00:01
При закрытии: Прекращена работа 1c:v7 starter program
Имя события проблемы: APPCRASH
Имя приложения: 1cv7s.exe
Версия приложения: 7.70.0.25
Штамп времени приложения: 41c01f3a
Имя модуля с ошибкой: ntdll.dll
Из-за версии 25 или у всех так?
3. larissa builova (larisab) 08.09.09 00:01
4. Александр Венгер (venger) 08.09.09 00:18
(2) У меня 23-й релиз, проблем не было ни на 98-й винде, ни на XP, ни на Win Server 2003.... Файловый вариант базы... Версии dll'ек, что у меня были загружены 1С++ v: 2.5.0.5 Nightly build 2007-11-12, FormEx v: 2.0.5.82 beta...
5. larissa builova (larisab) 08.09.09 00:49
Виста, 1С++ v:3.0.1.23, FormEx v: 2.0.5.92 лежат в BINe, 77 файловый.
Nightly build 2007-11-12 - это что?
6. larissa builova (larisab) 08.09.09 00:57
ntdll.dll? я его не нашла, где взять и куда положить?
7. larissa builova (larisab) 08.09.09 01:46
8. Александр Рытов (Арчибальд) 08.09.09 09:23
(4) А почему релиз 23?
(7) Виста маст дай ;))
9. Александр Венгер (venger) 08.09.09 13:12
(5) > Nightly build 2007-11-12 - это что?

Видимо дата ночной сборки... Но понял - дело в Висте;)
10. Александр Венгер (venger) 08.09.09 13:15
(8) > А почему релиз 23?

Так уж получилось;) Я ожидал скорее, откуда 98-е форточки;) Да, есть и машина с 98-й под боком;)
11. Александр Рытов (Арчибальд) 08.09.09 14:03
(10) Ну, 98 все надежнее Линолеума. На старых машинешках только и держать...
А вот 23 - это все же головняк. С таблицами.
12. Андрей Коротаев (1Снег) 11.09.09 13:26
(1) Это так 1С++ некорректно выгружается на Висте/Windows 7
13. Александр Венгер (venger) 11.09.09 23:10
(1),(12) А что если в Висте 1С'ку 7.7 запустить в режиме совместимости с XP? Свойства ярлыка запуска проги 1С, вкладка совместимость...
14. larissa builova (larisab) 11.09.09 23:12
15. Епрст (Ёпрст) 14.09.09 14:45
Еще не смотрел.. Но как-то не стыкуется описание:
>>>Использование класса "Перехватчик"
>>>добавить парупару строк во всех модулях документов в процедуре "ПриОткрытии"

Зафига делать второе, при наличии первого???
16. Александр Венгер (venger) 14.09.09 15:24
(15) Метод ПерехватитьСобытияГК:
http://www.1cpp.ru/docum/html/Hooker.html#hookeventsofgroupcontext

В модулях форм документов в процедуре при открытии добавляются такие строчки:
ОбъектПерехватчикСобытийГК = СоздатьОбъект("КлассПерехватСобытий");
глПерехватчик.ПерехватитьСобытияГК(Контекст,ОбъектПерехватчикСобытийГК);

Реализация пользовательского «КлассПерехватСобытий» лежит в обработке «КлассПерехватСобытийРеализация».

Так вот, пробовал передать групповой контекст формы дока, из глобального модуля в процедуре «ПослеОткрытия», примерно так:

Процедура ПослеОткрытия(Конт) Экспорт
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Конт.Форма);
Если ФормаРасш.ТипОбъекта()="Документ" Тогда
// Глобальная переменная глобального модуля,
// инициализируется в процедуре ПриНачалеРаботыСистемы:
// ОбъектПерехватчикСобытийГК = СоздатьОбъект("КлассПерехватСобытий");
// А тут, собственно, включаем перехват событий открытой формы дока:
глПерехватчик.ПерехватитьСобытияГК(Конт,ОбъектПерехватчикСобытийГК);
КонецЕсли;
КонецПроцедуры

Все бы ничего, но если передавать из глобального модуля в процедуре «ПослеОткрытия», то возникает проблема в пользовательском классе, в котором определены обработчики событий контекста формы, в функции-обработчике «Функция Событие_ПриЗаписи() Экспорт», получить контекст окружения, например так:

КонтОбъекта = GetThis(Контекст).ПолучитьКонтекстОкружения();

Где функция «GetThis», выглядит так: Функция GetThis(Конт) Возврат Конт; КонецФункции

Чтобы потом определить из формы какого вида документов вызвано событие, проверить доступность по правам:
Попытка
Док = КонтОбъекта.ТекущийДокумент();
Исключение
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ВыполнитьОригинальноеСобытиеГК(КонтОбъекта,"ПриЗаписи");
Возврат Рез;
КонецПопытки;
Рез=МожноРедактироватьДок(Док);

И далее в зависимости от результата метода «МожноРедактироватьДок», либо выдать предупреждение и отменить действие, возвратив 0 из функции обработчика события «ПриЗаписи», либо выполнить оригинальное событие и возвратить 1…

Так вот из глобального модуля не пашет, вернее заставить не удалось, а хотелось очень, ибо понятно, что тогда было бы еще проще встраивать в конфу, вот и пришлось вызывать обработчик событий из локального модуля формы документа таким вот образом в процедуре «ПриОткрытии»:

Процедура ПриОткрытии()
ОбъектПерехватчикСобытийГК = СоздатьОбъект("КлассПерехватСобытий");
глПерехватчик.ПерехватитьСобытияГК(Контекст,ОбъектПерехватчикСобытийГК);
...

Если есть какие-то способы сделать это проще, то буду очень признателен, если озвучишь. Так как хотелось бы уйти от необходимости вставлять во все формы доков, хоть и пару строк, но все же...
17. Епрст (Ёпрст) 14.09.09 19:39
(16) Конечно есть!
Перехватчик был специально создан, чтоб вообще не нужно было править код во всех формах...!
Перехватчик сам перехватывает ВСЕ предопределенные события формы, в том числе формекса.
ЗЫ: Смотри реализацию у меня в профиле, в Undo или в Редактор формы..
Там всё есть ...
18. Александр Венгер (venger) 17.09.09 15:10
(17) Сенкс, гляну на днях. Надо бы еще и на прямые запросы (из 1С++) переписать, чтоб быстрее летало....
19. Юра (jorjy) 27.09.09 02:25
larisab
Используйте vkloader - внешняя компонента для 1С-Предприятия 7.7, которая может загружаться без ее регистрации в реестре.
20. Александр Венгер (venger) 05.10.09 15:48
(0) Обновил, в версии 1.1, дописал класс 1С++ для перехвата событий так, чтобы внедрение подсистемы в другую конфу ограничивалось только объединением md'шки и добавлением нескольких строк в глобальный модуль, по совету Ёпрст'а.
21. Альтаир (Altair777) 05.10.09 15:52
22. Артур Аюханов (artbear) 05.10.09 16:08
(20) Ага, я Перехватчик в 1С++ именно для этого и сделал, чтобы минимизировать изменение конфы и упростить добавление универсальных механизмов.
Рад, что у тебя получилось целая система контроля прав.

Как автор, Рекомендую юзать последнюю версию 1С++ 3.Х для исключения различных глюков в реализации Перехватчика и исключения неожиданных тонких эффектов

ЗЫ Кстати, одна из задач, ради которой мной проектировался Перехватчик - задача контроля доступа.
Но я так до ее решения и не дошел :)
23. Артур Аюханов (artbear) 05.10.09 16:11
(22+) Ну и соответственно, ФормЕкс также желателен последний, т.к. в последних версиях ФормЕкс мы с Алексеем фиксили многие баги, в т.ч. и баги взаимодействия 1С++ и ФормЕкс.
Говорю уже как разработчик и 1С++, и ФормЕкс :)
24. Александр Венгер (venger) 31.05.10 01:19
(21),(22),(23) Дальнейшее развитие этой подсистемы идет тут:
Подсистема "Фабрика событий"
http://infostart.ru/public/71084/
25. Илья (gucci76) 21.07.10 13:37
В обработке КлассПерехватСобытийРеализация есть
Функция Событие_ПриЗаписи() Экспорт
При записи документа она должна срабатывать.
Она не срабатывает. Почему?
26. Александр Венгер (venger) 26.07.10 12:12
(0) Поправил вызов оригинальных событий...
27. Sergey Ponomarev (SPonomareff) 21.04.11 09:58
Доброго времени суток. Давно скачивал эту разработку. Все отлично! Спасибо. Единственное что у меня не работает- это не показывается список пользователей кому разрешено. То есть с самого начала показывается, а потом при повторном просмотре прав на документ список пропадает. Но это мелочи жизни.
28. Олег Почекутов (PochekutovOleg) 15.11.11 14:39
Можно решить и штатными способами
29. Осипов Сергей (fixin) 27.02.12 18:59
как то не алле.
Каждому пользователю прописывать права на каждый документ?
Это долго и не модно. Где регистры правил?
Воздержусь от плюса.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа