Код: Выделить всё
Exception excStop;
const
wPrSaldoS: Word = Word(0);
wPrSaldoE: Word = Word(1);
end;
function GetStartDate(dDate: Date): Date;
{
var dStart: Date;
dStart := Date(0, 0, 0);
if dDate >= dGetTune('Dat_M_Ot')
dStart := dGetTune('Dat_M_Ot')
else
{
if GetLast FastFirstRow SaldMoun
where ((dDate >>= SaldMoun.DateSal)) = tsOK
{
dStart := SaldMoun.DateSal;
}
}
if dStart = Date(0, 0, 0)
dStart := Date(1, 1, Year(dDate));
GetStartDate := dStart;
}
procedure CalcSld(wVid: Word; dDate1, dDate2: Date;
cPlans: Comp; Sch, Sub: String);
{
var dStart: Date;
dStart := GetStartDate(dDate1);
delete all SaldoNm;
if (wVid = wPrSaldoS) //входящее
{
if dStart = dDate1 //оно уже есть
{
_loop SaldMoun where ((dDate1 == SaldMoun.DateSal and
Sch == SaldMoun.SchetO and
Sub == SaldMoun.SubOsSch))
{
SaldoNM.Buffer := type$SaldoNM(SaldMoun.Buffer);
if insert current SaldoNM <> tsOk
{
Message('Ошибка добаления записи', Error);
_raise excStop;
}
}
}
else
{
if not Calc_NewSaldo(Word(0),
cPlans,
coSaldoNm,
Sch,
Sub,
Comp(0), //KodSpO
Comp(0), //Kau[1]
Comp(0),
Comp(0),
Comp(0),
Comp(0),
Comp(0), //Kau[6]
dStart,
Sub_Day(dDate1, 1))
{
if Message('Невозможно расчитать входящее сальдо по счету ' +
Sch + if (Sub <> '', '.' + Sub, '') + ''#13 +
'Продолжить?', Confirmation + YesNo) = cmNo
{
_raise excStop;
}
}
}
}
if (wVid = wPrSaldoE) //исходящее
{
if not Calc_NewSaldo(Word(0),
cPlans,
coSaldoNM,
Sch,
Sub,
Comp(0), //KodSpO
Comp(0), //Kau[1]
Comp(0),
Comp(0),
Comp(0),
Comp(0),
Comp(0), //Kau[6]
dStart,
dDate2)
{
if Message('Невозможно расчитать исходящее сальдо по счету ' +
Sch + if (Sub <> '', '.' + Sub, '') + ''#13 +
'Продолжить?', Confirmation + YesNo) = cmNo
{
_raise excStop;
}
}
}
}
procedure MYCALC;
{
InitServKau;
_try
{
StartNewVisual(vtRotateVisual, vfTimer + vfBreak, 'Поиск...', 10);
CalcSld(wPrSaldoE, dDate1, dDate2,
cMyPlans, Sch, Sub); //расчитываем сальдо исходящее на dDate2
_loop SaldoNm
{
...
if not NextVisual _raise excStop;
}
}
_except
on excStop:
{
}
_finally
{
StopVisual('', 0);
}
DoneServKau;
}