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

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

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

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

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

Rich Text .appendtext текст в не верном порядке

  • Автор темы medin84
  • Дата начала
M

medin84

из рисунка можно увидеть что текст на двух полях обработанном в одном цикле отображается по разному, порядок не тот.
что это?
задача просто выделить жирным текст с isResol ="1"

Код:
While Not (ddoc Is Nothing )
'zdelat zapolnenie spiska	
Set col1=ddoc.Responses
If Not col1 Is Nothing Then
If ddoc.del(0)<>"1" Then

If ddoc.IsResol(0) ="1" Then
'---
'%REM
richStyle.Bold = True
Call richText.AppendStyle(richStyle)
Call richText.AppendText(">>КР:")
Call richText.AppendText(Rightbp$(ddoc.ViewTextRus(0), Len(ddoc.ViewTextRus(0))-3))
Call richText.AddNewLine( 1 )
'%END REM
'---
ihod.AppendToTextList s+">>"+ddoc.ViewTextRus(0)+";"
Else
'---
'%REM
richStyle.Bold=False
Call richText.AppendStyle(richStyle)
Call richText.AppendText(ddoc.ViewTextRus(0))
Call richText.AddNewLine( 1 )
'%END REM
'---
ihod.AppendToTextList s+ddoc.ViewTextRus(0)+";"
End If
'Print ddoc.IsResol(0) 

End If

If col1.Count<>0 Then
s=s+"	 "
Call hod_insz(col1)
End If

End If
Set ddoc = col.GetNextDocument (ddoc)
Wend
2010_08_31_162120.png

думаю проблема в рич текст...
может флаг какой нужно
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
что-то ничего не понял.
что должно получиться?
 
M

medin84

что-то ничего не понял.
что должно получиться?
на рисунке показано два типа поля.
изначально было много-текстовое поле (то что сверху text), то есть нынешний рабочий вариант.
теперь нужно зделать что бы при печати документа, в категории "ход исполнения" документы имеющие статус isResol = 1 (то есть резолюция) выделялись в списке жирным шрифтом, по этому добавил в печатную форму ричтекст поле штобы форматировать.

в результате все печатается только не в том порядке
по скрину правильный вариант порядка то что в много-текстовом поле

на скрине пропечатаны оба типа поля в одном цикле

еще к пояснению:
есть документ по форме INSZ там кнопка в экшн Печать.
при нажатии некоторые значения полей просто копируются в форму для печати PrintINSZ_KMG,
также имеются ответные документы, из этих документов нужно взять текст ViewTextRus и в зависимости от значения поля isResol отобразить жирным или не жирным.

у меня все получается, только текст в ричтексте не в том порядке наоборот...
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
короче попробовал я цикл - все работает правильно... ковыряй свою логику. претензий к полям нет
 
N

nvyush

medin84
Может будет проще сформировать html и сконвертировать в mime?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Может richText.Update поставить после добавления текста?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
меня смущает это
Код:
 Call richText.AppendText(Rightbp$(ddoc.ViewTextRus(0), Len(ddoc.ViewTextRus(0))-3))
и это
Код:
ihod.AppendToTextList s+">>"+ddoc.ViewTextRus(0)+";"
для одного условия ты формируешь разные строки.
Вообще, по хорошему тебе надо формировать одну строку перед записью в поля... что-то вроде этого...

Код:
			If ddoc.del(0)<>"1" Then

tmp = ddoc.ViewTextRus(0)

If ddoc.IsResol(0) ="1" Then
richStyle.Bold = True
Else
richStyle.Bold = False
End If

Call richText.AppendStyle(richStyle)
Call richText.AppendText(">>КР:")
Call richText.AppendText(tmp)
Call richText.AddNewLine( 1 )

ihod.AppendToTextList(tmp)

End If

И вообще, отладку еще никто не отменял! Лезь в дебагер и пошагово следи что формируется! Поле само не переворачивает данные!
 
O

Omh

Что-то мне подсказывает, что тебе ddoc.Responses возвращает коллекциою отсортированную не так, как тебе надо.
Посмотри вместо неё на view + NotesViewEntryCollection (она сортированая)
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Что-то мне подсказывает, что тебе ddoc.Responses возвращает коллекциою отсортированную не так, как тебе надо.
Посмотри вместо неё на view + NotesViewEntryCollection (она сортированая)
Кстати да!


Добавлено:
Что-то мне подсказывает, что тебе ddoc.Responses возвращает коллекциою отсортированную не так, как тебе надо.
Посмотри вместо неё на view + NotesViewEntryCollection (она сортированая)
Не согласен!
Тут вопрос не в коллекции. Суть вопроса - разный порядок данных.
Пусть даже коллекция не отсортирована - в полях порядок данных должен быть одинаковым

просто автор где-то намутил с формированием строк
 
O

Omh

Ну ладно
Я не люблю читать скрипты, написанные в таком виде (без Call и скобок):
Код:
ihod.AppendToTextList s+ddoc.ViewTextRus(0)+";"

Я вообще не совсем понял смылса скрипта :)
 
M

medin84

Ну ладно
Я не люблю читать скрипты, написанные в таком виде (без Call и скобок):
дело в том что базейка не моя.
в скрипты не мной писаны, я на новой работе.
мне тоже в принципе не нравится такой стиль написания глаза режет!
но пока работаю с тем что есть :) .
на сегодня задрота хватит с меня, после праздника голова не варит...

завтра продолжу.
 
M

medin84

проблема дествительно в логике, но похоже в логике лотуса...
в Declarations обьявлены перременные
Код:
Dim ndoc As NotesDocument
Dim ihod As NotesItem

Dim richStyle As NotesRichTextStyle
Dim richText As NotesRichTextItem
Dim richtextnav As NotesRichTextNavigator
Dim tmp$

'+ другие обьявления

в событие Click
Код:
' какие та действия
'...
'перед вызовом hod_insz
'-------------------------------------------
Set richStyle = ses.CreateRichTextStyle
Dim richText As New NotesRichTextItem( ndoc, "hodBody" )
'-------------------------------------------
Set ihod= ndoc.GetFirstItem("hod")

Call hod_insz(col)

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Function hod_insz (col As NotesDocumentCollection)</div></div><div class="sp-body"><div class="sp-content">
Код:
Function hod_insz (col As NotesDocumentCollection)
On Error Goto er

Dim col1 As NotesDocumentCollection
Dim ddoc As NotesDocument

'---/ с этим пишет первое значение, затем ничего
If richText Is Nothing Then
Set richText = New NotesRichTextItem( ndoc, "hodBody" )
End If
'---/


'---/ с этим пишет наоборот, курсор в начале получается
'	Dim richText As New NotesRichTextItem( ndoc, "hodBody" )
'---/

'	Set richtextnav = richText.CreateNavigator	 ' 
'	richText.Update

Set col1=col
Set ddoc = col1.GetFirstDocument

While Not (ddoc Is Nothing )
'zdelat zapolnenie spiska	
Set col1=ddoc.Responses
If Not col1 Is Nothing Then
'--------------------------
If ddoc.del(0)<>"1" Then
tmp$ = ddoc.ViewTextRus(0)

If ddoc.IsResol(0) ="1" Then
richStyle.Bold = True
tmp$ = s & ">>" & tmp$
Else
richStyle.Bold = False
tmp$ = s & tmp$
End If

Call richText.AppendStyle( richStyle ) ' строка 36
Call richText.AppendText( tmp$ )
Call richText.AddNewLine( 1 )

ihod.AppendToTextList( tmp$ )
End If
'--------------------------
If col1.Count<>0 Then
s=s+"	 "
Call hod_insz(col1)
End If

End If
Set ddoc = col.GetNextDocument (ddoc)
Wend

Exit Function
er:
Msgbox "Ошибка hod_insz " + Error + " " + Cstr(Erl), 48, "-компани-"
Resume en
en:
End Function


если в функции hod_insz не объевлять/ не инициализировать richText выводиться Msgbox
"Ошибка hod_insz Objct variable not set 36"
хотя richText в Declarations, почему то не видет
думаю навигатором по richText-у в конец перейти, вот только с этим не разобрался как он работает, из хелпа не понял
 
M

medin84

о проблема решена

:) какой ужос.....

просто richText.Update надо было в конце вставить, а то последняя добавленная запись не отображается

и вместо Dim richText As New NotesRichTextItem( ndoc, "hodBody" ) перед вызовом функции
написал Set richText = New NotesRichTextItem( ndoc, "hodBody" )

спасибо всем!!! ;)
 
Мы в соцсетях:

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