• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Erick

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

Erick

Сделал так:
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

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

DNT

<!--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

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--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]
Наоборот, ни в коем случае. Лучше создать отдельный документ для номера, чем пользоваться профильным.
 
D

DNT

<!--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

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--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 по лотусу про это постоянно говорят. Как попугаи.
 
D

DNT

<!--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

...
 
D

DNT

<!--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

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Для: DNT
А если я не захочу документ сохранять ? То номер в профильном документе все равно увеличится ?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--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

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

Erick

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
<!--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]
Все понятно. А что будет если я стану создавать новый документ, а потом передумаю и закрою его не сохранив ? Или электичество вырубят ? Как я понимаю, значение счетчика все равно увеличится.
 
D

DNT

<!--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

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

DNT

<!--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) то ничего делать не надо!!! Поле останется таким как при сохранении.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!