Comments (24)
Если фактический параметр вызываемого COM метода имеет значение "Неопределено", то на чистом движке ОСкрипт 1.9 (без Турбоконфа) у меня то же возникает ошибка в тесте:
ф = Новый COMОбъект("V83.Application");
СтрокаСоединения = "File=""C:\1C\DB\тест1"";usr=1";
ф.Connect(СтрокаСоединения);
Пар1 = Неопределено;
Рез = ф.Сообщить(Пар1);
{Модуль C:\TerminalDisk\comtest.os / Ошибка в строке: 5 / Внешнее исключение (System.NullReferenceException): Ссылка на объект не указывает на экземпляр объекта.}
from onescript.
В ветку 1.8 будет вливаться?
from onescript.
ветка latest - это 1.х
from onescript.
Киньте ссылку на установщик или архив с проблемной версией 1.9
from onescript.
https://oscript.io/downloads/archive/latest-dev
from onescript.
Проверил на чистом движке ОСкрипт 1.9 (без Турбоконфа) по ссылке выше.
Ошибки нет. Тест приложен.
ф = Новый COMОбъект("V83.Application");
СтрокаСоединения = "File=""C:\1C\DB\ИР Подсистема 8.3"";usr=1";
ф.Connect(СтрокаСоединения);
Пар1 = 1;
Рез = ф.ирКэш.ПолеТекстаПрограммы(Пар1);
Сообщить("1");
from onescript.
Проверил на чистом движке ОСкрипт 1.9 (без Турбоконфа) по ссылке выше. Ошибки нет. Тест приложен.
ф = Новый COMОбъект("V83.Application"); СтрокаСоединения = "File=""C:\1C\DB\ИР Подсистема 8.3"";usr=1"; ф.Connect(СтрокаСоединения); Пар1 = 1; Рез = ф.ирКэш.ПолеТекстаПрограммы(Пар1); Сообщить("1");
Данный тест в ТурбоКонф тоже работает, в таком варианте:
Процедура РедактироватьТекст()
ПодключениеИР = ПодключениеИР(,, Ложь);
Если ПодключениеИР = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекстМодуля) Тогда
Возврат;
КонецЕсли;
МодулиИР = МодулиИР(ПодключениеИР);
Пар1 = 1;
Рез = МодулиИР.ирКэш.ПолеТекстаПрограммы(Пар1);
Сообщить("Работает!");
Возврат;
Если закомментировать Возврат - происходит ошибка:
Ошибка в строке: 1130 / Внешнее исключение (System.NullReferenceException): Ссылка на объект не указывает на экземпляр объекта.}
from onescript.
Строка 1130 такая:
ЗаголовокОкна = ТурбоКонф.ПолучитьЗаголовокТекущегоОкна();
from onescript.
Объект "Турбоконф", как я понимаю, не объект движка. Смотреть надо в его веутренности и в реализацию метода ПолучитьЗаголовок...
from onescript.
Объект "Турбоконф", как я понимаю, не объект движка. Смотреть надо в его веутренности и в реализацию метода ПолучитьЗаголовок...
[ContextMethod("ПолучитьЗаголовокТекущегоОкна", "GetForegroundWindowTitle")]
public string GetWindowTitle()
{
return User32.GetText(User32.GetForegroundWindow());
}
from onescript.
Не факт, что это именно эта строка. Т.к. мы выяснили, что иногда они не совпадают. Проверю отладчиком.
from onescript.
Да, строка не та.
Падает здесь:
Функция ПолеТекстаПрограммыИР(ПодключениеИР, ТекстМодуля, ПозицияВТексте, ВыделенныйТекст = "", ПереходитьВоВложенныйКонтекст = Истина, Знач КакВызовМетода = Неопределено,
Знач ЭтоДокумент = Истина, Знач СИменемКонфигурации = Ложь, Знач ЭтоАвтодополнение = Ложь, Знач ИдентификаторПоля = Неопределено, Знач ИмяКонфигурации = "")
Если ЭтоДокумент Тогда
Попытка
ТекущийДокумент = Конфигуратор.ТекущийДокумент;
Исключение
КонецПопытки;
Если ЗначениеЗаполнено(ТекущийДокумент) Тогда
ЗаголовокОкна = ТекущийДокумент.Заголовок;
ИмяКонфигурации = ТекущийДокумент.ИмяКонфигурации;
ИдентификаторПоля = ТекущийДокумент.DocumentRuntimeId;
// Сообщить(ТекущийДокумент.ConfRuntimeId);
КонецЕсли;
КонецЕсли;
МоментЗапуска = ТекущаяУниверсальнаяДатаВМиллисекундах();
ПолноеИмяМодуля = "";
ЭтоМодульВнешнегоОбъекта = Ложь;
КлючКэша = "ПолеТекстаПрограммы";
ПолеТекстаПрограммы = ВосстановитьЗначениеСеансаКонфигуратора(КлючКэша);
Попытка
Пустышка = ПолеТекстаПрограммы.мИмяМодуля;
Исключение
ПолеТекстаПрограммы = Неопределено;
КонецПопытки;
Если ПолеТекстаПрограммы = Неопределено Тогда
МодулиИР = МодулиИР(ПодключениеИР);
ПолеТекстаПрограммы = МодулиИР.ирКэш.ПолеТекстаПрограммы(ЯзыкПрограммы);
from onescript.
from onescript.
from onescript.
@tormozit принял, посмотрю, что можно сделать. Спасибо за исследование. Но стоит понимать, что Неопределено
языка BSL в этом случае передается в COM-объект, а он не знает ничего про Неопределено
, Неопределено
транслируется в "NULL общего назначения" и дальше уже падает сам COM-объект, который там null не ожидает. Мне кажется, можно там что-то отрегулировать, но не уверен, что удастся
from onescript.
@tormozit принял, посмотрю, что можно сделать. Спасибо за исследование. Но стоит понимать, что
Неопределено
языка BSL в этом случае передается в COM-объект, а он не знает ничего проНеопределено
,Неопределено
транслируется в "NULL общего назначения" и дальше уже падает сам COM-объект, который там null не ожидает. Мне кажется, можно там что-то отрегулировать, но не уверен, что удастся
Т.к. этот же код работает в 1.7, то вроде шансы есть ))
from onescript.
Тест @tormozit падает тут:
с исключением
System.NullReferenceException: 'Ссылка на объект не указывает на экземпляр объекта.'
initialValues[] was null.
from onescript.
initialValues не может быть null, он создается перед вызовом всегда... Странно
from onescript.
На самом деле initialValues[0]==null, но сообщение Студии именно такое.
И да, причина падения в маршалинге Неопределено
в null
, но не из-за передачи его в COM, а из-за попытки возврата параметра.
from onescript.
Да, уже починил
from onescript.
Кажется, можно уронить и это исправление...
from onescript.
В примере делаем
Пар1 = NULL;
и получаем
Ошибка в строке: 5 / Тип ScriptEngine.Machine.Variable не поддерживает преобразование в CLR-объект
from onescript.
Ну это не совсем ошибка так-то... Null это же субд-шный литерал, отличный от Неопределено. И текст исключения честный
from onescript.
Закрываю, кажется что худо-бедно, но исправлено.
from onescript.
Related Issues (20)
- Некорректное получение сигнатуры метода ОбработкаПолученияПредставления HOT 1
- Не понятное поведение встроенного TCPСервер HOT 3
- В ветке 1.9 не работает передача параметров в вызов метода делегата рефлектором HOT 1
- Ошибка в отладчике при использовании ЗагрузитьСценарийИзСтроки HOT 2
- Отладчик VS Code не подключается повторно , если сделать дисконнект HOT 3
- Ошибка "Конструктор не найден" HOT 14
- Отладчик ведет себя странным образом при остановке на точке и при прекращении отладки HOT 1
- На windows кодировка выхлопа отладки неверная
- Ошибка "Превышена допустимая длина потока" при записи двоичных данных большого размера в поток
- Неправильно работает ЧтениеJSON.Пропустить() HOT 5
- При вызове через COM пропущенные параметры получают значение Неопределено вместо значения по умолчанию HOT 11
- Слетает позиция потока при вызове методов объекта ЧтениеДанных в отладчике
- Нет перевода на английский для класса Консоль HOT 2
- Английский вариант СоединитьДвоичныеДанные в 1С - ConcatBinaryData, а в OS - ConcatenateBinaryData HOT 9
- Несовместимое поведение Выполнить, закрепленное в тестах eval HOT 9
- Метод HTTPОтвет.GetBodyAsBinary(), как английский вариант ПолучитьТелоКакДвоичныеДанные(), возвращает строку HOT 2
- Неверное значение аргумента ТекстовыйДокумент.Записать(Ч, КодировкаТекста.ANSI) HOT 18
- Отладчик одинаково реагирует на Stop и Disconnect, продолжая выполнение
- Не проверяются типы Перечислений при передаче их параметрами
- Ошибка в версии 1.8 при получени списка кластеров чере COM HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from onescript.