Код: Выделить всё
interface CheckOborot 'Обороты и остатки по счётам';
Show at (1,1,200,40);
table struct tmain //Таблица
(
cmc : comp
,cpodr: comp
,mc : string
,kod : string
,edizm: string
,kolsopr: double //Количество из накладной
,sumsopr: double //Сумма из накладной
,schet: string
,subsch:string
,podr : string
,kauall: string
,ckauks1: comp
,ckauks2: comp
,ckauks3: comp
,sumbeg : double //Cумма на начало
,kolbeg: double //Количество на начало
,sumobr: double //Сумма проводки
,kolobr: double //Количество проводки
,sumend: double //Сумма на конец
,kolend: double //Количество на конец
,nrec: comp
) with index ( i1 = mc, i2 = cmc
);
create view
var
wVidSopr : longint; //параметр
stmt,stmt_str,frmHandle,i : longint ;
atrkod, cCotv, cNazn, cMySopr: comp;
as select *
from tmain
,katsopr, soprhoz, spsopr, pick, katpodr, katmc, kated, oborot, saldonm
order oMc by tmain.mc
;
Parameters wVidSopr, cMySopr;
Panel Panel_ ;
Table tmain;
Screen scMain_
show at (, , , 2);
Buttons
cmRaspr,,,;
cmCalc,,,;
cmGo,,,;
<<
<.1..> <.2..> <.3..>
>>
end;
browse bmnpl (,,sci178InsPM) ;
show at (, 3, , );
fields
tmain.Mc 'Матценность','сортировка' : [30], protect;
tmain.kod 'Код Мц' : [10], protect;
tmain.edizm 'Единица','измерения','учётная' :[8], protect;
tmain.kolsopr 'Количество','по накладной' :[10.4] , noprotect;
tmain.sumsopr 'Сумма', 'по накладной':[10.4], protect;
tmain.schet 'Счёт' : [5], protect;
tmain.subsch 'Субсчёт' : [5], protect;
tmain.podr 'Подразделение' : [20], protect;
tmain.kauall 'КАУ' : [50], protect;
tmain.sumbeg 'Сумма','на начало' :[10.4] , protect;
tmain.kolbeg 'Количество', 'на начало':[10.4], protect;
tmain.sumobr 'Сумма', 'проводки' :[5], protect;
tmain.kolobr 'Количество', 'проводки' :[5], protect;
tmain.sumend 'Сумма', 'на конец' :[10.4] , noprotect;
tmain.kolend 'Количество', 'на конец':[10.4], protect;
// string(tmain.nrec) 'Nrec' :[12], protect;
end;
end;
HandleEvent
CmInit:{ if getfirst katsopr where((cMySopr == katsopr.nrec)) <> tsOk {message('Not katsopr..'); exit;}
var sChetk, MyPlansNo: string;
sChetk:= '823';
mtclear(#tmain,fmNormal);
stmt := sqlAllocStmt;
sqlbindparam(stmt,1,wVidSopr);
sqlbindparam(stmt,2,sChetk);
sqlbindparam(stmt,3,cMySopr);
sqlAddStr(stmt_str, ' select spsopr.cmcusl as cmc, katsopr.cpodrfrom as cpodr,');
sqlAddStr(stmt_str, ' katmc.name as mc ');
sqlAddStr(stmt_str, ' ,katmc.barkod as kod ');
sqlAddStr(stmt_str, ' ,case when spsopr.cotped = #comp(0) then kated.name else katotped.name end as edizm ');
sqlAddStr(stmt_str, ' ,case when spsopr.cotped = #comp(0) then spsopr.kolfact else spsopr.kolfact * katotped.koef end as kolsopr ');
sqlAddStr(stmt_str, ' ,spsopr.kolfact * spsopr.rprice as sumsopr ');
sqlAddStr(stmt_str, ' ,oborot.schetk as schet, oborot.subschk as subsch, katpodr.name as podr ');
sqlAddStr(stmt_str, ' ,coalesce(katmc_kau1.name, '''') || ''\'' || coalesce(spkau.name, '''') || ''\'' || coalesce(izdel.name, '''') as kauall ');
sqlAddStr(stmt_str, ' ,oborot.kauks[1] as ckauks1, oborot.kauks[2] as ckauks2, oborot.kauks[3] as ckauks3 ');
sqlAddStr(stmt_str, ' ,0 as sumbeg, 0 as kolbeg, coalesce(oborot.sumob,0) as sumobr, coalesce(oborot.kol, 0) as kolobr, 0 as sumend, 0 as kolend, izdel.nrec as crec ');
sqlAddStr(stmt_str, ' from spsopr inner join katmc on spsopr.cmcusl = katmc.nrec ');
sqlAddStr(stmt_str, ' left join katotped on spsopr.cmcusl = katotped.cmcusl and 1 = katotped.prmc and spsopr.cotped = katotped.nrec ');
sqlAddStr(stmt_str, ' inner join kated on katmc.ced = kated.nrec ');
sqlAddStr(stmt_str, ' inner join katsopr on spsopr.csopr = katsopr.nrec ');
sqlAddStr(stmt_str, ' inner join katpodr on katsopr.cpodrfrom = katpodr.nrec ');
sqlAddStr(stmt_str, ' left join soprhoz on katsopr.nrec = soprhoz.csoprdoc and soprhoz.tipdoc = ?');
sqlAddStr(stmt_str, ' left join oborot on spsopr.csopr = oborot.csoprdoc AND soprhoz.nrec = oborot.csoprhoz and spsopr.cmcusl = oborot.kauks[1] ');
sqlAddStr(stmt_str, ' and oborot.schetk = ? ');
sqlAddStr(stmt_str, ' left join katmc katmc_kau1 on oborot.kauks[1] = katmc_kau1.nrec ');
sqlAddStr(stmt_str, ' left join spkau on oborot.kauks[2] = spkau.nrec');
sqlAddStr(stmt_str, ' left join katmc izdel on oborot.kauks[3] = izdel.nrec ');
sqlAddStr(stmt_str, ' ');
sqlAddStr(stmt_str, ' where spsopr.prmc = 1 and spsopr.csopr = ? ');
sqlAddStr(stmt_str, ' order by katmc.name ');
sqlPrepare(stmt,stmt_str);
sqlExecute(stmt);
if (sqlFetchInto(stmt,#tmain) != tsOk)
Message('not tsOk select (');
sqlFreeStmt(stmt);
if RecordsInTable(#tmain)=0
{
Message('Не нашлось спецификации в накладной !');
exit;
}
//определяем дату сальдо
MyPlansNo:=coGetTune('FIN.USER.CPLANSSCH')
var dt_ost,dt_ost1: date;
dt_ost:=katsopr.dsopr; //sub_day(dtb,1)
dt_ost1:=dt_ost;
if dt_ost1>dgettune('DAT_M_OT')
dt_ost1:= dgettune('DAT_M_OT');
if day(dt_ost1)<>1
dt_ost1:=date(1,month(dt_ost1),year(dt_ost1))
delete all saldonm;
if getfirst tmain = tsOk {}
if (Calc_NewSaldo( 0//CalcSaldo // способ расчета сальдо - с учетом групп дексрипторов или без оного (0)
, MyPlansNo // ссылка на план счетов
, coSaldoNM // индетификатор таблицы для расчета
,sChetk // счет с кодом плана счетов -823
, '011'// субсчет
, katsopr.cpodrfrom //ссылка на подразделение в сальдо
,0 //kau1- Мц
,tmain.ckauks2 //kau2- Статьи затрат
,tmain.ckauks3 //kau3- изделия собственного производства
,0 //kau4
,0 //kau5
,0 //kau6
,dt_ost1 // дата с которой начинать сбор сальдо - то есть берется сальдо на эту дату и к ней добавляются обороты
,dt_ost
) )
rereadrecord(#saldonm)
if getfirst saldonm = tsOk
{
_loop saldonm ordered by index SALDONM01
{
if getfirst tmain where((saldonm.kauos[1] == tmain.cmc)) = tsOk
{
if saldonm.viob = 1 {if (update current tmain set tmain.sumend := saldonm.sums, tmain.kolend := saldonm.kol, //Остаток дебетовый
tmain.sumbeg := saldonm.sums + tmain.sumobr, tmain.kolbeg := saldonm.kol + tmain.kolobr) = tsOk {}}
else {if (update current tmain set tmain.sumend := -saldonm.sums, tmain.kolend := -saldonm.kol,
tmain.sumbeg := -saldonm.sums + tmain.sumobr, tmain.kolbeg := -saldonm.kol + tmain.kolobr) = tsOk {}}
}
}
}
RunInterface('F_Saldo::Saldonm');
SetOrder(tioMc);
reScanPanel(#tmain);
}
cmCancel:
{
CloseInterface(cmDone);
mtChangeRefCount( #tmain, -1 );
}
end;
end.