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

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

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

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

Ls: Азы

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

alexas

Просто поля Data_sovet и Data_protokol объявлены типа дата/время, вот мне бы узнать как этот тип определить, чтоб с ними работать дальше...
Изначально проставил у этих полей ...As Variant
та самая путаница в голове - не поля, а переменные кот. ты используешь в коде.
Пусть будет Variant.
savl написал-же Cdat(Data_sovet) вернет дату, если Data_sovet - число или строка, так, что в поле Data_sovet из переменной Data_sovet преобразованной с помощью функции Cdat запишется дата. Yes?
PS Variant принимает, что хош, и становится тем, что в него положили (но это не значит, что если его можно применять везде, его надо применять везде).
 
D

Dimok-163rus

savl, создал переменную VName типа NotesDateTime, она нам нужна только для прибавления корректных 182 дней ведь?

Код:
Dim VName As New NotesDateTime(DD/MM/YY)
Call VName.AdjustDay(182)

...а присвоение в актуальный тип переменных Data_sovet и Data_protokol нужно непосредственно перед циклом впихнуть?
Код:
' Заполняем Data_sovet
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
' Заполняем Data_protokol
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
Если нужно записывать эти даты именно в основной документ, а не в новые созданные, то да.
Но при этом надо это делать после этих строк:
Код:
  Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID) 
If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"
Если тебе надо это прописывать в новые документы, то надо внутри цикла.
 
D

Dimok-163rus

Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
Если все правильно понял я
Код:
Data_protokol=VName.DateOnly
 
D

Dimok-163rus

Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?

Не, снова та же ошибка типов из -за:

Код:
' Заполняем Data_sovet
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
' Заполняем Data_protokol
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
' Заполняем Data_refresh

прописал в цикле...после условия:

Код:
For i=1 To n
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
Dim-ok
Так... У меня есть 30 минут.
Что надо сделать? Четко с расстановкой по пунктам.
1. Сделать копии, определенное количество. тут уже разобрались.
2. Прописать в основной документ дату, какую?
3. Прописать в новые ответные документы дату, какую?
4. Что еще?
 
D

Dimok-163rus

1. Да
2 и 3.в основном документе (parentdoc)есть 2 даты: Data_sovet и Data_protokol
в копиях(childdoc) тоже они есть, для начала нужно, чтобы в childdoc:
- на месте childdoc.Data_sovet - Data_protokol
- на месте childdoc.Data_protokol - childdoc.Data_sovet + 182 дня
и т.д...
Пока с вот этим разобраться бы, на след.недели продолжу, а то у меня действительна каша от этого нового языка

Organ Data_sovet Data_protokol

parentDoc 1 01.01.2013 01.06.2013 - проставляется по умолчанию
________________________________________________________________________________
____________
нажимаю кнопку свою(снизу,что должно появиться) ввожу например создать 2 копии
________________________________________________________________________________
____________

Organ Data_sovet Data_protokol

parentDoc 1 01.01.2013 01.06.2013 - проставляется по умолчанию

childDoc 2 01.06.2013 01.06.2013(+ 182 дня)

childDoc 3 01.06.2013(+ 182 дня) 01.06.2013((+ 182 дня)+182дня)

и т.д

вкладываю рабочий код:
Код:
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 New NotesDateTime( "DD/MM/YY" )

'Поля
Dim Organ As Long
Dim Data_sovet As Variant
Dim Data_protokol As Variant

'переменная, хранящая значение
Dim Data_refresh As Variant

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

'Окно ручного ввода
n= Inputbox("Введите количество копий документа", "Создание копий документа")

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

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

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

'	Call VName.AdjustDay(182)

'несколько копий дочернего документа

For i=1 To n

' Заполняем Data_sovet
'		Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
' Заполняем Data_protokol
'		Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
' Заполняем Data_refresh
'		Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_refresh))

Set childDoc = parentDoc.CopyToDatabase( session.CurrentDatabase)

' получить значение, может быть ошибка, если пустое		
Organ = parentDoc .GetItemValue ("Organ")(0) 
Data_sovet = parentDoc .GetItemValue ("Data_sovet")(0) 
Data_protokol = parentDoc .GetItemValue ("Data_protokol")(0)	 
Data_refresh = parentDoc .GetItemValue ("Data_refresh")(0)  

childDoc.Organ = Organ+i
childDoc.Data_sovet = Data_protokol+i
'прибавить 182 дня к Data_sovet 
childDoc.Data_protokol = Data_protokol+182
'		childDoc.Data_protokol = Data_sovet +VName.DateOnly

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

Exit Sub

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
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 940
609
BIT
210
а то у меня действительна каша от этого нового языка
какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле
 
D

Dimok-163rus

какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле

я начал с C++(пол годика), потом абап(тоже полгода, небольше), сейчас js и ls параллельно, поэтому кашка малашка )
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
lmike
для него новый

Dim-ok
<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 Integer
Dim i As Integer

'Поля
Dim Organ As Long
Dim Data_sovet As Variant
Dim Data_protokol As Variant

'переменная, хранящая значение
Dim Data_refresh As Variant

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

'Окно ручного ввода
n= InputBox("Введите количество копий документа", "Создание копий документа")

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

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

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

Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_sovet")(0))
Call VName.AdjustDay(182)
'несколько копий дочернего документа

For i=1 To n

Set childDoc = parentDoc.CopyToDatabase( session.CurrentDatabase)

Organ = parentDoc.GetItemValue ("Organ")(0)
Call childDoc.Replaceitemvalue("Organ", Organ)

' дата совета это дата протокола из оригинального документа
Call childDoc.Replaceitemvalue("Data_sovet", parentDoc.Getitemvalue("Data_protokol"))
' дата протокола это +182 дня
Call childDoc.Replaceitemvalue("Data_protokol", CDat(VName.Dateonly))

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

Exit Sub

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
 
D

Dimok-163rus

savl, код безошибочен, только вот первое поле не плюсовалось добавил:
Код:
 childDoc.Organ = Organ+i

...и + 182 не действительно:

в childDoc.Data_sovet(В первой и последующих копиях) записывается Data_protokol
в childDoc.Data_protokol записалась Data_sovet + 182 дня(и во всех последующих копиях она)

Подправил поле:

Код:
	Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_sovet")(0))
Call VName.AdjustDay(182)
на

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

теперь первая копия childDoc.сформировалась так как надо, трабла с последующими копиями:

_____________Organ______Data_sovet_________Data_protokol

parentDoc_______1________ 01.01.2013_________01.06.2013 - проставляется по умолчанию

childDoc________2_________01.06.2013_________30.11.2013 - отработало

childDoc________3_________01.06.2013_________30.11.2013 - повторяется вот и ниже тоже самое
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
хм...
Хочешь сказать, что даты в 3-ем документе должны идти из второго?
Типа так:

childDoc________2_________01.06.2013_________30.11.2013 - отработало

childDoc________3_________30.11.2013 _________(30.11.2013 + 182 дня) - повторяется вот и ниже тоже самое
 
D

Dimok-163rus

ага, здесь нужно уже в цикле манипулировать, я за этим и создал вот переменную:

Код:
	'переменная, хранящая значение
Dim Data_refresh As Variant

в неё будет записываться значение childDoc.data_sovet после того как отработал цикл,
потом

Код:
 Call childDoc.Replaceitemvalue("Data_refresh", Cdat(VName.Dateonly))

а с каждым новым шагом после
Код:
next

будет поле Data_refresh обновляться...

логика похожа на истину?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
пробуем так:
Data_refresh не нужна
Код:
	If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"


'несколько копий дочернего документа

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+i

' дата совета это дата протокола из оригинального документа
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
 
D

Dimok-163rus

Сейчас в полях Data_sovet и Data_protokol идёт корректное формирование, а из - за строчки

Код:
Set parentDoc = childDoc

поле organ выдает весёлые значение:

Если 4 копии запрашиваю, то у меня идет:

__________Organ
parentDoc____1
childDoc______2
childDoc______4
childDoc______7
childDoc_____11
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
А хаха))
точно))
Замени: childDoc.Organ = Organ+i на childDoc.Organ = Organ+1
 
D

Dimok-163rus

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

P.s как я могу повысить твою репутацию?
посмотрел вкладку "новичкам"

Для защиты от бесполезной накрутки рейтинга, право его поднятия дается только после набора 10 сообщений. Так же, если у вас больше 10 сообщений, но все-равно вы не можете поднимать рейтинг другим - значит у вас отрицательный рейтинг и вам это тоже делать запрещено. Выбирайтесь из лужи=)

у меня вроде >> 10 сообщений, благодаря этой теме ))
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
177
Разобрались главное.
Рекомендации:
Читай help, смотри темы форума, из раздела FAQ.
Скачай книгу по LS и @Formula, где-то там же есть.
Сделай себе язык интерфейса английский, Help читай на английском.
Порой надо сказать куда зайти, что поменять в настройках или скрин выложить с настройками.

Любопытно:
Почему Lotus Domino? Мог бы начать изучать java и куда-нить junior'ом.
 
Мы в соцсетях:

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