Страница 1 из 1
Calc_NewSaldo запретить вывод предупреждений..
Добавлено: 24 мар 2010, 16:29
Masygreen
есть такая классная процедура Calc_NewSaldo
Работает отлично нареканий нет ... но
Код: Выделить всё
flagQuit := Calc_NewSaldo( word(0),
281474976710658,
integer(coSaldoNM),
'523','01',
Comp(0),
Comp(0),Comp(0),Comp(0),
Comp(0),Comp(0),Comp(0),
SaldoBegDate,
SaldoEndDate);
при её использовании она любит выдавать в бизнес-текст всякие предупреждения .. которые совсем не нужны
среди её параметров отключения отчета о ошибках (работе) нет .. есть ли еще какая возможность избавится от этих окон (а то они дальнейшее выполнение программы блокируют)?
Добавлено: 25 мар 2010, 12:09
Blind_Orog
Masygreen
Какого рода предупреждения?
Добавлено: 25 мар 2010, 12:46
galover
Код: Выделить всё
function CalculateNewSaldo( ModeCulc : word;
cPlans : comp;
coPutTab : integer;
Sch : tSchet3;
Sub : tSubSch;
Podr : tNRec;
Kau : tGetKau;
dStart,dEnd : Date) : boolean;
var
pServFin : pBuhProcess;
fSaldo : pTable;
bSaldo : pSaldMoun;
coGetTab : integer;
tiSaldo : integer;
KolKey : byte;
AllError : longint;
DateActSal : date;
ServerDate : date;
ServerTime : time;
MyS : string;
IORes : word;
Label
StopSaldo;
begin
Result := false;
coGetTab := 0;
tiSaldo := 0;
KolKey := 0;
AllError := 0;
case coPutTab of
coSaldMoun : coGetTab := coSaldMoun;
coSaldDay : coGetTab := coSaldDay;
coSaldoNM : coGetTab := coSaldMoun;
else
begin
StrMessage('CalculateNewSaldo: Некорректный номер таблицы' +
FormatString(' %d',[coGetTab]), mfInformation);
Exit;
end;
end;
if (not InitBuhProcess(pServFin)) then
Exit;
with pServFin^ do
begin
CalcSaldo := ModeCulc;
if not InitSaldoM(cPlans,coGetTab,Sch,Sub,Podr,Kau,dStart,dEnd) then
begin
Dispose(pServFin, Done);
Exit;
end;
if (not CurDict^.WasOpenTable(fSaldo, bSaldo, coPutTab, fmNormal, Get_Name(coPutTab))) then
begin
Dispose(pServFin, Done);
Exit;
end;
if (coPutTab = coSaldoNM) then
fSaldo.DeleteAll;
end;
dEnd := D_AddDay(dEnd,1); // Дата нового сальдо
if (cPlans = 0) then
begin
case (coPutTab) of
coSaldMoun : tiSaldo := tiSaldMoun14;
coSaldDay : tiSaldo := tiSaldDay14;
coSaldoNM : tiSaldo := tiSaldoNM01;
end;
KolKey := 1;
end
else
begin
case (coPutTab) of
coSaldMoun : GivenTuneIndexS(coSaldMoun,cPlans,Sch,Sub,Kau,tiSaldo,KolKey);
coSaldDay : GivenTuneIndexS(coSaldDay,cPlans,Sch,Sub,Kau,tiSaldo,KolKey);
coSaldoNM :
begin
tiSaldo := tiSaldoNM01;
KolKey := 1;
end;
end;
end;
//----------------------------------------------------------------------------
// Удаление старого сальдо
StartNewVisual(New(PRotateVisual,Init(vfTimer,
'Удаление старого входящего сальдо ' +
#13'на ' + D_ToChar(dEnd,'DD/MM/YYYY'), 1)));
bSaldo^.cPlansSch := cPlans;
bSaldo^.SchetO := Sch;
bSaldo^.SubOsSch := Sub;
bSaldo^.KauOs[1] := Kau[1];
if dEnd = 0 then
bSaldo^.DateSal := dStart
else
bSaldo^.DateSal := dEnd;
DateActSal := bSaldo^.DateSal;
//----------------------------------------------------------------------------
// Сбросим актуальность сальдо, если удаляется входящее или исходящее
// сальдо текущего отчетного периода
if (coPutTab = coSaldMoun) then
if (DateActSal = dGetTune('Dat_M_Ot')) or
(DateActSal = D_AddMonths(dGetTune('Dat_M_Ot'),1)) then begin
InitSaldoActuality;
if (cPlans = 0) or ((cPlans <> 0) and (Sch = cgDefSch)) then
DropActualityForPlansSch(cPlans)
else
DropActuality(Sch,Sub);
DoneSaldoActuality;
end;
//----------------------------------------------------------------------------
fSaldo^.SetBoundsAndRowSet(tiSaldo, KolKey);
if (fSaldo^.GetFirst(tiSaldo) = tsOk) then
if (fSaldo^.OpenBlock(KolKey, 50) = tsOk) then
Repeat
if (not NextVisual) then
Goto StopSaldo;
if (not KauInFilter(TGetKau(bSaldo^.KauOs),Kau)) then
Continue;
IORes := fSaldo^.Delete(tiSaldo);
if IORes <> tsOk then
begin
StrMessage(FormatString('Ошибка #%d удаления записи с NRec=%s таблицы %s.',
[IORes, Comp2Str(bSaldo^.NRec, false), pServFin.Get_Name(fSaldo.Code)]), mfInformation);
AllError := AllError + 1;
Goto StopSaldo;
end;
Until fSaldo^.GetNextBlock <> tsOk;
fSaldo^.CloseBlock;
fSaldo^.ResetBoundsAndRowSet(tiSaldo, 0);
StopVisual('',0);
//----------------------------------------------------------------------------
// Запись нового сальдо
StartNewVisual(New(PIndicatorVisual,Init(vfTimer + vfBreak,
'Обновление входящего сальдо' +
#13'на ' + D_ToChar(dEnd,'DD/MM/YYYY'), pServFin^.RecordsInTable(pServFin^.fSaldRab))));
if pServFin^.fSaldRab^.GetFirst(tiSaldRab01) = tsOk then
Repeat
if (not NextVisual) then
Goto StopSaldo;
bSaldo^ := tSaldMoun(pServFin^.bSaldRab^);
bSaldo^.NRec := 0;
IORes := fSaldo^.Insert(tiSaldo);
if IORes <> tsOk then
begin
StrMessage(FormatString('Ошибка #%d вставки записи в таблицу %s',
[IORes, pServFin.Get_Name(fSaldo.Code)]), mfInformation);
AllError := AllError + 1;
Goto StopSaldo;
end;
Until pServFin^.fSaldRab^.GetNext <> tsOk;
//----------------------------------------------------------------------------
// Устанавливаем актуальность сальдо только если расчитано исходящее
// сальдо текущего отчетного периода
if (coPutTab = coSaldMoun) then
if (D_AddMonths(dGetTune('Dat_M_Ot'),1) = DateActSal) then begin
CurDict^.xFileF^.Driver^.GetDBDateTime(ServerDate,ServerTime,CurDict);
InitSaldoActuality;
if (cPlans = 0) or ((cPlans <> 0) and (Sch = cgDefSch)) then
SetActualityForPlansSch(cPlans,ServerDate,ServerTime)
else
SetActuality(Sch,Sub,ServerDate,ServerTime);
DoneSaldoActuality;
end;
//----------------------------------------------------------------------------
Result := true;
StopSaldo : ;
StopVisual('',0);
pServFin.fSaldRab.DeleteAll;
Dispose(pServFin, Done);
CurDict^.CloseTable(fSaldo);
if AllError <> 0 then
begin
case coPutTab of
coSaldMoun : mys := 'САЛЬДО ЗА МЕСЯЦ';
coSaldDay : mys := 'САЛЬДО ЗА ДЕНЬ';
coSaldoNM : mys := 'САЛЬДО НА КОНЕЦ МЕСЯЦА';
end;
StrMessage(#3'Входящее сальдо на начало ' + D_ToChar(dEnd,'DD/MM/YYYYг.') +
'для проведения расчетов сформировано некорректно.' +
#13#3'Проверьте данные о ' + myS,mfOkButton);
Result := false;
end;
end; {CalculateNewSaldo}
{------------------------------------------------------------------------------}
function Calc_NewSaldo;
var
KauTemp : tGetKau;
begin
KauTemp[1] := Kau1;
KauTemp[2] := Kau2;
KauTemp[3] := Kau3;
KauTemp[4] := Kau4;
KauTemp[5] := Kau5;
KauTemp[6] := Kau6;
Calc_NewSaldo := CalculateNewSaldo(ModeCulc,cPlans,coPutTab,Sch,Sub,Podr,KauTemp,dStart,dEnd);
end; {Calc_NewSaldo}
Добавлено: 25 мар 2010, 12:55
Алексей
CalculateNewSaldo пользую в отчёте давно. на экране видно как расчитывается сальдо по аналогии с отчетом аналитическим в ФРО но никаких сообщений тормозящих работу отчета на экран не выскакивает.
Присоединяюсь к вопросу - какого рода сообщение?
Добавлено: 25 мар 2010, 14:41
Masygreen
при её использовании она любит выдавать в бизнес-текст всякие предупреждения .. которые совсем не нужны
видимо после обработки функции появляется Error.out с текстом
Отрицательное сальдо по активному счету 23 на 01/02/2009г., -16056750.05
пока это окно не закроешь - алгоритм дальше не работает (я это имел в виду под тормозит) .. собственно после закрытия этого окна - все дальше продолжает работать как надо ...
сабж .. избавится от вывода этого Error.out
Добавлено: 25 мар 2010, 14:46
Masygreen
дополню .. для понимания задачи в которой используется (может я не тот инструмент использую ???)
человек создает бух справку, заполняет там разные параметры .. запускает печать отчета (там присоединенка моя )
присоединенка считает сальдо - и по дурным алгоритмам создает необходимые проводки в этой БС. и -> ни какие сообщения мне не нужны
Добавлено: 25 мар 2010, 21:05
Алексей
а может выравнять сальдо по этому счету ?
если вы получаете отчет с 01.01.2010 по неважно какое число (в примере не видно, там переменные), то проверьте, что у вас там творится? использовать можно тот же отчет "ФРО - отчет - Аналитический Учет" по нужному счету.
избавитесь от мусора в данных - уйдут ошибки.
Добавлено: 26 мар 2010, 04:22
Blind_Orog
Masygreen
Отрицательное сальдо по активному счету 23 на 01/02/2009г., -16056750.05
в самом простом случае сделайте этот счет активно-пассивным в плане счетов. НО(!!!) все таки необходимо разобраться почему у вас отрицательное сальдо, по сути это ошибка бухгалтеров.
Добавлено: 26 мар 2010, 13:59
Masygreen
товарисчи
вопрос был не по тому как выравнять сальдо, а по возможности заблокировать этой функции выводить какие либо сообщения
Добавлено: 26 мар 2010, 17:37
Masygreen
galover
я так понял это код функции ... ??? надо только убрать предупреждения ? ок супер [/quote]
Добавлено: 26 мар 2010, 17:45
galover
Masygreen
Только он на Pascal-е, не на vip-e
Добавлено: 29 мар 2010, 03:53
LaaLaa
Ошибки функции Calc_NewSaldo выводятся в фору 'errr'
Код: Выделить всё
.Form 'errr'
.NameInList 'Форма для протокола'
.{
^
.}
.endform
В FCOM был какой то оператор, запрещающий вывод формы. Не помню как он называется. Можно попробовать перекрыть эту форму. Если вспомните что это за оператор.
Добавлено: 29 мар 2010, 10:53
galover
.f "NUL"
Добавлено: 29 мар 2010, 13:57
Masygreen
ну ладно
переживут как ни будь ..