Порядковый номер

  • Автор темы Erick
  • Дата начала
E

Erick

#1
У меня есть текстовое вычисляемое поле №. Формат: 001. Каждая следующая запись должна содержать след. порядковый номер (002, 003, 004 и т.д.). Как это можно реализовать?
Заранее благодарен.
 
E

Erick

#4
Сделал так:
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set view = db.GetView( "Документы" )
Set doc = source.document
If view.TopLevelEntryCount=0 Then
doc.num=1 ' первому присваиваем 1
End If
If view.TopLevelEntryCount>0 Then
Set doc2 = view.GetLastDocument
doc.num=doc2.num(0)+1 'берем номер последнего и
'увеличиваем на 1
End If
End Sub

Но значения у меня пишутся в таком формате: 1, 2, 3 и т.д., а надо 001, 002,003 и т.д. Как это можно исправить?
 
E

Erick

#5
В приведённой выше ссылке два примера работают не правильно. В первом примере, если открывать форму только для добавления, то всё работает ок. Но если у меня к примеру есть 2 документа, я открываю для редактирования первый, то в поле № у меня стоит значение 3.
Второй пример ещё похлеще. При каждом открытии формы счётчик увеличивается на 1. :)
Так что тема пока не закрыта. Первый пример вроде бы ничего, но как решить проблему, ведь одна и таже форма используется и для добавления и для редактирования, а код находится в postopen?
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#6
<!--QuoteBegin-Erick+28:02:2006, 22:54 -->
<span class="vbquote">(Erick @ 28:02:2006, 22:54 )</span><!--QuoteEBegin-->В приведённой выше ссылке два примера работают не правильно. В первом примере, если открывать форму только для добавления, то всё работает ок. Но если у меня к примеру есть 2 документа, я открываю для редактирования первый, то в поле № у меня стоит значение 3.
Второй пример ещё похлеще. При каждом открытии формы счётчик увеличивается на 1. :eek:
Так что тема пока не закрыта. Первый пример вроде бы ничего, но как решить проблему, ведь одна и таже форма используется и для добавления и для редактирования, а код находится в postopen?
[snapback]31245" rel="nofollow" target="_blank[/snapback]​
[/quote]

Код взятый тобой для анализа неправильный по многим причинам (там в топике всё расписано).
Нужно пользоваться профильным документом.
У меня есть реальная база работающая с таким алгоритмом:
...
Set db = session.CurrentDatabase
Set view = db.GetView( "(SetupHide)" )
If view.TopLevelEntryCount=0 Then
Messagebox "Нет документа настройки!", 48,"Свяжитесь с администратором!"
End
End If
If view.TopLevelEntryCount>0 Then
Set setupdoc = view.GetLastDocument
Set doc = nd.document
count = setupdoc.count(0) 'взял значение cчётчика
setupdoc.count=count+1 'увеличил значение cчётчика
Call setupdoc.save (True,True,True) 'сохранил счетчик
doc.rgCode2=count+1 ' вставляем номер в документ
End If
...

setupdoc - профильный документ в котором содержится счетик
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
<!--QuoteBegin-DNT+1:03:2006, 13:35 -->
<span class="vbquote">(DNT @ 1:03:2006, 13:35 )</span><!--QuoteEBegin-->Нужно пользоваться профильным документом.
[snapback]31275" rel="nofollow" target="_blank[/snapback]​
[/quote]
Наоборот, ни в коем случае. Лучше создать отдельный документ для номера, чем пользоваться профильным.
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#8
<!--QuoteBegin-Medevic+1:03:2006, 14:26 -->
<span class="vbquote">(Medevic @ 1:03:2006, 14:26 )</span><!--QuoteEBegin-->Наоборот, ни в коем случае. Лучше создать отдельный документ для номера, чем пользоваться профильным.
[snapback]31280" rel="nofollow" target="_blank[/snapback]​
[/quote]

А в чём разница??? Профильный документ (в моем случае) это просто документ с полем счетчика.
 
E

Erick

#9
Для: DNT Код у тебя где написан? В postopen?
Если да, то как ты различаешь, происходит создание документа или редактирование? И вообще, зачем отдельный документ для номера, если можно номер получить из последнего документа представления?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#10
<!--QuoteBegin-DNT+1:03:2006, 14:42 -->
<span class="vbquote">(DNT @ 1:03:2006, 14:42 )</span><!--QuoteEBegin-->А в чём разница??? Профильный документ (в моем случае) это просто документ с полем счетчика.
[snapback]31282" rel="nofollow" target="_blank[/snapback]​
[/quote]
Разница в том, что профильные документы кешируются. И не факт, что ты получишь верные данные когда будет считывать значения.
Сам на это натыкался. Плюс на форуме IBM по лотусу про это постоянно говорят. Как попугаи.
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#11
<!--QuoteBegin-Erick+1:03:2006, 14:46 -->
<span class="vbquote">(Erick @ 1:03:2006, 14:46 )</span><!--QuoteEBegin-->Для: DNT Код у тебя где написан? В postopen?
Если да, то как ты различаешь, происходит создание документа или редактирование? И вообще, зачем отдельный документ для номера, если можно номер получить из последнего документа представления?
[snapback]31283" rel="nofollow" target="_blank[/snapback]​
[/quote]

Да, в postopen.

...

If uidoc.IsNewDoc Then

...

Else

...
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#12
<!--QuoteBegin-Medevic+1:03:2006, 14:26 -->
<span class="vbquote">(Medevic @ 1:03:2006, 14:26 )</span><!--QuoteEBegin-->Наоборот, ни в коем случае. Лучше создать отдельный документ для номера, чем пользоваться профильным.
[snapback]31280" rel="nofollow" target="_blank[/snapback]​
[/quote]

А что тогда "отдельный документ для номера"? И почему он не кешируется.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#13
Для: DNT
А если я не захочу документ сохранять ? То номер в профильном документе все равно увеличится ?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#14
<!--QuoteBegin-DNT+1:03:2006, 14:54 -->
<span class="vbquote">(DNT @ 1:03:2006, 14:54 )</span><!--QuoteEBegin-->А что тогда "отдельный документ для номера"? И почему он не кешируется.
[snapback]31287" rel="nofollow" target="_blank[/snapback]​
[/quote]
Обычный документ. Просто создай по отдельной форме. Создай представление с выбором по этой форме. Из него потом будешь документ выбирать.
Обычные документы не кешируются.
 
E

Erick

#15
Для: DNT Хорощо, у тебя в postopen вычисляется и заносится знаение в поле №. Как при редактировании сделать так, чтобы в поле № заносился номер документа, который ты редактируешь?
 
E

Erick

#16
К примеру, в представлении есть 2 документа. При создании нового документа, в поле № будет значение 3. Если в этом коде использовать If uidoc.IsNewDoc Then ' увеличение счётчика на единицу Else ' ничего не делаем. Тогда, если нужно отредактировать первый документ, то, естественно, увеличение счётчика не произойдет, но в поле № будет 2, а не 1.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#17
<!--QuoteBegin-Erick+1:03:2006, 15:08 -->
<span class="vbquote">(Erick @ 1:03:2006, 15:08 )</span><!--QuoteEBegin-->If uidoc.IsNewDoc Then ' увеличение счётчика на единицу Else ' ничего не делаем.
[snapback]31291" rel="nofollow" target="_blank[/snapback]​
[/quote]
Все понятно. А что будет если я стану создавать новый документ, а потом передумаю и закрою его не сохранив ? Или электичество вырубят ? Как я понимаю, значение счетчика все равно увеличится.
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#18
<!--QuoteBegin-Medevic+1:03:2006, 14:54 -->
<span class="vbquote">(Medevic @ 1:03:2006, 14:54 )</span><!--QuoteEBegin-->Для: DNT
А если я не захочу документ сохранять ? То номер в профильном документе все равно увеличится ?
[snapback]31288" rel="nofollow" target="_blank[/snapback]​
[/quote]

Да, с этим лажа. просто не знаю как бороться. Как то сдесь поднимал эту тему, ждал реальных примеров, проблема номарации, то не редкая, - не дождался и сделал как сделал. Работает. Пользователи знают об этом баге. Смирились. Если предложите вариант решения получше - скажу спасибо!
 
E

Erick

#19
Для: Medevic Нет, если № считывать по последнему документу в представлении. А вот если использовать дополнительный документ со счётчиком, то да.
 

DNT

Постоялец форума
Lotus team
12.10.2005
591
2
#20
<!--QuoteBegin-Erick+1:03:2006, 15:08 -->
<span class="vbquote">(Erick @ 1:03:2006, 15:08 )</span><!--QuoteEBegin-->К примеру, в представлении есть 2 документа. При создании нового документа, в поле № будет значение 3. Если в этом коде использовать If uidoc.IsNewDoc Then ' увеличение счётчика на единицу Else ' ничего не делаем. Тогда, если нужно отредактировать первый документ, то, естественно, увеличение счётчика не произойдет, но в поле № будет 2, а не 1.
[snapback]31291" rel="nofollow" target="_blank[/snapback]​
[/quote]

Сэр, если у тебя не новый документ ( Else) то ничего делать не надо!!! Поле останется таким как при сохранении.