Java
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Java
Где посмотреть эту документацию?lStep писал(а):Из документации "Разработка пользовательской библиотеки функций для алгоритма JavaScript"
пытаюсь скомпилировать пример:
.....
У кого есть поделитесь пожалуйста.
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Java
Скомпилировал очередную JavaScript-библиотечку для доступа к таблице FpCo центры ответственности. Компиляция прошла нормально, правда с многочисленными предупреждениями. Все инклудники нашлись.
Но: алгоритм спотыкается на первой же строке вызова объекта FpCo из скрипта: - говорит, объект FpCo не найден. В чем дело?
И второй вопрос: можно ли в JS библиотеке реализовать вставку и модификацию записей? Я попытался сделать для таблицы SpActDis, но записи не изменяются.
Код: Выделить всё
// имя разрабатываемого интерфейса JS_FpCo
VipInterface JS_FpCo implements oGalScriptStdF #Licensed_Free;
Interface JS_FpCo '' (,hcNoContext,) EscClose, Cyan;
var JavaScript : oiJSWork;
var fBody: oSteckCommonString;
var fEventList: oSteckCommonString;
create view var Nrc:comp; Org:comp; CoTable:word; //KlGd:decimal[12, 4];KlBr:decimal[12, 4];
as select * from FpCo;
function SFInitInter (wflag: word; var pt :TRecAcc): Boolean;
{
SFInitInter := true;
}
// наименование пользовательской библиотеки
function SFGetFuncName: String;
{
SFGetFuncName := 'Центры ответственности';
}
// описываем тело реализуемой функции
function SFGetBody: oSteckCommonString;
{
if not (NullVipRef(fBody)) then
{
fBody.Init;
fBody.push('function AsGetFirst()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsGetFirst","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsGetPrev()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsGetPrev","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsGetNext()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsGetNext","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsGetLast()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsGetLast","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsName()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsName","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsCode()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsCode","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsOrg()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsOrg","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
fBody.push('function AsCoTable()');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsCoTable","")');
fBody.push('return VIP.ArgValue(3)');
fBody.push('}');
}
SFGetBody:= fBody;
}
// в списке событий указываем функцию
function SFGetEventList: oSteckCommonString;
{
if NOT (NullVipRef(fEventList)) then
{
fEventList.push('AsGetFirst')
fEventList.push('AsGetNext')
fEventList.push('AsGetPrev')
fEventList.push('AsGetLast')
fEventList.push('AsName')
fEventList.push('AsCode')
fEventList.push('AsOrg')
fEventList.push('AsCoTable')
}
SFGetEventList:= fEventList;
}
function SFEvent(aEName: String): Boolean;
{
var bResult : boolean;
SFEvent := true
case aEName of
AsGetFirst':
{
JavaScript.SetVIPArg(3,(getfirst FpCo),false);
}
'AsGetNext':
{
JavaScript.SetVIPArg(3,(getnext FpCo),false);
}
'AsGetPrev':
{
JavaScript.SetVIPArg(3,(getprev FpCo),false);
}
'AsGetLast':
{
JavaScript.SetVIPArg(3,(getlast FpCo),false);
}
'AsName':
{
JavaScript.SetVIPArg(3,FpCo.Name,false);
}
'AsCode':
{
JavaScript.SetVIPArg(3,FpCo.Code,false);
}
'AsOrg':
{
JavaScript.SetVIPArg(3,FpCo.Cmean,false);
}
'AsCoTable':
{
JavaScript.SetVIPArg(3,FpCo.CoTable,false);
}
end;
}
// возвращает описание функции пользовательской библиотеки для вывода в memo-поле
function SFGetMemo ( st:oSteckCommonString ) : Boolean;
{
if NOT (NullVipRef(st)) then
{
st.push('');
st.push('В данной библиотеке реализована работа с центрами ответственности по таблице FpCo');
st.push('');
st.push('Переход на первую запись AsGetFirst():boolean');
st.push('Переход на следующую запись AsGetNext():boolean')
st.push('Переход на предыдущ. запись AsGetPrev():boolean');
st.push('Переход на последнюю запись AsGetLast():boolean');
st.push('Наименование: AsName():string');
st.push('Код: AsCode():string');
st.push('Код таблицы ссылки из Dicom: AsCoTable():word');
st.push('Opганизация AsOrg():comp');
st.push('');
st.push('');
SFGetMemo := True;
}
}
// идентификатор интерфейса совпадает с его наименованием
function SFGetName: String;
{
SFGetName := 'JS_FpCo';
}
function SFGetPrior: word;
{
SFGetPrior := word(0);
}
procedure SFDoneInter;
{
}
#JSWorkLink(JavaScript)
HandleEvent // interface
cmOnVipLoad:
{
LoadVipRef(fBody, #AddComp(MNPComp) 'SteckString');
LoadVipRef(fEventList, #AddComp(MNPComp) 'SteckString');
if NOT(NullVipRef(fBody)) then fBody.Init;
if NOT(NullVipRef(fEventList)) then fEventList.Init;
}
cmOnVipUnload:
{
if NOT(NullVipRef(fBody)) then FreeVipInterFace(fBody);
if NOT(NullVipRef(fEventList)) then FreeVipInterFace(fEventList);
}
end; //HandleEven
End. //interface
Код: Выделить всё
FpCo.AsGetFirst();
И второй вопрос: можно ли в JS библиотеке реализовать вставку и модификацию записей? Я попытался сделать для таблицы SpActDis, но записи не изменяются.
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 07 июн 2007, 12:32
- Откуда: Витебск
- Контактная информация:
Re: Java
В java скрипте надо написать просто
AsGetFirst();
только странно, что вы не сделали еще функцию позиционирования на центр ответственности по нрек.
AsFindNrec. А так вроде все нормально написано
AsGetFirst();
только странно, что вы не сделали еще функцию позиционирования на центр ответственности по нрек.
AsFindNrec. А так вроде все нормально написано
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Java
Спасибо за подсказку, Дмитрий. Добавил функцию позиционирования:
А как насчёт модификации записей? Не пробовали?
Код: Выделить всё
create view var Nrc:comp; ...
as select * from FpCo bounds byNr = Nrc == FpCo.Nrec;
...
{
fBody.Init;
fBody.push('function AsFindByNr(NrecFp)');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_FpCo", "AsFindByNr",NrecFp,"")');
fBody.push('return VIP.ArgValue(4)');
fBody.push('}');
...
}
...
fEventList.push('AsFindByNr')
...
function SFEvent(aEName: String): Boolean;
{
var bResult : boolean;
SFEvent := true
case aEName of
'AsFindByNr':
{
ReSetBounds (tnFpCo);
Nrc:=comp(JavaScript.GetVIPArg(2, False));
PushBounds(tbbyNr);
JavaScript.SetVIPArg(4,BoundActive(tbbyNr),false);
}
'AsGetFirst':
{
...
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 07 июн 2007, 12:32
- Откуда: Витебск
- Контактная информация:
Re: Java
Записи и модифицирую, и вставляю новые. Вот например библиотечка для работы с basedoc и spstep
Код: Выделить всё
function SFGetBody: oSteckCommonString;
{
if NOT (NullVipRef(fBody)) then
{
fBody.push('function CreateBaseDoc(VidDoc,Valut,NrecBase,NrecStep)');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_ATL_Unisoft", "CreateBaseDoc",VidDoc,Valut,NrecBase,NrecStep,"")');
fBody.push('NrecBase1 = Number(VIP.ArgValue(5))');
fBody.push('NrecStep1 = Number(VIP.ArgValue(6))');
fBody.push('return VIP.ArgValue(7)');
fBody.push('}');
fBody.push('');
fBody.push('function DeleteBaseDoc(NrecBaseDoc)');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_ATL_Unisoft", "DeleteBaseDoc",NrecBaseDoc,"")');
fBody.push('}');
fBody.push('');
fBody.push('function CreateSpStep(NrecBase,NrecSpStep)');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_ATL_Unisoft", "CreateSpStep",NrecBase,NrecSpStep,"")');
fBody.push('return VIP.ArgValue(5)');
fBody.push('}');
fBody.push('');
fBody.push('function DeleteSpStep(NrecSpStep)');
fBody.push('{');
fBody.push('VIP.CallMethod("JS_ATL_Unisoft", "DeleteSpStep",NrecSpStep,"")');
fBody.push('}');
fBody.push('');
}
SFGetBody:= fBody;
}
// в списке событий указываем функцию Center
function SFGetEventList: oSteckCommonString;
{
if NOT (NullVipRef(fEventList)) then
{
fEventList.Init;
fEventList.push('CreateBaseDoc');
fEventList.push('CreateSpStep');
fEventList.push('DeleteBaseDoc');
fEventList.push('DeleteSpStep');
}
SFGetEventList:= fEventList;
}
function SFEvent(aEName: String): Boolean;
{
var bResult : boolean;
SFEvent := true
case aEName of
'DeleteSpStep':{
var istep:DOfunsV3;
istep.SpStep_Delete(comp(JavaScript.GetVIPArg(2, False)));
}
'CreateBaseDoc':{
var viddoc:string;
var nrecbase,nrecstep,valut:comp;
viddoc:=string(JavaScript.GetVIPArg(2, False))
valut:=string(JavaScript.GetVIPArg(3, False))
nrecbase:=comp(JavaScript.GetVIPArg(4, False))
if(word(viddoc)<>0)
{
if(getfirst basedoc where ((nrecbase==basedoc.nrec)))=TsOk {}
set basedoc.nrec:=0;
set basedoc.name:='ДО на предоплату №'+basedoc.nodoc+' от '+basedoc.ddoc
set basedoc.ccellval:=nrecbase;
set basedoc.viddoc:=word(viddoc);
if (getlast basedocnum where ((viddoc==basedocnum.viddoc and date(01,01,year(cur_date))<<=basedocnum.ddoc)))=TsOk
set basedoc.nodoc:=nextnumstr(basedocnum.nodoc)
else
set basedoc.nodoc:='000001';
set basedoc.direct:=1;
set basedoc.DESCR:=sGetTune('USER.DESCR');
set basedoc.cval:=valut;
insert current basedoc;
if(getfirst stepdoc where ((nrecbase==stepdoc.cbasedoc)))=TsOk {}
set stepdoc.nrec:=0;
set stepdoc.cbasedoc:=basedoc.nrec
insert current stepdoc;
JavaScript.SetVIPArg(5,string(basedoc.nrec),false);
JavaScript.SetVIPArg(6,string(stepdoc.nrec),false);
JavaScript.SetVIPArg(7,string(boolean(1)),false);
}
else
{
JavaScript.SetVIPArg(6,string(boolean(0)),false);
}
}
'CreateSpStep':{
/*fBody.push('VIP.CallMethod("JS_ATL_Unisoft", "CreateSpStep",NrecBase,Prizn,GrNal,Stavka,SumNal,"")');*/
var nrecbase,nrecspstep:comp;
var prizn:string;
var stavka,sumnalog:double;
nrecbase:=comp(JavaScript.GetVIPArg(2, False))
nrecspstep :=comp(JavaScript.GetVIPArg(3, False))
if(getfirst basedoc where ((comp(nrecbase)==basedoc.nrec)))=TsOk
if (getfirst stepdoc where ((comp(nrecbase)==stepdoc.cbasedoc and stepdoc.cbasedoc==basedoc.nrec)))=TsOk
{
if getfirst spstep where ((nrecspstep==spstep.nrec))=TsOk {}
set spstep.cstepdoc:=stepdoc.nrec;
set spstep.nrec:=0;
insert current spstep;
JavaScript.SetVIPArg(5,string(spstep.nrec),false);
}
}
'DeleteBaseDoc':{
var ibase:VSchet;
var nrecbase:comp;
nrecbase:=comp(JavaScript.GetVIPArg(2, False))
if(getfirst basedoc where ((comp(nrecbase)==basedoc.nrec)))=TsOk
ibase.DeleteBaseDoc(nrecbase,basedoc.viddoc);
}
//
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Java
Пытаюсь повторить Ваш пример, Дмитрий: спотыкается на строках описания типов:
Я так понимаю, это константы, описывающие типы, которые должны быть в инклудах? Тогда в каких?
До конца не понимаю смысл функций типа
И будьте добры, выложите ещё функцию SFGetMemo для полноты картины, так сказать..
Код: Выделить всё
var istep:DOfunsV3;
...
var ibase:VSchet;
До конца не понимаю смысл функций типа
Код: Выделить всё
JavaScript.SetVIPArg(5,string(basedoc.nrec),false)
JavaScript.GetVIPArg(4, False)
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 07 июн 2007, 12:32
- Откуда: Витебск
- Контактная информация:
Re: Java
инклюды вот эти
а вот sgetmemo
функция
GetVIPArg(4, False) - Считывает значение 4 параметра передаваемой функции. False во втором параметре означает что не будет производиться корректировка результата.
Под корректировкой подразумевается вот такой текст
if (CorrectPoint)
Result:= Replace(Result, ',', '.');
Зачем то запятые заменяются на точки
функция
JavaScript.SetVIPArg(5,string(basedoc.nrec),false) Записывает в 5 параметр функции строковое значение basedoc.nrec. Третий параметр - корректировка результата , как в предыдущей ф-ии
Код: Выделить всё
#Component "L_BASEDOC"
#include vschet.vih
#include DOfunsV3.vih
Код: Выделить всё
function SFGetMemo ( st:oSteckCommonString ) : Boolean;
{
if NOT (NullVipRef(st)) then
{
st.push('');
st.push('В данной библиотеке реализован вызов функции Атлантиса.');
st.push('');
st.push('Создание записи в ДО (BASEDOC) с типом VidDoc');
st.push('function CreateBaseDoc(VidDoc,Valut,NrecBase,NrecStep)')
st.push('Возвращает истину, если вставка удалась. В переменную NrecBase - возвращает нрек созданного ДО.');
st.push('В переменную NrecStep - возвращает нрек созданного Stepdoc.');
st.push('');
st.push('Удаление записи в ДО (BASEDOC) по нрек NrecBase');
st.push('function DeleteBaseDoc(NrecBase)')
st.push('Возвращает истину, если удаление удалось.');
st.push('');
st.push('Создание записи в SPSTEP');
st.push('function CreateSpStep(NrecBase,NrecSpStep)')
st.push('NrecSpStep - 0, просто вставка, нрек предыдущего NrecSpStep');
st.push('Возвращает нрек SpStep, если вставка удалась');
st.push('');
st.push('Удаление записи спецификации ДО (spstep) по нрек NrecSpStep');
st.push('function DeleteSpStep(NrecSpStep)')
st.push('Возвращает истину, если удаление удалось.');
st.push('');
SFGetMemo := True;
}
}
GetVIPArg(4, False) - Считывает значение 4 параметра передаваемой функции. False во втором параметре означает что не будет производиться корректировка результата.
Под корректировкой подразумевается вот такой текст
if (CorrectPoint)
Result:= Replace(Result, ',', '.');
Зачем то запятые заменяются на точки
функция
JavaScript.SetVIPArg(5,string(basedoc.nrec),false) Записывает в 5 параметр функции строковое значение basedoc.nrec. Третий параметр - корректировка результата , как в предыдущей ф-ии
Re: Java
Присоединяюсь! Где взять файл objintpl.vin - требуется при компиляции, а в ресурсах и в интернете такого нет!lStep писал(а):Из документации "Разработка пользовательской библиотеки функций для алгоритма JavaScript"
Где взять файлы Steck.vin и objintpl.vin ??
У кого есть поделитесь пожалуйста.
СПАСИБО!
-
- Постоянный гость
- Сообщения: 76
- Зарегистрирован: 07 июн 2007, 12:32
- Откуда: Витебск
- Контактная информация:
Re: Java
Посмотрите в разделе ОПЫТ в теме "Библиотека функций для JavaScript"
http://www.tyumbit.ru/gal_forum/viewtop ... 10&start=0
Я выкладывал исходник, пригодный для сборки, там есть не только objintpl.vin, но и все другие инклюды, которые нужны для компиляции пользовательских библиотек.
Если будет что нибудь непонятно, пишите лучше в раздел ОПЫТ
http://www.tyumbit.ru/gal_forum/viewtop ... 10&start=0
Я выкладывал исходник, пригодный для сборки, там есть не только objintpl.vin, но и все другие инклюды, которые нужны для компиляции пользовательских библиотек.
Если будет что нибудь непонятно, пишите лучше в раздел ОПЫТ