Please enable JavaScript to view this site.

use Handbuch

Navigation: Vertrag > Tonerlieferung Prüfung

TP - Berechnung

Scroll Prev Top Next More

Die komplette Ermittlung und Berechnung befindet sich als Procedure "VA_GETTP" in der Datenbank.

Diese kann auch für diverse Listen und Reporte verwendet werden.

 

die procedure kann mittels SQL folgendermaßen aufgerufen werden:

 

select * from VA_GETTP(:IDFA)
 
Beispiel in Kombination mit mehreren Tabellen: 
select h.blnr, a.anr, a.kmodnr, tp.*
from b02au h
left join b02auh2 h2 on h2.idr = h.idr
left join g02art a on a.idr = h2.aid
left join va_gettp(h.idr) tp on 1 = 1
where h.blnr = :BLNR

 

Achtung: Bei Verwendung der Procedure für eine Liste von Verträgen, ist darauf zu achten die Anzahl der Verträge einzugrenzen. Da Informationen über alle Lieferscheine und Sofortfakturen der betreffenden Verträge abgerufen werden, kann sich dies bei zu vielen Verträgen zeitintensiv auswirken.

 

 

use v8.8.90.17 vom 24.04.2013

 

PROCEDURE VA_GETTP (
    idva idr2)
returns (
    tp_colcnt betrag,         /* Anzahl Farbtoner aus Zaehlermodell */
    tp_colbkperc betrag,      /* Kalk.Schwarz Toneranteil zur Farbe aus Zaehlermodell */
    zh_kapa_bk betrag,        /* Kalk.Schwarz Toneranteil zur Farbe aus Zaehlermodell */
    zh_kapa_col betrag,       /* Kapa Farbe IST */
    zh_me_ton_bk betrag,      /* Berechnete Menge Toner Basis Zaehler Schwarz */   
    zh_me_ton_col betrag,     /* Berechnete Menge Toner Basis Zaehler Farbe */
    lf_kapa_bk betrag,        /* Berechnete Kapa Basis Lieferungen Schwarz */
    lf_kapa_col betrag,       /* Berechnete Kapa Basis Lieferungen Farbe */
    lf_me_ton_bk betrag,      /* Gelieferte Tonermenge Schwarz */
    lf_me_ton_col betrag,     /* Gelieferte Tonermenge Fabe */
    zh_date_last date,        /* Datum der letzten Zaehlererfassung */
    tp_diff_bk betrag,        /* Diff.Menge Toner Schwarz */
    tp_diff_col betrag,       /* Diff.Menge Toner Farbe */
    tp_schwell_bk betrag,     /* Schwellwert Schwarz */
    tp_schwell_col betrag)    /* Schwellwert Farbe */
as
declare variable temp_typ integer;
declare variable temp_stattyp integer;
declare variable temp_zhcnt integer;
declare variable zhcnt_1_bk integer;
declare variable zhcnt_2_bk integer;
declare variable zhcnt_1_col integer;
declare variable zhcnt_2_col integer;
declare variable temp_kapa betrag;
declare variable temp_menge betrag;
begin
 
  if (idva is nullthen exit;
 
  /*----------------------------------------------------------------------*/
  /* Kostenmodell Werte */
 
  tp_colcnt = null;
  tp_colbkperc = null;
 
  select km.tp_colcnt,  km.tp_colbkperc
  from b02auh2 h2
  join g02art a on a.idr = h2.aid
  join g68kmod km on km.idr = a.kmodid
  where h2.idr = :IDVA
  into :tp_colcnt, :tp_colbkperc;
 
  if ( coalesce(tp_colcnt,0) = 0 ) then tp_colcnt = 1;
 
  /*----------------------------------------------------------------------*/
  /* Zaehler Klicks */
  zhcnt_1_bk = null;
  zhcnt_2_bk = null;
  zhcnt_1_col = null;
  zhcnt_2_col = null;
 
  for
  select '1', e.datum, z.stattyp, p.zhcnt
  from b37zherfpos p
  join g61zh z on z.idr = p.zhid and z.stattyp in (20,30)
  join b37zherf e on p.idzherf = e.idr
  where p.idzherf =
  (
  select first 1 idr
  from b37zherf
  where idva = :IDVA and kzok = "*"  and kzsw is null
  order by datum asc
  )
 
  union
 
  /* Aktuell */
  select '2', e.datum, z.stattyp, p.zhcnt
  from b37zherfpos p
  join g61zh z on z.idr = p.zhid and z.stattyp in (20,30)
  join b37zherf e on p.idzherf = e.idr
  where p.idzherf =
  (
  select first 1 idr
  from b37zherf
  where idva = :IDVA and kzok = "*"  and kzsw is null
  order by datum desc
  )
  order by 2, 3
  into :temp_typ, :zh_date_last, :temp_stattyp, :temp_zhcnt
  do begin
    if ( ( temp_typ = 1 ) and (temp_stattyp = 20) )then zhcnt_1_bk = temp_zhcnt;
    if ( ( temp_typ = 2 ) and (temp_stattyp = 20) )then zhcnt_2_bk = temp_zhcnt;
    if ( ( temp_typ = 1 ) and (temp_stattyp = 30) )then zhcnt_1_col = temp_zhcnt;
    if ( ( temp_typ = 2 ) and (temp_stattyp = 30) )then zhcnt_2_col = temp_zhcnt;
  end
 
  /*----------------------------------------------------------------------*/
  /* KAPA Berechnung */
 
  /* Toner Color */
  if (( not zhcnt_1_col is null ) and ( not zhcnt_2_col is null )) then
  begin
    zh_kapa_col = zhcnt_2_col - zhcnt_1_col;
  end
 
  /* Toner Black */
  if ( ( not zhcnt_1_bk is null ) and ( not zhcnt_2_bk is null ) ) then
  begin
    zh_kapa_bk = zhcnt_2_bk - zhcnt_1_bk;
 
    /* SW anteil bei Col Kopien */
    if ((not zh_kapa_col is nulland ( not tp_colbkperc is null ))  then
    begin
      zh_kapa_bk = zh_kapa_bk + ( zh_kapa_col * tp_colbkperc / 100 );
    end
  end
 
  /*----------------------------------------------------------------------*/
  /* Lieferungen Toner */
  lf_kapa_bk = null;
  lf_kapa_col = null;
  lf_me_ton_bk = null;
  lf_me_ton_col = null;
 
  for
  /* Lieferscheine */
  select
 
    akz.tp_typ,
    sum(p.menge * p.mevkf) menge,
    sum( (p.menge * p.mevkf) * a.kapa ) kapa
 
  from b03lf h
  join b03lfpos p on p.idh = h.idr
  join g02art a on a.idr = p.aid
  join g47artkz akz on akz.idr = a.artkzid and akz.tp_typ in (20,30)
  where h.idva = :idva and h.bldate <= :zh_date_last
 
  group by 1
 
  union
 
  /* Sofortfaktura */
  select
 
    akz.tp_typ,
    sum(p.menge * p.mevkf) menge,
    sum( (p.menge * p.mevkf) * a.kapa ) kapa
 
  from b04fk h
  join b04fkpos p on p.idh = h.idr
  join g02art a on a.idr = p.aid
  join g47artkz akz on akz.idr = a.artkzid and akz.tp_typ in (20,30)
  where h.idva = :idva and h.bltyp = 4020 and h.bldate <= :zh_date_last
 
  group by 1
  into :temp_typ, :temp_menge, :temp_kapa
  do
  begin
 
    /* Black */
    if (temp_typ = 20 ) then
    begin
      lf_kapa_bk = temp_kapa;
      lf_me_ton_bk = temp_menge;
    end
 
    /* Color */
    if (temp_typ = 30 ) then
    begin
      lf_kapa_col = temp_kapa / tp_colcnt;
      lf_me_ton_col = temp_menge;
    end
 
  end
 
 
  /*----------------------------------------------------------------------*/
  /* Berechnung ZH --> Toner Menge*/
 
  /* Toner BK Menge Soll Basis Klicks = ZH.KAPA / ( LF.KAPA / LF.Menge )*/
  if (( coalesce( lf_me_ton_bk,0 ) > 0 ) and ( coalesce(lf_kapa_bk,0) > 0 ) )  then
  begin
    zh_me_ton_bk = ( zh_kapa_bk / ( lf_kapa_bk / lf_me_ton_bk ) );
  end
 
  /* Toner Col Menge Soll Basis Klicks = ZH.KAPA / ( LF.KAPA / LF.Menge )*/
  if (( coalesce( lf_me_ton_col,0 ) > 0 ) and ( coalesce(lf_kapa_col,0) > 0 ) )  then
  begin
    zh_me_ton_col = ( zh_kapa_col / ( lf_kapa_col / lf_me_ton_col ) );
  end
 
  /*----------------------------------------------------------------------*/
  /* Berechnung Diff  */
  tp_diff_bk = lf_me_ton_bk - zh_me_ton_bk;
  tp_diff_col = lf_me_ton_col - zh_me_ton_col;
 
  if ( coalesce(lf_me_ton_bk,0) > 0 ) then
  begin
    tp_schwell_bk = tp_diff_bk / lf_me_ton_bk * 100;
  end
 
  if ( coalesce(lf_me_ton_col,0) > 0 ) then
  begin
    tp_schwell_col = tp_diff_col / lf_me_ton_col * 100;
  end
 
  suspend;
 
end