|
![]() |
#1 |
Участник
|
Сделал некое подобие автоподстановки. На примере формы карточка клиента (21) и соотв. таблицы (18), автоподстановка по полю Name (Название клиента). Если находит похожее среди клиентов название, то оно подставляется в текущую карточку. Это для примера...
В таблице 18 на триггере OnValidate поля Name исправить на код Код: IF CurrFieldNo = FIELDNO(Name) THEN EXIT ELSE BEGIN IF ("Search Name" = UPPERCASE(xRec.Name)) OR ("Search Name" = '') THEN "Search Name" := Name; END; Name - OnInputChange() Код: CurrForm.SAVERECORD; ![]() Код: IF (Text = '') OR (Name = '') THEN EXIT; IF EVALUATE(l_char,Text) THEN BEGIN IF l_char = 32 THEN Text := '#'; END; IF (STRLEN(Text) = 1) THEN BEGIN IF (Text <> COPYSTR(Name,1,STRLEN(Name) - 1)) THEN Text := Name + Text ELSE IF (STRLEN(Text) = 1) AND (STRLEN(Name) = 2) THEN Text := Name + Text; END; Код: l_int := 100; Name := CONVERTSTR(Name,'#',' '); IF STRLEN(Name) > 2 THEN BEGIN l_recCustomer.SETFILTER(Name,'%1',Name + '*'); l_recCustomer.SETFILTER("No.",'<>%1',"No."); { // Автоподстановка без запуска формы > IF l_recCustomer.FINDFIRST THEN BEGIN Name := l_recCustomer.Name; CurrForm.Name.UPDATE; END; // < } IF l_recCustomer.FINDFIRST THEN BEGIN REPEAT l_int += 1; lt_recStandardText.Code := FORMAT(l_int); lt_recStandardText.Description := l_recCustomer.Name; lt_recStandardText.INSERT; UNTIL l_recCustomer.NEXT = 0; IF FORM.RUNMODAL(FORM::"Standard Text Codes", lt_recStandardText,lt_recStandardText.Description) = ACTION::LookupOK THEN VALIDATE(Name,lt_recStandardText.Description); END; END; После тестирования нашел несколько неудобств и пока один глюк (алгоритмически не удалось обойти). Глюк такой - при удалении Бэкспэйсом, когда 2 символа всего набрано, работает неправильно. Неудобство главное - поле всегда выделено, но это не мешает последовательно вводить в него символы. Все вводится.
__________________
MBS Certified Master in Navision Developer |
|