Заначения в1м поле должны выбираться в зависимости от2го

  • Автор темы Mikhail
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Mikhail

#1
У меня такой вопрос возник, кто разбирается, помогите, плиз:
Нужно на форме два поля сделать, заначения во втором(type Combobox) должны выбираться пользователем в зависимости от значения введенного в первом поле.
Как это сделать?
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
Для: Mikhail
ну напистать формулу отбора во 2м поле ?!ъ
у меня например в зависимости от одного поля по этой маленькой формулке
Код:
@If(DBTempleteName = "ITOffice"; @If(NameSelected="TypeDoc";"Вхідний":"Вихідний":"Супровідний"; NameSelected="Control";"Контроль":"Особливий контроль":"ПЗ":"Безконтрольний"; NameSelected="ControlType";"Звичайний":"Періодичний":"Постійний"; NameSelected="StatusDoc";"Надійшли":"Чернетка":"На реєстрації":"Зареєстрований":"На розгляді":"На виконанні":"На узгодженні":"У справу":"Архівний"; ""); @If(DBTempleteName = "ITNormDocs"; @If(NameSelected="TypeDoc";"Наказ":"Розпорядження":"Рішення виробничої наради":"Рішення засідання правління":"Засідання спостережної ради":"Документ":"Відрядження":"Протокол"; NameSelected="DBody_Status";"Чернетка":"На реєстрації":"Зареєстрований":"На розгляді":"На виконанні":"У справу"; ""); @If(DBTempleteName = "ITAppeal"; @If(NameSelected="TypeDoc";"Вхідний":"Вихідний":"Супровідний"; NameSelected="Control";"Контроль":"Особливий контроль":"ПЗ"; NameSelected="StatusDoc";"Надійшли":"Чернетка":"На реєстрації":"Зареєстрований":"На розгляді":"На виконанні":"На узгодженні":"У справу"; "");"")))
выбираеютсья какаие значения показывать во 2м чекбоксовом поле :(
 
I

IsAvailable

#3
Для: Mikhail
Откуда значения во второе поле вставляются? Если есть некий справочник, то в формуле выбора ставишь @DbColumn и в качестве параметра значение из первого поля.
На первом поле поставь рефреш на ввод значений.

Еще вариант (бронебойный) - кнопку сделать, которая выдает список по её нажатию.
Могу пример кода выложить, если надо
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
<!--QuoteBegin-IsAvailable+27:04:2007, 10:47 -->
<span class="vbquote">(IsAvailable @ 27:04:2007, 10:47 )</span><!--QuoteEBegin-->На первом поле поставь рефреш на ввод значений.
[snapback]63705" rel="nofollow" target="_blank[/snapback]​
[/quote]
Точно, поставить в первом поле - рефрешить документ при изменении значений,
во втором - обновлять значения при рефреше документа
 
M

Mikhail

#5
т.е. типа не надо форму сохранять после введения значения в первом поле? а Лотус так "воспримет" значение в поле, без сохранения формы?
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
Для: Mikhail
Ну да, только галки на рефреш в полях не забывайте
 
M

Mikhail

#7
Вопрос к IsAvailable:
Да, есть справочник, значения из Oracle подгружаю.
Попробую через рефреш.

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#8
Для: Mikhail
Можно сделать так.
Создаешь поле (назовем его list) со списком вида
"a~~one" : "a~~two" : "b~~three" : "b~~four". Т.е. a и b - первое значение. one, two, three и four - соответствующие им значения. ~~ - разделитель. Может быть любой.
В первом поле (назовем его value1) в формуле выбора будет стоять:
@Unique(@Left(list; "~~"))

А во втором что-то типа:
@Trim(@RightBack(@Replace(list; @Replace(list; value1 + "~~" + @RightBack(list; "~~"); ""); ""); "~~"))
 
I

IsAvailable

#9
Ну, например, так на кнопку можно посадить:

@If(@IsDocBeingEdited; @True;@Command( [EditDocument] ; 1 ));
list:=@If(field1="";@DbLookup("":"NoCache";"":"";"view";field1;"data");"");
@If(@IsError(list);list:="";"");
temp:=@Prompt([OkCancelList];"";"";"";list);
@If(temp!="";@If(temp=@True;@SetField("field2";"");@SetField("field2";temp));"")

Этот код даже на 4-ке работает ))))))


<!--QuoteBegin-Mikhail+27:04:2007, 10:52 -->
<span class="vbquote">(Mikhail @ 27:04:2007, 10:52 )</span><!--QuoteEBegin-->а Лотус так "воспримет" значение в поле, без сохранения формы?
[snapback]63707" rel="nofollow" target="_blank[/snapback]​
[/quote]
Как показывает практика, самые достоверные ответы на такие вопросы дает практика :(

<!--QuoteBegin-Mikhail+27:04:2007, 11:06 -->
<span class="vbquote">(Mikhail @ 27:04:2007, 11:06 )</span><!--QuoteEBegin-->значения из Oracle подгружаю
[snapback]63710" rel="nofollow" target="_blank[/snapback]​
[/quote]
По всем докам из выборки пробегись - выбери нужные значения в массив и потом с ним работать, думаю, удобнее будет.
 
M

Mikhail

#10
Для: Medevic

Спасибо, тоже отличный вариант. Но я данные из базы в Oracle беру. а база о-о-очень большая.
руками такое поле(list) не сделаешь(да и не поместиться в 64кб).
 
M

Mikhail

#11
Всем спасибо. Есть еще такая проблема, кто сталкивался, подскажите пожалуйста:
В первом поле список имен(получаю из другой БД, все Ок).

Во втором поле(type Combobox, в Choices) использую строку вида:
@DbCommand( "ODBC" : "NoCache" ; "ForMyDb" ; "logon" ; "password" ;
"SELECT name1 FROM names.names WHERE name2=@GetField('FirstName')")

Проблема в том, что не прокатывает name2=@GetField('FirstName') в запросе SELECT.
Как его туда вставить???

До этого сталкивался с подобным в PHP, но там достаточно имя поля указать, например:
SELECT ... WHERE name2=FirstName
А в Лотусе такое не катит.... :(
 
I

IsAvailable

#12
Для: Mikhail

Попробуй:

{SELECT name1 FROM names.names WHERE name2="} + @GetField('FirstName') + {"}

или лучше

{SELECT name1 FROM names.names WHERE name2="} + FirstName + {"}


P.S. В свое время с удивлением обнаружил для себя: "@GetField. This @function is new with Release 6."
 
M

Mikhail

#13
Для: IsAvailable
Спасибо! :)
уже решил эту проблему таким же образом.
кстати, проверить синтаксис SQL можно:
@prompt([Ok];sql), где sql - строка с запросом.
 
Статус
Закрыто для дальнейших ответов.