Calc_NewSaldo запретить вывод предупреждений..

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

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

Ответить
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Calc_NewSaldo запретить вывод предупреждений..

Сообщение 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);
при её использовании она любит выдавать в бизнес-текст всякие предупреждения .. которые совсем не нужны :(
среди её параметров отключения отчета о ошибках (работе) нет .. есть ли еще какая возможность избавится от этих окон (а то они дальнейшее выполнение программы блокируют)?
Время ведет!
Blind_Orog
Посетитель
Сообщения: 31
Зарегистрирован: 17 июл 2008, 12:14
Откуда: Дальний Восток

Сообщение Blind_Orog »

Masygreen
Какого рода предупреждения?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение 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}
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

CalculateNewSaldo пользую в отчёте давно. на экране видно как расчитывается сальдо по аналогии с отчетом аналитическим в ФРО но никаких сообщений тормозящих работу отчета на экран не выскакивает.

Присоединяюсь к вопросу - какого рода сообщение?
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

при её использовании она любит выдавать в бизнес-текст всякие предупреждения .. которые совсем не нужны
видимо после обработки функции появляется Error.out с текстом

Отрицательное сальдо по активному счету 23 на 01/02/2009г., -16056750.05

пока это окно не закроешь - алгоритм дальше не работает (я это имел в виду под тормозит) .. собственно после закрытия этого окна - все дальше продолжает работать как надо ...
сабж .. избавится от вывода этого Error.out
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

дополню .. для понимания задачи в которой используется (может я не тот инструмент использую ???)
человек создает бух справку, заполняет там разные параметры .. запускает печать отчета (там присоединенка моя )
присоединенка считает сальдо - и по дурным алгоритмам создает необходимые проводки в этой БС. и -> ни какие сообщения мне не нужны
Время ведет!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

:) а может выравнять сальдо по этому счету ?
если вы получаете отчет с 01.01.2010 по неважно какое число (в примере не видно, там переменные), то проверьте, что у вас там творится? использовать можно тот же отчет "ФРО - отчет - Аналитический Учет" по нужному счету.
избавитесь от мусора в данных - уйдут ошибки.
Blind_Orog
Посетитель
Сообщения: 31
Зарегистрирован: 17 июл 2008, 12:14
Откуда: Дальний Восток

Сообщение Blind_Orog »

Masygreen
Отрицательное сальдо по активному счету 23 на 01/02/2009г., -16056750.05
в самом простом случае сделайте этот счет активно-пассивным в плане счетов. НО(!!!) все таки необходимо разобраться почему у вас отрицательное сальдо, по сути это ошибка бухгалтеров.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

товарисчи :)
вопрос был не по тому как выравнять сальдо, а по возможности заблокировать этой функции выводить какие либо сообщения :)
Время ведет!
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

galover
я так понял это код функции ... ??? надо только убрать предупреждения ? ок супер [/quote]
Время ведет!
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Masygreen
Только он на Pascal-е, не на vip-e :(
LaaLaa

Сообщение LaaLaa »

Ошибки функции Calc_NewSaldo выводятся в фору 'errr'

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

.Form 'errr'
.NameInList 'Форма для протокола'
.{
^
.}
.endform
В FCOM был какой то оператор, запрещающий вывод формы. Не помню как он называется. Можно попробовать перекрыть эту форму. Если вспомните что это за оператор.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

.f "NUL"
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

ну ладно :( переживут как ни будь ..
Время ведет!
Ответить