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

Выгрузка В Ворд

15.08.2013, 10:37. Просмотров 27597. Ответов 32
Метки нет (Все метки)

Ребят, проблема такая:

- по шаблону(заложенному в справочнике) создается документ, куда присваивается значение полей,

- после этого созданный документ/файл присваивается в поле"Sfakt" этой формы.(но файл присваивается форме по умолчанию почему то*)

Все отрабатывает, но, когда нажимаем на кнопку генерации, открывается "форма по умолчанию" и в неё вкладывается этот файл с какой то радости, сохраняем все, файл правильно сгенерированный, присоединяется не в поле, в которое надо этой формы, а висит где то...Рисунки приложил.
Почему открывается форма по умолчанию вот вопрос <_<
Рис1. - начальная форма, в которой находится кнопка
Рис.2 и Рис.3 - форма по умолчанию, в которую файлик вкладывается, после нажатия на кнопку генерации,
Рис.4 - открытие начальной формы, после сохранения



.SpoilerTarget">Спойлер: Раскрывающийся Текст


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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
Sub Click(Source As Button)
 
обработчик ошибок
On Error Goto MesError
_________________________________________
Dim ws As New NotesUIWorkspace
Dim sess As New NotesSession
 
Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
Dim dc As NotesDocumentCollection
 
Dim db As NotesDatabase, sprdb As NotesDatabase
 
Dim uidoc As NotesUIDocument
 
Dim view As NotesView
 
Поля, необходимо которые выгрузить
Dim Seria(0) As Variant
Dim Number_reg(0) As String
Dim Data_reg_izm(0) As Variant
Dim Pravo_vlad(0)As Variant
Dim Dol_podp(0)As Variant
Dim Osn_podpis(0)As Variant
Dim Podpisant(0)As Variant
 
 
Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document
Set db = sess.CurrentDatabase
 
Профиль системы и база справочника
Set profile = db.GetProfileDocument("ConfigPrf")
If profile.pthRefer(0)="" Then
Messagebox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
Exit Sub
End If
 
Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))
 
Продолжать?
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
If askme=0 Then
Exit Sub
End If
--------------------------------------------------------------------------------------------------------------------------------------
Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))
Что делаем с полями
Msgbox childdoc.Name(0)
Msgbox childdoc.Seria(0)
Msgbox childdoc.Number_reg(0)
Msgbox childdoc.Data_reg_izm(0)
Msgbox childdoc.Pravo_vlad(0)
Msgbox pdoc.Dol_podp(0)
Msgbox pdoc.Osn_podpis(0)
Msgbox pdoc.Podpisant(0)
Msgbox Today
 
-------------------------------------------------------------------------------------------------------------------------------------------
 
Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))
 
Dim coll1 As NotesDocumentCollection
Dim dt1 As New NotesDateTime("")
Dim doc1 As NotesDocument Справочный док
 
По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
pth_str$=""
Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P001"},Nothyng,0)
Msgbox "Количество док-тов : " & coll1.Count
Dim rttmp As NotesRichTextItem
If coll1.Count >0 Then
Set doc1 = coll1.GetFirstDocument
Set rttmp = doc1.GetFirstItem("TmpDoc")
Forall o In rttmp.EmbeddedObjects
If Right(o.Name,4)=".dot" Then
pth_str$ = o.Name
Goto ExtrMark
End If
End Forall
End If
If pth_str$="" Then
Messagebox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
Exit Sub
End If
 
pth_str$ шаблон найденный
 
ExtrMark:
Создаем каталог временной выгрузки на С
Dim dt As New NotesDateTime( "" )
Call dt.SetNow
dt_date$ = dt.DateOnly
dt_time$ = dt.TimeOnly
dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
 
Environ$ - возвращает значение типа str
tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
tmppth_str строковое выражение, значение которого является именем создаваемого каталога.
Mkdir tmppth_str
 
Выгружаем шаблон в созданную директорию
Dim object As NotesEmbeddedObject
Set object = rttmp.GetEmbeddedObject(pth_str$ )
в созданный каталог помещаем наш шаблон
Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))
 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim Word As Variant
Dim WordDoc As Variant
 
Новый объект Word
 
Set Word = CreateObject("Word.Application") Создание объекта Worda
Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument
 
Присваивание полям-Worda значений из полей notes-документа
worddoc.FormFields(1).result = childdoc.Name(0)
worddoc.FormFields(2).result = childdoc.Seria(0)
worddoc.FormFields(3).result = childdoc.Number_reg(0)
worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)
worddoc.FormFields(5).result = childdoc.Pravo_vlad(0)
worddoc.FormFields(6).result = Today
worddoc.FormFields(7).result = pdoc.Dol_podp(0)
worddoc.FormFields(8).result = pdoc.Osn_podpis(0)
worddoc.FormFields(9).result = pdoc.Podpisant(0)
worddoc.FormFields(10).result = Today
 
nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
WordDoc.saveas(tmppth_str + "\"+nm_doc$)
 
проверяем есть ли поле в документе
rttmp - шаблон
If pdoc.HasItem("Sfakt") Then
Set rttmp = pdoc.GetFirstItem("Sfakt")
Else
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
End If
 
Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
 
WordDoc.close
 
открыть на редактирование тек. док
Call ws.EditDocument(True, pdoc)
 
Удаляем директорию
Kill tmppth_str & "\" & Cstr(pth_str$)
Kill tmppth_str + "\"+nm_doc$
Rmdir tmppth_str
Exit Sub
 
MesError:
Обработка сбоев
ErrNo = Err
ErrLine = Erl
ErrMessage = Error
Messagebox "Button Click " + Cstr(Err) + " " + Cstr(Erl) + " " + Error
Exit Sub
End Sub
открыть на редактирование тек. док
Call ws.EditDocument(True, pdoc)

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

Выгрузка в Ворд
с темкой ознакомился, но немного непонятно. Там есть шаблон, который как я...

Из лотуса в ворд
Сразу сорри за поднятие темы которую и так часто поднимают. По форуму искал...

Экспорт В Ворд
В общем стоит задача, при нажатии кнопки в форме все заполненные поля перенести...

таблица из Rtf в ворд
возможно ли простым методом выгрузить содержимое RT-поля (RichTextItem) в ворд...

Шаблоны на основе ворд файлов
анонс &quot;цикла&quot; изысканий будет код ;), насколько полный - не знаю (зависит от...

32
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
17.08.2013, 11:06 21
поле RTF создал на форме, прописал условие:


LotusScript
1
2
3
4
5
6
7
8
9
проверяем есть ли поле в документе
rttmp - шаблон
If pdoc.HasItem("Sfakt") Then
Msgbox "есть поле"
Set rttmp = pdoc.GetFirstItem("Sfakt")
Else
Msgbox "нет поля"
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
End If
вывод на экран "нет поля", выполняется


LotusScript
1
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
и потом уже сама функция добавления


LotusScript
1
2
Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
вот косяк в том, что при сохранении документа dot файл присоединился к полю RTF, а когда повторно открываю документ, вижу картину что файл висит внизу на форме, а поле RTF пустое Рис1
0
tmyky
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.08.2013, 11:39 22
проведите чистый эксперимент - создайте форму с РТ полем (новую в БД) имя скопируйте из кода (чтобы избежать опечаток)
и прогоните код, создав новый док
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
17.08.2013, 11:44 23
Цитата Сообщение от alexas
Сорри, в 10 комменте был неправ - спойлер не читал, написал по контексту, как понял.
В коде...Смотрим Help:
Syntax
Set notesEmbeddedObject = notesRichTextItem.EmbedObject( type%, class$, source$, [ name$ ] )
...........
class$
String.
... If you are using EMBED_OBJECTLINK or EMBED_ATTACHMENT, specify an empty string ("").
class$ у меня итак объявлен в виде пустого значения жеж


LotusScript
1
2
Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
nm_doc$ - source$, определяет имя файла для присоединения

ранне в коде:


LotusScript
1
 nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
17.08.2013, 12:51 24
Цитата Сообщение от lmike
проведите чистый эксперимент - создайте форму с РТ полем (новую в БД) имя скопируйте из кода (чтобы избежать опечаток)
и прогоните код, создав новый док
так у меня тут форма увязана с другими формами, находится в документах, потом поля для выгрузки в ворд берутся из других доков, потом уже, после формаирования документа dot идет присоединение файла к поля в этой форме )

Ты предлагаешь создать новую форму, в которой создать RTF поле, из полей этой формы сформировать dot файл, потом присоединить его к полю этой формы?
0
tmyky
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.08.2013, 13:56 25
я предлагаю проверить код, что он работает как ожидается, а после разбираться - с глюками форм
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
18.08.2013, 09:50 26
Цитата Сообщение от lmike
я предлагаю проверить код, что он работает как ожидается, а после разбираться - с глюками форм
создал форму отдельную, с полем RTF, кнопкой генерации, выгрузку в ворд полей дока из этой формы, и аналогичная ситуация, после нажатия кнопки генерации в поле RTF файл встает, а после повторного открытия этого дока, файл находится вне формы, не закрепился в поле RTF...прикладываю рис.и код кнопки генерации:


.SpoilerTarget">Спойлер: Раскрывающийся Текст


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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Sub Click(Source As Button)
 
обработчик ошибок
On Error Goto MesError
_________________________________________
Dim ws As New NotesUIWorkspace
Dim sess As New NotesSession
 
Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
Dim dc As NotesDocumentCollection
 
Dim db As NotesDatabase, sprdb As NotesDatabase
 
Dim uidoc As NotesUIDocument
 
Dim view As NotesView
 
Поля, необходимо которые выгрузить
Dim P_1(0) As Variant
Dim P_2(0) As String
Dim P_3(0) As Variant
 
Set uidoc = ws.CurrentDocument
Set pdoc = uidoc.Document
Set db = sess.CurrentDatabase
 
Профиль системы и база справочника
Set profile = db.GetProfileDocument("ConfigPrf")
If profile.pthRefer(0)="" Then
Messagebox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
Exit Sub
End If
 
Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))
 
Продолжать?
Dim askme As Variant
askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")
If askme=0 Then
Exit Sub
End If
--------------------------------------------------------------------------------------------------------------------------------------
Что делаем с полями
Msgbox pdoc.P_1(0)
Msgbox pdoc.P_2(0)
Msgbox pdoc.P_3(0)
 
 
Msgbox childdoc.Name(0)
Msgbox childdoc.Seria(0)
Msgbox childdoc.Number_reg(0)
Msgbox childdoc.Data_reg_izm(0)
Msgbox childdoc.Pravo_vlad(0)
Msgbox pdoc.Dol_podp(0)
Msgbox pdoc.Osn_podpis(0)
Msgbox pdoc.Podpisant(0)
Msgbox Today
-------------------------------------------------------------------------------------------------------------------------------------------
Dim coll1 As NotesDocumentCollection
Dim dt1 As New NotesDateTime("")
Dim doc1 As NotesDocument Справочный док
 
По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
pth_str$=""
Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P001"},Nothyng,0)
Msgbox "Количество док-тов : " & coll1.Count
Dim rttmp As NotesRichTextItem
If coll1.Count >0 Then
Set doc1 = coll1.GetFirstDocument
Set rttmp = doc1.GetFirstItem("TmpDoc")
Forall o In rttmp.EmbeddedObjects
If Right(o.Name,4)=".dot" Then
pth_str$ = o.Name
Goto ExtrMark
End If
End Forall
End If
If pth_str$="" Then
Messagebox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
Exit Sub
End If
 
pth_str$ шаблон найденный
 
ExtrMark:
Создаем каталог временной выгрузки на С
Dim dt As New NotesDateTime( "" )
Call dt.SetNow
dt_date$ = dt.DateOnly
dt_time$ = dt.TimeOnly
dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
 
Environ$ - возвращает значение типа str
tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
tmppth_str строковое выражение, значение которого является именем создаваемого каталога.
Mkdir tmppth_str
 
Выгружаем шаблон в созданную директорию
Dim object As NotesEmbeddedObject
Set object = rttmp.GetEmbeddedObject(pth_str$ )
в созданный каталог помещаем наш шаблон
Call object.ExtractFile (tmppth_str & "\" & Cstr(pth_str$))
 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dim Word As Variant
Dim WordDoc As Variant
 
Новый объект Word
 
Set Word = CreateObject("Word.Application") Создание объекта Worda
Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument
 
Присваивание полям-Worda значений из полей notes-документа
worddoc.FormFields(1).result = pdoc.P_1(0)
worddoc.FormFields(2).result = pdoc.P_2(0)
worddoc.FormFields(3).result = pdoc.P_3(0)
 
nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
nm_doc$ = "File1.doc"
WordDoc.saveas(tmppth_str + "\"+nm_doc$)
 
WordDoc.close
 
проверяем есть ли поле в документе
rttmp - шаблон
If pdoc.HasItem("P_RTF") Then
Msgbox "есть поле"
Set rttmp = pdoc.GetFirstItem("P_RTF")
Else
Msgbox "нет поля"
Set rttmp = New NotesRichTextItem(pdoc, "P_RTF")
End If
 
 
Добавляет в RTF-поле присоединенный файл или ссылку на него.
Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
 
открыть на редактирование тек. док
 
Call pdoc.ComputeWithForm(False,False)
Call pdoc.save(True,pdoc.IsResponse)
Call uidoc.close
Call ws.editdocument(False,pdoc)
Call pdoc.save(True,False)
 
Удаляем директорию
Kill tmppth_str & "\" & Cstr(pth_str$)
Kill tmppth_str + "\"+nm_doc$
Rmdir tmppth_str
Exit Sub
 
MesError:
Обработка сбоев
ErrNo = Err
ErrLine = Erl
ErrMessage = Error
Messagebox "Button Click " + Cstr(Err) + " " + Cstr(Erl) + " " + Error
Exit Sub
End Sub
Из-за чего этот трабл то :(
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
18.08.2013, 11:43 27
такое происходит только на новом документе?
Что будет если создать документ, сохранить, нажать кнопку и переоткрыть?
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
18.08.2013, 12:02 28
создал док, сохранил, нажал на кнопку, тоже самое, переоткрываешь и файл висит в небытие )

Сейчас поменял в коде:


LotusScript
1
2
3
4
5
    Call pdoc.ComputeWithForm(False,False)
Call pdoc.save(True,pdoc.IsResponse)
Call uidoc.close
Call ws.editdocument(False,pdoc)
Call pdoc.save(True,False)
на


LotusScript
1
2
3
4
5
    Call pdoc.Save( True, True )
pdoc.SaveOptions = "0"
 
Call uidoc.Close    (True)
Call ws.EditDocument(True, pdoc)
создаю док -> жму генерить -> выйти (и такое чувство что док не создался(на вьюшке не отображается, пока не переоткроешь её), но как переоткрываю, вижу что документ создан и файл присоединен, надо обновить вьюшку получается, рис приложил

Call view.Refresh - ругаец зараза ^^ (переменная не установлена)
0
rymsk
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 882
18.08.2013, 12:04 29
Цитата Сообщение от Dim-ok
создал форму отдельную, с полем RTF, кнопкой генерации, выгрузку в ворд полей дока из этой формы, и аналогичная ситуация, после нажатия кнопки генерации в поле RTF файл встает, а после повторного открытия этого дока, файл находится вне формы, не закрепился в поле RTF...прикладываю рис.и код кнопки генерации:

Из-за чего этот трабл то :(
Поигратся с $v2attachmentoptions
0
sovt
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
18.08.2013, 12:31 30
Call view.Refresh - ругаец зараза ^^ (переменная не установлена)
Это нормально, так как кнопка на форме.
Попробуй call ws.ViewRefresh 2 раза
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
18.08.2013, 13:00 31
:(
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
18.08.2013, 13:31 32
Все, разобрался! Спасибо всем!
0
Dymok-163rus
0 / 0 / 0
Регистрация: 17.06.2013
Сообщений: 112
18.08.2013, 13:40 33
а почему, при присоединении файла dot в RTF поле, значок файла отображается в виде серой папочки, а не в виде адекватного вордовского?
0
18.08.2013, 13:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2013, 13:40

редактирование таблицы ворд через Lotusscript
Добрый день. Задача : есть шаблон, который содержит пару полей и таблицу, в...

Выгрузка
Задача проста. Есть два сервера. На одном из них есть базенка с документами....

Выгрузка в Excel
Выгружаю данные в Эксель, формирую документ, все работает, кроме того что ни...


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

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

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