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

medin84

Well-known member
27.06.2007
106
0
#1
из рисунка можно увидеть что текст на двух полях обработанном в одном цикле отображается по разному, порядок не тот.
что это?
задача просто выделить жирным текст с 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 809
21
#2
что-то ничего не понял.
что должно получиться?
 

medin84

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

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

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

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

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

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#4
короче попробовал я цикл - все работает правильно... ковыряй свою логику. претензий к полям нет
 

nvyush

Lotus team
22.04.2009
2 317
0
#5
medin84
Может будет проще сформировать html и сконвертировать в mime?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#7
Может richText.Update поставить после добавления текста?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#8
меня смущает это
Код:
 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
И вообще, отладку еще никто не отменял! Лезь в дебагер и пошагово следи что формируется! Поле само не переворачивает данные!
 

Omh

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

NickProstoNick

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


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

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

Omh

Lotus team
04.07.2007
2 210
1
#11
Ну ладно
Я не люблю читать скрипты, написанные в таком виде (без Call и скобок):
Код:
ihod.AppendToTextList s+ddoc.ViewTextRus(0)+";"
Я вообще не совсем понял смылса скрипта :)
 

medin84

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

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

medin84

Well-known member
27.06.2007
106
0
#13
проблема дествительно в логике, но похоже в логике лотуса...
в 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-у в конец перейти, вот только с этим не разобрался как он работает, из хелпа не понял
 

medin84

Well-known member
27.06.2007
106
0
#14
о проблема решена

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

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

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

спасибо всем!!! ;)