Проверка номера документа

  • Автор темы Domino_Maddog
  • Дата начала
D

Domino_Maddog

#1
г-да, требуется Ваша подсказка куда и как копать.
Есть некое приложение в котором пользователи в документ вводят номер.В приложение есть поля Reders и Authors.
До этого проверка осуществлялась в QuerySave дока так как номер надо проверять до сохранения, но тут полезли,
косяки из-за того что пользователи имею не всегда доступ к другим доком. Задумался написать агент который бы стартовал
с правами сервера и возвращал параметр о возможности записи, но не совсем понял как это делать.
Можно делать через поля дока, но хотелось бы это более правильно организовать.
 
D

Domino_Maddog

#3
это приложение работает с внешними контрагентами, туда заносятся номера счетов на оплату (которые надо оплачивать), автоматом не получится. Внутр нумерация есть.
Нужен именно контроль номера счета.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Включаешь блокировку(F1 + Document locking), создаешь документ, хранящий номер(или номера). Когда надо получить номер, то блокируешь этот документ, получаешь номер и разблокируешь обратно.
 
K

Klido

#5
ему скорее надо проверить нет ли уже такого номера, а у автора нет возможности увидеть доки...
ну да, я бы агентом под сервером и делал...
 
D

Domino_Maddog

#6
ему скорее надо проверить нет ли уже такого номера, а у автора нет возможности увидеть доки...
ну да, я бы агентом под сервером и делал...
Именно это мне и надо.
Вопрос как передавать параметр, через поле этого дока или как то ещё.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
Дублируй номера в отдельных открытых документах.
 
K

Klido

#9
а зачем дублировать?
юзер - автор, делаешь tmp док, передаешь его в агент, который в док же запишет да или нет, на выходе считываешь и прибиваешь (или админским агентом косишь по факту)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 233
18
#10
Domino_Maddog
создай отдельную базу, туда выкладываются маленькие доки, содержащие уже зарегистрированные номера и по этой базе делай сверку ;)
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#13
Люди, проставляющие номера счетов, в большинстве случаев относятся к одной группе или роли по доступу к функционалу. Как вариант: добавить роль/группу и при создании дока вносить её в поле типа Readers или Authors.
Если надо чтобы оператор видел только свои доки, то либо внедрённый вид + Show single category либо с помощью фильтра (@SetViewInfo).
 

Кирилл Шваб

Well-known member
30.06.2006
145
4
#14
Метод Run запустит агента локально от имени текущего пользователя, если надо запустить на сервере, то используй метод RunOnServer (его описание есть в справке).


Но на мой взгляд лучше хранить номера в отдельных документах-счетчиках (о чем уже писали выше).
Если пугает количество документов-счетчиков, то можно хранить их в отдельной базе.

В плане реализации намного проще и надежней - добавляешь в QuerySave обработчик, который:

1. Открывает представление, в котором хранятся счетчики и ищет документ-счетчик с номером текущего документа
2. Если его нет, то сохраняешь документ (все нормально)
3. Если такой счетчик есть, то сравниваешь сохраненный в нем UNID с UNID'ом текущего документа и если они не равны, то либо обновляешь номер, либо сигнализируешь об этом пользователю

Вот пример кода из приложения с подобной задачей (счетчики хранятся в самой базе):

Код:
Dim session as NotesSession
Dim db as NotesDatabase
Dim numberDoc as NotesDocument
Dim numberView as NotesView
Dim entry As NotesViewEntry
Dim taskNumber As String

Set session = New NotesSession
Set db = session.CurrentDatabase
Set numbersView = db.GetView("TaskNumbersAll")
taskNumber = taskDoc.TaskNumber(0)
Set entry = numbersView.GetEntryByKey(taskNumber)
If Not entry Is Nothing Then
Set numberDoc = entry.Document
End If

If numberDoc Is Nothing Then
' Если документа-счетчика нет, то создаем его
Call TaskNumber_CreateDoc()
Else
If LCase(numberDoc.Unid(0)) <> LCase(taskDoc.UniversalID) Then
' Если есть, но не от этого документа, то сообщаем 
' пользователю об ошибке или присваиваем документу новый номер
' ...
End If
End If
 

VladSh

начинающий
Lotus team
11.12.2009
1 276
6
#15
Кирилл Шваб, см. коммент №3; речь совсем не о том.
 
D

Domino_Maddog

#16
Метод Run запустит агента локально от имени текущего пользователя, если надо запустить на сервере, то используй метод RunOnServer (его описание есть в справке).


Но на мой взгляд лучше хранить номера в отдельных документах-счетчиках (о чем уже писали выше).
Если пугает количество документов-счетчиков, то можно хранить их в отдельной базе.

В плане реализации намного проще и надежней - добавляешь в QuerySave обработчик, который:

1. Открывает представление, в котором хранятся счетчики и ищет документ-счетчик с номером текущего документа
2. Если его нет, то сохраняешь документ (все нормально)
3. Если такой счетчик есть, то сравниваешь сохраненный в нем UNID с UNID'ом текущего документа и если они не равны, то либо обновляешь номер, либо сигнализируешь об этом пользователю

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


Добавлено:
Люди, проставляющие номера счетов, в большинстве случаев относятся к одной группе или роли по доступу к функционалу. Как вариант: добавить роль/группу и при создании дока вносить её в поле типа Readers или Authors.
Если надо чтобы оператор видел только свои доки, то либо внедрённый вид + Show single category либо с помощью фильтра (@SetViewInfo).
Хорошое предложение но у меня не всегда так, а еще есть разные компании и т.д. много оговорок :) и желание переделывать все UI у меня то же нет.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#17
Можно делать через поля дока, но хотелось бы это более правильно организовать.
Ещё один вариант -- сделать скрытую категоризованную по номеру вьюшку и искать нужный Entry по ключу. Галку "Don't show empty category" не устанавливаем. Фишка в том, что категории отображаются все, вне зависимости от прав текущего пользователя на документы.
 

Кирилл Шваб

Well-known member
30.06.2006
145
4
#18
у меня похожий код, только еще поля автор и ридер и доступа порой к доку нет.Тогда начинают копится повторы.
А зачем добавлять поля читатели/редакторы к документам-счетчикам?
Смысл этих счетчиков в виде отдельных документов как раз в том, что они доступны всем пользователям (в отличии от самих документов, у которых задан доступ).

TIA,

Интересный способ, кстати. :)
 
D

Domino_Maddog

#19
Ещё один вариант -- сделать скрытую категоризованную по номеру вьюшку и искать нужный Entry по ключу. Галку "Don't show empty category" не устанавливаем. Фишка в том, что категории отображаются все, вне зависимости от прав текущего пользователя на документы.
Точно !!!!!!
Пасип....так и сделал...

Добавлено:
А зачем добавлять поля читатели/редакторы к документам-счетчикам?
Смысл этих счетчиков в виде отдельных документов как раз в том, что они доступны всем пользователям (в отличии от самих документов, у которых задан доступ).
запарился...не внимательно прочитал... :)