Последняя версия DataExpress 3 beta от 11 августа 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Проверка значений нескольких полей

Все о том как сделать что-то с помощью скриптов.
Виталий1990
Интересующийся
Сообщения: 244
Зарегистрирован: Сб июл 15, 2017 3:08 pm
Откуда: Санкт-Петербург

Re: Проверка значений нескольких полей

Сообщение Виталий1990 » Вс янв 07, 2018 9:17 am

jurist23rus писал(а):Для поля "Документ 1":

Код: Выделить всё

iif ([Документ 1] <> null & [Документ 1] = [Документ 2] | [Документ 1] = [Документ 3], msgbox ('Проверка полей', 'Одинаковые значения в полях!'), [Документ 1])

Ну и аналогичное для поля "Документ 2"


"[Документ 1] = [Документ 2]" проверяет поля сугубо в текущей записи, а нужно во всех. Допустим, есть 3 записи: №1, №2, №3. Текущий код проверит

Код: Выделить всё

"[Документ 1.1] = [Документ 2.1]"|"[Документ 1.1] = [Документ 3.1]
, а нужно, чтобы

Код: Выделить всё

 "[Документ 1.1] = [Документ 2.1]"| "[Документ 1.1] = [Документ 2.2]"| "[Документ 1.1] = [Документ 2.3]"
и так по всем заданным полям.

Аватара пользователя
admin
Разработчик
Сообщения: 3645
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Проверка значений нескольких полей

Сообщение admin » Вс янв 07, 2018 9:27 am

Тут уже надо составлять более сложное выражение. DBUNIQUE не пойдет. Надо использовать функцию DBCOUNT для подсчета количества записей по заданному фильтру и учитывать новая это запись или редактируется существующая (NEWREC, EDITREC).

jurist23rus
Эксперт
Сообщения: 2261
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Проверка значений нескольких полей

Сообщение jurist23rus » Вс янв 07, 2018 10:59 am

"[Документ 1] = [Документ 2]" проверяет поля сугубо в текущей записи, а нужно во всех.

Подобные сложные алгоритмы проверок лучше реализовывать скриптами. Выражения созданы для простых и быстрых решений и я бы не стал из них конструировать такую логику.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
admin
Разработчик
Сообщения: 3645
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Проверка значений нескольких полей

Сообщение admin » Вс янв 07, 2018 12:19 pm

jurist23rus писал(а):Подобные сложные алгоритмы проверок лучше реализовывать скриптами. Выражения созданы для простых и быстрых решений и я бы не стал из них конструировать такую логику.


Выражение не такое сложное, просто надо хорошо подумать. Хотя использование какой-нибудь DBUNIQUE_2 было бы проще.

Виталий1990
Интересующийся
Сообщения: 244
Зарегистрирован: Сб июл 15, 2017 3:08 pm
Откуда: Санкт-Петербург

Re: Проверка значений нескольких полей

Сообщение Виталий1990 » Вс янв 07, 2018 1:27 pm

admin писал(а):учитывать новая это запись или редактируется существующая (NEWREC, EDITREC).

Если по сути, то какая разница, новая это запись или существующая?

Что обозначают "Ошибка 0", "Ошибка 1"?

Аватара пользователя
admin
Разработчик
Сообщения: 3645
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Проверка значений нескольких полей

Сообщение admin » Вс янв 07, 2018 2:08 pm

Виталий1990 писал(а):Если по сути, то какая разница, новая это запись или существующая?

Если запись новая, то функция DB... ее не увидит.
Виталий1990 писал(а):Что обозначают "Ошибка 0", "Ошибка 1"?

Что, где, когда?

Виталий1990
Интересующийся
Сообщения: 244
Зарегистрирован: Сб июл 15, 2017 3:08 pm
Откуда: Санкт-Петербург

Re: Проверка значений нескольких полей

Сообщение Виталий1990 » Вс янв 07, 2018 7:03 pm

Поскольку пока активно используется только 2 поля из 3, создал более простой код.

Код: Выделить всё

iif(
DBCOUNTD('10. Картотека', 'Документ-2 №', '[!Документ-2 №]=[Документ-1 №]')>=1,
'Этот документ указан в поле "Документ-2"', '')


Работает, даже если добавляется новая запись. Флажки "новая запись"/"существующая запись" не нужны, поскольку сравнение требуется только с существующими записями.