Выполняемый модуль глючит?

Автор alyuev, 03 декабря 2024, 01:15

« назад - далее »

Djelf

Цитата: АЛьФ от 05 декабря 2024, 09:03В связи с этой темой вдруг родилась мысль. В 1С ведь параметры по умолчанию могут быть только простых типов - число, строка, дата. Но вот тут "ConstArray[pVar->Type2]->val" хранится тип CValue. Следовательно можно сделать метод типа ВыполняемыйМодуль::ПараметрПоУмолчанию(ИмяФункции, НомерПараметра[, ЗначениеПараметра]), который будет возвращать текущее значение и в случае необходимости устанавливать новое.
Какое широкое поле открывается...
Ведь к выполняемому модулю можно текущий модуль установить. Т.е. устанавливать значения по умолчанию любого типа можно будет для каких угодно модулей.
Тестовая https://cloud.mail.ru/public/nytf/oEhaAk494
Добавлен метод
ВыполняемыйМодуль::ПараметрПоУмолчанию(ИмяПроцедурыИлиФункции, ИмяПараметра,ЗначениеПараметра)
Исключения при отсутствии в модуле  ИмяПроцедурыИлиФункции,  ИмяПараметра в найденной.
Возвращает старое значение параметра.
Но фокус не не удался, ТипЗначенияСтр в ВМ выводит первоначатьный тип, поэтому засунуть туда тз вместо числа не получается - значение получается нулевое.

Djelf

Цитата: alyuev от 05 декабря 2024, 12:03
Цитата: Djelf от 05 декабря 2024, 07:25С некоторыми изменениями код заработал.

Пытаюсь открыть внешний отчет, в котором была ошибка. Отчет не открылся и в Сообщить выдало:

pNewWnd->CreateControl

При повторной попытке открыть этот же отчет выдало то же сообщение и при этом 1С вылетела.
Вот поэтому я и не хотел ничего изменять в 1с++, у меня вроде сборка на всем моих данных работает, кто его знает на чем оно у тебя вылетело и как это повторить.

alyuev

А есть где-то твоя сборка без последней правки? Я бы просто проверил твою компиляцию.

АЛьФ

Цитата: Djelf от 05 декабря 2024, 12:10Но фокус не не удался, ТипЗначенияСтр в ВМ выводит первоначатьный тип, поэтому засунуть туда тз вместо числа не получается - значение получается нулевое.
Подозреваю, что надо делать сначала Reset переменной "pCompiledModule->ConstArray[pVar->Type2]->val".

Djelf

Цитата: АЛьФ от 05 декабря 2024, 12:31
Цитата: Djelf от 05 декабря 2024, 12:10Но фокус не не удался, ТипЗначенияСтр в ВМ выводит первоначатьный тип, поэтому засунуть туда тз вместо числа не получается - значение получается нулевое.
Подозреваю, что надо делать сначала Reset переменной "pCompiledModule->ConstArray[pVar->Type2]->val".
Сдалал. Не помогло, может тип в пи-коде зашивается.
upd: тип зашивается в pVar->Type2, ща мы и его поправим...

Djelf

Цитата: alyuev от 05 декабря 2024, 12:25А есть где-то твоя сборка без последней правки? Я бы просто проверил твою компиляцию.
Закоментировал код получения параметров по-умолчанию https://cloud.mail.ru/public/J3Sd/Wdio9FM5W

Djelf

Не,  pVar->Type2 это позиция в параметре.
pVar->Type чёрт его знает, она всегда = 3
Тип может где-то еще зашит, но я склоняюсь к пи-коду.

Djelf

Пока работает как-то так:

ТекстМодуля="Функция ХтоЭто(П1=""Петя"") Возврат П1; КонецФункции

НовыйПараметр = "Вася";
СтарыйПараметр = ВМ.УстановитьПараметрПоУмолчанию("ХтоЭто ","П1",НовыйПараметр);

Зачем? Даже не представляю...

Проще же сделать Функция Универсал(ВходящиеПарматры,ИсходящиеПараметры)
Так сделано в КД2, это разумно и не напряжно.

P.S. КД2 я считаю топом эволюции КД (слегка дописывал, для поддержки итз и т.п.), а КД3 это вырви мосх и то что она работает, это не значит что она удобнее.

Djelf

Что очень важно: при SetParamDefValue ProcInfo надо заполнять
pBLModule->GetProcInfo(iMethodNum,ProcInfo);
а при GetParamDefValue
pBLModule->GetProcInfo(GetMethodNumberInUserModule(iMethodNum),ProcInfo);
Оставляю как заметку, не вылететь в космос тут сложно..

alyuev

Цитата: Djelf от 05 декабря 2024, 13:52
Цитата: alyuev от 05 декабря 2024, 12:25А есть где-то твоя сборка без последней правки? Я бы просто проверил твою компиляцию.
Закоментировал код получения параметров по-умолчанию https://cloud.mail.ru/public/J3Sd/Wdio9FM5W

Та же ошибка и также падает.

alyuev

А что такое КД2/КД3? Комплексная...?

Arbuz

Цитата: alyuev от 05 декабря 2024, 16:01А что такое КД2/КД3? Комплексная...?
Конфа Конвертация Данных

IMHO: написана инопланетянами

Arbuz

Цитата: Djelf от 05 декабря 2024, 12:14у меня вроде сборка на всем моих данных работает

А что-нибудь исправлено/улучшено по сравнению с оригиналом?

Djelf


trad

Если я правильно понял о чем в этом топике речь...

Цитата: Djelf от 05 декабря 2024, 15:03Не,  pVar->Type2 это позиция в параметре.
pVar->Type чёрт его знает, она всегда = 3
Тип может где-то еще зашит, но я склоняюсь к пи-коду.
Тип любой переменной в т.ч. и параметра хранится в CValue
pVar->Type - это CProcVarInfo::m_Flags (см.ниже)
т.е. 3 - входной параметр передаваемый по значению


class CProcVarInfo
{
public:
	CString m_Name;       //04h
	int m_ArraySize;      //08h
	BOOL m_IsExport;      //0Ch
	int m_Flags;          //10h  // &1==0 - Знач , &2==1 - in-параметр
	int m_ConstInfoIndex; //14h  //значение по-умолчанию

public:
	virtual ~CProcVarInfo(void);
	virtual LPCSTR GetName(void);
};