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

Тема в разделе "Lotus - Программирование", создана пользователем Mikhail, 27 апр 2007.

Статус темы:
Закрыта.
  1. Mikhail

    Mikhail Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Mikhail
    ну напистать формулу отбора во 2м поле ?!ъ
    у меня например в зависимости от одного поля по этой маленькой формулке
    Код (Text):
    @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м чекбоксовом поле :(
     
  3. IsAvailable

    IsAvailable Гость

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

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--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]
    Точно, поставить в первом поле - рефрешить документ при изменении значений,
    во втором - обновлять значения при рефреше документа
     
  5. Mikhail

    Mikhail Гость

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Mikhail
    Ну да, только галки на рефреш в полях не забывайте
     
  7. Mikhail

    Mikhail Гость

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

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: 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; "~~"); ""); ""); "~~"))
     
  9. IsAvailable

    IsAvailable Гость

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

    @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]
    По всем докам из выборки пробегись - выбери нужные значения в массив и потом с ним работать, думаю, удобнее будет.
     
  10. Mikhail

    Mikhail Гость

    Для: Medevic

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

    Mikhail Гость

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

    Во втором поле(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
    А в Лотусе такое не катит.... :(
     
  12. IsAvailable

    IsAvailable Гость

    Для: 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."
     
  13. Mikhail

    Mikhail Гость

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

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