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

  • Автор темы Автор темы JohnLemon
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
J

JohnLemon

Здравствуйте, подскажите пожалуйста! Есть форма c полями Фамилия(fLastName), Имя, Отчество, необходимо @ формулой проверить есть ли уже в базе такая фамилия. Как реализовать, я так понимаю это делается через DBLooup но у меня почему то не получается
 
для того чтобы @DBLookUp работал, нужна спец вьюха, по которой вы будете делать поиск. Соотвественно, в этой вьюхе, первой колонкой, делаете фамилию (колонка, обязательно, первая и сортированная!), и натравливаете @-ку на данную вьюху (ключём, естественно, ставите фамилию из текущего документа). При этом, стоит сразу задуматься о том моменте, что @-бака найдёт и ваш документ, после первого сохранения. Для этого, стоит подумать о том как отделить мух от котлет. Как вариант, требовать от @-ки возращение UniversalID документа (посмотрите последний параметр), и, проверять, если в списке возращёных, есть что-то не равное нам, то, ошибка.
 
первой колонкой, делаете фамилию (колонка, обязательно, первая и сортированная!)
Иванов Сергей, Иванов Виктор, Иванов Гарик... Продолжить? =)
Первая колонка: <поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>
Результат: Иванов~Виктор~Алексеевич (не панацея, но уже лучше)
Формула:
Код:
sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
res
В результате в res будет UNID документа или список UNID'ов.
Ограничение 32К...

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

Я бы всё это сделал на LS и использовал в событии QuerySave на форме.
Примерно так и сделал только мн непонятно почему "1" что за параметр, и для чего [RETURNDOCUMENTUNIQUEID]
 
[RETURNDOCUMENTUNIQUEID] нужен для возвращения UniversalId записей, подходящих по критериям поиска. Это вам надо, чтобы исключить из результатов поиска текущий документ. В итоге формула должна выглядеть примерно так:
Код:
sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
@If(@Trim(@Replace(res; @Text(@DocumentUniqueId); ""))=""; "netu sovpadenij"; "est' sovpadeniya")
 
JohnLemon
"1", потому что параметр должно быть имя поля или номер колонки, но мы возвращаем UNID's записей, поэтому можно вставить любое значение.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!