Помогите разобраться с проблемой....

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

  1. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Есть отчет на форме, по событию (по нажатию кнопки), по формуле (FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3))) в многозначное поле записываются BIDs(UNIDs) документов с разделителями, на 8 версии все отлично работает, на 7 выдает ошибку (ОШИБКА: Неверный тип данных для оператора или @-функции: ожидался текстовый):
    7 версия - http://2u.ifolder.ru/17673306
    8 версия - http://2u.ifolder.ru/17685907
    Как можно решить данную проблему? Такое ощущение что это только из-за различий версий!
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Очевидно, что одно из возвращаемых значений не текст. А @Unique нужен только текст.
    Решение: проверить значения или попробовать использовать @Text.
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    alexstudent
    в виде StaffByPeriodName убедиться что в 3 колонке чисто текст, если там униды то обязательно проверить чтобы они были текстовые
    например сделать в столбце формулу @Text(@DocumentUnigueID)
     
  4. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Воспользовался @Text, но проблема не ушла! Повторюсь, что в 8 версии все ок, а на 7 не хочет работать.
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    может, сделать проверку @isError(@dbColumn()) ?
     
  6. Klido

    Klido Гость

    @dbcolumn часто себя так ведет (как и дблуукап)... у себя лечил ЯВНЫМ указанием сервера+базы - после 1 отработки можно вернуть назад... кэш какой-то?
     
  7. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    а вот если явно привести результат лукапа к тексту?
    Код (Text):
    lookupResult := @DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3);
    REM {error handling};
    @If( @IsError( lookupResult );
    @Do(
    @Prompt([OK];"Error";"Error:" + @Text(lookupResult) );
    @Return("")
    );
    ""
    );
    REM {принудительно преобразуем результат в текст}
    lookupResult := @Text( lookupResult );
    uniqueLookupResult := @Unique( lookupResult );
    FIELD DivisionTitle := uniqueLookupResult;
     
  8. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Попробовал явно привести в 7 версии ошибка Error:mad:ERROR, а в 8 версии всё ок!
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
  10. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    С явным прописыванием Сервера тоже не получается!!! В поле примерно 70 значений может размер поля? Может быть такое что он увеличен в 8 версии?
     
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    70 значений какого размера? точная версия r7? есть упоминания, что фиксили в семерке какой-то баг с dbcolumn: http://www-01.ibm.com/support/docview.wss?...uid=swg21233623
     
  12. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Версия 7.0.1! Явное указывание сервера и базы не работает, @IsError тоже не работает, пробовал на скрипте:

    Dim session As New notessession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim view As NotesView
    Dim staff As Variant

    Set db = session.CurrentDatabase
    Set doc = ws.CurrentDocument.Document
    Set view = db.GetView("StaffByPeriodName")

    ef$ = {@Unique(@DBColumn("":"NoCache"; "MeetingEXV/P...":"EXV//IT//asup.nsf"; "StaffByPeriodName";3))}
    staff = Evaluate(ef$, doc)

    n% = 1
    For m% = Lbound(staff) To Ubound(staff)
    nm$ = nm$ + Cstr(staff(m%)) + ";"
    n% = n% + 1
    Next

    ' Заполнение поля в документе
    Call doc.replaceItemValue("DivisionTitle", Fulltrim(Split(nm$, ";")))

    и так не работает, пишет ошибку Type mismatch! Блин сил нет.
     
  13. Darker

    Darker Гость

    FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; "":""; "StaffByPeriodName"; 3))
    попробуй так
     
  14. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Безрезультатно! =(
     
  15. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Итак, имеем: dbcolumn возвращает ошибку, без указания подробностей. Поведение похоже на превышение лимитов.
    Вы точно не вываливаетесь по размеру возвращаемых данных? Добавьте колонку (с тоталом) @Length( @Implode( @Text( _Сюда формулу третьей колонки вида_) ) ) - что кажет тотал по такой колонке?
     
  16. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    В общем результат, который возвращает @Dblookup = 2243 символа.
     
  17. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Какого собако-лукапа? Речь вроде была про @dbcolumn. Формулу лукапа в студию. иначе непонятно что лукапите.
    2243 - это длина поля в одном документе, или все-таки общий размер колонки? Ответьте на простой вопрос:чего тотал-то кажет?. Сразу станет ясно - туда копаю или нет.
    P.S. Готов спорить: 2243 = 68*32 + 67, т.е. 68 unid-ов с разделителями.
    У вас в поле одного документа лежат 70 юнидов? И сколько таких документов в виде?
     
  18. alexstudent

    alexstudent Well-Known Member

    Регистрация:
    13 сен 2009
    Сообщения:
    109
    Симпатии:
    0
    Тотал в колонке показывает - 937 536. Да, прости ошибся... не лукап, а колумн!
    Формула колумна: FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; ""; "StaffByPeriodName"; 3)). По поводу 68 unid-ов с разделителями ты прав, колумн возвращает их и записывает в поле, вот здесь как раз и ошибка в 7 версии (ОШИБКА: Неверный тип данных для оператора или @-функции: ожидался текстовый))! Документов в виде - 29 299!!!
     
  19. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Ну правильно, Вы пытаетесь получить 937536 байт, а @DbColumn может вернуть максимум 64кб (чуть меньше чем 65535 байт).
    Замените @DbColumn на проход скриптом по вьюшке через NotesView.getFirstDocument и NotesView.getNextDocument с получением notesDocument.ColumnValues(2).
    Рассмотрите, не лучше ли применить NotesDatabase.Search.

    P.S. Вы уверены, что под 8ой @DbColumn вернул ВСЕ значения?
     
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    да и NoCache можно заменить на ReCache (ежели собаками) - хотя на работоспособности это не скажется ;)

    и ежели колонка с неуникальными значениями - мобуть категоризировать её и нафигатором "бежать" по сиблинг энтрисам?!
     
Загрузка...

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