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

Тема в разделе "Lotus - Программирование", создана пользователем medin84, 31 авг 2010.

  1. medin84

    medin84 Well-Known Member

    Регистрация:
    27 июн 2007
    Сообщения:
    106
    Симпатии:
    0
    из рисунка можно увидеть что текст на двух полях обработанном в одном цикле отображается по разному, порядок не тот.
    что это?
    задача просто выделить жирным текст с isResol ="1"

    Код (LotusScript):
    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

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    что-то ничего не понял.
    что должно получиться?
     
  3. medin84

    medin84 Well-Known Member

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

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

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

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

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

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    короче попробовал я цикл - все работает правильно... ковыряй свою логику. претензий к полям нет
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    medin84
    Может будет проще сформировать html и сконвертировать в mime?
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да оно и так все работает ... просто что-то не то с логикой обработки и все
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Может richText.Update поставить после добавления текста?
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    меня смущает это
    Код (LotusScript):
     Call richText.AppendText(Rightbp$(ddoc.ViewTextRus(0), Len(ddoc.ViewTextRus(0))-3))
    и это
    Код (LotusScript):
    ihod.AppendToTextList s+">>"+ddoc.ViewTextRus(0)+";"
    для одного условия ты формируешь разные строки.
    Вообще, по хорошему тебе надо формировать одну строку перед записью в поля... что-то вроде этого...

    Код (LotusScript):
                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
    И вообще, отладку еще никто не отменял! Лезь в дебагер и пошагово следи что формируется! Поле само не переворачивает данные!
     
  9. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Что-то мне подсказывает, что тебе ddoc.Responses возвращает коллекциою отсортированную не так, как тебе надо.
    Посмотри вместо неё на view + NotesViewEntryCollection (она сортированая)
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Кстати да!


    Добавлено:
    Не согласен!
    Тут вопрос не в коллекции. Суть вопроса - разный порядок данных.
    Пусть даже коллекция не отсортирована - в полях порядок данных должен быть одинаковым

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну ладно
    Я не люблю читать скрипты, написанные в таком виде (без Call и скобок):
    Код (LotusScript):
    ihod.AppendToTextList s+ddoc.ViewTextRus(0)+";"
    Я вообще не совсем понял смылса скрипта :)
     
  12. medin84

    medin84 Well-Known Member

    Регистрация:
    27 июн 2007
    Сообщения:
    106
    Симпатии:
    0
    дело в том что базейка не моя.
    в скрипты не мной писаны, я на новой работе.
    мне тоже в принципе не нравится такой стиль написания глаза режет!
    но пока работаю с тем что есть :) .
    на сегодня задрота хватит с меня, после праздника голова не варит...

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

    medin84 Well-Known Member

    Регистрация:
    27 июн 2007
    Сообщения:
    106
    Симпатии:
    0
    проблема дествительно в логике, но похоже в логике лотуса...
    в Declarations обьявлены перременные
    Код (LotusScript):
    Dim ndoc As NotesDocument
    Dim ihod As NotesItem

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

    '+ другие обьявления
    в событие Click
    Код (LotusScript):
    ' какие та действия
    '...
    'перед вызовом 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">
    Код (LotusScript):
    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-у в конец перейти, вот только с этим не разобрался как он работает, из хелпа не понял
     
  14. medin84

    medin84 Well-Known Member

    Регистрация:
    27 июн 2007
    Сообщения:
    106
    Симпатии:
    0
    о проблема решена

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

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

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

    спасибо всем!!! ;)
     
Загрузка...
Похожие Темы - Rich Text appendtext
  1. seoman2
    Ответов:
    35
    Просмотров:
    1.187
  2. Cheburan
    Ответов:
    9
    Просмотров:
    625
  3. evgenyum
    Ответов:
    7
    Просмотров:
    553
  4. Amfion
    Ответов:
    12
    Просмотров:
    1.000
  5. garrick
    Ответов:
    3
    Просмотров:
    617

Поделиться этой страницей