Coder Social home page Coder Social logo

Comments (24)

tormozit avatar tormozit commented on July 18, 2024 1

Если фактический параметр вызываемого 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.

tormozit avatar tormozit commented on July 18, 2024

В ветку 1.8 будет вливаться?

from onescript.

nixel2007 avatar nixel2007 commented on July 18, 2024

ветка latest - это 1.х

from onescript.

tormozit avatar tormozit commented on July 18, 2024

Киньте ссылку на установщик или архив с проблемной версией 1.9

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

https://oscript.io/downloads/archive/latest-dev

from onescript.

tormozit avatar tormozit commented on July 18, 2024

Проверил на чистом движке ОСкрипт 1.9 (без Турбоконфа) по ссылке выше.
Ошибки нет. Тест приложен.

ф = Новый COMОбъект("V83.Application");
СтрокаСоединения = "File=""C:\1C\DB\ИР Подсистема 8.3"";usr=1";
ф.Connect(СтрокаСоединения);
Пар1 = 1;
Рез = ф.ирКэш.ПолеТекстаПрограммы(Пар1);
Сообщить("1");

from onescript.

bolsun avatar bolsun commented on July 18, 2024

Проверил на чистом движке ОСкрипт 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.

bolsun avatar bolsun commented on July 18, 2024

Строка 1130 такая:
ЗаголовокОкна = ТурбоКонф.ПолучитьЗаголовокТекущегоОкна();

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

Объект "Турбоконф", как я понимаю, не объект движка. Смотреть надо в его веутренности и в реализацию метода ПолучитьЗаголовок...

from onescript.

bolsun avatar bolsun commented on July 18, 2024

Объект "Турбоконф", как я понимаю, не объект движка. Смотреть надо в его веутренности и в реализацию метода ПолучитьЗаголовок...

    [ContextMethod("ПолучитьЗаголовокТекущегоОкна", "GetForegroundWindowTitle")]
    public string GetWindowTitle()
    {
        return User32.GetText(User32.GetForegroundWindow());
    }

from onescript.

bolsun avatar bolsun commented on July 18, 2024

Не факт, что это именно эта строка. Т.к. мы выяснили, что иногда они не совпадают. Проверю отладчиком.

from onescript.

bolsun avatar bolsun commented on July 18, 2024

Да, строка не та.
Падает здесь:

Функция ПолеТекстаПрограммыИР(ПодключениеИР, ТекстМодуля, ПозицияВТексте, ВыделенныйТекст = "", ПереходитьВоВложенныйКонтекст = Истина, Знач КакВызовМетода = Неопределено,
	Знач ЭтоДокумент = Истина, Знач СИменемКонфигурации = Ложь, Знач ЭтоАвтодополнение = Ложь, Знач ИдентификаторПоля = Неопределено, Знач ИмяКонфигурации = "")

	Если ЭтоДокумент Тогда
		Попытка
			ТекущийДокумент = Конфигуратор.ТекущийДокумент;
		Исключение
		КонецПопытки;
		Если ЗначениеЗаполнено(ТекущийДокумент) Тогда
			ЗаголовокОкна = ТекущийДокумент.Заголовок;
			ИмяКонфигурации = ТекущийДокумент.ИмяКонфигурации;
			ИдентификаторПоля = ТекущийДокумент.DocumentRuntimeId;
		//   Сообщить(ТекущийДокумент.ConfRuntimeId);  
		КонецЕсли;
	КонецЕсли;
	МоментЗапуска = ТекущаяУниверсальнаяДатаВМиллисекундах();
	ПолноеИмяМодуля = "";
	ЭтоМодульВнешнегоОбъекта = Ложь;
	КлючКэша = "ПолеТекстаПрограммы";
	ПолеТекстаПрограммы = ВосстановитьЗначениеСеансаКонфигуратора(КлючКэша);
	Попытка
		Пустышка = ПолеТекстаПрограммы.мИмяМодуля;
	Исключение
		ПолеТекстаПрограммы = Неопределено;
	КонецПопытки;
	Если ПолеТекстаПрограммы = Неопределено Тогда
		МодулиИР = МодулиИР(ПодключениеИР);
		ПолеТекстаПрограммы = МодулиИР.ирКэш.ПолеТекстаПрограммы(ЯзыкПрограммы);

from onescript.

bolsun avatar bolsun commented on July 18, 2024

image

from onescript.

bolsun avatar bolsun commented on July 18, 2024

image

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

@tormozit принял, посмотрю, что можно сделать. Спасибо за исследование. Но стоит понимать, что Неопределено языка BSL в этом случае передается в COM-объект, а он не знает ничего про Неопределено, Неопределено транслируется в "NULL общего назначения" и дальше уже падает сам COM-объект, который там null не ожидает. Мне кажется, можно там что-то отрегулировать, но не уверен, что удастся

from onescript.

bolsun avatar bolsun commented on July 18, 2024

@tormozit принял, посмотрю, что можно сделать. Спасибо за исследование. Но стоит понимать, что Неопределено языка BSL в этом случае передается в COM-объект, а он не знает ничего про Неопределено, Неопределено транслируется в "NULL общего назначения" и дальше уже падает сам COM-объект, который там null не ожидает. Мне кажется, можно там что-то отрегулировать, но не уверен, что удастся

Т.к. этот же код работает в 1.7, то вроде шансы есть ))

from onescript.

Mr-Rm avatar Mr-Rm commented on July 18, 2024

Тест @tormozit падает тут:

if (flags[i] && !initialValues[i].Equals(values[i]))

с исключением
System.NullReferenceException: 'Ссылка на объект не указывает на экземпляр объекта.'
initialValues[] was null.

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

initialValues не может быть null, он создается перед вызовом всегда... Странно

from onescript.

Mr-Rm avatar Mr-Rm commented on July 18, 2024

На самом деле initialValues[0]==null, но сообщение Студии именно такое.
И да, причина падения в маршалинге Неопределено в null, но не из-за передачи его в COM, а из-за попытки возврата параметра.

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

Да, уже починил

from onescript.

Mr-Rm avatar Mr-Rm commented on July 18, 2024

Кажется, можно уронить и это исправление...

from onescript.

Mr-Rm avatar Mr-Rm commented on July 18, 2024

В примере делаем

Пар1 = NULL;

и получаем
Ошибка в строке: 5 / Тип ScriptEngine.Machine.Variable не поддерживает преобразование в CLR-объект

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

Ну это не совсем ошибка так-то... Null это же субд-шный литерал, отличный от Неопределено. И текст исключения честный

from onescript.

EvilBeaver avatar EvilBeaver commented on July 18, 2024

Закрываю, кажется что худо-бедно, но исправлено.

from onescript.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.