Универсальная подсистема «Дополнительные права для документов» 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С в режиме предприятия.

 

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

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

//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) 2042 07.09.09 23:44 Сейчас в теме
(0) Результат, так сказать, ознакомления с перехватчиком в 1С++ и Дерево+Таблица в FormEx:-))) Все простенько, по минимуму...
2. larissa builova (larisab) 158 08.09.09 00:01 Сейчас в теме
При закрытии: Прекращена работа 1c:v7 starter program
Имя события проблемы: APPCRASH
Имя приложения: 1cv7s.exe
Версия приложения: 7.70.0.25
Штамп времени приложения: 41c01f3a
Имя модуля с ошибкой: ntdll.dll
Из-за версии 25 или у всех так?
3. larissa builova (larisab) 158 08.09.09 00:01 Сейчас в теме
4. Александр Венгер (venger) 2042 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) 158 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) 158 08.09.09 00:57 Сейчас в теме
ntdll.dll? я его не нашла, где взять и куда положить?
7. larissa builova (larisab) 158 08.09.09 01:46 Сейчас в теме
8. Александр Рытов (Арчибальд) 2655 08.09.09 09:23 Сейчас в теме
(4) А почему релиз 23?
(7) Виста маст дай ;))
9. Александр Венгер (venger) 2042 08.09.09 13:12 Сейчас в теме
(5) > Nightly build 2007-11-12 - это что?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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