• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Ls: Азы

  • Автор темы Dimok-163rus
  • Дата начала
D

Dimok-163rus

Всё без изменений, такое же окно...уже начинаю склоняться к косяку LN,

Вкладываю весь код, если будет время для интереса )

Уже все перепробовал, вывод окошка(рис.ниже) и всё тут... :wacko:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Код целиком"</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)

' Если будет ошибка в работе - перейдет на обработчик ошибок
On Error Goto Handler 
'Объявление переменных
'	_________________________________________
Dim session As New NotesSession

Dim ws As New NotesUIWorkspace
Dim UIview As NotesUIView
Dim uidoc As NotesUIDocument

Dim view As NotesView
Dim db As NotesDatabase
Dim doc As NotesDocument

Dim currNoteID As String 
Dim parentDoc As NotesDocument 
Dim childDoc As NotesDocument 

Dim VName As NotesDateTime
Dim n As Variant
Dim i As Integer
Dim res As Integer

'Поля
Dim Organ As Long
Dim Data_sovet As Single
Dim Data_protokol As Single
Dim Data_end As Single
Dim n_copy As Variant
Dim result

'Продолжать?	
'	_________________________________________
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
If askme=0 Then
Exit Sub
End If

Set db=session.CurrentDatabase

Set doc=db.CreateDocument

'Подробней об CaretNoteID
currNoteID = ws.CurrentView.CaretNoteID

' документ из представления, копия которого будет сделана
Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID) 

If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"

If ParentDoc.GetItemValue("data_end")(0) < ParentDoc.GetItemValue("data_protokol")(0) Then
Msgbox "Ошибка ввода конечной даты"
Exit Sub

Elseif ParentDoc.GetItemValue("data_end")(0) = ParentDoc.GetItemValue("data_protokol")(0) Then
Msgbox "Конечная дата идентична дате протокола, копии не нужны"
' копии не создаем  
n = 0
Exit Sub 

Else 
'Окно ручного ввода
'		If Not ws.DialogBox( "Test_1", True , True , False , False , False ,False , "Название окна" , doc, True ) Then
'			n = doc.getitemvalue("n_copy")(0)
'		End If

'		Msgbox "" & n		
Call Doc.ReplaceItemValue("Form","Test_1")
'		Call Doc.Computewithform(False, False)
result = ws.DialogBox("Test_1",True,True,False,False, False, False, "Количество документов потомков",Doc, True)	
'		Msgbox Doc.GetItemValue("n_copy")(0)
If result Then 'нажали Ok в диалоге
Msgbox Cstr(Doc.Getitemvalue( "n_copy")(0))
n = Doc.GetItemValue( "n_copy" )(0) 'получаем значение поля n_cop
'			Msgbox n
Else
Exit Sub
End If 
'		n = Inputbox("Введите количество копий документа", "Создание копий документа")

' Высчитываем кол-во копий
'			res = ParentDoc.GetItemValue("data_end")(0) - ParentDoc.GetItemValue("data_sovet")(0)
'			Msgbox res 
'			n = res/182 - 1
'			Msgbox n

For i=1 To n

Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_protokol")(0))
Call VName.AdjustDay(182)

Set childDoc = parentDoc.CopyToDatabase( session.CurrentDatabase)

Organ = parentDoc.GetItemValue ("Organ")(0)
childDoc.Organ = Organ+1

' дата совета это дата протокола из оригинального документа
Call childDoc.ReplaceItemValue("Data_sovet", parentDoc.GetItemvalue("Data_protokol"))

' дата протокола	 это +182 дня
Call childDoc.ReplaceItemValue("Data_protokol", Cdat(VName.Dateonly))

Call childDoc.Save(True,False)

Set parentDoc = childDoc

Next
'Обновляем, чтобы сразу появился в виде
Call ws.ViewRefresh

Exit Sub
End If


handler:
' Простейший обработчик ошибок
Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:
End Sub
 

Вложения

  • Безымянный.JPG
    Безымянный.JPG
    95,9 КБ · Просмотры: 279
D

Dimok-163rus

Вуале
Решил с одним полем создать, если получится в переменную вогнать значение из этого поля, потом уже разберусь с той переменной времени
 

Вложения

  • Форма_Test_1.JPG
    Форма_Test_1.JPG
    153,2 КБ · Просмотры: 499

savl

Lotus Team
28.10.2011
2 606
313
BIT
245
Ты пытаешься считать поле n_copy, а на форме поле n_cop
Ты считываешь пустоту, потому что поля такого не форме нет.
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
42
Ну так поле то у вас назвается "n_cop" а выводите "n_copy"
Msgbox Cstr(Doc.Getitemvalue( "n_copy")(0))
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 947
609
BIT
246
яж код с формой дал - что мешало сразу попробовать готовое, а потом форум терзать?
 
D

Dimok-163rus

Парни, выручайте, всё утро штудирую код свой, по одной ошибке:
1) создаются копии(ChildDoc) документа(parentDoc)
2) в копии есть 2 поля, значения которых меня интересуют:
Data_stop_obr
Data_start_obr

их значение вычисляется по формуле:
Код:
childDoc.Data_stop_obr = childDoc.GetItemValue("Data_v_kupon")(0) - childDoc.GetItemValue("Stop_obr")(0)
и
Код:
childDoc.Data_start_obr = childDoc.GetItemValue("Data_v_kupon")(0) - childDoc.GetItemValue("Start_obr")(0)

отрабатывают формулы, но... в первой копии, значения полей Data_stop_obr и Data_start_obr остается как у предыдущей копии, после чего только обрабатывается и записывается в след.копию и т.д(код отрабатывает со след.копии)
Нужно чтобы отрабатывалось с первой копии, может я спутал места вставки в коде...выручайте

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)

'обработчик ошибок
On Error Goto Handler 
'_________________________________________
Dim session As New NotesSession

Dim ws As New NotesUIWorkspace

Dim view As NotesView
Dim db As NotesDatabase
Dim doc As NotesDocument

Dim currNoteID As String 
Dim parentDoc As NotesDocument 
Dim childDoc As NotesDocument 

Dim VName As NotesDateTime
Dim VName_2 As NotesDateTime
Dim VName_3 As NotesDateTime
Dim n As Variant
Dim i As Integer
Dim res As Integer
Dim res_2 As Long
Dim res_3 As Long
Dim result

Dim ID As String
Dim UniversalID As String
Dim Data_v_kupon As Single'дата выплаты купона
Dim Num_period As Long 'порядковый номер нач. документа 
Dim Data_period_start As Single 'дата начала периода 
Dim Data_period_end As Single 'дата окончания периода
Dim Data_end_razm As Single 'конеч. дата док-та
Dim Dl_period As Single 'продолжительность периода, дн.

Dim Data_stop_obr As Single 'дата приостановки обращения
Dim Stop_obr As Single 'приостановка обращения, дн.

Dim Data_start_obr As Single 'дата возобновления обращения
Dim Start_obr As Single 'возобновление обращения, дн.


'_________________________________________
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
If askme=0 Then
Exit Sub
End If

Set db=session.CurrentDatabase
Set doc=db.CreateDocument

'Получение NoteID текущего документа
currNoteID = ws.CurrentView.CaretNoteID

' Ссылка на документ из представления, копия которого будет создана
Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID) 

'Родительского док-та нет
If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"

If ParentDoc.GetItemValue("Data_end_razm")(0) < ParentDoc.GetItemValue("Data_period_end")(0) Then
Msgbox "Ошибка ввода конечной даты"
Exit Sub

Elseif ParentDoc.GetItemValue("Data_end_razm")(0) = ParentDoc.GetItemValue("Data_period_end")(0) Then
Msgbox "Для копий документа дата окончания мала!"
n = 0
Exit Sub 

Else 
'Окно ручного ввода
'		If Not ws.DialogBox( "Test_1", True , True , False , False , False ,False , "Название окна" , doc, True ) Then
'			n = doc.getitemvalue("n_copy")(0)
'		End If		
'		Msgbox "" & n		
'		Call Doc.ReplaceItemValue("Form","Test_1")
'		Call Doc.Computewithform(False, False)
'		result = ws.DialogBox("Test_1",True,True,False,False, False, False, "Количество документов потомков",Doc, True)	
'		n = Inputbox("Введите количество копий документа", "Создание копий документа")
'		If result Then 'нажали Ok в диалоге
'			Msgbox Cstr(Doc.Getitemvalue( "n_cop")(0))
'			n = Doc.GetItemValue( "n_cop" )(0) 'получаем значение поля n_cop
'			Msgbox n
'		Else
'			Exit Sub
'		End If 

' Высчитываем кол-во потомков
res = ParentDoc.GetItemValue("Data_end_razm")(0) - ParentDoc.GetItemValue("Data_period_start")(0)
'		Msgbox res 
n = res/ParentDoc.GetItemValue("Dl_period")(0) - 1 
'		n = res/182 - 1

For i=1 To n

Set childDoc = parentDoc.CopyToDatabase( session.CurrentDatabase)

ChildDoc.ID = ChildDoc.UniversalID 

'Перевод в единицу времени чисел Dl_period
Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_period_end")(0))
Call VName.AdjustDay(ParentDoc.GetItemValue("Dl_period")(0))

'Перевод в единицу времени чисел Stop_obr
Set VName_2 = New NotesDateTime("" & childDoc.Getitemvalue("Data_stop_obr")(0))
Call VName_2.AdjustDay(ParentDoc.GetItemValue("Stop_obr")(0))			
'Сама формула вычита по дате
childDoc.Data_stop_obr = childDoc.GetItemValue("Data_v_kupon")(0) - childDoc.GetItemValue("Stop_obr")(0) 
Msgbox childDoc.GetItemValue("Data_stop_obr")(0)

'Перевод в единицу времени чисел Start_obr
Set VName_3 = New NotesDateTime("" & childDoc.Getitemvalue("Data_start_obr")(0))	
Call VName_3.AdjustDay(ParentDoc.GetItemValue("Start_obr")(0))
'Сама формула вычита по дате
childDoc.Data_start_obr = childDoc.GetItemValue("Data_v_kupon")(0) - childDoc.GetItemValue("Start_obr")(0) 
'		Msgbox childDoc.GetItemValue("Data_start_obr")(0)

Num_period = parentDoc.GetItemValue ("Num_period")(0)
childDoc.Num_period = Num_period+1

' начальная дата документа это дата протокола из оригинального документа
Call childDoc.ReplaceItemValue("Data_period_start", parentDoc.GetItemvalue("Data_period_end"))

' Data_period_end +182 дня
Call childDoc.ReplaceItemValue("Data_period_end", Cdat(VName.Dateonly))			

'/Вычесть(перефразировать)
'			 ' Data_period_end + VName_2 дня
Call childDoc.ReplaceItemValue("Data_v_kupon", Cdat(VName_2.Dateonly))	
'			 ' Data_period_end + VName_3 дня
Call childDoc.ReplaceItemValue("Data_v_kupon", Cdat(VName_3.Dateonly))	

Call childDoc.ReplaceItemValue("Data_v_kupon", childDoc.GetItemvalue("Data_period_end"))

If ChildDoc.GetItemValue("Data_period_end")(0) > ParentDoc.GetItemValue("Data_end_razm")(0) Then
'			Msgbox ChildDoc.GetItemValue("Data_period_end")(0)
Call childDoc.Remove(True)
Call ws.ViewRefresh
Exit Sub
End If

Call childDoc.Save(True,False)

Set parentDoc = childDoc

Next				

'Обновляем, чтобы сразу появился в виде
Call ws.ViewRefresh

Exit Sub
End If

handler:
' Простейший обработчик ошибок
Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:
End Sub
 

savl

Lotus Team
28.10.2011
2 606
313
BIT
245
похоже ошибка в последовательности.
Поле Data_v_kupon используется в расчете до того как будет изменена, меняется она в childDoc ниже по коду, перед условием.
То есть ты высчитываешь дату на основе старых данных, а тебе как я понял, надо на основе новых в текущей копии.

Возьми лист бумаги, напиши последовательность действий.
1. создать копию
2. изменить номер
3. изменить поле1
4. изменить поле2
5. изменить поле3, которое равно поле1 - поле2
...
n. Сохранить копию
n+1 . Повторить шаги.

Просто сразу будет видна ошибки в логике, я так понял (на основе моего примера шагов): шаг 5 идет перед шагом 3.
 
D

Dimok-163rus

похоже ошибка в последовательности.
Поле Data_v_kupon используется в расчете до того как будет изменена, меняется она в childDoc ниже по коду, перед условием.
То есть ты высчитываешь дату на основе старых данных, а тебе как я понял, надо на основе новых в текущей копии.

Возьми лист бумаги, напиши последовательность действий.
1. создать копию
2. изменить номер
3. изменить поле1
4. изменить поле2
5. изменить поле3, которое равно поле1 - поле2
...
n. Сохранить копию
n+1 . Повторить шаги.

Просто сразу будет видна ошибки в логике, я так понял (на основе моего примера шагов): шаг 5 идет перед шагом 3.

в который раз спасибо тебе!
 
D

Dimok-163rus

а такой вопрос:

после манипуляции с полями( - childDoc.Data_stop_obr; - childDoc.Data_start_obr; - childDoc.Data_fix.) в коде, они отображаются с датой + временем(00:00:00) в форме...
я же их гашу в коде, разве нет?

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)

'обработчик ошибок
On Error Goto Handler 
'_________________________________________
Dim session As New NotesSession

Dim ws As New NotesUIWorkspace

Dim view As NotesView
Dim db As NotesDatabase
Dim doc As NotesDocument

Dim currNoteID As String 
Dim parentDoc As NotesDocument 
Dim childDoc As NotesDocument 

Dim VName As NotesDateTime
Dim VName_2 As NotesDateTime
Dim VName_3 As NotesDateTime
Dim VName_4 As NotesDateTime

Dim n As Variant
Dim i As Integer
Dim res As Integer 
Dim result

Dim ID As String
Dim UniversalID As String
Dim Data_v_kupon As Single'дата выплаты купона
Dim Num_period As Long 'порядковый номер нач. документа 
Dim Data_period_start As Single 'дата начала периода 
Dim Data_period_end As Single 'дата окончания периода
Dim Data_end_razm As Single 'конеч. дата док-та
Dim Dl_period As Single 'продолжительность периода, дн.

Dim Data_stop_obr As Single 'дата приостановки обращения
Dim Stop_obr As Single 'приостановка обращения, дн.

Dim Data_start_obr As Single 'дата возобновления обращения
Dim Start_obr As Single 'возобновление обращения, дн.

Dim Data_fix As Single 'дата фиксации списка владельцев
Dim Do_v_kupon As Single 'дни до выплаты купона

'_________________________________________
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
If askme=0 Then
Exit Sub
End If

Set db=session.CurrentDatabase
Set doc=db.CreateDocument

'Получение NoteID текущего документа
currNoteID = ws.CurrentView.CaretNoteID

' Ссылка на документ из представления, копия которого будет создана
Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID) 

'Родительского док-та нет
If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"

If ParentDoc.GetItemValue("Data_end_razm")(0) < ParentDoc.GetItemValue("Data_period_end")(0) Then
Msgbox "Ошибка ввода конечной даты"
Exit Sub

Elseif ParentDoc.GetItemValue("Data_end_razm")(0) = ParentDoc.GetItemValue("Data_period_end")(0) Then
Msgbox "Для копий документа дата окончания мала!"
n = 0
Exit Sub 

Else 
'Окно ручного ввода
'		If Not ws.DialogBox( "Test_1", True , True , False , False , False ,False , "Название окна" , doc, True ) Then
'			n = doc.getitemvalue("n_copy")(0)
'		End If		
'		Msgbox "" & n		
'		Call Doc.ReplaceItemValue("Form","Test_1")
'		Call Doc.Computewithform(False, False)
'		result = ws.DialogBox("Test_1",True,True,False,False, False, False, "Количество документов потомков",Doc, True)	
'		n = Inputbox("Введите количество копий документа", "Создание копий документа")
'		If result Then 'нажали Ok в диалоге
'			Msgbox Cstr(Doc.Getitemvalue( "n_cop")(0))
'			n = Doc.GetItemValue( "n_cop" )(0) 'получаем значение поля n_cop
'			Msgbox n
'		Else
'			Exit Sub
'		End If 

' Высчитываем кол-во потомков
res = ParentDoc.GetItemValue("Data_end_razm")(0) - ParentDoc.GetItemValue("Data_period_start")(0)
'		Msgbox res 
n = res/ParentDoc.GetItemValue("Dl_period")(0) - 1 
'		n = res/182 - 1

For i=1 To n

Set childDoc = parentDoc.CopyToDatabase( session.CurrentDatabase)

ChildDoc.ID = ChildDoc.UniversalID 

'Перевод в единицу времени чисел Dl_period
Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_period_end")(0))
Call VName.AdjustDay(ParentDoc.GetItemValue("Dl_period")(0))

'Перевод в единицу времени чисел Stop_obr
Set VName_2 = New NotesDateTime("" & childDoc.Getitemvalue("Data_stop_obr")(0))
Call VName_2.AdjustDay(ParentDoc.GetItemValue("Stop_obr")(0))			


'Перевод в единицу времени чисел Start_obr
Set VName_3 = New NotesDateTime("" & childDoc.Getitemvalue("Data_start_obr")(0))	
Call VName_3.AdjustDay(ParentDoc.GetItemValue("Start_obr")(0))

'Перевод в единицу времени чисел Do_v_kupon
Set VName_4 = New NotesDateTime("" & childDoc.Getitemvalue("Data_fix")(0))	
Call VName_4.AdjustDay(ParentDoc.GetItemValue("Do_v_kupon")(0))

Num_period = parentDoc.GetItemValue ("Num_period")(0)
childDoc.Num_period = Num_period+1

' начальная дата документа это дата протокола из оригинального документа
Call childDoc.ReplaceItemValue("Data_period_start", parentDoc.GetItemvalue("Data_period_end"))

' Data_period_end +182 дня
Call childDoc.ReplaceItemValue("Data_period_end", Cdat(VName.Dateonly))			

'/Вычесть(перефразировать)
'			 ' Data_period_end + VName_2 дня
Call childDoc.ReplaceItemValue("Data_v_kupon", Cdat(VName_2.Dateonly))	
'			 ' Data_period_end + VName_3 дня
Call childDoc.ReplaceItemValue("Data_v_kupon", Cdat(VName_3.Dateonly))				
'			 ' Data_period_end + VName_4 дня
Call childDoc.ReplaceItemValue("Data_v_kupon", Cdat(VName_4.Dateonly))	

Call childDoc.ReplaceItemValue("Data_v_kupon", childDoc.GetItemvalue("Data_period_end"))

'Сама формула вычита по дате
childDoc.Data_stop_obr = childDoc.GetItemValue("Data_period_end")(0) - childDoc.GetItemValue("Stop_obr")(0) 
'		Msgbox childDoc.GetItemValue("Data_stop_obr")(0)

'Сама формула вычита по дате
childDoc.Data_start_obr = childDoc.GetItemValue("Data_period_end")(0) - childDoc.GetItemValue("Start_obr")(0) 
'		Msgbox childDoc.GetItemValue("Data_start_obr")(0)

'Сама формула вычита по дате
childDoc.Data_fix = childDoc.GetItemValue("Data_period_end")(0) - childDoc.GetItemValue("Do_v_kupon")(0) 
'		Msgbox childDoc.GetItemValue("Data_start_obr")(0)

If ChildDoc.GetItemValue("Data_period_end")(0) > ParentDoc.GetItemValue("Data_end_razm")(0) Then
'			Msgbox ChildDoc.GetItemValue("Data_period_end")(0)
Call childDoc.Remove(True)
Call ws.ViewRefresh
Exit Sub
End If

Call childDoc.Save(True,False)

Set parentDoc = childDoc

Next				

'Обновляем, чтобы сразу появился в виде
Call ws.ViewRefresh

Exit Sub
End If

handler:
' Простейший обработчик ошибок
Msgbox "Error:" & Error$ & Chr(10) & Chr(13) & " in line:" & Erl,16
If Not view Is Nothing Then View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:
End Sub
 

savl

Lotus Team
28.10.2011
2 606
313
BIT
245
Свойства поля глянь, там на второй закладке есть пункт отображать дату, отображать время.
В колонках вьюхи можно сделать так: @Text(<Поле с датой>;"S0")
 
D

Dimok-163rus

так и стоит, только когда будет выгрузка в ворд этих полей, туда зальётся целиком все, вместе с временем ведь
 

savl

Lotus Team
28.10.2011
2 606
313
BIT
245
Не факт.
При выгрузке лучше формировать NotesDateTime от поля и записывать через DateOnly.
 
D

Dimok-163rus

аа тогда буду экспериментировать с выгрузкой ворд
 
Мы в соцсетях:

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