логика работы операторов p() и a() в повторяющихся полях
Пользователь:
lybs (IP-адрес скрыт)
Дата: 20, January, 2021 17:55
Вопрос разработчикам Ирбис.
Согласно документации, функция p() (дословно цитирую).
"Функция Р возвращает значение истина, если форматируемая запись содержит по крайней мере один экземпляр поля или подполя, указанного в аргументе. В противном случае функция P возвращает значение ложь."
Но это процитированное утверждение оказывается ложью, если поле повторяющееся и повторяющийся экземпляр подполя есть в повторении N>1 при отсутствии в первом. Это демонстрирует пример во вложении.
Как я проверил, p(v982) (поле 982 повторяющееся) эквивалентно &uf('Av982^7#1')<>'', а я ожидал, что эта конструкция, согласно процитированному тексту, будет работать как v982^7<>''.
Аналогично с функцией a().
"Функция A возвращает значение истина, если форматируемая запись не содержит ни одного экземпляра поля или подполя, указанного в аргументе.
"
Но если есть хотя бы один экземпляр подполя в повторении >1 есть, но нет в повторении 1, функция a() вопреки процитированному тексту выдаёт истину.
Получается, что
p(v982^7) эквивалентно &uf('Av982^7#1')<>'', а
a(v982^7) эквивалентно &uf('Av982^7#1')=''
Что мешает реализовать такую логику?
p(v982^7) эквивалентно v982^7<>''
a(v982^7) эквивалентно v982^7=''.
По моему это будет логично и согласно документации.
Если при отсутствии символа | в "свободном поиске" поисковое условие применяется к конкатенации повторений, то конкатенация повторений содержит метку подполя и нужное условие выполняется.
Редактировано 3 раз. Последний раз 20.01.2021 18:00 пользователем lybs.
Вложения:
Баг Ирбис p() a().pft (619 bytes)