Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Задачки для любознательных :  ИРБИС Irbis
 
Задачка №2
Пользователь: Alio (IP-адрес скрыт)
Дата: 13, April, 2010 10:04

(данная проблема уже решалась в других ветках, но мне хочется ее повторить)
Необходимо запретить КОНКРЕТНОМУ пользователю АРМа Каталогизатор корректировать (и соответственно, вводить) КОНКРЕТНЫЕ поля - например, 200 и 910. Как это сделать - с МИНИМАЛЬНЫМИ затратами.

Аналогичная задачка. Запретить конкретному пользователю, корректировать документы, которые СОЗДАЛИ другие пользователи.

Re: Задачка №2
Пользователь: Муза (IP-адрес скрыт)
Дата: 14, April, 2010 15:03

Надо создать новый рабочий лист для данного пользователя, прописать имя этого РЛ в ини-файле пользователя, а в этом РЛ напротив поля 200 и 910 в режиме ввода поставить !0.

Re: Задачка №2
Пользователь: Alio (IP-адрес скрыт)
Дата: 14, April, 2010 15:57

Да, такой способ возможен - но он ОЧЕНЬ трудоемок, поскольку для конкретного пользователя надо изготовить ОРИГИГАЛЬНЫЙ комплект всех РЛ, а учитывая, что применяется ВЛОЖЕННОСТЬ РЛ, такой путь становится уже совсем неподъемным. Есть другой, более простой способ...

Re: Задачка №2
Пользователь: Gena (IP-адрес скрыт)
Дата: 16, April, 2010 16:12

Вариант с DbnFlc принимается? мы его рассматривали в какой-то другой ветке. А есть ли еще какой-то способ?


Для тех, кто пропустил ту ветку кратко излагаю. В файле DBNFLC.PFT можно внести такую проверку: если в личных настройках пользователя, работающего сейчас с записью стоят инициалы не того человека, который создал запись(первое повторение поля 907), то ему не разрешается сохраняться.
Однако, такой вариант будет вводить запрет на все, а не на отдельные поля. Я все же смотрю в сторону дополнительной программы, которая помогала бы на лету редактировать Рабочие листы.

Re: Задачка №2
Пользователь: Alio (IP-адрес скрыт)
Дата: 29, April, 2010 14:55

Придется самому давать правильный ответ.

Необходимо создать новый формат для ФЛК (записи в целом) следующего вида:

if (v200<>ref(mfn,v200)) or (v910<>ref(mfn,v910)) then '1Вы не имеете права корректировать поля 200 и 910' else &uf('6dbnflc') fi

Где dbnflc - формат ФЛК по умолчанию.

Имя этого нового формата (наприммер dbnflc1) указывается в профиле соотвествующего пользователя

dbnflc=dbnflc1


Второй вариант задачи решается аналогично.
При этом создается новый формат ФЛК вида:

if (mfn>0) and (&uf('IPRIVATE,FIO,')<>&uf('Av907^B#1)) then '1Вы не меете права корректировать записи, созданные другими пользователями' else &uf('6dbnflc') fi



Редактировано 1 раз. Последний раз 29.04.2010 14:57 пользователем Alio.

Re: Задачка №2
Пользователь: Gena (IP-адрес скрыт)
Дата: 29, April, 2010 15:44

Ээээ... значит я не до конца понимал процесс ФЛК. Из вашего примера стало понятно, что на момент сохранения записи фактически существует две: одна в самой базе данных, а вторая в буфере программы. И мы можем до того момента, как закончиться сохронение, отдельно сравнить каждое поле и подполе старой записи и отредактированной. Здорово! Я о чем-то подобном думал, но как-то застопорился на том, что нужно получить старый вариант записи. Век живи, век учись. Спасибо.

Re: Задачка №2
Пользователь: Alio (IP-адрес скрыт)
Дата: 29, April, 2010 17:58

Gena написал(а):
-------------------------------------------------------
> Ээээ... значит я не до конца понимал процесс ФЛК.
> Из вашего примера стало понятно, что на момент
> сохранения записи фактически существует две: одна
> в самой базе данных, а вторая в буфере программы.
> И мы можем до того момента, как закончиться
> сохронение, отдельно сравнить каждое поле и
> подполе старой записи и отредактированной.
Именно так - в этом-то и вся тонкость.

Re: Задачка №2
Пользователь: nwchades (IP-адрес скрыт)
Дата: 11, May, 2010 08:37

1-й
if (v200<>ref(mfn,v200)) or (v910<>ref(mfn,v910)) then '1Вы не имеете права корректировать поля 200 и 910' else &uf('6dbnflc') fi

2-й
if (mfn>0) and (&uf('IPRIVATE,FIO,')<>&uf('Av907^B#1)) then '1Вы не меете права корректировать записи, созданные другими пользователями' else &uf('6dbnflc') fi


1-й вариант у меня работает, а вот 2-й почему-то нет.... в чём может быть дело?



Редактировано 2 раз. Последний раз 11.05.2010 14:05 пользователем nwchades.

Re: Задачка №2
Пользователь: Alio (IP-адрес скрыт)
Дата: 03, August, 2012 12:20

nwchades написал(а):
-------------------------------------------------------
> 1-й
> if (v200<>ref(mfn,v200)) or (v910<>ref(mfn,v910))
> then '1Вы не имеете права корректировать поля 200
> и 910' else &uf('6dbnflc') fi
>
> 2-й
> if (mfn>0) and
> (&uf('IPRIVATE,FIO,')<>&uf('Av907^B#1)) then '1Вы
> не меете права корректировать записи, созданные
> другими пользователями' else &uf('6dbnflc') fi
>
>
> 1-й вариант у меня работает, а вот 2-й почему-то
> нет.... в чём может быть дело?

Потому что во втором варианте ошибка в формате (нет апострофа)

if (mfn>0) and (&uf('IPRIVATE,FIO,')<>&uf('Av907^B#1')) then '1Вы
не меете права корректировать записи, созданные
другими пользователями' else &uf('6dbnflc') fi



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.