Понедельник, 19.11.2018, 20:40
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Основной » Проблемные ситуации » При отладке запроса От(Запрос) "портит" сам запрос (От(Запрос) удаляет объект Запрос)
При отладке запроса От(Запрос) "портит" сам запрос
avmДата: Воскресенье, 04.11.2018, 15:50 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Платформа: 8.3.12.1595
Режим БД: клиент-серверный
Конфигурация. Название: Зарплата и управление персоналом КОРП, редакция 2.5 (2.5.135.1)
Конфигурация. Основной режим запуска: Обычное приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим совместимости: Версия8_2_13
Инструменты разработчика: Подсистема 4.70
Клиент. ОС: Windows x86-64 version 10.0  (Build 17763)
Клиент. Приложение: Обычное приложение 64б
Клиент. От имени администратора Windows: Нет
Клиент. Текущий язык системы: ru

Сервер. ОС: Windows x86-64 version 10.0  (Build 14393)
Сервер. Отладка: tcp

1. Перед выполнением функции От(запрос)   - Объект Запрос "нормальный.
2. Вызываю функцию От(Запрос) и ожидаю запуска клиента с запущенной подсистемой "Консоль запросов (ИР)" с текстом запроса

    Вот тут есть нюанс - для "внешней обработки" у меня клиент запустился и  консоль запросов была "заполнена", но я отлаживаю
    веб-сервис (файловый режим работы базы) и клиент не запускается (а значит ни текст запроса, ни отладить его в консоли я не могу).

3. Объект "Запрос" уничтожен, дальнейшая отладка не возможна.

С уважением, Андрей

Добавлено (04.11.2018, 15:51)
---------------------------------------------
Может я что не так делаю?

Прикрепления: 4279980.jpg(64.6 Kb) · 0853575.jpg(45.0 Kb) · 8590101.jpg(41.6 Kb)
 
tormozitДата: Воскресенье, 04.11.2018, 16:07 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
По скриншотам не видны предметы отладки. Прошу указать предмет отладки (клиент/сервер) для каждого скриншота.
 
avmДата: Воскресенье, 04.11.2018, 16:20 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Предмет отладки "Запрос"

Т.е. на поставил точку останова на выполнении запроса. Нажал F9 и посмотрел объект "Запрос" - он нормальный.
Затем я ввел От(Запрос) и нажал "Рассчитать"
Раньше выдавалась строка от с предложением "открыть объект для отладки". теперь такого нет... Объект "Запрос" тупо удаляется из памяти

Добавлено (04.11.2018, 16:21)
---------------------------------------------
или я не правильно понял вопрос?

 
tormozitДата: Воскресенье, 04.11.2018, 16:40 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
Предмет отладки - термин конфигуратора 1С. Ниже иллюстрация

Прикрепления: 2411241.png(34.9 Kb)
 
tormozitДата: Воскресенье, 04.11.2018, 16:41 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
Цитата avm ()
Раньше выдавалась
Что есть "раньше"?
 
avmДата: Воскресенье, 04.11.2018, 19:07 | Сообщение # 6
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Раньше, это в прошлых релизах ИР

Контекст - это?

Что при этом, что при этом - эффект одинаков
Прикрепления: 6734300.jpg(58.8 Kb) · 2950635.jpg(61.3 Kb)
 
tormozitДата: Воскресенье, 04.11.2018, 19:15 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
С версией ИР это скорее всего не связано. У тебя похоже на сервере кто то запустил вычисление очень большой коллекции и тем самым сделал недоступным вычислитель выражений. Поэтому он просто не возвращает результат. Эта проблема описана мной здесь https://partners.v8.1c.ru/forum/t/1752317/m/1752317 . Исправят ее в лучшем случае в 8.3.14. Если бы была ошибка выполнения, то вернулось бы описание ошибки.

Конфигурация ПО
8.3.11-8.3.13
Проблема
При http отладке вычисление выражений перестает работать после запуска вычисления большой коллекции
Воспроизведение
Восстановить базу из выгрузки в клиент-серверной базе с http
отладкой. Открыть конфигуратор. Установить точку останова на конце
процедуры ОбщийМодуль1. Запустить на отладку клиентское приложение.
После остановки в точке остановки вычислить выражение «А» и далее
вычислить содержимое коллекции его значения. Закрыть окно «Контейнер
значений». Теперь попытка вычислить любое выражение (например «Счетчик»)
приводит к непонятному результату - колонка "Значение" остается пустой.
Попытка убить такой сеанс через отладчик не приводит к успеху. Попытка
убить такой сеанс через консоль кластера приводит к довольно долгой
реакции (30 секунд). После этого сеанс пропадает, а соединение остается.
Соответственно монопольный доступ к базе невозможен, пока операция не
завершится. В итоге пришлось сделать перезапуск агента сервера 1С. После
этого входящий сетевой трафик процесса сервера отладки (dbgs.exe) упал.
Уже много раз замечал, что если вычислить в отладчике большую
коллекцию (например таблицу значений), то количество ее элементов
отображается 0 и как я понимаю запускается асинхронное извлечение ее
данных с сервера. Команды пользователя при этом принимаются. Часто
пользователь не хочет ждать окончания, т.к. непонятно сколько еще ждать.
Поэтому он закрывает диалог отображающий содержимое коллекции. Но если
он далее захочет вычислить другое выражение, то он получит непонятную
реакцию программы - в окне  после нажатия  ячейки  и  будут пустыми и
пока тот первый асинхронный поток извлечения данных коллекции не
завершит работу, новые вычисления выражений не будут работать.
 
avmДата: Воскресенье, 04.11.2018, 20:06 | Сообщение # 8
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Не совсем понятно - у меня та же проблема в веб-сервисе, который работает на файловой базе.

А что делать? Сервер перезапустить?
 
tormozitДата: Воскресенье, 04.11.2018, 20:15 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
Вставь вызов отладочной функции непосредственно в код и отладь его выполнение.
 
tormozitДата: Воскресенье, 04.11.2018, 20:46 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
Цитата avm ()
в прошлых релизах ИР
Их было очень много. Все анализировать будет очень затратно. Есть номер конкретной версии (желательно как можно выше), на которой точно в той же ситуации функция вела себя так как ты ожидал?
 
avmДата: Воскресенье, 04.11.2018, 20:53 | Сообщение # 11
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Я к сожалению не сохраняю релизы cf-ников ИР... sad
 
avmДата: Понедельник, 05.11.2018, 09:57 | Сообщение # 12
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
В общем как пока обошел проблему.
Мне нужно отладить процедуру web-сервиса. Я выбросил эту процедуру во внешнюю обработку и запускаю в обычной связке "отладчик - клиент".
В тексте процедуры после каждого интересующего
    Запрос.Выполнить;
Поставил отладочный оператор
   МойЗапрос = Запрос;

При отладке останавливаюсь отладчиком после оператора "МойЗапрос = Запрос;" нажимаю F9 и на функции От(МойЗапрос) нажимаю "Рассчитать"
В клиенте появляется "консоль запроса ИР" (все штатно) через которую я вижу что происходит с запросом.
Я закрываю "консоль запроса ИР" и управление возвращается отладчику. но объект "МойЗапрос" теперь имеет тип "Неопределено".



но так как логика программы не нарушено, я могу продолжить выполнение  программы дальше и проводить отладку запроса в следующих этапах.
Вопрос, а можно чтобы функция От(МойЗапрос) не "убивало" объект "МойЗапрос" ? Тогда я смогу обойтись без этих избыточных операторов (МойЗапрос = Запрос;)

Отладка идет штатно



На всякий случай повторяю техническую информацию

Платформа: 8.3.12.1595
Режим БД: клиент-серверный
Конфигурация. Название: Зарплата и управление персоналом КОРП, редакция 2.5 (2.5.135.1)
Конфигурация. Основной режим запуска: Обычное приложение
Конфигурация. Вариант встроенного языка: Русский
Конфигурация. Режим совместимости: Версия8_2_13
Инструменты разработчика: Подсистема 4.70
Клиент. ОС: Windows x86-64 version 10.0  (Build 17763)
Клиент. Приложение: Обычное приложение 64б
Клиент. От имени администратора Windows: Нет
Клиент. Текущий язык системы: ru

Сервер. ОС: Windows x86-64 version 10.0  (Build 14393)
Сервер. Отладка: tcp

С уважением, Андрей

Добавлено (05.11.2018, 10:09)
---------------------------------------------
Собственно говоря, как я понимаю проблему:
Раньше ты при вызове От(МойЗапросОтладки) параметр передавал по "значению" и у себя в консоли создавал соответствующий объект с котором работала твоя "консоль запросов ИР". При завершении работы, ты абсолютно правильно "убивал" свой созданный объект

Сейчас передача параметра идет "по ссылке" и "убивая" у себя объект, ты тем самым "убиваешь" его у меня.

можно ли вернуть обратно передачу параметра "по значению" или на это что-либо завязано?

Прикрепления: 9194929.jpg(58.2 Kb) · 3921965.jpg(62.9 Kb)
 
tormozitДата: Понедельник, 05.11.2018, 10:23 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 2147
Репутация: 27
Статус: Оффлайн
avm, Теперь проблема стала понятна. Но повторить ее не удается. Опиши детально, что ты делаешь в консоли запросов. Я проверил на таком коде

Код
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    БанкиТ.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Банки КАК БанкиТ";
Таблица = Запрос.Выполнить().Выгрузить();
От(Запрос);
// тут запрос все еще существует
В открывшейся консоли я выполнил запрос и закрыл ее. После этого запрос все еще существует.

В отладочные функции объекты и в частности запрос передавались всегда (во всех версиях ИР) по ссылке. Но в эти параметры не записывалось новое значение. Ты прав, нужно переделать на передачу по значению. Но хорошо бы выявить и то место, где при передаче по ссылке записывалось Неопределено, т.к. есть вероятность что от этой проблемы могут страдать и более внутренние вызовы.
 
avmДата: Понедельник, 05.11.2018, 11:12 | Сообщение # 14
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Попробуй немного "удлинить" текст процедуры



И посмотри на точке останова От(Запрос) и что будет дальше после закрытия "Консоли запроса ИР"...

Добавлено (05.11.2018, 11:19)
---------------------------------------------
Ох.. Извини.. Наверное меня от переработки "без выходных" немного заклинило.

Это сама функция От(Запрос) возвращает "неопределенно".

Прикрепления: 9071276.jpg(70.4 Kb)
 
avmДата: Понедельник, 05.11.2018, 11:42 | Сообщение # 15
Рядовой
Группа: Пользователи
Сообщений: 12
Репутация: 4
Статус: Оффлайн
Хотя.... Я тут поигрался.. Что-то с кэшем все таки не то делается...

Я вначале сделал обработку так как на скрине.

Затем делаю новую обработку с текстом немного иным

Запрос = Новый  Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ
               | БанкиТ.Ссылка КАК Ссылка
               |Поместить ВТ_Банки
               |ИЗ
               | Справочник.Банки КАК БанкиТ";
Запрос.Выполнить();
Запрос.Текст = "Выбрать * Из ВТ_Банки Как БанкиМ";
Запрос.Выполнить();

Сохраняю, запускаю... Все работает. Если смотреть "консоль запросов ИР" после каждой строки - все нормально. Все честно. Текст в консоли соответствует тексту новой обработки.

но тут я делаю так... На точке останова делаю "рассчитать" От(Запрос). Вызывается консоль. Консоль закрываю и сразу опять нажимаю на рассчитать (не перевыбираю ничего.. просто опять нажимаю "рассчитать") - консоль не вызывается и вроде ничего не происходит... но если я перевыбираю от(запрос), то у меня тянется Запрос не актуальный, а из кэша..
Если я смотрю на текст запроса, то он у меня "из кэша" - Видишь, внизу у меня стоит select * from ВТ_Банки
Хотя у меня нет этого в запросе...



попробуй.. воспроизведется ли эта ситуация у тебя?

Добавлено (05.11.2018, 12:02)
---------------------------------------------
И да.. для "чистоты эксперимента". Создай несколько таких обработок с разным текстом. поотлаживай одну обработку, затем не закрывая ее создай другую с другим текстом запроса, но имена "Запрос" и МенеджерВременныхТаблиц - пусть совпадают.
Затем поотлаживай вторую обработку и не закрывая - создай третью... И так же - отлаживаешь. И тогда проблема кэша может будет яснее.

Прикрепления: 4645223.jpg(103.7 Kb)
 
Форум » Основной » Проблемные ситуации » При отладке запроса От(Запрос) "портит" сам запрос (От(Запрос) удаляет объект Запрос)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: