tormozit / RDT1C

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

Редактор объекта БД. Очистка менеджера временных таблиц. #96

Closed PerlAmutor closed 3 years ago

PerlAmutor commented 3 years ago
Информация для технической поддержки > Платформа: 8.2.19.130 > Режим БД: файловый > Конфигурация. Название: Конвертация данных, редакция 2.1 (2.1.8.2) > Конфигурация. Основной режим запуска: Обычное приложение > Конфигурация. Вариант встроенного языка: Русский > Конфигурация. Режим управления блокировкой данных: Автоматический > Конфигурация. Режим совместимости: Версия8_2_13 > Инструменты разработчика. Версия: Портативный 6.10.1p > Инструменты разработчика. Инструмент: Редактор объекта БД > Инструменты разработчика. Перехват клавиатурного ввода: Нет > Инструменты разработчика. Объекты на сервере: Нет > Инструменты разработчика. Серверный модуль: Нет > Клиент. ОС: Майкрософт Windows 10 Pro 64-разрядная Русский > Клиент. Приложение: Обычное приложение 32б > Клиент. Проверка модальных вызовов: Нет > Клиент. Язык интерфейса конфигурации: ru > Клиент. Язык интерфейса системы: ru > Клиент. От имени администратора Windows: Нет

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

  1. Открыл инструмент "Редактор объекта БД" (остальные окна были закрыты, в том числе и Консоль Запросов)
  2. Ушел спать
  3. Утром получил окно с ошибкой (штук 10 друг за другом):

image

{ВнешняяОбработка.ирОбщий.МодульОбъекта(29232)}: Значение не является значением объектного типа (РежимОтладкиЛкс)
    Если ирКэш.РежимОтладкиЛкс() Тогда 

Ожидаемое поведение Отсутствие поведения либо очистка этого менеджера временных таблиц, если оно повторяется периодически в этом инструменте..

tormozit commented 3 years ago

Похоже в памяти залипла (циклом ссылок) форма консоли запросов, которая относилась к закрытой базовой форме, и потому указатели на общие модули в ее общих модулях очищены. Форма консоли запросов в данном случае работает как задумано - очищает свой менеджер временных таблиц с заданной периодичностью.

Ошибкой является ее залипание. Но из описания непонятно, как оно возникает. Поэтому нужно описывать шаги, приводящие к залипанию. Для этого можно уменьшить частоту пересоздания менеджера временных таблиц до 1 минуты и проводить эксперименты.

tormozit commented 3 years ago

Скорее всего эта ошибка должна воспроизводиться и на 8.3. А там в точке останова можно вычислить ПроверитьЦиклическиеСсылкиВстроенногоЯзыка(Форма) и увидеть цикл ссылок.

PerlAmutor commented 3 years ago

Попробовал на 8.3, там не воспроизводится. Думаю дело в другом:

image

Судя по коду, обработчик ожидания отключается лишь после очистки временных таблиц, если форма консоли запроса закрыта. Но из-за того, что между двумя условиями в момент вызова ПересоздатьМенеджерВременныхТаблиц возникает исключение, то выход из процедуры идет раньше ожидаемого и обработчик так и остается выполняться до победного, т.к. до его отключения дело никогда не дойдет...

Чтобы этого избежать есть параметр "Однократно":

image

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

tormozit commented 3 years ago

Так и задумано, чтобы обработчик вызывался до победного. Ведь его он несет важную функцию. Поэтому правильнее, чтобы пользователь видел эти ошибки и перезапустил сеанс.

PerlAmutor commented 3 years ago

А вот почему ирКэш побился в ирОбщий, загадка.

tormozit commented 3 years ago

Я выше https://github.com/tormozit/RDT1C/issues/96#issuecomment-927233086 постарался объяснить. Очистка этой и подобных переменных модулей выполняется штатно при закрытии базовой формы (панели инструментов).

PerlAmutor commented 3 years ago

Эта информация тебе о чем-нибудь говорит? image

Любопытную статью нашел https://infostart.ru/1c/articles/89283/?ID=89283&bxajaxid=58f03b476ed57dfe327b1fe43cb65677&PAGEN_2=2

tormozit commented 3 years ago

Эта информация тебе о чем-нибудь говорит?

Нет. Обнаружение этой циклической ссылки в этом случае является формально корректным, но по сути ложным, т.к. этот цикл всегда разрывается платформой. В 1С я сообщал об этой проблеме. Поэтому полезных (для расследования) циклических ссылок на твоем снимке нет.

PerlAmutor commented 3 years ago

Ошибка пока не проявляется с версии 6.10.2p