• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Dimok-163rus

поле RTF создал на форме, прописал условие:

Код:
'проверяем есть ли поле в документе
'rttmp - шаблон
If pdoc.HasItem("Sfakt") Then		
Msgbox "есть поле"
Set rttmp = pdoc.GetFirstItem("Sfakt")
Else		
Msgbox "нет поля"
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
End If

вывод на экран "нет поля", выполняется

Код:
Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")

и потом уже сама функция добавления

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

вот косяк в том, что при сохранении документа dot файл присоединился к полю RTF, а когда повторно открываю документ, вижу картину что файл висит внизу на форме, а поле RTF пустое Рис1
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
проведите чистый эксперимент - создайте форму с РТ полем (новую в БД) имя скопируйте из кода (чтобы избежать опечаток)
и прогоните код, создав новый док
 
D

Dimok-163rus

Сорри, в 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$ у меня итак объявлен в виде пустого значения жеж

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

nm_doc$ - source$, определяет имя файла для присоединения

ранне в коде:

Код:
 nm_doc$ = ReplaceChr(ReplaceChr({"}, {"}, " "),{/}," ")+"File1.doc"
 
D

Dimok-163rus

проведите чистый эксперимент - создайте форму с РТ полем (новую в БД) имя скопируйте из кода (чтобы избежать опечаток)
и прогоните код, создав новый док

так у меня тут форма увязана с другими формами, находится в документах, потом поля для выгрузки в ворд берутся из других доков, потом уже, после формаирования документа dot идет присоединение файла к поля в этой форме )

Ты предлагаешь создать новую форму, в которой создать RTF поле, из полей этой формы сформировать dot файл, потом присоединить его к полю этой формы?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
я предлагаю проверить код, что он работает как ожидается, а после разбираться - с глюками форм
 
D

Dimok-163rus

я предлагаю проверить код, что он работает как ожидается, а после разбираться - с глюками форм

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

Код:
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"},Nothing,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") 'Создание объекта Word'a
Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
Set WordDoc = Word.activedocument

'Присваивание полям-Word'a значений из полей 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

Из-за чего этот трабл то :(
 

Вложения

  • Форма_в_дизайнере.jpg
    Форма_в_дизайнере.jpg
    257,5 КБ · Просмотры: 288
  • Форма_после_генерации.jpg
    Форма_после_генерации.jpg
    84,5 КБ · Просмотры: 483
  • Форма_при_повторном_открытии.jpg
    Форма_при_повторном_открытии.jpg
    85,7 КБ · Просмотры: 539

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
такое происходит только на новом документе?
Что будет если создать документ, сохранить, нажать кнопку и переоткрыть?
 
D

Dimok-163rus

создал док, сохранил, нажал на кнопку, тоже самое, переоткрываешь и файл висит в небытие )

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

Код:
	Call pdoc.ComputeWithForm(False,False)
Call pdoc.save(True,pdoc.IsResponse)
Call uidoc.close
Call ws.editdocument(False,pdoc)
Call pdoc.save(True,False)

на

Код:
	Call pdoc.Save( True, True )
pdoc.SaveOptions = "0"

Call uidoc.Close	(True)
Call ws.EditDocument(True, pdoc)

создаю док -> жму генерить -> выйти (и такое чувство что док не создался(на вьюшке не отображается, пока не переоткроешь её), но как переоткрываю, вижу что документ создан и файл присоединен, надо обновить вьюшку получается, рис приложил

Call view.Refresh - ругаец зараза ^^ (переменная не установлена)
 

Вложения

  • 1.jpg
    1.jpg
    162,1 КБ · Просмотры: 510
  • 2.jpg
    2.jpg
    166,2 КБ · Просмотры: 310
  • 3.jpg
    3.jpg
    103,3 КБ · Просмотры: 520
  • 4.jpg
    4.jpg
    113,3 КБ · Просмотры: 449
  • 5.jpg
    5.jpg
    165,6 КБ · Просмотры: 191

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
создал форму отдельную, с полем RTF, кнопкой генерации, выгрузку в ворд полей дока из этой формы, и аналогичная ситуация, после нажатия кнопки генерации в поле RTF файл встает, а после повторного открытия этого дока, файл находится вне формы, не закрепился в поле RTF...прикладываю рис.и код кнопки генерации:

Из-за чего этот трабл то :(

Поигратся с $v2attachmentoptions
 
D

Dimok-163rus

а почему, при присоединении файла dot в RTF поле, значок файла отображается в виде серой папочки, а не в виде адекватного вордовского?
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    93,3 КБ · Просмотры: 355
Мы в соцсетях:

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