tormozit / RDT1C

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

Невозможно просмотреть содержимое временных таблиц , формируемых в пакетном запросе в консоли запросов #586

Closed agithubber2 closed 3 months ago

agithubber2 commented 3 months ago

Программное окружение Платформа: 8.3.19.1522 Режим БД: клиент-серверный Конфигурация. Название: Зарплата и управление персоналом, редакция 3.0 (3.0.18.77) Конфигурация. Основной режим запуска: Управляемое приложение Конфигурация. Вариант встроенного языка: Русский Конфигурация. Режим управления блокировкой данных: Управляемый Конфигурация. Режим совместимости: Версия8_3_15 Конфигурация. Режим использования синхронных вызовов: Использовать Конфигурация. Версия БСП: 202 Инструменты разработчика. Версия: Портативный 7.19.2p Инструменты разработчика. Инструмент: Консоль запросов Инструменты разработчика. Перехват клавиатурного ввода: Да Инструменты разработчика. Объекты на сервере: Да Инструменты разработчика. Серверный модуль БСП: Да Расширения. Адаптация1 () Клиент. Приложение: Обычное приложение 64б Клиент. Проверка модальных вызовов: Нет Клиент. Язык интерфейса конфигурации: ru Клиент. Язык интерфейса системы: ru_RU Клиент. Отладка разрешена: Да Клиент. Постоянный кэш метаданных: Да Клиент. ОС: Майкрософт Windows 10 Корпоративная LTSC 64-разрядная Русский Клиент. ОС от имени администратора: Нет Клиент. ОС выполнение BAT: Да Клиент. ОС Текущая кодовая страница: 866 Клиент-Сервер. Пинг: 0мс Сервер. ОС: Windows x86-64 Microsoft Windows 10 version 10.0 (Build 17763)

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

  1. Сохранил снимок запроса (в транзакции) через ...ирОбщий.От(Запрос).
  2. Открыл снимок в портативных инструм.
  3. Разкомментировал строки во вкладке "Перед выполнением запроса"
  4. Пытаюсь пошагово исполнять запросы пакета и просматривать временные таблицы. Однако уже на втором запросе пакета, где производится выборка из временной таблицы, сформированной в первом запросе пакета, получаю внизу сообщение об ошибке "Текст запроса: Строка кода 21: {(21,2)}: Таблица не найдена "ВТГрафикиМесяцы". Но при этом данная таблица прекрасно сформирована при пошаговом исполнении предыдущего (самого первого) запроса пакета. Также данная таблица прекрасно видна во вкладке "Временные таблицы" Также, если выполнять сразу весь пакет, то все работает, все запросы пакета прекрасно формируются , и прекрасно видят, все формируемые временные таблицы. Но при попытке потом все же просмотреть содержимое этих временных таблиц - всегда снизу ошибка "Текст запроса: Строка кода ..... Таблица не найдена такая-то.." Пробовал и при "Ведущей" и при "Ведомой" структурах запроса - никогда мне не удаётся просмотреть , наконец, хоть как-то содержимое этих временных таблиц пакета! Перепробовал и несколько предыдущих версий инструментов - то же самое. Возможно, я что-то не то не так делаю - что не так делаю??

Ожидаемое поведение Возможность просматривать формируемые в пакете запросов временные таблицы (сейчас только вижу, сколько в них строк сформировано)

tormozit commented 3 months ago

нужен текст запроса и картинка

agithubber2 commented 3 months ago

Из соображений приватности оставил из всего пакета запросов только два первых запроса - ошибка та же самая, и не надо анализировать большой пакет запросов. На картинке практически весь текст запроса и ошибка снизу слева. Также запрос в виде текста ниже. Screenshot_1 Запрос как текст: `ВЫБРАТЬ РАЗЛИЧНЫЕ Начисления.ГрафикРаботыНорма КАК ГрафикРаботыНорма, Начисления.ПериодДействия КАК Месяц, Начисления.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени, Начисления.ПериодДействияНачало КАК ПериодДействияНачало, Начисления.ПериодДействияКонец КАК ПериодДействияКонец ПОМЕСТИТЬ ВТГрафикиМесяцы ИЗ РегистрРасчета.Начисления КАК Начисления ГДЕ Начисления.Регистратор = &ВременныйРегистратор И (Начисления.ВидРасчета.ТребуетсяРасчетНормыВремени ИЛИ Начисления.ВидРасчета.КатегорияНачисленияИлиНеоплаченногоВремени В (&МассивКатегорийДляОпределенияНормы)) И НЕ Начисления.ФиксРасчетВремени И Начисления.ВидРасчета.ОчередностьРасчета = &ОчередностьРасчета ;

//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ГрафикиМесяцы.ГрафикРаботыНорма КАК ГрафикРаботы, ГрафикиМесяцы.Месяц КАК Месяц, СУММА(ГрафикиРаботы.ОсновноеЗначениеНорма) КАК НормаДней, СУММА(ГрафикиРаботы.ДополнительноеЗначениеНорма) КАК НормаЧасов, СУММА(ВЫБОР КОГДА ГрафикиРаботы.Дата МЕЖДУ ГрафикиМесяцы.ПериодДействияНачало И ГрафикиМесяцы.ПериодДействияКонец ТОГДА ГрафикиРаботы.ОсновноеЗначение ИНАЧЕ 0 КОНЕЦ) КАК НормаДнейВПериоде, СУММА(ВЫБОР КОГДА ГрафикиРаботы.Дата МЕЖДУ ГрафикиМесяцы.ПериодДействияНачало И ГрафикиМесяцы.ПериодДействияКонец ТОГДА ГрафикиРаботы.ДополнительноеЗначениеНорма ИНАЧЕ 0 КОНЕЦ) КАК НормаЧасовВПериоде, ГрафикиМесяцы.ПериодДействияНачало КАК ПериодДействияНачало, ГрафикиМесяцы.ПериодДействияКонец КАК ПериодДействияКонец ПОМЕСТИТЬ ВТНормаВремени ИЗ ВТГрафикиМесяцы КАК ГрафикиМесяцы ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы ПО (ГрафикиРаботы.ГрафикРаботы = ГрафикиМесяцы.ГрафикРаботыНорма) И (ГрафикиРаботы.Месяц = ГрафикиМесяцы.Месяц) И (НЕ ГрафикиРаботы.ВремяВЧасах) И (ГрафикиРаботы.ВидУчетаВремени = &РабочееВремя) И (ГрафикиРаботы.ПериодРегистрации = ГрафикиМесяцы.ПериодРегистрацииВремени)

СГРУППИРОВАТЬ ПО ГрафикиМесяцы.ГрафикРаботыНорма, ГрафикиМесяцы.Месяц, ГрафикиМесяцы.ПериодДействияНачало, ГрафикиМесяцы.ПериодДействияКонец`

tormozit commented 3 months ago

Картинка в полном размере не открывается. Проверь ее открытие под анонимным пользователем.

tormozit commented 3 months ago

Подозреваю, что ты не отключил выполнение запроса в отменяемой транзакции, описанной в обработчике "Перед выполнением". Действие транзакции распространяется и на создаваемые временные таблицы. Поэтому накопления временных таблиц в менеджере временных таблиц в таком режиме нет.

tormozit commented 3 months ago

Добавлю в первую строку кода этого обработчика комментарий, поясняющий эту особенность: НачатьТранзакцию(); // ВНИМАНИЕ! Транзакция НЕ фиксируется. Поэтому все созданные в ней временные таблицы будут сразу уничтожены.

tormozit commented 3 months ago

Причем по сути тот же комментарий уже выводится при открытии этого снимка: В обработчике "Перед выполнением запроса" размещен отключенный код по восстановлению незафиксированных изменений на момент снимка. При использовании в нем нефиксируемой транзакции созданные в ней временные таблицы будут недоступны.

agithubber2 commented 3 months ago

Большое спасибо за ответ. Насчёт неоткрытия картинки не очень понял, проверил под анонимным, кликаю картинку - открывает ее в оригинальном размере. Ладно, главное: подскажи тогда, Сергей, пожалуйста, как же , какую "хитрость" , или приём, или что можно применить, чтобы посмотреть временные эти таблицы?!? Если я пытаюсь пошагово выполнять пакет, то вижу результат только первого запроса, а со второго - сразу ошибка вместо выполнения! И получается, что я могу видеть результат вып. только первого и последенго запросов пакета!!

agithubber2 commented 3 months ago

Причем, вспоминаю, пару месяцев назад у меня не было такой проблемы! На ЭТОМ ЖЕ САМОМ запросе точно в этом же модуле, и запрос не менялся! И как-то я мог пошагово трассировать и выполнять (этот же!) пакет. Я бросился вернул разные версии вплоть до августовских - но все они теперь работают одинаково: для отладки просмотра мне доступны только результаты исполнения только первого и последнего запросов пакета! Слов нет! Постоянно траблы вместо жизни! Как же отладить вопрос, как смотреть временные таблицы?!?

tormozit commented 3 months ago

Как же отладить вопрос, как смотреть временные таблицы?!?

Отключать или фиксировать транзакцию

agithubber2 commented 3 months ago

Я сейчас не у комп, но что значит "отключить транзакцию"? Насколько я помню, именно разкомментирование кода во вкладке, который включает транзакцию , позволяет получить реальное поведение (снимок) происходившего в модуле при исполнении кода. Если оставить код закомментированным , то при исполнении снимка получается пустышка, не соответствующая абсолютно реальному исполнению запроса в коде. Но и фиксировать транзакцию , добавив код в этой вкладке, тоже нельзя , так как нельзя "портить" реальную базу , внося изменения. Тем более, обычно требуется сохранить несколько снимков запроса а разными входными параметрами и т.п. для сравнения и т.п. Или я не так что-то понимаю , и можно отключить транзакцию , но и сохранить возможность трассировать исполнение пакета запросов с просмотром временных таблиц?

Очевидно, способ существует. Так как, реально, раньше , хотя я и сталкивался эпизодически с проблемой, описанной в этом топике, но помогали манипуляции с включением /отключением ведущей/ведомой структуры , или ещё что-то похожее, но реально я мог трассировать исполнение пакета с просмотром таблиц! Это первый раз я столкнулся , что никакие "манипуляции" не помогают , и я могу смотреть только результат первого или самого последнего запросов пакета.