tormozit / RDT1C

Подсистема "Инструменты разработчика" для платформы 1С 8
http://devtool1c.ucoz.ru
91 stars 9 forks source link

Анализ ЖР: различные значения колонки после отбора по комментарию, содержащему двойные кавычки #461

Open john-doe-1c opened 1 year ago

john-doe-1c commented 1 year ago

Программное окружение

Платформа: 8.3.21.1624 Режим БД: клиент-серверный Конфигурация. Название: 1C: УТП (11.1.4) Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: Версия8_3_9 Конфигурация. Режим использования синхронных вызовов: Использовать Конфигурация. Версия БСП: 203 Конфигурация. Использовать обычные формы в управляемом приложении: Да Инструменты разработчика. Версия: Конфигурация 6.78.1 Инструменты разработчика. Инструмент: Анализ журнала регистрации Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Да Инструменты разработчика. Асинхронность запрещена: Нет Инструменты разработчика. Разрешены имитаторы: Да Клиент. Приложение: Управляемое приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru Клиент. Отладка разрешена: Да Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Microsoft Windows Server 2019 Standard 64-bit Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Active code page: 866 Клиент-Сервер. Пинг: 0мс Сервер. ОС: Майкрософт Windows Server 2019 Standard 64-разрядная Русский Сервер. Процесс: 64б Сервер. Отладка: нет

Воспроизведение проблемы

  1. Открыть инструмент "Анализ ЖР".
  2. Загрузить на форму последние сто ошибок (а лучше тысячу или даже 10 тысяч).
  3. Встать в колонку "Комментарий" (в любую ячейку этой колонки в таблице подгруженных событий ЖР) и вызвать команду различных значений.
  4. Выбрать в списке любое значение, содержащее двойные кавычки, нажать дважды по нему мышкой - в таблице произойдет отбор по этому комментарию.
  5. Переместить фокус в колонку "Пользователь" (или в любую другую колонку, но можно и не перемещать вообще). Я перемещал в пользователя чтоб на следующем шаге получить список пользователей.
  6. Снова вызвать команду из шага 3, возникнет ошибка:
    
    Ошибка при вызове метода контекста (Инициализировать)
    {ОбщийМодуль.ирОбщий.Модуль(19805)}:ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, , Истина);
    {ОбщийМодуль.ирОбщий.Модуль(19552)}:Результат = СкомпоноватьВКоллекциюЗначенийПоМакетуЛкс(МакетКомпоновки, КоллекцияЗначений, ВнешниеНаборыДанных, ТолькоСоздатьКолонки, СхемаКолонок, МаксимальноеЧислоСтрокРезультата,
    {Обработка.ирРазличныеЗначенияКолонки.Форма.Форма.Форма(348)}:ТаблицаРезультата = ирОбщий.СкомпоноватьВКоллекциюЗначенийПоСхемеЛкс(СхемаКомпоновки, НастройкаКомпоновки,, ВнешниеНаборыДанных,,,,, РежимОтладки);
    {Обработка.ирРазличныеЗначенияКолонки.Форма.Форма.Форма(1045)}:Если Не ОбновитьДанные(, Истина) Тогда
    {ОбщийМодуль.ирКлиент.Модуль(16784)}:РезультатФормы = Форма.ОткрытьМодально();
    {ОбщийМодуль.ирКлиент.Модуль(17409)}:ОткрытьРазличныеЗначенияКолонкиЛкс(ИсточникДействий,,, ЭтаФорма);
    {Обработка.ирАнализЖурналаРегистрации.Форма.Форма.Форма(330)}:ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка);

по причине: Ошибка компоновки данных по причине: Ошибка инициализации по причине: Ошибка в выражении по причине: Синтаксическая ошибка

tormozit commented 1 year ago

Ошибку воспроизвел https://www.hostedredmine.com/issues/965039 Она вызвана ошибкой платформы. Не уверен что смогу найти надежное решение до ее исправления в платформе.

john-doe-1c commented 1 year ago

Посмотрел ссылку, там упоминается вариант сравнения "Содержит". А заменить его на "Равно" можно?

tormozit commented 1 year ago

Нет. Такой вид сравнения недоступен для текста неограниченной длины. Диагностика ошибки улучшена в 6.80

john-doe-1c commented 1 year ago

для текста неограниченной длины

А зачем комментарий события ЖР в твоем отборе сделан неограниченной длиной? Когда я в различных значениях колонки нажимаю на конкретную строку, меня интересует отбор по конкретной строке конечной длины. Да и длины всех остальных событий, попавших на вход этой команды, известны. Почему бы не делать (после вызова команды различных) эти комментарии строками ограниченной длины, чтоб отбор на равенство сработал корректно?

tormozit commented 1 year ago

Отбор (вид сравнения) делается механизмом платформы не по конкретным строкам таблицы, а по колонке. У нее есть тип. Чтобы его сузить для всей колонки, нужно выполнять опять же затратную операцию сужения типов колонок. И даже если ее сделать, то если будет хотя бы одно значение длиннее 1024 символа, то все равно придется использовать неограниченную длину.

john-doe-1c commented 1 year ago

если ее сделать, то если будет хотя бы одно значение длиннее 1024 символа, то все равно придется использовать неограниченную длину

Или не использовать, а отобрать по равенству первых 1024 символов (на время отбора урезав комментарии всех событий попавших на форму). И то только если в отбираемом значении есть двойная кавычка. Не вариант для обхода?

tormozit commented 1 year ago

Разработчики платформы сообщили, что исправлять ошибку не будут, т.к. в режиме совместимости 8.3.19+ ошибка исправлена. А те, кто использует более низкие режимы совместимости, должны жить с этой ошибкой. https://partners.v8.1c.ru/forum/topic/2135554

john-doe-1c commented 1 year ago

исправлять ошибку не будут, т.к. в режиме совместимости 8.3.19+ ошибка исправлена Как-то можно их спросить, в чем они видят пользу от неисправления ошибки для совместимости 8.3.18-? Ну т.е. почему это вообще привязано к режиму совместимости, а не к версии платформы?