Проверка На Существующую Запись В Базе

Тема в разделе "Lotus - Программирование", создана пользователем JohnLemon, 20 авг 2014.

Статус темы:
Закрыта.
  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Здравствуйте, подскажите пожалуйста! Есть форма c полями Фамилия(fLastName), Имя, Отчество, необходимо @ формулой проверить есть ли уже в базе такая фамилия. Как реализовать, я так понимаю это делается через DBLooup но у меня почему то не получается
     
  2. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    для того чтобы @DBLookUp работал, нужна спец вьюха, по которой вы будете делать поиск. Соотвественно, в этой вьюхе, первой колонкой, делаете фамилию (колонка, обязательно, первая и сортированная!), и натравливаете @-ку на данную вьюху (ключём, естественно, ставите фамилию из текущего документа). При этом, стоит сразу задуматься о том моменте, что @-бака найдёт и ваш документ, после первого сохранения. Для этого, стоит подумать о том как отделить мух от котлет. Как вариант, требовать от @-ки возращение UniversalID документа (посмотрите последний параметр), и, проверять, если в списке возращёных, есть что-то не равное нам, то, ошибка.
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Иванов Сергей, Иванов Виктор, Иванов Гарик... Продолжить? =)
    Первая колонка: <поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>
    Результат: Иванов~Виктор~Алексеевич (не панацея, но уже лучше)
    Формула:
    Код ( (Unknown Language)):
    sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
    res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
    res
    В результате в res будет UNID документа или список UNID'ов.
    Ограничение 32К...

    Я бы всё это сделал на LS и использовал в событии QuerySave на форме.
     
  4. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    Мне кажется все так делают. А то что только фамилия так автор сам сказал, я даж задней мыслью не подумал. Ну да, есть у нас одна конторка, там, вообще, семейные кланы работают (Сергей Михалыч, Михаил Сергеич и т.д. жесть...)
     
  5. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Примерно так и сделал только мн непонятно почему "1" что за параметр, и для чего [RETURNDOCUMENTUNIQUEID]
     
  6. Darkhan

    Darkhan Well-Known Member

    Регистрация:
    14 дек 2012
    Сообщения:
    96
    Симпатии:
    4
    [RETURNDOCUMENTUNIQUEID] нужен для возвращения UniversalId записей, подходящих по критериям поиска. Это вам надо, чтобы исключить из результатов поиска текущий документ. В итоге формула должна выглядеть примерно так:
    Код (Text):
    sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
    res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
    @If(@Trim(@Replace(res; @Text(@DocumentUniqueId); ""))=""; "netu sovpadenij"; "est' sovpadeniya")
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    JohnLemon
    "1", потому что параметр должно быть имя поля или номер колонки, но мы возвращаем UNID's записей, поэтому можно вставить любое значение.
     
  8. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Пасибо огромное
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей