Ls: Азы

  • Автор темы Автор темы Dimok-163rus
  • Дата начала Дата начала
Просто поля Data_sovet и Data_protokol объявлены типа дата/время, вот мне бы узнать как этот тип определить, чтоб с ними работать дальше...
Изначально проставил у этих полей ...As Variant
та самая путаница в голове - не поля, а переменные кот. ты используешь в коде.
Пусть будет Variant.
savl написал-же Cdat(Data_sovet) вернет дату, если Data_sovet - число или строка, так, что в поле Data_sovet из переменной Data_sovet преобразованной с помощью функции Cdat запишется дата. Yes?
PS Variant принимает, что хош, и становится тем, что в него положили (но это не значит, что если его можно применять везде, его надо применять везде).
 
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))
 
Если нужно записывать эти даты именно в основной документ, а не в новые созданные, то да.
Но при этом надо это делать после этих строк:
Код:
  Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID) 
If parentDoc Is Nothing Then Error 5002, "Ошибка при получении основного документа"
Если тебе надо это прописывать в новые документы, то надо внутри цикла.
 
Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?
 
Если все правильно понял я
Код:
Data_protokol=VName.DateOnly
 
Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?

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

Код:
' Заполняем 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
 
Dim-ok
Так... У меня есть 30 минут.
Что надо сделать? Четко с расстановкой по пунктам.
1. Сделать копии, определенное количество. тут уже разобрались.
2. Прописать в основной документ дату, какую?
3. Прописать в новые ответные документы дату, какую?
4. Что еще?
 
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
 
а то у меня действительна каша от этого нового языка
какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле
 
какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле

я начал с C++(пол годика), потом абап(тоже полгода, небольше), сейчас js и ls параллельно, поэтому кашка малашка )
 
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
 
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 - повторяется вот и ниже тоже самое
 
хм...
Хочешь сказать, что даты в 3-ем документе должны идти из второго?
Типа так:

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

childDoc________3_________30.11.2013 _________(30.11.2013 + 182 дня) - повторяется вот и ниже тоже самое
 
ага, здесь нужно уже в цикле манипулировать, я за этим и создал вот переменную:

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

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

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

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

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

логика похожа на истину?
 
пробуем так:
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
 
Сейчас в полях Data_sovet и Data_protokol идёт корректное формирование, а из - за строчки

Код:
Set parentDoc = childDoc

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

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

__________Organ
parentDoc____1
childDoc______2
childDoc______4
childDoc______7
childDoc_____11
 
А хаха))
точно))
Замени: childDoc.Organ = Organ+i на childDoc.Organ = Organ+1
 
savl, все здорова, спасибо тебе! На выходных поштудирую лотус, на след.недельки нужно будет добавить пару условий в эту программку))

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

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

у меня вроде >> 10 сообщений, благодаря этой теме ))
 
Разобрались главное.
Рекомендации:
Читай help, смотри темы форума, из раздела FAQ.
Скачай книгу по LS и @Formula, где-то там же есть.
Сделай себе язык интерфейса английский, Help читай на английском.
Порой надо сказать куда зайти, что поменять в настройках или скрин выложить с настройками.

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

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