Сальдо в отчете

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

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

Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Вот кусок из моего исходника

Сообщение Max_Fin »

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

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;
}

Жду выхода Вселенная 2.12!
Шевцов Владимир
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 09 окт 2009, 11:58
Откуда: г.Находка

Re:

Сообщение Шевцов Владимир »

Max_Fin писал(а):

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

// Перерасчет сальдо на начало месяца
function Calc_NewSaldo(     ModeCulc : word;
                              cPlans : comp;
                            coGetTab : integer;
                                 Sch : tSchet3;
                                 Sub : tSubSch;
                                Podr : tNRec;
  Kau1, Kau2, Kau3, Kau4, Kau5, Kau6 : tKodKau;
                         dStart,dEnd : Date) : boolean;

ModeCulc принимает флаги:
cgCS_Simple = 0; // Обыкновенный расчет
cgCS_RollFirst = 1; // Свернуть аналитику до первого уровня
cgCS_NoDesGr = 2; // Без учета кодов рабочих групп
cgCS_MakeZero = 4; // Формировать нулевое сальдо
cgCS_SaveVal = 8; // Оставлять для расчета КР ссылку на валюту
// если SumV = 0, SumR <> 0. см. ПИР 102.39559

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

Re: Сальдо в отчете

Сообщение Masygreen »

есть смысл не ставить вообще ни каких ограничений .. а отфильтровать в loop
Время ведет!
Шевцов Владимир
Постоянный обитатель
Сообщения: 175
Зарегистрирован: 09 окт 2009, 11:58
Откуда: г.Находка

Re: Сальдо в отчете

Сообщение Шевцов Владимир »

да,уже так и делаю, спасибо
Ответить