|   |   | 
| 
 | 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) В восьмёрке реализовано ООП.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |