Добрый день,

В версии CRM 3.1.1.65 используя компонент «DataTreeGrid» у пользователей часто выскакивает ошибка «exception (E)» без дополнительной информации. Проверяя в отладчике, ошибка происходит на вызове «Dataset.Close()», отладчик возвращает ошибку «unknown exception».

При продолжение выполнения программы на строке «Dataset.Open()» появляется ошибка: «Invalid pointer operation»

Возможна сбой уже происходит до «Dataset.Close()», ибо в окне используются несколько компонентов «DataTreeGrid» в которых используется метод «grdDataOnDragDrop» для реализации перетаскивание елементов из одного «DataTreeGrid» в другой.

Возможно, кто то из пользователей форума встречал такую проблему и может помочь советом?

Заранее благодарю!

Нравится

15 комментариев

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу

Здравствуйте!
Похоже, что в какой-то момент теряется ссылка на COM-объект DataSet'a. Возможно, он уже закрыт или удален к моменту, когда вызывается Dataset.Close().

Спасибо за ответ. Есть ли способ определить, что может вызвать преждевременное закрытие или удаление СOM объекта Dataset’a ? И, возможно ли какими то способами обойти эту проблему ?

Artūrs, возможно, датасет закрывается до этого. Пройдитесь дебаггером, может быть, есть место, где Вы ожидаете в переменной ссылку на один датасет, а там на самом деле другой. Перед выполнением Dataset.Close посмотрите на свойства и состояние датасета.
Попробуйте опустить вызов Dataset.Close(), воспроизведется ли ошибка?

Спасибо. Убрал строку Dataset.Close из метода grdDataOnDragDrop ошибка не поевляетса. Но так как ето использовалось для автоматическова обновление DataTreeGrid’a, то больше не происходит «Refresh» DataTreeGrid’a.

Artūrs, попробуйте перенести обновление грида в другое место, возможно, по событию делать.

Если есть Dataset.Close(); но нет Dataset.Open() то со временем CollectGarbage() удалит ваш экземпляр датасета. Рефшер же всегда делает Datset.Close(); ->> Dataset.Open()

Изначально использовалось Dataset.Close -> Dataset.Open, Dataset.Close убрали пока по совету Андрея, чтобы проверить воспроизведется ли ошибка. Убрав строку Dataset.Close из метода grdDataOnDragDrop ошибка не появляется.

Хотел спросить по поводу данной ошибки, если при Dataset.Close происходить ошибка Catastrophic failure, и мы её перехватываем в блоке catch, возможно ли как то восстановить состояние системы, какой она была до ошибки ? После этой ошибки, после каждого действие происходит дальнейшие ошибки, которые не позволяют пользователю работать дальше

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Артур, необходимо разбираться с причиной ошибки и устранять её, простым try {} catch {} не обойтись.

Хотел уточнить, что код ошибки (number), который появляется при ошибки на закрытие датасет (Dataset.Close()): -2147418113.
Поискал в форуме по номеру ошибки -2147418113, нашел несколько записей людей о обработке этой ошибки.

http://www.community.terrasoft.ru/blogs/6647
http://www.community.terrasoft.ru/forum/topic/5601

Может, кто то знает причину этой ошибки ?

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

Добрый день

Ошибка происходит при Dataset.Close(), я хотел узнать, может, кто то знает причину этой -2147418113 ошибки ?
У некоторых людей сделана обработка именно на эту ошибку:

http://www.community.terrasoft.ru/blogs/6647
http://www.community.terrasoft.ru/forum/topic/5601

почему именно на эту ошибку ?

Добрый день.
В ядре информации об ошибке не нашли.
В чем именно проблема?

Показать все комментарии

Добрый день!
Возникла необходимость заиметь дерево, хранящее различные данные в зависимости от уровня вложенности узлов.
Если быть конкретнее, то продукты разбиты на категории, а те, в свою очередь - на подкатегории. Категории и подкатегории продуктов имеют различную семантику и несут вместе с именем разную информацию. Необходимо реализовать удобный подбор оборудования для контрагентов, используя существующую классификацию.
Для этого в левой части окна должно быть дерево, содержащее иерархию оборудования, в правой - список уже добавленного оборудования и карточку редактирования его атрибутов (серийный номер, например), в центре - интерфейс добавления/удаления оборудования.
На комьюнити не встречал внятных примеров заполнения дерева даже однородной информацией (впрочем, с wnd_BaseTreeArea я б ещё разобрался) - всё какие-то намёки да упоминания о фильтрах, а уж заполнение разнородными данными вовсе нигде не озвучивается.
В связи с чем вопрос: как проще всего выполнить заполнение дерева по схеме "первый уровень вложенности = категории, второй уровень = подкатегории, третий уровень = продукты"?

Нравится

3 комментария

Егор, заполняйте MemoryDataset на AfterOpen согласно вашей логике(можно на скрипте написать, можно ХП), и все у Вас получиться.

Вариантов на самом деле много. Можно реализовать, например, аналогично разделу "Проекты"(Проекты, стадии, работы).

Да, MemoryDataset - то, что надо. Всё получилось, спасибо большое!

Показать все комментарии