Четверг, 10.10.2024, 13:03
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Подбор и обработка объектов. Ошибки отбора по номеру.
poltavaaleksandrДата: Четверг, 12.11.2020, 22:11 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 49
Репутация: 16
Статус: Оффлайн
Подбор и обработка объектов. Область поиска многотабличная. Ошибки отбора по номеру.
Строковые отборы по полю Номер такие как "Начинается С", "Содержит" и прочие некорректно работают, если в списке документов есть документы у которых тип номера число. Для таких документов отбор игнорируется и в выборку попадают все документы.

Причина: в обработке ирОбщий.МодульОбъекта функция ПолучитьЗапросИзКомпоновкиЛкс строка
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, НастройкаКомпоновкиДанных, ,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"), ПроверятьДоступностьПолей);
После выполнения строки отбор по номеру в запрос из НастройкаКомпоновкиДанных не попадает, т.к. он некорректен (отбор предназначен для строк, а тип номера число). Соответственно без отбора выбираются все документы.

Очевидно данная проблема в данной обработке будет распространяться на любые реквизиты, которые в разных таблицах могут принимать разные типы.
=====================
Платформа: 8.3.12.1685
Режим БД: клиент-серверный
Конфигурация. Название: Управление ремонтным предприятием, редакция 1.3 (1.3.139.2)
Конфигурация. Основной режим запуска: Обычное приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим совместимости: Версия8_2_13
Конфигурация. Версия БСП: 1.2.4.1
Инструменты разработчика. Версия: Портативные 5.67p
Инструменты разработчика. Инструмент: Прочее
Инструменты разработчика. Объекты на сервере: Нет
Инструменты разработчика. Разрешены имитаторы: Да
Инструменты разработчика. Серверный модуль: Нет
Клиент. ОС: Майкрософт Windows Server 2019 Datacenter 64-разрядная Русский
Клиент. Приложение: Обычное приложение 64б
Клиент. Текущий язык системы: ru
Клиент. От имени администратора Windows: Нет
Сервер. ОС: Майкрософт Windows Server 2019 Datacenter 64-разрядная Русский
Сервер. Отладка: нет
 
tormozitДата: Четверг, 12.11.2020, 22:34 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Такое поведение является задуманным в платформе 1С и логичным. Язык запросов 1С не поддерживает конвертацию типов. Поэтому неприменимый к типу отбор игнорируется. Проверить можно на таком запросе
Код
выбрать 1
ОБЪЕДИНИТЬ все
выбрать "а"


В консоли компоновки данных
 
poltavaaleksandrДата: Четверг, 12.11.2020, 23:15 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 49
Репутация: 16
Статус: Оффлайн
Я и не спорю, что он игнорируется и что так работает СКД - об этом написал в описании ошибки. Я лишь пишу, что данная особенность СКД приводит к неожиданным результатам при использовании инструмента "Подбор и обработка объектов", снижая его применимость и давая риск ошибки при его применении.

А в языке запросов например, отбор не игнорируется и код ниже выдаст одну строку, которая удовлетворяет отбору.

Код
ВЫБРАТЬ
1 КАК Поле1
ПОМЕСТИТЬ ВТ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
"а"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Поле1
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Поле1 ПОДОБНО "а"
 
tormozitДата: Четверг, 12.11.2020, 23:46 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Согласен. Разница в поведении компоновки и запроса есть. Создал задачу на анализ проблемы https://www.hostedredmine.com/issues/896348
 
poltavaaleksandrДата: Пятница, 13.11.2020, 09:18 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 49
Репутация: 16
Статус: Оффлайн
Чтобы в СКД отбор тоже заработал, надо на закладке "наборы данных" снять галку Автозаполнение и соответственно в запросе в последнем пакете на закладке "компоновка данных" выбрать поля и условия самостоятельно. Иначе СКД применит оптимизации как умеет и действительно поломает отбор.

Добавлено (13.11.2020, 09:25)
---------------------------------------------
Но конкретно в данной задаче запрос строится по одной таблице. Соответственно для решения проблемы нужно перед выполнением запроса проверять тип реквизита и если он числовой, а отбор задан строковый, то добавлять условие "и ложь", тогда лишние данные в выборку не попадут. Данное решение получится достаточно простым  и эффективным.
Спасибо за ответы.

 
tormozitДата: Суббота, 14.11.2020, 14:31 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Пришел к выводу, что такое поведение компоновки некорректно (ошибочно). Отправил в 1С свой анализ проблемы https://www.hostedredmine.com/issues/896857
 
tormozitДата: Воскресенье, 15.11.2020, 23:24 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
Исправлено в 5.68
 
  • Страница 1 из 1
  • 1
Поиск: