#Err! (?): regex + фильтр + Basic

Автор eeigor, 5 февраля 2021, 13:32

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Скорее, вопрос или мысли вслух... Пример тогда позднее, но высказывания приветствуются.

Обнаружил очень «тонкую» ошибку.

Ввожу в диапазон условий расширенного фильтра в соответствующее поле значение условия, а именно: 01
Накладываю фильтр в коде (но там и кода-то нет: ссылка на диапазон условий...) – выдаёт все строки, что в примере ниже с 1-й по 13-ю. А расширенный фильтр, установленный вручную, или функция REGEX работают верно: только строка 1.

Проблема с ведущим нулём, что ли? Тип данных: Текст.
На скриншоте видно, что свойство IsNumeric = True. У меня берётся, стало быть, NumericValue, а надо StringValue.
В результате ввожу условие так: .01

В остальных случаях всё работает правильно.
Что бы это значило?

А в коде смотреть нечего. Если коротко:
oDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields

Тест REGEX:
    A      B      C
1  Д01  01     '=REGEX(A1;"01")
2  Д10  #N/A
3  Д11  #N/A
4  Д12  #N/A
5  Д13  #N/A
6  Д14  #N/A
7  Д15  #N/A
8  Д16  #N/A
9  Д17  #N/A
10 Д18  #N/A
11 Д19  #N/A
12 Д21  #N/A
13 Д31  #N/A

Upd1:
Пример прикреплён в ответе #5.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

#1
Уточняю:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields

oDescriptor.FilterFields = oFields

@sokol92, присвоение выше производится не напрямую, а через копирование структур, вы понимаете (об этом с вами говорили), так вот объект oFields содержит правильные данные, но в ходе присвоение выше "01" заменяется на "1".

Что делать? Это баг?
Я ведь "загоняю" весь диапазон условий разом и не работаю с полями индивидуально...

Upd1:
Ошибка локализована.
1. Работает правильно:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
2. Работает неправильно:
oDescriptor.FilterFields = oFields

При копировании структур, равно как и при присвоении напрямую (как оказалось, тоже можно), теряется "ведущий нолик.

Свойство StringValue получает значение "1".

Но справа он есть, а слева его уже нет.
oDBRange.FilterDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

#2
Можно ли скопировать поля фильтра выше самостоятельно, одно за другим?

Upd1:
И так не выходит (в цикле):

oDescriptor.FilterFields(i).StringValue = oFields(i).StringValue

Upd2:
При замене DatabaseRange на именованный диапазон (метод Refresh на Filter) проблема осталась. Странно, однако...
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

sokol92

Добрый день, @eeigor! Не могли бы Вы выложить файл с примером "странного" макроса?
Владимир.

eeigor

Владимир, позднее. На работе интернета нет. Работаю с телефоном как могу. При первой возможности. Для меня это активный момент: использую каждый день.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

#5
Уважаемые форумчане, посмотрите мой пример. Всё описано и готово к размещению багрепорта.
Прошу высказаться и дать свои предложения по изоляции ошибок. Ошибок сразу две.

@kompilainenn, я могу вас попросить опубликовать багрепорт?

Разместил на forum.openoffice
@Villeroy said: "Очевидно, они сломали то, что работало в старых версиях. Так что это может быть даже отмечено как регресс. Независимо от того, сколько макрокода вы добавляете в электронную таблицу, вы никогда не получите электронную таблицу, которая работает так же плавно, как худшая база данных (которой, без сомнения, является Base)".

Я только смотрю в сторону Base. В MS Access работал профессионально.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

kompilainenn

Цитата: eeigor от  6 февраля 2021, 22:23@compilainenn, я могу вас попросить опубликовать багрепорт?
Можете, если первую букву моего ника поправите в своем посте.
Цитата: eeigor от  6 февраля 2021, 22:23Всё описано и готово к размещению багрепорта.
Но лучше бы вы это сделали сами, я в Basic ни бум бум, чтобы описать корректно проблему. Другое дело, если будет файл-пример и описание типа: "В А1 должно быть 1, а показывает 0", тогда втупую можно было бы поискать регрессию и найти виновного (если это регрессия)
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

eeigor

#7
Цитата: kompilainenn от  6 февраля 2021, 23:23Другое дело, если будет файл-пример
Пример достаточно "убедительный": минимум данных, максимум удобства (вызов макросов гиперрссылкой прямо на листе). Внизу на листе в примере результат фильтра вручную (справа показаны все установки на скриншоте, надо только повторить, чтобы убедиться). Здесь всё правильно (ОК!). А вверху видим, что не фильтрует (BAD!), но если вместо условия "01" ввести ".01" или ".*01", то работает правильно. Более того, все ошибки локализованы. Язык: английский/русский.
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

eeigor

#8
Ubuntu 18.04 LTS • LibreOffice 7.3.5.2 Community

kompilainenn

Цитата: eeigor от 23 февраля 2021, 10:49
Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
всегда давайте инфо о Лбре из диалога "О программе", без этого трудно понять, с каких версий начинать искать проблему
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут