Вход | Регистрация


1С:Предприятие ::

Метки: 

v7: Глюки внешней компоненты 1с++ (1cpp.dll)

Я
   victuan1
 
05.02.18 - 12:38
1c++ версии 3.2.4.3

Имеется класс, реализованный в теле внешней обработке. Внешняя обработка также содержит Таблицу, на которой находится какой-то АктивИкс (неважно какой).

Известно, что можно использовать Таблицу в классе 1С++, используя метод:

ИсхТабл.ИсходнаяТаблица("Таблица", Путь);

Но при этом происходит падение 1С. Если из таблицы убрать АктивИкс падения не будет.
Также его не будет если Таблица находится в файле mxl.

Есть способы решения этой проблемы?
 
  Рекламное место пустует
   victuan1
 
1 - 05.02.18 - 12:41
Сварганил примерчик, демонстрирующий эту ошибку 
запускаем обработку ТестТаб.ert, она создает класс из обработки ТестТабКласс.ert и пытается обратиться к таблице.
   victuan1
 
2 - 05.02.18 - 12:41
   victuan1
 
3 - 05.02.18 - 13:56
Подыму.
   big
 
4 - 05.02.18 - 14:11
Инициализация АктивИкс была разная в разных версиях. Сейчас постараюсь найти у себя.
   big
 
5 - 05.02.18 - 14:16
(4) + не, похоже, что я не в теме ((
   victuan1
 
6 - 05.02.18 - 18:17
Я знаю, что иногда на форум заходят те, кто могут разъяснить этот момент, поэтому буду изредка приподымать тему.
   sttt
 
7 - 06.02.18 - 02:19
Попробуй этим http://www.1cpp.ru/docum/icpp/html/ActiveX.html
разместить ActiveX
   sttt
 
8 - 06.02.18 - 02:20
Текст модуля бы тестовой обработки
   victuan1
 
9 - 06.02.18 - 08:19
(8) Во втором посте я выложил комплект для повторения глюка.
   victuan1
 
10 - 06.02.18 - 08:19
И тестовую обработку и тестовый класс 1с++
 
 
   victuan1
 
11 - 06.02.18 - 14:48
ап
   victuan1
 
12 - 07.02.18 - 12:03
ап
   Злопчинский
 
Ведущий
13 - 07.02.18 - 14:23
все, пипец.
спецов не осталось.
пора переходить на снеговика.
там тряхомудии не меньше, но хоть в куче погрустить можно...
   mehfk
 
14 - 07.02.18 - 15:01
(0) Идешь в журналы винды, наблюдаешь там что-то такое:
Имя сбойного приложения: 1cv7s.exe, версия: 7.70.0.27, метка времени: 0x4573fcd8
Имя сбойного модуля: MFC42.DLL, версия: 6.6.8063.0, метка времени: 0x57898e13
Код исключения: 0xc0000005
Смещение ошибки: 0x000a7ff4
Идентификатор сбойного процесса: 0x3b24
Время запуска сбойного приложения: 0x01d3a008ee061a6e
Путь сбойного приложения: C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe
Путь сбойного модуля: C:\Windows\SYSTEM32\MFC42.DLL
Идентификатор отчета: 2017276b-9d46-4eab-818d-ad35708da99e
Полное имя сбойного пакета: 
Код приложения, связанного со сбойным пакетом:

Запускаешь 1с-ину под отладчиком, ставишь бряк на относительный адрес 0x000a7ff4. Выполняешь действия, приводящие к падению, срабатывает бряк, смотришь откуда пришло, разбираешься как это обойти.
   mehfk
 
16 - 07.02.18 - 15:10
   victuan1
 
17 - 07.02.18 - 15:14
(16) Ну и что дальше делать?
Я так понимаю, что падает у всех в одном и том же месте.
Вопрос, как исправить
   mehfk
 
18 - 07.02.18 - 15:15
До конца читал?

Запускаешь 1с-ину под отладчиком, ставишь бряк на относительный адрес 0x000a7ff4. Выполняешь действия, приводящие к падению, срабатывает бряк, смотришь откуда пришло, разбираешься как это обойти.
   victuan1
 
19 - 07.02.18 - 15:32
(18) Эх. Как ставить бряк на относительный адрес? Я ведь одинэсник (в плохом смысле этого слова).
Я для того и выложил тест, чтобы кто-то умный как ты (в хорошем смысле), посмотрел бы откуда пришло и как обойти.
   victuan1
 
20 - 07.02.18 - 15:34
Ссылка на тест https://yadi.sk/d/fJnOoVYN3S6mwJ
Наблюдается у всех при любых условиях.
1с++ юзал 3.2.4.3 (на 3.2.2.0 то же самое)
   mehfk
 
21 - 07.02.18 - 15:49
Мне жалоко тратить на это время при том, что поолжительного результата может и не быть. Я попробовал наудачу в вышеприведенной функции первый условный переход на безусловный заменить, но ошибка случилась в другой функции.

Ну и ты же сам нашел решение, пользуйся им:
>> Также его не будет если Таблица находится в файле mxl.
   victuan1
 
22 - 07.02.18 - 15:54
(21) Сделай исключение, потрать 10 минут времени - тест у меня минимальный - четыре строчки кода. Если сабжа у тебя не будет - возмещу потраченное время.

Решение с хмл не нравится - хочется единый файл, а не кучу хмл-ок в придачу.
   victuan1
 
23 - 07.02.18 - 17:06
Я так понял, что копать нужно 1С++.
Может есть обходные пути.
А может авторы этого проекта могут мне помочь, исправив баг.
   Chieftain
 
24 - 07.02.18 - 18:00
ЕМНИП, аналогичная проблема была с какими-то из свойств ячеек макета.
Попробуй обойти проблему, так как крайне маловероятно, что этим будет кто-то заниматься.
Открой форму из класса, пусть она тебе ПриОткрытии вернет нужную таблицу. Или работай с таблицей в самой форме ПриОткрытии.
   victuan1
 
25 - 07.02.18 - 18:56
(24) А как в ПриОткрытии?
Класс запускается в начале сеанса работы и существует до его конца.
Пользователь периодически нажимает кнопку, которая обращается к классу, передает параметры и выводит на экран отчет с этими параметрами.
   victuan1
 
26 - 07.02.18 - 19:22
Сейчас глупость спрошу..
Как открыть форму из класса?
   victuan1
 
27 - 07.02.18 - 22:32
Ап, что ли.
   Chieftain
 
28 - 08.02.18 - 00:10
(26) ПолучитьПуть()+ОткрытьФорму(), сам скомпонуешь.
Реализуй стандартную процедуру ПриОткрытии в модуле реализации класса и он отработает. Единственное здесь - методы и переменные, заполненные в классе не равны им же в методах формы. Обращайся к ним через переданный в параметре объект класса.
   victuan1
 
29 - 08.02.18 - 06:23
   victuan1
 
30 - 08.02.18 - 07:00
(28) Нет, всё равно валится.
Перенес метод ИсходнаяТаблица в проц. ПриОткрытии класса.
Но теперь валится на методе Вывести, который оставил в "теле" класса.

Новый тест для воспроизведения ошибки: https://yadi.sk/d/Cm15VVsq3SC8YN

Какие будут следующие предложения?
   victuan1
 
31 - 08.02.18 - 07:42
Немного подумал и проблему решил - пусть таблица целиком инициализируется и выводится на печать в проц. ПриОткрытии.
Я же ведь могу ее вызывать сколь угодно и когда угодно.

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

Главное, конечная цель достигнута - решить задачу, используя один файл.
Спасибо Chieftain за мозговой штурм.
   victuan1
 
32 - 08.02.18 - 07:46
Хотелось бы еще решить проблему, описанную 1C 7.7: Ключи запуска (посты 16-18).
[quote] проект 1с++ для 1С 7.7 еще жив? 
Есть некоторые баги в "движке", хочется поправить.

Например, падает отладчик и 1С: предприятие, если при трассировке модуля класса (реализованного в теле внешней ert) в табло отладчика укажешь имя переменной, которой не существует в текущем контексте.

При отладке обычных модулей 1С в этих случаях падения не происходит, а просто пишется:
"Ошибка в выражении!"
[/quote]

Но пока не могу создать тестовый класс с минимальным кодом.
Ошибка воспроизводится на моем большом классе, на мелких тестовых этого сабжа нет... :(
   Chieftain
 
33 - 08.02.18 - 14:14
(31) Ну именно об этом я и говорил :)
 
 
   Волшебник
 
Модератор
34 - 08.02.18 - 14:21
(13) В восьмёрке реализовано ООП.



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует