|
v7: 1С++. Не уничтожается объект класса при закрытии формы | ☑ | ||
---|---|---|---|---|
0
zelenyj_ogurec
12.06.22
✎
09:37
|
Добрый день!
Продолжаю "воевать" с 1С7.7, 1С++, FormEx. Обнаружилась очень странная ошибка. Есть тестовый класс "Т_Тест", он очень простой. В нем есть только конструктор и деструктор. Для отладки в конструкторе и в деструкторе этого класса просто выдается сообщение. Дальше я опишу два сценария создания объекта этого класса. Один из них работает корректно, второй - нет. Хотя во втором способе вроде бы все сделано правильно. 1) Первый сценарий использования объекта этого класса. Этот вариант работает. В модуле формы какого-либо документа (например "Неподтвержденная заявка") делаем переменную "мТест". Затем в тексте модуля создаем объект класса (в самом низу модуля после всех процедур): [code] мТест = СоздатьОбъект("Т_Тест"); [/code] Входим в пользовательский режим 1С, открываем и закрываем документ. По отладочным сообщениям из конструктора и деструктора класса видно, что при открытии документа объект создается, а при закрытии документа - объект уничтожается. Все отлично. 2) Второй сценарий использования объекта - глючит. Дупустим, я не хочу напрямую создавать объект класса. Я хочу вызывать создание объекта из специального класса, который назову "Т_Фабрика". Делаем класс "Т_Фабрика", который будет создавать все нужные объекты. Объект этого класса создается в глобальном модуле и храниится в переменной глобального модуля "глФабрика". В этом классе есть вот такая простая функция: [code] Функция СоздатьОбъектТест () Экспорт лОбъект = СоздатьОбъект("Т_Тест"); Возврат лОбъект; КонецФункции [/code] Теперь в модуле формы документа создаем объект класса "Т_Тест" с помощью нашей "фабрики": [code] мТест = глФабрика.СоздатьОбъектТест(); [/code] Проверяем. После запуска 1С при открытии документа объект создается. Но после закрытия документа этот объект не уничтожается, его деструктор не срабатывает! Деструктор срабатывает только когда закрывается 1С. Это какая-то ошибка? Если это ошибка, то чья это ошибка? 1С или 1С++? |
|||
1
Злопчинский
12.06.22
✎
09:43
|
а если создание перенести в ПриОткрытии() - чисто интересно
|
|||
2
zelenyj_ogurec
12.06.22
✎
09:47
|
(1) не помогает
|
|||
3
zelenyj_ogurec
12.06.22
✎
09:48
|
В ходе экспериментов выяснилось следующее.
Ошибка скорее всего связана с тем, что глФабрика - это гобальная переменная. И при создании в ней объекта "Т_Тест" ссылка на этот объект как-то "залипает" в модуле Фабрики. Хотя явных ссылок на "Т_Тест" в модуле фабрики нигде нету! И пока объект глФабрика "живет", он держит какую-то неявную ссылку на "мТест". |
|||
4
zelenyj_ogurec
12.06.22
✎
10:03
|
Как бы связатся с разработчиками 1С++, чтобы они помогли разобраться.
Где их найти? Или это уже все заброшено? |
|||
5
Злопчинский
12.06.22
✎
10:10
|
на форуме 1С++
или лучше здесь отдельную ветку с проблеой и тестовым примером |
|||
6
Злопчинский
12.06.22
✎
10:11
|
(4) заброшено практически.
Стюардесса, хоть и красивая - но мертвая. Откапывают только по необходимости. ну или пользуют если некрофилы... |
|||
7
zelenyj_ogurec
12.06.22
✎
10:43
|
(5) >> на форуме 1С++
Сделал там тоже такую же тему. >> или лучше здесь отдельную ветку с проблеой и тестовым примером Так вот эта тема и есть. Вот пример: https://yadi.sk/d/Z3yHcqu4hL3CAA |
|||
8
zelenyj_ogurec
12.06.22
✎
10:43
|
В примере две обработки.
Первая обработка создает объект сама напрямую. Вторая обработка создает объект через глобальную "Фабрику". |
|||
9
Djelf
13.06.22
✎
09:31
|
(8) Это старая проблема: https://www.1cpp.ru/forum/YaBB.pl?num=1247569443
Возвращай созданный объект через параметр функции, т.е. глФабрика.СоздатьОбъектТест(мТест); |
|||
10
zelenyj_ogurec
14.06.22
✎
11:36
|
(9) Спасибо!
А может быть еще что-нибудь подскажете вот по этому вопросу? 1С-7.7. Создать специальное окошко (всегда наверху) |
|||
11
Djelf
14.06.22
✎
13:12
|
(10) Форму 1С так не выведешь, АЛьФ же пытался с плавающей шаманить.
Как ты сам убедился, ничего из этого не вышло, а чтобы работало нужно очень долго ковырять в бинарнике что и как там в клюшках внутри работает. Но я подозреваю что тебе подойдет вот это: https://www.1cpp.ru/forum/YaBB.pl?num=1193602020 |
|||
12
zelenyj_ogurec
14.06.22
✎
17:43
|
(11) Ответил в теме про специальное окошко.
Чтобы не путать обсуждаемый вопрос. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |