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

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

    Скидки до 10%

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

Ls: Азы

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

Kizarek86

Green Team
20.07.2007
871
7
BIT
41
Ага, а ещё надо брать последний ответ а не головной)

Нужно или хранить счетчик в "главном" документе или перебирать все ответы.

В общем или описывайте подробнее требования и условия или так и будет не пойми чем тут заниматься.
 
A

alexas

... должны создаваться копии документа(сколько док-тов должно создаться будет оговорено позже, но точно ни один) ... поле organ в каждом последующем док-те возрастало на +1
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Например, для 5 доков, изменяем код savl a так:
</div></div><div class="sp-body"><div class="sp-content">
Код:
n=5
For i=1 To n
Set childDoc = parentDoc.CopyToDatabase( ses.CurrentDatabase)
childDoc.Organ = Organ+i
Call childDoc.Save(True,False)
Next
Call ws.ViewRefresh
 
D

Dimok-163rus

Документ создается, + 1 к полю Organ.
Спасибо ребят!
 
D

Dimok-163rus

1) Создал документ 1
2) Навел на него курсор -> кликнул кнопку свою
3) Создаются копии и в конце прописывается документ 1.

Когда курсор ставлю на копию - > кнопку, то создаётся все корректно ^_^

Проставил 5 копий (n=5)

2.документ
3.документ
4.документ
5.документ
6.документ
1.документ


Вот что получилось
 
A

alexas

Проставил 5 копий (n=5)
2.документ
3.документ
4.документ
5.документ
6.документ
1.документ

Вот что получилось
А что здесь не так? "1.документ" - это скорее всего док с которого делали копии, а остальные 2-6 это его копии.
А почему так расположены? Скорее всего такая сортировка в виде (или ее отсутствие)
Создай первую (можно скрытую) колонку с формулой Organ и отсортируй по ней "Ascenting"
 
D

Dimok-163rus

Сортировка работает.

А как задается(тип) у поля, в котором храниться дата/время?(в ls не вижу типа Data)
Я поставил:
Код:
Dim Data_sovet As Variant
но это не корректно думаю, потому что операции в дальнейшем с этим полем не выполняются адекватно
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Если поле на форме Date/Time, то надо/лучше преобразовать перед записью
Примерно так:
Код:
Dim Data_sovet As Variant
' Заполняем Data_sovet
Call doc.ReplaceItemValue("DateTimeField", CDat(Data_sovet))
 
D

Dimok-163rus

Ругается на строчку
Код:
Call doc.ReplaceItemValue("DateTimeField", CDat(Data_sovet))
о5 с типами трабла
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Data_sovet как заполняется?
Давай, код. kizarek прав, так и будем "тянуть кота за места"
Да мож и я налажал
 
D

Dimok-163rus

Код:
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 Organ As Long
Dim Data_protokol As Variant
Dim Data_sovet As Variant

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

'			'Создать окошко "Сколько копий документов вы хотите увидеть?"
'	'	_________________________________________
'	Dim kol As Variant
'	kol = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Введите число копий")	
'	If kol=0 Then
'		Exit Sub
'	End If

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

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

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

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

'несколько копий дочернего документа
n=5
For i=1 To n
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) 	

'	Call ws.EditDocument(True,childDoc) ' Открыть на редактирование

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

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 sview Is Nothing Then sView.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:

End Sub
 
D

Dimok-163rus

А ещё вопрос уж до кучи, необходимо появление окна, который будет спрашивать нас о кол-ве копий дочерних документов.
Он вызывается с помощью prompt или как то иначе? В книге не могу найти по своей теме :)
 
A

alexas

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

View.AutoUpdate = True ' Это чтобы вернуть автообновление при ошибке. в этом контексте - лишнее
почитай по View.AutoUpdate
PS и потом sview это что, откуда взялось?
PPS имей ввиду - все, что после On Error в дебагере не посмотриш, в твоем случае на время отладки это лишнее (смотри ошибки в дебагере, я вроде писал). Имхо.
PPPS что за Data_sovet и Data_protokol? Они-ж пустые, ты их ни где не получаеш - будут ошибки.
 
D

Dimok-163rus

alexas, спасибо, про Inputbox не знал :)
..читаю

на первом этапе самом подсказали, что нужен обработчик ошибок, так я и вставил код,
думал что такой по умолчанию, просмотрел sView...
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Код:
		' Заполняем Data_sovet
Call doc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
' Заполняем Data_protokol
Call doc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))

У тебя doc = Nothing, он никак не задан. Его сначала задать надо. Что это за документ? Куда вписываем даты?
 
D

Dimok-163rus

Data_sovet и Data_protokol - поля основного документа, вписываем их в поля childDoc.

savl, а поле organ же отрабатывает по такой же технологии.
Просто поля Data_sovet и Data_protokol объявлены типа дата/время, вот мне бы узнать как этот тип определить, чтоб с ними работать дальше...
Изначально проставил у этих полей ...As Variant

Добавлено: alexas, ниразу не работал с дебагером в лотусе...у меня lotus notes рус.версии,

PS. И пользуйся дебагером, что-бы понять, что накодил (Tools - Debug Lotus Script - поставить галочку)
Что-бы оно заработало, надо переоткрыть вид (или базу).

(сервис - отладчик ls) - не дебагер?
 
A

alexas

Data_sovet и Data_protokol - поля основного документа, вписываем их в поля childDoc.
savl, а поле organ же отрабатывает по такой же технологии.
(сервис - отладчик ls) - не дебагер?
Organ = parentDoc .GetItemValue ("Organ")(0) вот здесь получаем данные из дока (из поля Organ и записываем в объявленную переменную Organ), у тебя путаница в голове из-за одинаковых названий переменной и поля.

Ага - сервис-отладчик ls) это дебагер.

Ты пытаешся использовать Data_sovet и Data_protokol, значения, которых получаются ниже по коду, т.е. еще не определены.

А твой doc - это же parentDoc.
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Dim-ok
тут дело в том, что вот эти строки:
Код:
		' Заполняем Data_sovet
Call doc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
' Заполняем Data_protokol
Call doc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
Обрабатываются раньше, чем есть документ, объект doc не опредлен. Закоментируй их.
Запись в ChildDoc у тебя идет в цикле.
Data_protokol это дата, никогда не пытался к ней прибавлять дни через суммирование :) хотя может я что не знаю...
Используй класс NotesDateTime, посмотри как его создать и как прибавлять дни (метод AdjustDay и потом тебе пригодится свойства DateOnly)
(сервис - отладчик ls) - не дебагер?
Кажись он, лучше смени язык интерфейса на Английский.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
объявлены типа дата/время, вот мне бы узнать как этот тип определить
читать хэлп про типы данных :)
типа typename и иже с ним

Date/Time (кот. и используется в полях) можно получать через CDate (помимо указанного savl)
 
D

Dimok-163rus

lmike, отличная ссылочка, спасибо!
 
Мы в соцсетях:

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