Счетчик

  • Автор темы 1KIA
  • Дата начала
Статус
Закрыто для дальнейших ответов.
1

1KIA

#1
Помогите
Есть поле, в которое вносится номер документа, номер имеет вид: счетчик/пост. число/вносится вручную

Взяла пример кода с сайта
Код:
If Source.IsNewDoc Then
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim item As NotesItem
Set db = session.CurrentDatabase
Set view = db.GetView( "number" )
Set doc = view.GetFirstDocument
If Not(doc Is Nothing) Then 
Set item = doc.GetFirstItem( "nm" )
doc.nm= Int(item.Text )+1
Call doc.save(True,True)
End If

End If 

Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim item As NotesItem
Set db = session.CurrentDatabase
Set view = db.GetView( "number" )
Set doc = view.GetFirstDocument

If (Not(doc Is Nothing) And (source.IsNewDoc) ) Then 
Set item = doc.GetFirstItem( "nm" )
Call Source.FieldSetText("Number",item.Text & "/111/") 
End If
Вопрос как можно сделать, чтобы при QuerySave выполнялось обновление поля Number, только первой ее части. Т.к. если док-т был открыт у двоих, то он будет иметь одинаковый номер

Помогите
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
Лучше для номера использовать числовое поле, а не текстовое, иначе в представлении "поедет" сортировка:
1
11
2
3
Можно хранить числовую часть номера в поле типа Number, а то, что после слэша — в текстовом.
 
1

1KIA

#4
ночью нельзя...
а на счет того, что поле номер - этож ничего не даст....
Я не могу разобраться, как после того как открыл док-т, заполнил все, закрываешь и в этот момент, чтобы проверило db.GetView( "number" ) на то что первая часть поля с номером уже существует и при этом выдало про это сообщение и изменило первую часть на тот номер, который не существует еще
 

nvyush

Lotus team
22.04.2009
2 317
0
#5
Если номер имеет формат Number/Suffix, при этом Number должен быть уникальным для всех Suffix, хранение в дополнительном поле Number позволяет легко проверить его неуникальность. Получение нового значения также становится тривиальной задачей — представление с первым отсортированным в обратном порядке столбцом Number, берём первую запись + 1. Про проблему сортировки строк указывал.
Проверку наличия номера также легко решить:
Код:
If Not view.GetFirstEntryByKey(Number) Is Nothing Then 'пашёл нафик
Если номер вводится вручную, можно либо на форме нарисовать два поля [Number]/[Suffix], либо сделать скрытое вычисляемое поле с формулой
@TextToNumber(@Left(ПолеНомера; "/"));
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#6
1KIA

имхо, моя идея состоит вот в чем:

имеем профильний док которий содержит в поле номер (но поле должно обязательно бить нумбер!!!!)
дальше

когда сохраняем документ ТО привязиваем "номер" к униду! в етом случае вам не будут дублироватся номера документов.

вот вам силка очень полезная инфа в ней

http://www.ibm.com/developerworks/ru/library/digestsearch/
 
N

nnikishi

#7
Хранить последний номер в профильном документе очень опасно. Профильные доки кешируются, и не сразу могут быть отданы серверу. Более того нередки случаи, когда профильные доки уничтожались при банальной репликации на локал. И вообще профильные доки хороши для хранения настроек отдельного пользователя, все остальное лучше хранить в живом документе.

Если формат уникального поля не важен, можно делать брать правые хотя бы четыре буквы юнида документа + текущая дата в какой нибудь вариации. В таком случае лотус сам будет хендлить уникальность.
 
Статус
Закрыто для дальнейших ответов.