Ошибка при открытии Технической информации ИР
|
|
dignatenkov | Дата: Среда, 14.05.2025, 11:50 | Сообщение # 16 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| Цитата tormozit (  ) 1. Попробуй в консоли код на сервере создать эту внешнюю компоненту из файла Вот этот код выполняется успешно: Код АдресМакета = ПоместитьВоВременноеХранилище(РеквизитФормыВЗначение("Объект").ПолучитьМакет("RegEx")); ПодключитьВнешнююКомпоненту(АдресМакета, "Component", ТипВнешнейКомпоненты.Native); Рег = Новый("AddIn.Component.RegEx"); Успех = Истина; Попытка Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина); Исключение Успех = Ложь; ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Рег компоненты Regex.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; Если Успех Тогда Сообщить("Успех"); КонецЕсли;
Добавлено (14.05.2025, 11:56) ---------------------------------------------
Цитата tormozit (  ) 2. Попробуй на севере установить стандартные библиотеки VC++ Установил, перезагрузил полностью. Не помогает, ошибка сохраняется.
|
|
| |
tormozit | Дата: Среда, 14.05.2025, 19:11 | Сообщение # 17 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| Создал задачу на изменение способа подключения внешних компонент https://www.hostedredmine.com/issues/1005009
|
|
| |
tormozit | Дата: Воскресенье, 18.05.2025, 19:33 | Сообщение # 18 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| Исправлено в 7.79
|
|
| |
dignatenkov | Дата: Понедельник, 19.05.2025, 16:29 | Сообщение # 19 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| После обновления ошибка пропала. Добавлено (27.05.2025, 23:42) --------------------------------------------- У меня вдруг наметилось продолжение этой истории. 7.79.3 все запускается, обновляемся до 7.80.1, пытаемся вызвать тех. информацию:
Значение не является значением объектного типа (ВызыватьИсключения) {ИнструментыРазработчикаTormozit Обработка.ирОболочкаРегВыражение.МодульОбъекта(327)}:Вычислитель.ВызыватьИсключения = Истина; {ИнструментыРазработчикаTormozit Обработка.ирОболочкаРегВыражение.МодульОбъекта(121)}:РезультатJSON = Вычислитель().НайтиСовпаденияJSON(ТекстГдеИскать); {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(7805)}:Вхождения = РегВыражение.НайтиВхождения(Текст,,,, выхДлительность); {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(32216)}:Вхождения = НайтиРегВыражениеЛкс(СтрокаЗапускаПроцесса, "[-/]debug(?:\s+-(http)|\s*$)"); {ИнструментыРазработчикаTormozit ОбщийМодуль.ирСервер.Модуль(873)}:ИнфоСервера = ИнфоСервера + Символы.ПС + "Сервер. Отладка: " + ирОбщий.РежимОтладкиСервераИзКоманднойСтрокиЛкс(); {ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(21495)}:Текст = Текст + ирСервер.ИнфоСервераПриложений(); {ИнструментыРазработчикаTormozit Обработка.ирПлатформа.Форма.ОПодсистеме.Форма(351)}:Текст = ирКлиент.ТехническаяИнформацияЛкс(НазваниеИнструмента);
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
Попытка посмотреть, в чем дело дала пока только то, что если в функции Вычислитель() ТекущийДвижок = "PCRE2", то будет ошибка. А если VBScript, то все ок. Добавлено (27.05.2025, 23:44) --------------------------------------------- Дополнение: забыл уточнить, что после этого откат обратно на 7.79.3 проблему не решает. Дальше можно чистить кэши, удалять/добавлять расширение заново - ошибка сохраняется.
|
|
| |
tormozit | Дата: Среда, 28.05.2025, 07:29 | Сообщение # 20 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| Цитата dignatenkov (  ) если VBScript, то все ок
На 64х сервере этот COM интерфейс недоступен и потому будут ошибки, если ты его там насильно включишь.
|
|
| |
dignatenkov | Дата: Среда, 28.05.2025, 10:55 | Сообщение # 21 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| Цитата tormozit (  ) если ты его там насильно включишь В данном случае сервер - это тот же самый мой ноут. Windwos 11 24H2, до недавнего времени была Win10, обновился тут. Я насильно COM не включал, где это посмотреть?Добавлено (28.05.2025, 11:15) --------------------------------------------- Да, сервер именно x64. 8.3.27.1559.
|
|
| |
tormozit | Дата: Среда, 28.05.2025, 13:29 | Сообщение # 22 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| Выше я некорректно указал про недоступность COM интерфейса. Правильно - он там доступен, но работает в десять раз медленней. Поэтому я его вообще не пытаюсь активировать там. https://www.hostedredmine.com/issues/913592
|
|
| |
dignatenkov | Дата: Среда, 28.05.2025, 13:35 | Сообщение # 23 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| Цитата dignatenkov (  ) ТекущийДвижок = "PCRE2" Извини, я запутался. Мы вообще должны видеть такое состояние переменной в моем случае?
|
|
| |
tormozit | Дата: Среда, 28.05.2025, 18:11 | Сообщение # 24 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| Цитата dignatenkov (  ) Вот этот код выполняется успешно Сейчас внешняя компонента подключается точно таким же методом. Происходит это только в серверном контексте.
|
|
| |
dignatenkov | Дата: Среда, 28.05.2025, 18:21 | Сообщение # 25 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| Цитата tormozit (  ) подключается точно таким же методом Может быть, добавить настройку, чтобы эти компоненты для RegExp вообще не подключались и использовались только методы встроенные в платформу? Я просто не пойму, какие должны быть мои действия и чем я могу помочь в решении проблемы. Или проблемы нет и я должен попытаться решить ее сам, тоже вариант.
|
|
| |
tormozit | Дата: Среда, 28.05.2025, 18:36 | Сообщение # 26 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| От тебя поступает противоречивая диагностическая информация. Нужно еще раз проверить все тесты, ранее показавшие успех. 1. Чистое создание внешней компоненты на сервере и вызов ее метода https://devtool1c.ucoz.ru/forum/2-2795-12753-16-1747212646 2-3-4. В программе модуля Обработка.ирОболочкаРегВыражение.МодульОбъекта менять порядок подбора движков и проверять их работу при вызове проблемной операции в серверном контексте. Должно получиться 3 варианта. 5. Если тест 2-4 с внешней компонентой PCRE2 провалится, то далее нужно отлаживать ее создание и попытаться найти отличие от п.1. Я таких отличий не вижу.
|
|
| |
dignatenkov | Дата: Среда, 28.05.2025, 19:25 | Сообщение # 27 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| Я попробовал в консоли кода выполнить следующее (контекст серверный или толстый клиент)
Код Успех = ПодключитьВнешнююКомпоненту("D:\temp\ИР\RegExWin64.dll", "Component", ТипВнешнейКомпоненты.Native); Рег = Новый("AddIn.Component.RegEx");
Попытка УспехРег = Истина; Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина); Исключение УспехРег = Ложь; КонецПопытки;
Успех2 = ПодключитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.RegExWin64", "Component2", ТипВнешнейКомпоненты.Native); Рег2 = Новый("AddIn.Component2.RegEx");
Попытка УспехРег2 = Истина; Рег2.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)", Истина); Исключение УспехРег2 = Ложь; КонецПопытки;
Успех, Успех2, УспехРег, УспехРег2 = Истина.
Далее в ходе экспериментов выяснилось, что небольшое изменение в коде процедуры НоваяВКОбщаяЛкс общего модуля ирОбщий (см. в комментариях БЫЛО и ДОБАВЛЕНО:
Код Функция НоваяВКОбщаяЛкс(Счетчик = 0) Экспорт Пока Счетчик < 60 Цикл Суффикс = XMLСтрока(Счетчик); КэшКомпонентыИспорчен = Ложь; Попытка //ВК = Новый ("AddIn.ирОбщая" + Суффикс + ".AddIn"); // При порче кэша тут попытка не срабатывала и исключение шло в вызывающий метод ВК = СоздатьВКОбщая(КэшКомпонентыИспорчен, Суффикс, Счетчик); Прервать; Исключение //Если ЗначениеЗаполнено(Счетчик) И Не КэшКомпонентыИспорчен Тогда // БЫЛО Счетчик = Счетчик + 1; //ДОБАВЛЕНО Если Счетчик > 1 И Не КэшКомпонентыИспорчен Тогда //ДОБАВЛЕНО ВызватьИсключение; КонецЕсли; // https://www.hostedredmine.com/issues/889213 // Занимаем новую ячейку в кэше внутренних компонент рабочего процесса. Это64битныйПроцесс = ирКэш.Это64битныйПроцессЛкс(); ИмяМакета = "ВК";
Приводит к тому, что окно информации выводится, но с выдачей сообщений: {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(8917)}: Тип не определен (AddIn.ирОбщая1.AddIn) Ошибка обращения к процессу ОС рабочего процесса: Процесс ОС с отбором () не найден
По п.2 вопрос - где именно надо менять порядок движков для проверки?
|
|
| |
tormozit | Дата: Четверг, 29.05.2025, 00:38 | Сообщение # 28 |
Генералиссимус
Группа: Администраторы
Сообщений: 6906
Репутация: 180
Статус: Оффлайн
| исправленная функция НоваяВКОбщаяЛкс
Код Функция НоваяВКОбщаяЛкс(Счетчик = 0) Экспорт ИмяОбъекта = Неопределено; Пока Счетчик < 60 Цикл Суффикс = XMLСтрока(Счетчик); КэшКомпонентыИспорчен = Ложь; Попытка //ВК = Новый ("AddIn.ирОбщая" + Суффикс + ".AddIn"); // При порче кэша тут попытка не срабатывала и исключение шло в вызывающий метод ВК = СоздатьВКОбщая(КэшКомпонентыИспорчен, Суффикс, Счетчик); Прервать; Исключение Если ИмяОбъекта <> Неопределено И Не КэшКомпонентыИспорчен Тогда ВызватьИсключение; КонецЕсли; // https://www.hostedredmine.com/issues/889213 // Занимаем новую ячейку в кэше внутренних компонент рабочего процесса. Это64битныйПроцесс = ирКэш.Это64битныйПроцессЛкс(); ИмяМакета = "ВК"; Если Это64битныйПроцесс Тогда ИмяМакета = ИмяМакета + "64"; Иначе ИмяМакета = ИмяМакета + "32"; КонецЕсли; Если ирКэш.ЛиПортативныйРежимЛкс() Тогда ДвоичныеДанные = ирПортативный.ПолучитьМакет(ИмяМакета); АдресКомпоненты = ПолучитьИмяВременногоФайла("dll"); ДвоичныеДанные.Записать(АдресКомпоненты); //АдресКомпоненты = "D:\VC\Native_Comp_RDT\binWin32\AddInNative.dll"; // Для отладки Иначе // https://www.hostedredmine.com/issues/967297 //ДвоичныеДанные = Обработки.ирПортативный.ПолучитьМакет(ИмяМакета); АдресКомпоненты = "Обработка.ирПортативный.Макет." + ИмяМакета; КонецЕсли; ИмяОбъекта = "ирОбщая" + Суффикс; //Если ирКэш.НомерРежимаСовместимостиЛкс() >= 803021 Тогда // Результат = Вычислить("ПодключитьВнешнююКомпоненту(АдресКомпоненты, ИмяОбъекта, ТипВнешнейКомпоненты.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно"); //Иначе Результат = ПодключитьВнешнююКомпоненту(АдресКомпоненты, ИмяОбъекта, ТипВнешнейКомпоненты.Native); //КонецЕсли; Если Не Результат Тогда ВызватьИсключение "Не удалось подключить внешнюю компоненту Общая"; КонецЕсли; КонецПопытки; КонецЦикла; Возврат ВК; КонецФункции
|
|
| |
dignatenkov | Дата: Четверг, 29.05.2025, 00:55 | Сообщение # 29 |
Лейтенант
Группа: Пользователи
Сообщений: 77
Репутация: 56
Статус: Оффлайн
| С такой версией функции нет зацикливания, теперь прекрасно сразу же выдает ошибку отсюда:
Цитата dignatenkov (  ) Значение не является значением объектного типа (ВызыватьИсключения) Добавлено (07.06.2025, 12:49) --------------------------------------------- Мне удалось победить проблему, но почему оно так получается, я до конца объяснить не могу. Что я сделал (напомню, у меня служба сервера 1С, SQL и все остальное находится в пределах одного компьютера): 1. Изменил запуск службы сервера 1С - от имени системной учетной записи. Запустил 1С и ошибка исчезла. 2. Вернул запуск от имени пользователя, которого использую и для входа в Windows и для этой службы - ошибка не возвращается. Добавлено (07.06.2025, 13:13) ---------------------------------------------
Цитата dignatenkov (  ) Мне удалось победить проблему, Не могу отредактировать сообщение, к сожалению, проблема не решилась. То есть всё заработало, но не вследствие приведенных действий, что-то сделал еще. Отпишусь, как пойму что именно.Добавлено (12.06.2025, 10:41) --------------------------------------------- Что мне совершенно непонятно - что ПолучитьОбъектВнешнейКомпонентыИзМакета, когда вызывается из конструктора регулярного выражения с вариантом вычислителя PCRE2, никаких ошибок не вызывает и нормально отрабатывает. Подключение внешней компоненты происходит один раз в сеансе и потом подтягивается уже подключенная. Эта же функция, когда вызывается по кнопке Техническая информация, не получает уже подключенную компоненту и вылетает с ошибкой при попытке подключения. Параметры вызова те же, в чем отличие - я пока не могу понять.
|
|
| |