Показать сообщение отдельно
Старый 27.01.2010, 17:12   #10  
Шрэк is offline
Шрэк
Участник
Аватар для Шрэк
 
645 / 24 (2) +++
Регистрация: 09.02.2004
Адрес: Москва
Сделал некое подобие автоподстановки. На примере формы карточка клиента (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;
В форме 21 следующие изменения. На триггерах контрола Name.
Name - OnInputChange()
Код:
CurrForm.SAVERECORD;
Name - OnAfterInput(VAR Text : Text[1024]

Код:
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;
Name - OnAfterValidate()

Код:
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