Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lotus Notes/Domino: Программирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/245: Рейтинг темы: голосов - 245, средняя оценка - 4.96
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
1

Ls: Азы

24.06.2013, 17:06. Просмотров 44188. Ответов 114
Метки нет (Все метки)

Подскажите пжлст как создать копию выбранного(выделенного) документа

Sub Click(Source As Button)

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession

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

Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document
Set db = session.CurrentDatabase

...
...
...

Exit Sub

End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 17:06
Ответы с готовыми решениями:

Азы Для Переработки Готовой Бд Под Web
помогите как примерно готвую БД перевести под web я так понял надо создавать...

Азы С++ 11
Не могу найти ответы: 1. что такое lvalue? 2. что такое rvalue? 3. что такое...

Азы 1с
Предлагаю во избежание "С чего начать..." закрепить эту тему. Скидывать сюда...

Азы Oracle
Всем привет. Только начал изучать Oracle. Появились следующие вопросы: 1)...

Азы массивов
Чем отлечатся вот эта обращение или запись к массиву arr {Запись как в С++} от ...

114
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 11:14 41
savl, сейчас поработаю
0
otyxos
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 205
27.06.2013, 11:15 42
Цитата Сообщение от Dim-ok
Просто поля Data_sovet и Data_protokol объявлены типа дата/время, вот мне бы узнать как этот тип определить, чтоб с ними работать дальше...
Изначально проставил у этих полей ...As Variant
та самая путаница в голове - не поля, а переменные кот. ты используешь в коде.
Пусть будет Variant.
savl написал-же Cdat(Data_sovet) вернет дату, если Data_sovet - число или строка, так, что в поле Data_sovet из переменной Data_sovet преобразованной с помощью функции Cdat запишется дата. Yes?
PS Variant принимает, что хош, и становится тем, что в него положили (но это не значит, что если его можно применять везде, его надо применять везде).
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 12:14 43
savl, создал переменную VName типа NotesDateTime, она нам нужна только для прибавления корректных 182 дней ведь?


LotusScript
1
2
Dim VName As New NotesDateTime(DD/MM/YY)
Call VName.AdjustDay(182)
...а присвоение в актуальный тип переменных Data_sovet и Data_protokol нужно непосредственно перед циклом впихнуть?

LotusScript
1
2
3
4
 Заполняем Data_sovet
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
Заполняем Data_protokol
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 12:44 44
Если нужно записывать эти даты именно в основной документ, а не в новые созданные, то да.
Но при этом надо это делать после этих строк:

LotusScript
1
2
  Set parentDoc = session.CurrentDatabase.GetDocumentByID(currNoteID)
If parentDoc Is Nothyng Then Error 5002, "Ошибка при получении основного документа"
Если тебе надо это прописывать в новые документы, то надо внутри цикла.
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 12:58 45
Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 13:06 46
Если все правильно понял я

LotusScript
1
Data_protokol=VName.DateOnly
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 13:37 47
Получилось, только в дате(пользовательском режиме) стоят две строчки:дата и время, можно ли время убрать оттуды?
Не, снова та же ошибка типов из -за:


LotusScript
1
2
3
4
5
 Заполняем Data_sovet
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_sovet))
Заполняем Data_protokol
Call parentDoc.ReplaceItemValue("DateTimeField", Cdat(Data_protokol))
Заполняем Data_refresh
прописал в цикле...после условия:


LotusScript
1
For i=1 To n
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 13:46 48
Dim-ok
Так... У меня есть 30 минут.
Что надо сделать? Четко с расстановкой по пунктам.
1. Сделать копии, определенное количество. тут уже разобрались.
2. Прописать в основной документ дату, какую?
3. Прописать в новые ответные документы дату, какую?
4. Что еще?
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 13:52 49
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дня)

и т.д

вкладываю рабочий код:

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 Nothyng 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 Nothyng Then View.AutoUpdate = True  Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:
 
End Sub
0
tmyky
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
27.06.2013, 14:02 50
а то у меня действительна каша от этого нового языка
какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 14:06 51
Цитата Сообщение от lmike
какого нового, синтаксис очень близок к бижуалвасику
как пример - я без проблем ковыряю макросы в эхеле
я начал с C++(пол годика), потом абап(тоже полгода, небольше), сейчас js и ls параллельно, поэтому кашка малашка )
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 14:15 52
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">

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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 Nothyng 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 Nothyng Then View.AutoUpdate = True  Это чтобы вернуть автообновление при ошибке.
Resume endh
endh:
End Sub
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 14:32 53
savl, код безошибочен, только вот первое поле не плюсовалось добавил:

LotusScript
1
 childDoc.Organ = Organ+i
...и + 182 не действительно:

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

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


LotusScript
1
2
    Set VName = New NotesDateTime("" & parentDoc.Getitemvalue("Data_sovet")(0))
Call VName.AdjustDay(182)
на


LotusScript
1
2
    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 - повторяется вот и ниже тоже самое
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 14:48 54
хм...
Хочешь сказать, что даты в 3-ем документе должны идти из второго?
Типа так:

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

childDoc________3_________30.11.2013 _________(30.11.2013 + 182 дня) - повторяется вот и ниже тоже самое
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 14:53 55
ага, здесь нужно уже в цикле манипулировать, я за этим и создал вот переменную:


LotusScript
1
2
    переменная, хранящая значение
Dim Data_refresh As Variant
в неё будет записываться значение childDoc.data_sovet после того как отработал цикл,
потом


LotusScript
1
 Call childDoc.Replaceitemvalue("Data_refresh", Cdat(VName.Dateonly))
а с каждым новым шагом после

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

логика похожа на истину?
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 15:08 56
пробуем так:
Data_refresh не нужна

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    If parentDoc Is Nothyng 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
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 15:30 57
Сейчас в полях Data_sovet и Data_protokol идёт корректное формирование, а из - за строчки


LotusScript
1
Set parentDoc = childDoc
поле organ выдает весёлые значение:

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

__________Organ
parentDoc____1
childDoc______2
childDoc______4
childDoc______7
childDoc_____11
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 15:40 58
А хаха))
точно))
Замени: childDoc.Organ = Organ+i на childDoc.Organ = Organ+1
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
27.06.2013, 15:50 59
savl, все здорова, спасибо тебе! На выходных поштудирую лотус, на след.недельки нужно будет добавить пару условий в эту программку))

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



Для защиты от бесполезной накрутки рейтинга, право его поднятия дается только после набора 10 сообщений. Так же, если у вас больше 10 сообщений, но все-равно вы не можете поднимать рейтинг другим - значит у вас отрицательный рейтинг и вам это тоже делать запрещено. Выбирайтесь из лужи=)
у меня вроде >> 10 сообщений, благодаря этой теме ))
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
27.06.2013, 16:34 60
Разобрались главное.
Рекомендации:
Читай help, смотри темы форума, из раздела FAQ.
Скачай книгу по LS и @Formula, где-то там же есть.
Сделай себе язык интерфейса английский, Help читай на английском.
Порой надо сказать куда зайти, что поменять в настройках или скрин выложить с настройками.

Любопытно:
Почему Lotus Domino? Мог бы начать изучать java и куда-нить juniorом.
0
27.06.2013, 16:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 16:34

Азы Конфигурации
По немного изучаю азы программирования 1 с и за одно пишу программку для себя....

Азы программирования
Здравствуйте, коллеги. Помогите начинающему разобраться в решении задач....

Самые азы
Собственно перехожу с консоли на гуи, не получается пока найти хорошую книгу по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru