|
v7: Глюки внешней компоненты 1с++ (1cpp.dll) | ☑ | ||
---|---|---|---|---|
0
victuan1
05.02.18
✎
12:38
|
1c++ версии 3.2.4.3
Имеется класс, реализованный в теле внешней обработке. Внешняя обработка также содержит Таблицу, на которой находится какой-то АктивИкс (неважно какой). Известно, что можно использовать Таблицу в классе 1С++, используя метод: ИсхТабл.ИсходнаяТаблица("Таблица", Путь); Но при этом происходит падение 1С. Если из таблицы убрать АктивИкс падения не будет. Также его не будет если Таблица находится в файле mxl. Есть способы решения этой проблемы? |
|||
1
victuan1
05.02.18
✎
12:41
|
Сварганил примерчик, демонстрирующий эту ошибку
запускаем обработку ТестТаб.ert, она создает класс из обработки ТестТабКласс.ert и пытается обратиться к таблице. |
|||
2
victuan1
05.02.18
✎
12:41
|
||||
3
victuan1
05.02.18
✎
13:56
|
Подыму.
|
|||
4
big
05.02.18
✎
14:11
|
Инициализация АктивИкс была разная в разных версиях. Сейчас постараюсь найти у себя.
|
|||
5
big
05.02.18
✎
14:16
|
(4) + не, похоже, что я не в теме ((
|
|||
6
victuan1
05.02.18
✎
18:17
|
Я знаю, что иногда на форум заходят те, кто могут разъяснить этот момент, поэтому буду изредка приподымать тему.
|
|||
7
sttt
06.02.18
✎
02:19
|
Попробуй этим http://www.1cpp.ru/docum/icpp/html/ActiveX.html
разместить ActiveX |
|||
8
sttt
06.02.18
✎
02:20
|
Текст модуля бы тестовой обработки
|
|||
9
victuan1
06.02.18
✎
08:19
|
(8) Во втором посте я выложил комплект для повторения глюка.
|
|||
10
victuan1
06.02.18
✎
08:19
|
И тестовую обработку и тестовый класс 1с++
|
|||
11
victuan1
06.02.18
✎
14:48
|
ап
|
|||
12
victuan1
07.02.18
✎
12:03
|
ап
|
|||
13
Злопчинский
07.02.18
✎
14:23
|
все, пипец.
спецов не осталось. пора переходить на снеговика. там тряхомудии не меньше, но хоть в куче погрустить можно... |
|||
14
mehfk
07.02.18
✎
15:01
|
(0) Идешь в журналы винды, наблюдаешь там что-то такое:
Запускаешь 1с-ину под отладчиком, ставишь бряк на относительный адрес 0x000a7ff4. Выполняешь действия, приводящие к падению, срабатывает бряк, смотришь откуда пришло, разбираешься как это обойти. |
|||
16
mehfk
07.02.18
✎
15:10
|
||||
17
victuan1
07.02.18
✎
15:14
|
(16) Ну и что дальше делать?
Я так понимаю, что падает у всех в одном и том же месте. Вопрос, как исправить |
|||
18
mehfk
07.02.18
✎
15:15
|
До конца читал?
Запускаешь 1с-ину под отладчиком, ставишь бряк на относительный адрес 0x000a7ff4. Выполняешь действия, приводящие к падению, срабатывает бряк, смотришь откуда пришло, разбираешься как это обойти. |
|||
19
victuan1
07.02.18
✎
15:32
|
(18) Эх. Как ставить бряк на относительный адрес? Я ведь одинэсник (в плохом смысле этого слова).
Я для того и выложил тест, чтобы кто-то умный как ты (в хорошем смысле), посмотрел бы откуда пришло и как обойти. |
|||
20
victuan1
07.02.18
✎
15:34
|
Ссылка на тест https://yadi.sk/d/fJnOoVYN3S6mwJ
Наблюдается у всех при любых условиях. 1с++ юзал 3.2.4.3 (на 3.2.2.0 то же самое) |
|||
21
mehfk
07.02.18
✎
15:49
|
Мне жалоко тратить на это время при том, что поолжительного результата может и не быть. Я попробовал наудачу в вышеприведенной функции первый условный переход на безусловный заменить, но ошибка случилась в другой функции.
Ну и ты же сам нашел решение, пользуйся им: >> Также его не будет если Таблица находится в файле mxl. |
|||
22
victuan1
07.02.18
✎
15:54
|
(21) Сделай исключение, потрать 10 минут времени - тест у меня минимальный - четыре строчки кода. Если сабжа у тебя не будет - возмещу потраченное время.
Решение с хмл не нравится - хочется единый файл, а не кучу хмл-ок в придачу. |
|||
23
victuan1
07.02.18
✎
17:06
|
Я так понял, что копать нужно 1С++.
Может есть обходные пути. А может авторы этого проекта могут мне помочь, исправив баг. |
|||
24
Chieftain
07.02.18
✎
18:00
|
ЕМНИП, аналогичная проблема была с какими-то из свойств ячеек макета.
Попробуй обойти проблему, так как крайне маловероятно, что этим будет кто-то заниматься. Открой форму из класса, пусть она тебе ПриОткрытии вернет нужную таблицу. Или работай с таблицей в самой форме ПриОткрытии. |
|||
25
victuan1
07.02.18
✎
18:56
|
(24) А как в ПриОткрытии?
Класс запускается в начале сеанса работы и существует до его конца. Пользователь периодически нажимает кнопку, которая обращается к классу, передает параметры и выводит на экран отчет с этими параметрами. |
|||
26
victuan1
07.02.18
✎
19:22
|
Сейчас глупость спрошу..
Как открыть форму из класса? |
|||
27
victuan1
07.02.18
✎
22:32
|
Ап, что ли.
|
|||
28
Chieftain
08.02.18
✎
00:10
|
(26) ПолучитьПуть()+ОткрытьФорму(), сам скомпонуешь.
Реализуй стандартную процедуру ПриОткрытии в модуле реализации класса и он отработает. Единственное здесь - методы и переменные, заполненные в классе не равны им же в методах формы. Обращайся к ним через переданный в параметре объект класса. |
|||
29
victuan1
08.02.18
✎
06:23
|
Похоже на это:
http://www.itland.ru/forum/lofiversion/index.php/t2341.html |
|||
30
victuan1
08.02.18
✎
07:00
|
(28) Нет, всё равно валится.
Перенес метод ИсходнаяТаблица в проц. ПриОткрытии класса. Но теперь валится на методе Вывести, который оставил в "теле" класса. Новый тест для воспроизведения ошибки: https://yadi.sk/d/Cm15VVsq3SC8YN Какие будут следующие предложения? |
|||
31
victuan1
08.02.18
✎
07:42
|
Немного подумал и проблему решил - пусть таблица целиком инициализируется и выводится на печать в проц. ПриОткрытии.
Я же ведь могу ее вызывать сколь угодно и когда угодно. По сути, получается что один и тот же файл ert используется одновременно и как класс и как обычная внешняя обработка с печ.формами. Главное, конечная цель достигнута - решить задачу, используя один файл. Спасибо Chieftain за мозговой штурм. |
|||
32
victuan1
08.02.18
✎
07:46
|
Хотелось бы еще решить проблему, описанную 1C 7.7: Ключи запуска (посты 16-18).
[quote] проект 1с++ для 1С 7.7 еще жив? Есть некоторые баги в "движке", хочется поправить. Например, падает отладчик и 1С: предприятие, если при трассировке модуля класса (реализованного в теле внешней ert) в табло отладчика укажешь имя переменной, которой не существует в текущем контексте. При отладке обычных модулей 1С в этих случаях падения не происходит, а просто пишется: "Ошибка в выражении!" [/quote] Но пока не могу создать тестовый класс с минимальным кодом. Ошибка воспроизводится на моем большом классе, на мелких тестовых этого сабжа нет... :( |
|||
33
Chieftain
08.02.18
✎
14:14
|
(31) Ну именно об этом я и говорил :)
|
|||
34
Волшебник
модератор
08.02.18
✎
14:21
|
(13) В восьмёрке реализовано ООП.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |