Java

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Дмитрий, написал в личку. Тема интересна, прошу подробностей на naz@ap-plastic.ru
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

lStep писал(а):Из документации "Разработка пользовательской библиотеки функций для алгоритма JavaScript"
пытаюсь скомпилировать пример:
.....
У кого есть поделитесь пожалуйста.
Где посмотреть эту документацию?
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Получилось скомпилить и подключить пользовательскую JavaScript- библиотеку, за что большая благодарность Dmitry_Sol!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Скомпилировал очередную JavaScript-библиотечку для доступа к таблице FpCo центры ответственности. Компиляция прошла нормально, правда с многочисленными предупреждениями. Все инклудники нашлись.

Код: Выделить всё

// имя разрабатываемого интерфейса 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 из скрипта:

Код: Выделить всё

FpCo.AsGetFirst();
- говорит, объект FpCo не найден. В чем дело?
И второй вопрос: можно ли в JS библиотеке реализовать вставку и модификацию записей? Я попытался сделать для таблицы SpActDis, но записи не изменяются.
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Java

Сообщение Dmitry_Sol »

В java скрипте надо написать просто
AsGetFirst();

только странно, что вы не сделали еще функцию позиционирования на центр ответственности по нрек.
AsFindNrec. А так вроде все нормально написано
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Спасибо за подсказку, Дмитрий. Добавил функцию позиционирования:

Код: Выделить всё

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':
                     {
...
А как насчёт модификации записей? Не пробовали?
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Java

Сообщение Dmitry_Sol »

Записи и модифицирую, и вставляю новые. Вот например библиотечка для работы с 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);
                          }

//
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Ок, благодарю. :)
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Пытаюсь повторить Ваш пример, Дмитрий: спотыкается на строках описания типов:

Код: Выделить всё

var  istep:DOfunsV3; 
...
var  ibase:VSchet;       
Я так понимаю, это константы, описывающие типы, которые должны быть в инклудах? Тогда в каких?
До конца не понимаю смысл функций типа

Код: Выделить всё

JavaScript.SetVIPArg(5,string(basedoc.nrec),false)
JavaScript.GetVIPArg(4, False)
И будьте добры, выложите ещё функцию SFGetMemo для полноты картины, так сказать..
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Java

Сообщение Dmitry_Sol »

инклюды вот эти

Код: Выделить всё

#Component "L_BASEDOC"
#include vschet.vih
#include DOfunsV3.vih
а вот sgetmemo

Код: Выделить всё

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. Третий параметр - корректировка результата , как в предыдущей ф-ии
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Благодарю, картинка проясняется.. пробую дальше!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Java

Сообщение zna »

Дмитрий, написал в личку.
arrio
Постоянный обитатель
Сообщения: 149
Зарегистрирован: 14 июн 2013, 09:43

Re: Java

Сообщение arrio »

lStep писал(а):Из документации "Разработка пользовательской библиотеки функций для алгоритма JavaScript"


Где взять файлы Steck.vin и objintpl.vin ??
У кого есть поделитесь пожалуйста.
СПАСИБО!
Присоединяюсь! Где взять файл objintpl.vin - требуется при компиляции, а в ресурсах и в интернете такого нет!
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Java

Сообщение Dmitry_Sol »

Посмотрите в разделе ОПЫТ в теме "Библиотека функций для JavaScript"
http://www.tyumbit.ru/gal_forum/viewtop ... 10&start=0
Я выкладывал исходник, пригодный для сборки, там есть не только objintpl.vin, но и все другие инклюды, которые нужны для компиляции пользовательских библиотек.

Если будет что нибудь непонятно, пишите лучше в раздел ОПЫТ
Ответить