tormozit / RDT1C

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

Конструктор запросов ИР. Неопределенное поведение присваивающее ошибочный псевдоним в секции построителя запросов. #627

Closed PerlAmutor closed 2 months ago

PerlAmutor commented 2 months ago

https://github.com/user-attachments/assets/0eda4b6c-6d18-4ef9-82b7-231587fe1b4d

Информация для технической поддержки Платформа: 8.3.25.1336 Режим БД: файловый Конфигурация. Название: () Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: Версия8_3_20 Конфигурация. Режим использования синхронных вызовов: НеИспользовать Инструменты разработчика. Версия: Портативный 7.38.1p Инструменты разработчика. Инструмент: Конструктор запроса Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Нет Инструменты разработчика. Серверный модуль БСП: Нет Клиент. Приложение: Обычное приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru Клиент. Отладка разрешена: Нет Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Майкрософт Windows 10 Pro 64-разрядная Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Системе не удается найти указанный путь. Текущая кодовая страница: 866

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

  1. При попытке назначения нового псевдонима одной из таблиц в запросе через Конструктор запросов ИР:
    //{Запрос: 0, -2 ////////////////////////////////////////
    ВЫБРАТЬ
    1 КАК Период,
    1 КАК Подразделение
    ПОМЕСТИТЬ ВтДанные
    ;
    //{Запрос: 1, -1 ////////////////////////////////////////
    ВЫБРАТЬ
    ПрочиеРасходыНезавершенногоПроизводства.Подразделение
    ПОМЕСТИТЬ ВтДанные2
    ИЗ
    ВтДанные КАК ПрочиеРасходыНезавершенногоПроизводства
    ЛЕВОЕ СОЕДИНЕНИЕ ВтДанные КАК Т2 ПО ИСТИНА
    {ГДЕ
    Период МЕЖДУ &НачалоПериода И &КонецПериода,
    Подразделение.* КАК Подразделение
    }

    Если при этом запросе присутствует секция построителя без явного указания псевдонима, где поле встречается в обеих таблицах соединения, Конструктор Запросов ИР присваивает старый псевдоним основной таблицы превращая в такой неработоспособный запрос:

    //{Запрос: 0, -2 ////////////////////////////////////////
    ВЫБРАТЬ
    1 КАК Период,
    1 КАК Подразделение
    ПОМЕСТИТЬ ВтДанные
    ;
    //{Запрос: 1, -1 ////////////////////////////////////////
    ВЫБРАТЬ
    Т.Подразделение КАК Подразделение
    ПОМЕСТИТЬ ВтДанные2
    ИЗ
    ВтДанные КАК Т
    ЛЕВОЕ СОЕДИНЕНИЕ ВтДанные КАК Т2
    ПО ИСТИНА
    {ГДЕ
    ПрочиеРасходыНезавершенногоПроизводства.Период МЕЖДУ &НачалоПериода И &КонецПериода,
    ПрочиеРасходыНезавершенногоПроизводства.Подразделение.* КАК Подразделение}
tormozit commented 2 months ago

Ошибку воспроизвел https://www.hostedredmine.com/issues/990727

tormozit commented 2 months ago

Замечу также что тестовый текст запроса уже некорректен, т.к. содержит неоднозначность в секции ГДЕ построителя. И потому он не откроется штатным конструктором запроса и не сможет быть выполнен через построитель или компоновку.

tormozit commented 2 months ago

Исправлено в 7.40