Добрый день!
Обычный 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