powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Не могу вернуть статус выполнения
14 сообщений из 14, страница 1 из 1
Не могу вернуть статус выполнения
    #37832184
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Не получается вернуть статус выполнения вызываемого метода. Приложил пример. Может чего подскажете?

s res=..Createop(accNum,term,accDeb,sum,awId,PURPOSETEXT,SIMKAS,.result,.sc)

Исполняемый метод:
ClassMethod Createop(ACCNUM As %String(MAXLEN=20) = "", TERMINAL As %String, ACCDEB As %String(MAXLEN=20) = "", SUMMA As %Numeric, ID As %String(MAXLEN=20) = "", PURPOSETEXT As %String, SIMKAS As %String(MAXLEN=2), ByRef Result As %String = "", ByRef Error As %Status = {$$$OK}) As %String
{
//DebugInserter: do not remove this and next one line
d:$g(%debug) ..DebugInserter("Createop inputs:"_"ACCNUM=["_$g(ACCNUM)_"] $d=["_$d(ACCNUM)_"] Type=[%String(MAXLEN]; "_"TERMINAL=["_$g(TERMINAL)_"] $d=["_$d(TERMINAL)_"] Type=[%String]; "_"ACCDEB=["_$g(ACCDEB)_"] $d=["_$d(ACCDEB)_"] Type=[%String(MAXLEN]; "_"SUMMA=["_$g(SUMMA)_"] $d=["_$d(SUMMA)_"] Type=[%Numeric]; "_"ID=["_$g(ID)_"] $d=["_$d(AnyWayID)_"] Type=[%String(MAXLEN]; "_"PURPOSETEXT=["_$g(PURPOSETEXT)_"] $d=["_$d(PURPOSETEXT)_"] Type=[%String]; "_"SIMKAS=["_$g(SIMKAS)_"] $d=["_$d(SIMKAS)_"] Type=[%String(MAXLEN]; "_"&Result=["_$g(Result)_"] $d=["_$d(Result)_"] Type=[%String]; "_"&Error=["_$g(Error)_"] $d=["_$d(Error)_"] Type=[%Status]; ")
s Path="папка для выгрузки"
s EOL=$c(13,10)
s date=$zd($h,8) //Формат даты имени файла
s Result=""
s Error=""
//определяем имя файла
s FileName="acc_"_date_"_"_ID_".txt"
s FullFileName=Path_FileName
s file="",streamtxt=""
s file=##class(%Library.File).%New(FullFileName)
i $zObjState(file)'=1 {
s Result="0"
s Error=$$$ERROR(5001,"Файл не создан") q Result
}
else {
s res=file.Open("WSN:/IOTABLE=""CP1251""")
i 'res {
s Result=""
s Error=$$$ERROR(5001,"Файл не открылся") q Result
}
else {
d OneFile(date)

}
d file.Close()
}
q $$$OK

OneFile(date)

s ID=ID
s sum=SUMMA
s acc=ACCDEB
i ACCDEB="" s acc=ACCNUM
d wr("%ДОКУМЕНТ"_EOL)
d wr("ОБЛАСТЬ:Баланс"_EOL)
d wr("ДАТА:"_date1_EOL)
d wr("ПАЧКА:123"_EOL)
d wr("ОПЕРАЦИЯ:17"_EOL)
d wr("ДЕБЕТ: "_ACCNUM_EOL)
d wr("КРЕДИТ: "_acc_EOL)
d wr("СУММА:"_sum_EOL)
d wr("МФОПОЛУЧ:********"_EOL)
d wr("ПРИМ1:"_PURPOSETEXT_" от "_date_"г _EOL)
d wr("СИМКАСС :"_SIMKAS_EOL)
d wr("СУММАКАСС :"_sum_EOL)
d wr("%END"_EOL)

q

wr(txt)
if $zObjState(file) d file.Write(txt)
if $zObjState(streamtxt) d streamtxt.WriteLine(txt)
q
}


Не могупонять, как правильно вернуть Result, а в ответе текст ошибки: ОШИБКА #00: (нет описания ошибки).
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832200
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexolissПриложил пример.
Начинай учиться делать тестовые примеры... Это может облегчить тебе дальнейшую работу.
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832207
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмем например этот кусок...

Код: vbnet
1.
2.
3.
4.
i $zObjState(file)'=1 {
   s Result="0" 
   s Error=$$$ERROR(5001,"Файл не создан") q Result
}



Он запросто переделывается в такой

Код: vbnet
1.
2.
3.
4.
i $zObjState(file)'=1 {
   s Error=$$$ERROR(5001,"Файл не создан") 
   q 0
}



Т.е. сама переменная не нужна вообще.
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832222
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsaВозьмем например этот кусок...

Код: vbnet
1.
2.
3.
4.
i $zObjState(file)'=1 {
   s Result="0" 
   s Error=$$$ERROR(5001,"Файл не создан") q Result
}



Он запросто переделывается в такой

Код: vbnet
1.
2.
3.
4.
i $zObjState(file)'=1 {
   s Error=$$$ERROR(5001,"Файл не создан") 
   q 0
}



Т.е. сама переменная не нужна вообще.


Мне несовсем ясно. Вот в данном примере этот "0" как вернётся для res=..Createop(accNum,term,accDeb,sum,awId,PURPOSETEXT,SIMKAS,.result,.sc). Сам res будет иметь такой результат выполнения или .result?
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832230
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa, тут параллельно этому я пытаюсь понять, почему при проверке текста ошибки .sc в нём нет текста, что задаю я. Пишет ОШИБКА #00: (нет описания ошибки)

А должно быть хотя бы: файл не создан.
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832329
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexoliss,

Вы результат и возвращаете и как результат метода, и в переданную переменную, зачем такие сложности, избавьтесь от переменной Result
да и ошибку, лучше вернуть так же как результат выполнения метода
а вы уверены что вы тот результат обрабатываете как ошибку ?

Код: sql
1.
2.
3.
4.
5.
6.
USER>d $system.OBJ.DisplayError($$Error^%apiOBJ(5001,"Файл не открылся"))
 
ОШИБКА #5001: Файл не открылся
USER>d $system.OBJ.DisplayError(0)
 
ОШИБКА #00: (нет описания ошибки)
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832350
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMorAlexoliss,

Вы результат и возвращаете и как результат метода, и в переданную переменную, зачем такие сложности, избавьтесь от переменной Result
да и ошибку, лучше вернуть так же как результат выполнения метода
а вы уверены что вы тот результат обрабатываете как ошибку ?

Код: sql
1.
2.
3.
4.
5.
6.
USER>d $system.OBJ.DisplayError($$Error^%apiOBJ(5001,"Файл не открылся"))
 
ОШИБКА #5001: Файл не открылся
USER>d $system.OBJ.DisplayError(0)
 
ОШИБКА #00: (нет описания ошибки)



попробую несколько вариантов.
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832500
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
Ошибку я пытаюсь вернуть, если вдруг файл не создаётся по каким-либо причинам.
Возник вопрос. Правильно ли я пытаюсь определить ошибку:
$zObjState(file) или лучше $ISERR(file)?
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832709
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexoliss , попробую проиллюстрировать пример возврата значения из метода/функции и передачу переменной по ссылке.

Возврат значения
Код: vbnet
1.
2.
3.
4.
5.
 s val=$$test(1,2)
 w !,val
 q
test(A,B)
 q A+B



Передача по ссылке
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
 s val="123 456 789"
 s val=$$delSym(val," ",.n)
 w !,val
 w !,"Удалено ",n," символов"
delSym(Val,Sym,N)
 n val
 s val=$tr(Val,Sym)
 s N=$l(Val)-$l(val)
 q val
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832714
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexolissDAiMor,
Ошибку я пытаюсь вернуть, если вдруг файл не создаётся по каким-либо причинам.
Возник вопрос. Правильно ли я пытаюсь определить ошибку:
$zObjState(file) или лучше $ISERR(file)?

вы как результат метода возвращаете либо пусто либо 0 либо $$$OK
а можно вернуть саму ошибку которую записываете в Result ($$$ERROR) или $$$OK
думаю лучше проверять через $$$ISERR
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832717
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexolissВот в данном примере этот "0" как вернётся для
Код: vbnet
1.
s res=..Createop(accNum,term,accDeb,sum,awId,PURPOSETEXT,SIMKAS,.result,.sc)


Сам res будет иметь такой результат выполнения или .result?
Переменная res будет равняться 0...
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832721
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexolissтут параллельно этому я пытаюсь понять ...
Таки вернусь к созданию правильных тестовых примеров.
Для подробнейшего освещения и решения проблемы нужен простенький тестовый пример который каждый желающий сможет себе скопировать и посмотреть в работе.
Тот пример можно подправить и показать варианты преодаления/решения той ирудности...

Пока от тебя видим только огрызок чего-то... Причем без всякого оформления. Смотреть его не возможно.
Как овормлять код можно посмотреть в любом моём сообщении тут или люого другого в других здешних темах...
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37832771
Alexoliss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Простите, я на этом сайте еще не разобрался, как правильно оформлять текст/запросы/код. В дальнейшем постараюсь делать правильно. Думаю, что нужно в корне разобраться, как возвращать статус выполнения и разные его интерпритации. Простые примеры очень помогают. Мне удалось вернуть текст ошибки, но он стал возвращаться даже в случае удачного выполнения...сейчас прорабатываю сей момент. Читаю доку. Получится - напишу, что сделал и как выполняется.
...
Рейтинг: 0 / 0
Не могу вернуть статус выполнения
    #37834092
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexoliss ,

1) метод %New возвращает OREF объекта, поэтому использовать макрос $$$ISERR , ожидающий тип %Status - неверно.

2) вместо недокументированной $zObjState лучше использовать документированную $IsObject

3) следующий код ещё ничего не создаёт (см. метод Open ):
set file=##class(%File).%New("test.txt")

4) %String <> %Status

PS: ещё Вам может пригодиться класс $system.Status
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Не могу вернуть статус выполнения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]