Сommit есть. Вот хранимка:
Код: Выделить всё
CREATE OR REPLACE FUNCTION GAL810."S$F_INS_EXCLASSVAL"( KATSOPRNREC VARCHAR2 ) RETURN NUMBER
/*функция создает внешние классификаторы, вставка в таблицу EXCLASSVAL, а также обнуляет внешние атрибуты, если они есть и создает их, если они отсутствуют. Необходимо для загрузки планов продаж*/
AS
Pragma Autonomous_transaction;
cursor mc_nrec is
select katmc.fnrec mc_nrec
from gal810.katmc katmc
where
(KATMC.FKGROUPMC like '40%' or KATMC.FKGROUPMC like '70%')
minus
select katmc.fnrec
from gal810.katmc katmc , gal810.exclassseg exclassseg, gal810.exclassval exclassval
where
1411 = exclassval.fwtable and
141 = EXCLASSVAL.fCLASSCODE and
exclassval.fcrec = katmc.fnrec and
(KATMC.FKGROUPMC like '40%' or KATMC.FKGROUPMC like '70%') and
exclassval.fcclassseg = exclassseg.fnrec;
mc_nrec_rec mc_nrec%Rowtype;
BEGIN
INSERT INTO GAL810.EVENTS
(
ATL_LASTDATE
-- ,ATL_LASTTIME
-- ,ATL_LASTUSER
-- ,ATL_ORIGINOFFICE
-- ,ATL_OWNER
-- ,TYPEEVENT
,EVENT
)
VALUES
(
GAL810.TO_ATLDATE(SYSDATE), 'sdfdfddddfsa'
);
commit;
For mc_nrec_rec In mc_nrec
loop
insert into GAL810.EXCLASSVAL (FWTABLE, FCREC, FCLASSCODE, FCCLASSSEG) values ('1411', mc_nrec_rec.mc_nrec, '141', '8001000000001D16');
commit;
end loop;
update GAL810.ATTRVAL av set AV.FVDOUBLE = 0 where AV.FCATTRNAM = '8001000000000266' and AV.FWTABLE = 1411 and AV.FVDOUBLE <> 0;
commit;
RETURN 8;
END;
Вот ard-отчет:
Код: Выделить всё
.FORM Импорт_плана_продаж_сантехника
.Ard
.GROUP "МАРКЕТИНГ"
Б.var
Бporydok Б : string ; // порядковый номер строки в отчете ( записан в EXCLASSNAME = 133 ...)
znachatr Б: array[1..20] of Бstring ;
attrib Б : array[1..20] of comp Б ;
Бstrn,stn,strk,stk Б ,sch, x: longint ;
Бprizn_yes Б, day1 , mes1 ,god1 , lkol : integer ;
r_dd : date ;
xx1,xx2,xx3,xx6, xx9, xx12, xx15, xx18 , poz , j : longint ;
sXlFileName, mc, kol2, kol4 : string ;
Б Б Б Б Б Б Б Б Б Б Бdek Б1, dek2, dek3 ,mc2 : string ;
.endvar
!
Б.CREATE VIEW Vkatmc
VAR
imy_mc : string ;
AS SELECT *
from katmc
where
((
Vkatmc.imy_mc == katmc.name )) ;
!
.Create view Vexclasseg
as select katmc.name, exclassseg.name
from katmc ,exclassseg
where
((
1411 == exclassval.wtable and
141 == EXCLASSVAL.CLASSCODE and
! 133 == EXCLASSVAL.CLASSCODE and // для тестовой базы
exclassval.crec == katmc.nrec and
exclassval.cclassseg == exclassseg.nrec )) ;
!
.CREATE VIEW Vattrval
VAR
r_recmc : comp;
r_cattrn : comp ;
AS SELECT *
from attrval
where
((
1411 == attrval.wtable and
r_recmc == attrval.crec and
r_cattrn == attrval.cattrnam
));
!
.begin
!
sXlFileName:= ''
Бattrib Б[2] := 0001000000000266h // 'План продаж количество'
! Бattrib Б[5] := 0001000000000218h // 'План сант руб дек2' 00010000000001ABh - на тестовой базе
! Бattrib Б[8] := 0001000000000219h // 'План сант руб дек3' 00010000000001ACh - на тестовой базе
! sXlFileName:=GetFileName('*.xls', ' Выберите исходный файл с планами реализации .xls - файл ');
if(RunInterface('viborxls',sXlFileName)=11)
{
Импорт_плана_продаж_сантехника.fExit ;
Exit;
}
!
end.
!
.begin
var stmt : LongInt;
var stmt_str : LongInt;
var messageErr : longint;
var nresult : word;
var nresult2 : word;
var KatsoprNrec : comp;
KatsoprNrec := 0;
!
! stmt := sqlAllocStmt;
! sqlBindCol(stmt, 1, nresult);
! sqlBindParam( stmt, 1, KatsoprNrec );
! sqlExecStmt(stmt, 'select top 1 F_INS_EXCLASSVAL (?) from GROUPUSL');
! while sqlFetch(stmt) = tsOk do
! nresult2:=string(nresult);
! sqlFreeStr(stmt);
! message (nresult2);
! messageErr := sqlExecute(stmt);
! stmt:=SQLAllocStmt;
! SqlBindParam(stmt, 1, nresult);
! SQLExecStmt(stmt, 'F_INS_SPEC(?)');
sqlExecDirect('F_INS_EXCLASSVAL('#39 + 'Тест вызова хранимой процедуры из ard' + ''#39 + ')' );
end.
!
.begin
! sXlFileName:=GetFileName('*.xlsx', ' Выберите исходный файл с планами реализации .xlsx - файл ');
xlCreateExcelWithTemplate(sXlFileName,false);
!xlOpenNewExcel(false);
!xlOpenWorkbook(sXlFileName);
If (xlIsExcelValid)
xlGetActiveWorkBookName(sXlFileName)
xlGetSheetsCount(lkol)
! xlSetActiveSheet(14)
!
xlGetUsedRange(strn,stn,strk,stk)
sch := strk - strn + 1
!
if xlReadMatrixFromExcel(1,1,sch,19) = true
{
X := 6 ;
xx1 := 1
! xx2 := 2 // порядковый номер
! xx3 := 3
! xx6 := 6
! xx8 := 8
! xx12 := 12
! xx15 := 15
! xx18 := 18
do
{
xlReadFromMatrix(X,xx1, mc) // МЦ
! xlReadFromMatrix(X,xx2, mc2) // название МЦ в Галактике
xlReadFromMatrix(X, 2, dek1) // декада1
! xlReadFromMatrix(X, 5, dek2) // декада2
! xlReadFromMatrix(X, 8, dek3) // декада3
!
if Trim(mc) <> ''
{
Бznachatr Б[2] := dek1
! Бznachatr Б[5] := dek2
! Бznachatr Б[8] := dek3
! message(mc +' '+dek1+' '+ dek2+' '+dek3)
vattrval.r_recmc := 0
if Upcase(Trim(mc)) = 'ПРОЧИЕ ПОКУПАТЕЛИ РБ'
{ vattrval.r_recmc := 00000000000000C2h }
Else
{
Vkatmc.imy_mc := Trim(mc)
if Vkatmc.Getfirst katmc = TsoK
{ vattrval.r_recmc := vkatmc.katmc.nrec
! message ('r_recmc = '+vattrval.r_recmc);
}
}
j := 2
do
{
vattrval.r_cattrn := Бattrib Б[j]
! message (vattrval.r_cattrn);
if vattrval.GetFirst attrval = TsOK
{
Vattrval.attrval.vdouble := БReplace(znachatr Б[J],',' , '.')
Vattrval.Update current attrval ;
! message (Vattrval.attrval.vdouble);
}
j := j + 3
} // end do
while j < 11
} //if Trim(unnn) <> ''
x := x + 1
} // end do
While x <= sch
} // if xlReadMatrixFromExcel(1,1,sch,19) = true
xlKillExcel;
!
end.
Б.endform
!
Б