FileDropCombo

6 views
Skip to first unread message

serge62

unread,
May 26, 2023, 9:54:28 AM5/26/23
to ClaList
Добрый день!
Обычный FileDropCombo после выбора присваивает значение поля из файла какой-то переменной. Эти поля определяются в настройках. Иногда надо по завершению присвоить не одно значение поля файла одной переменной, а, например два. Полез в темплейт CONTROL.TPW и легко сделал 2 поля. Мысль пошла дальше - иногда после выбора в одном списке надо отфильтровать второй по значению из первого. Списки все заполняются при открытии окна. То есть поставить фильтр во втором списке мало, надо его перезаполнить после выбора в первом (типа FLDn::FillList).
Решил в свойства дропа добавить еще и выбор дочернего дропа, который надо перезаполнять при завершении этого. Тут без гемора не обошлось. 
 Что сделал - на страницу свойств добавил поле для выбора второго дропа.
     #PROMPT('Заполняется полем1:',FIELD(%Primary)),%FillField,PROMPTAT(,40)
      #PROMPT('Заполняется полем2:',FIELD(%Primary)),%FillField2
      #PROMPT('&Ввод в поле1:',FIELD),%TargetField
      #PROMPT('&Ввод в поле2:',FIELD),%TargetField2                                                          
      #PROMPT('Боксы:',FROM(%Control,%ControlType ='COMBO')),%MyCombo,DEFAULT('')
     
(какой-то блядский редактор у Гугла - окно не перемещается и не расширяется)
Потом добавил
#AT(%WindowEventHandling,'OpenWindow')
#INSERT(%FileDropWindowOpen)
#DECLARE(%ChildCombo)
#DECLARE( %ChildInstance )
#DECLARE(  %ChildInstancePrefix  )
#SET(%ChildCombo,%MyCombo)
#SET(%ChildInstancePrefix,'')
  #FOR(%Control),WHERE(%ControlType='COMBO' and '?'&%ControlUse=%ChildCombo)
   #SET(%ChildInstance,%ControlInstance)
   #SET(%ChildInstancePrefix,'FLD' & %ChildInstance & ':')
  #ENDFOR

#ENDAT
В чем проблема. Почему-то, несмотря на значение DEFAULT='' для %MyCombo,
для тех дропов, в которых не делался выбор дочернего дропа значение %MyCombo получается хер знает каким, зависит от окна. Например, у меня было  ?Sheet1. Не понимаю, почему. Из-за совершенного незнания языка темплейтов протрахался несколько часов. В результате работает, но написано криво. Еще и с этим значением %MyCOMBO непонятки. Подправьте, знатоки!

Результат примерно такой:

OF ?okaname  ! первый дроп
      CASE EVENT()
      OF EVENT:Accepted
        FLD7::oka:name = okaname
        GET(Queue:FileDropCombo,FLD7::oka:name)
        IF ERRORCODE() THEN
          SELECT(?okaname)
        ELSE
          PER:okato_oms = FLD7::oka:code
          PER:okato_dms = FLD7::oka:codf   ! это второе поле
           DO FLD15::FillList        !это второй дроп

        END
       END

Reply all
Reply to author
Forward
0 new messages