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

alexstudent

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#2
Очевидно, что одно из возвращаемых значений не текст. А @Unique нужен только текст.
Решение: проверить значения или попробовать использовать @Text.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#3
alexstudent
в виде StaffByPeriodName убедиться что в 3 колонке чисто текст, если там униды то обязательно проверить чтобы они были текстовые
например сделать в столбце формулу @Text(@DocumentUnigueID)
 

alexstudent

Well-Known Member
13.09.2009
107
0
30
Саратов
#4
Воспользовался @Text, но проблема не ушла! Повторюсь, что в 8 версии все ок, а на 7 не хочет работать.
 
#7
Воспользовался @Text, но проблема не ушла! Повторюсь, что в 8 версии все ок, а на 7 не хочет работать.
а вот если явно привести результат лукапа к тексту?
Код:
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;
 

alexstudent

Well-Known Member
13.09.2009
107
0
30
Саратов
#10
С явным прописыванием Сервера тоже не получается!!! В поле примерно 70 значений может размер поля? Может быть такое что он увеличен в 8 версии?
 
#11
С явным прописыванием Сервера тоже не получается!!! В поле примерно 70 значений может размер поля? Может быть такое что он увеличен в 8 версии?
70 значений какого размера? точная версия r7? есть упоминания, что фиксили в семерке какой-то баг с dbcolumn: http://www-01.ibm.com/support/docview.wss?...uid=swg21233623
 

alexstudent

Well-Known Member
13.09.2009
107
0
30
Саратов
#12
Версия 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! Блин сил нет.
 
D

Darker

Гость
#13
FIELD DivisionTitle := @Unique(@DbColumn("":"NoCache"; "":""; "StaffByPeriodName"; 3))
попробуй так
 
#15
Версия 7.0.1! Явное указывание сервера и базы не работает, @IsError тоже не работает, пробовал на скрипте:
и так не работает, пишет ошибку Type mismatch! Блин сил нет.
Итак, имеем: dbcolumn возвращает ошибку, без указания подробностей. Поведение похоже на превышение лимитов.
Вы точно не вываливаетесь по размеру возвращаемых данных? Добавьте колонку (с тоталом) @Length( @Implode( @Text( _Сюда формулу третьей колонки вида_) ) ) - что кажет тотал по такой колонке?
 
#17
В общем результат, который возвращает @Dblookup = 2243 символа.
Какого собако-лукапа? Речь вроде была про @dbcolumn. Формулу лукапа в студию. иначе непонятно что лукапите.
2243 - это длина поля в одном документе, или все-таки общий размер колонки? Ответьте на простой вопрос:чего тотал-то кажет?. Сразу станет ясно - туда копаю или нет.
P.S. Готов спорить: 2243 = 68*32 + 67, т.е. 68 unid-ов с разделителями.
У вас в поле одного документа лежат 70 юнидов? И сколько таких документов в виде?
 

alexstudent

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

TIA

:-)
Lotus team
15.05.2009
790
1
#19
Тотал в колонке показывает - 937 536.
Ну правильно, Вы пытаетесь получить 937536 байт, а @DbColumn может вернуть максимум 64кб (чуть меньше чем 65535 байт).
Замените @DbColumn на проход скриптом по вьюшке через NotesView.getFirstDocument и NotesView.getNextDocument с получением notesDocument.ColumnValues(2).
Рассмотрите, не лучше ли применить NotesDatabase.Search.

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 433
351
homepage.mac.com
#20
да и NoCache можно заменить на ReCache (ежели собаками) - хотя на работоспособности это не скажется ;)

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