16.04.2004, 18:29 | #1 |
Участник
|
триггер OnLookup поля формы
добавил в таблицу Item поле "Manufacturer Name" - flowfield - показывает название производителя (Lookup(Manufacturer.Name WHERE (Code=FIELD(Manufacturer Code))))
клиент захотел чтоб на форме товаров (Item Card) показывалось поле именна Название Производителя а не его код и выбор соответстенно осуществлять при проваливании в список производителей из этого поля. 1 способ - реаллизовал через триггер OnLookup поля "Manufacturer Name" формы товара: код следующий IF Manufacturer.GET("Manufacturer Code") THEN Manufacturers.SETRECORD(Manufacturer); Manufacturers.LOOKUPMODE(TRUE); IF Manufacturers.RUNMODAL = ACTION::LookupOK THEN BEGIN Manufacturers.GETRECORD(Manufacturer); VALIDATE("Manufacturer Code", Manufacturer.Code); //Text := Manufacturer.Name; EXIT(TRUE); END; EXIT(FALSE); //триггре OnValidate поля Manufacturer Code таблицы Item //имеет строку CALCFIELDS("Manufacturer Name") в этом способе при последующем переходе на другое поле выдается ошибка "формула вычисления для вычисляемого поля Название Производителя в таблице товар должна начинаться с Sum(..." 2 способ - реаллизовал через триггер OnAssistEdit поля "Manufacturer Name" формы товара: код следующий IF Manufacturer.GET("Manufacturer Code") THEN Manufacturers.SETRECORD(Manufacturer); Manufacturers.LOOKUPMODE(TRUE); IF Manufacturers.RUNMODAL = ACTION::LookupOK THEN BEGIN Manufacturers.GETRECORD(Manufacturer); VALIDATE("Manufacturer Code", Manufacturer.Code); END; 3 способ написать OnLookup триггер поля Manufacturer Name" таблицы Item во 2-м и 3- м случаях не работает в том случае если руками стираем знаение из поля Manufacturer Name - выдается тажже самая ошибка что и первом случае при переходе на следующее поле в чем может быть причина появления ошибки? |
|
20.04.2004, 10:33 | #2 |
Участник
|
А нельзя два поля завести в таблице Item?
1. "Manufacturer Code" - Normal, в св-ве этого поля "TableRelation" указать таблицу Manufacturer; 2. "Manufacturer Name" - flowfield, Lookup(Manufacturer.Name WHERE (Code=FIELD(Manufacturer Code))) Выбор осуществляется по первому полю. |
|
20.04.2004, 17:09 | #3 |
Участник
|
два этих поля уже есть. и требование клиента было такое чтоб выбор производителя осуществлялся из поля Manufacturer Name
|
|
22.04.2004, 10:21 | #4 |
Участник
|
Была похожая ситуация: нужно искать поставщика не по коду, а по имени
Есть поля в некой таблице "Vendor No." - код, "Vendor Name" - имя делаем следующее: на "Vendor Name" в таблице прописываем OnLookup ///////////////// vendList.LOOKUPMODE:=TRUE; IF vendList.RUNMODAL=ACTION::LookupOK THEN BEGIN vendList.GETRECORD(VENDOR); "Vendor Name":=VENDOR.Name; "Vendor No.":=VENDOR."No."; VALIDATE("Vendor No."); END; ////////////////// Далее из какой-либо формы, отображающей нашу таблицу, выставляем значение "Vendor Name",а "Vendor No." выставляется автоматически. Причем если попытаться выполнить Lookup не из формы, а напрямую из таблицы, он не сработает. Если нужно осуществлять контроль вводимых значений, можно попробовать прописать OnValidate. |
|
14.07.2004, 15:12 | #5 |
Участник
|
Я бы сделал так -
в таблице поле только с кодом, на форму вывести его же, но на OnFormat написать типа IF Manufacturer.GET("Manufacturer Code") THEN Text := Manufacturer.Name; И все. И лукап работает, и клиент видит что хочет. Как вам? На мой взгляд изящно |
|