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

Публикация № 22202

Администрирование - Администрирование данных 1С - Сервисные утилиты

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

Используются внешние компоненты:
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/


49

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

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

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. venger 2083 07.09.09 23:44 Сейчас в теме
(0) Результат, так сказать, ознакомления с перехватчиком в 1С++ и Дерево+Таблица в FormEx:-))) Все простенько, по минимуму...
12. 1Снег 11 11.09.09 13:26 Сейчас в теме
(1) Это так 1С++ некорректно выгружается на Висте/Windows 7
13. venger 2083 11.09.09 23:10 Сейчас в теме
(1),(12) А что если в Висте 1С'ку 7.7 запустить в режиме совместимости с XP? Свойства ярлыка запуска проги 1С, вкладка совместимость...
14. larisab 159 11.09.09 23:12 Сейчас в теме
2. larisab 159 08.09.09 00:01 Сейчас в теме
При закрытии: Прекращена работа 1c:v7 starter program
Имя события проблемы: APPCRASH
Имя приложения: 1cv7s.exe
Версия приложения: 7.70.0.25
Штамп времени приложения: 41c01f3a
Имя модуля с ошибкой: ntdll.dll
Из-за версии 25 или у всех так?
4. venger 2083 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...
8. Арчибальд 2708 08.09.09 09:23 Сейчас в теме
(4) А почему релиз 23?
(7) Виста маст дай ;))
10. venger 2083 08.09.09 13:15 Сейчас в теме
(8) > А почему релиз 23?

Так уж получилось;) Я ожидал скорее, откуда 98-е форточки;) Да, есть и машина с 98-й под боком;)
11. Арчибальд 2708 08.09.09 14:03 Сейчас в теме
(10) Ну, 98 все надежнее Линолеума. На старых машинешках только и держать...
А вот 23 - это все же головняк. С таблицами.
3. larisab 159 08.09.09 00:01 Сейчас в теме
5. larisab 159 08.09.09 00:49 Сейчас в теме
Виста, 1С++ v:3.0.1.23, FormEx v: 2.0.5.92 лежат в BINe, 77 файловый.
Nightly build 2007-11-12 - это что?
9. venger 2083 08.09.09 13:12 Сейчас в теме
(5) > Nightly build 2007-11-12 - это что?

Видимо дата ночной сборки... Но понял - дело в Висте;)
6. larisab 159 08.09.09 00:57 Сейчас в теме
ntdll.dll? я его не нашла, где взять и куда положить?
7. larisab 159 08.09.09 01:46 Сейчас в теме
15. Ёпрст 1035 14.09.09 14:45 Сейчас в теме
Еще не смотрел.. Но как-то не стыкуется описание:
>>>Использование класса "Перехватчик"
>>>добавить парупару строк во всех модулях документов в процедуре "ПриОткрытии"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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