| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- DEF TEMP-TABLE tAufko LIKE Aufko.
- DEF TEMP-TABLE tAufze LIKE Aufze.
- PROCEDURE ZEILENBUCHEN:
- /*------------------------------------------------------------------------------
- Purpose:
- Parameters: <none>
- Notes:
- ------------------------------------------------------------------------------*/
- DEF INPUT PARAMETER ipArt AS INT NO-UNDO.
- DEF INPUT PARAMETER ipAufnr AS INT NO-UNDO.
- DEF INPUT PARAMETER ipPos AS INT NO-UNDO.
- /* ipArt : 0 = Neue Zeile */
- /* 1 = Storno (bestehende Zeile) */
- /* 2 = Löschung (Storno) */
- DEF VAR Faktor AS INT INIT 1 NO-UNDO.
- DEF VAR MW AS INT NO-UNDO.
- DEF VAR Menge AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR GGeb_Me AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR VGeb_Me AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR KGeb_Me AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR Liter AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR Net_Betr AS DEC DECIMALS 4 NO-UNDO.
-
- DEF BUFFER BArtbw FOR Artbw.
- IF ipArt = 0 THEN Faktor = +1.
- IF ipArt = 1 THEN Faktor = -1.
- IF ipArt = 2 THEN Faktor = -1.
- FIND Aufko USE-INDEX Aufko-k1
- WHERE Aufko.Firma = '1000'
- AND Aufko.Aufnr = ipAufnr NO-LOCK NO-ERROR.
- IF NOT AVAILABLE Aufko THEN RETURN 'ERROR AUFKO'.
- FIND Aufze USE-INDEX Aufze-k1
- WHERE Aufze.Firma = '1000'
- AND Aufze.Aufnr = ipAufnr
- AND Aufze.Pos = ipPos NO-ERROR.
- IF NOT AVAILABLE Aufze THEN RETURN 'ERROR AUFZE'.
- IF Aufze.Artnr = 0 THEN RETURN ''.
- FIND Artst USE-INDEX Artst-k1
- WHERE Artst.Firma = Aufze.Firma
- AND Artst.Artnr = Aufze.Artnr
- AND Artst.Inhalt = Aufze.Inhalt
- AND Artst.Jahr = Aufze.Jahr NO-ERROR.
- IF NOT AVAILABLE Artst THEN RETURN 'ERROR ARTST'.
- Menge = Aufze.MGeli * Faktor.
- GGeb_Me = Aufze.GGeb_Me * Faktor.
- VGeb_Me = Aufze.VGeb_Me * Faktor.
- KGeb_Me = Aufze.KGeb_Me * Faktor.
- Liter = Aufze.Liter * Faktor.
- Net_Betr = Aufze.Net_Betr * Faktor.
- FIND Artbw USE-INDEX Artbw-k1
- WHERE Artbw.Firma = Aufze.Firma
- AND Artbw.Trnr = Aufze.Trnr NO-ERROR.
- IF NOT AVAILABLE Artbw THEN DO:
- IF Aufze.Trnr = 0 THEN DO:
- FIND LAST BArtbw NO-LOCK USE-INDEX Artbw-k1
- WHERE BArtbw.Firma = '1000' NO-ERROR.
- IF AVAILABLE BArtbw THEN Aufze.Trnr = BArtbw.Trnr + 1.
- ELSE Aufze.Trnr = 1.
- END.
- CREATE Artbw.
- ASSIGN Artbw.Firma = Aufze.Firma
- Artbw.Trnr = Aufze.Trnr
- Artbw.Tr_Art = 01
- Artbw.Artnr = Aufze.Artnr
- Artbw.Inhalt = Aufze.Inhalt
- Artbw.Jahr = Aufze.Jahr
- Artbw.Knr = Aufko.Knr.
- END.
- /* ------------------------------------------ */
- /* Gebinde-Konto-Kontrolle */
- /* ------------------------------------------ */
- DO WHILE Aufze.KGebKto <> '':
- IF Aufze.KGeb_Me = 0 THEN LEAVE.
- FIND GebKonto USE-INDEX GebKonto-k1
- WHERE GebKonto.Firma = Aufze.Firma
- AND GebKonto.Geb_Cd = Aufze.KGebKto NO-LOCK.
- IF GebKonto.MWST_Art = 0 THEN MW = 11.
- IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
- IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
- FIND AufGKon USE-INDEX AufGKon-k1
- WHERE AufGKon.Firma = Aufze.Firma
- AND AufGKon.Aufnr = Aufze.Aufnr
- AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AND AufGKon.MWSt_Cd = MW NO-ERROR.
- IF NOT AVAILABLE AufGKon THEN DO:
- CREATE AufGKon.
- ASSIGN AufGKon.Firma = Aufze.Firma
- AufGKon.Aufnr = Aufze.Aufnr
- AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AufGKon.MWSt_Cd = MW
- AufGKon.Gebuehr = GebKonto.Gebuehr
- AufGKon.Depot = GebKonto.Depot
- AufGKon.Sort_Cd = GebKonto.Sort_Cd.
- END.
- DO WHILE TRUE:
- IF NOT Aufko.GG_Berech THEN LEAVE.
- IF Aufze.Preis = 0 AND
- AufGKon.Gebuehr <> 0 THEN LEAVE.
- AufGKon.Ausgang = AufGKon.Ausgang + KGeb_Me.
- AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
- * (AufGKon.Depot + AufGKon.Gebuehr).
- LEAVE.
- END.
- LEAVE.
- END.
-
- DO WHILE Aufze.VGebKto <> '':
- IF Aufze.VGeb_Me = 0 THEN LEAVE.
- FIND GebKonto USE-INDEX GebKonto-k1
- WHERE GebKonto.Firma = Aufze.Firma
- AND GebKonto.Geb_Cd = Aufze.VGebKto NO-LOCK.
- IF GebKonto.MWST_Art = 0 THEN MW = 11.
- IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
- IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
- FIND AufGKon USE-INDEX AufGKon-k1
- WHERE AufGKon.Firma = Aufze.Firma
- AND AufGKon.Aufnr = Aufze.Aufnr
- AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AND AufGKon.MWSt_Cd = MW NO-ERROR.
- IF NOT AVAILABLE AufGKon THEN DO:
- CREATE AufGKon.
- ASSIGN AufGKon.Firma = Aufze.Firma
- AufGKon.Aufnr = Aufze.Aufnr
- AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AufGKon.MWSt_Cd = MW
- AufGKon.Gebuehr = GebKonto.Gebuehr
- AufGKon.Depot = GebKonto.Depot
- AufGKon.Sort_Cd = GebKonto.Sort_Cd.
- END.
- DO WHILE TRUE:
- IF NOT Aufko.GG_Berech THEN LEAVE.
- IF Aufze.Preis = 0 AND
- AufGKon.Gebuehr <> 0 THEN LEAVE.
- AufGKon.Ausgang = AufGKon.Ausgang + VGeb_Me.
- AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
- * (AufGKon.Depot + AufGKon.Gebuehr).
- LEAVE.
- END.
- LEAVE.
- END.
-
- DO WHILE Aufze.GGebKto <> '':
- IF Aufze.GGeb_Me = 0 THEN LEAVE.
- FIND GebKonto USE-INDEX GebKonto-k1
- WHERE GebKonto.Firma = Aufze.Firma
- AND GebKonto.Geb_Cd = Aufze.GGebKto NO-LOCK.
- IF GebKonto.MWST_Art = 0 THEN MW = 11.
- IF GebKonto.MWST_Art = 1 THEN MW = Aufze.WuCd.
- IF GebKonto.MWST_Art = 2 THEN MW = GebKonto.MWST_Cd.
- FIND AufGKon USE-INDEX AufGKon-k1
- WHERE AufGKon.Firma = Aufze.Firma
- AND AufGKon.Aufnr = Aufze.Aufnr
- AND AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AND AufGKon.MWSt_Cd = MW NO-ERROR.
- IF NOT AVAILABLE AufGKon THEN DO:
- CREATE AufGKon.
- ASSIGN AufGKon.Firma = Aufze.Firma
- AufGKon.Aufnr = Aufze.Aufnr
- AufGKon.Geb_Cd = GebKonto.Geb_Cd
- AufGKon.MWSt_Cd = MW
- AufGKon.Gebuehr = GebKonto.Gebuehr
- AufGKon.Depot = GebKonto.Depot
- AufGKon.Sort_Cd = GebKonto.Sort_Cd.
- END.
- DO WHILE TRUE:
- IF NOT Aufko.GG_Berech THEN LEAVE.
- IF Aufze.Preis = 0 AND
- AufGKon.Gebuehr <> 0 THEN LEAVE.
- AufGKon.Ausgang = AufGKon.Ausgang + GGeb_Me.
- AufGKon.Betrag = (AufGKon.Ausgang - AufGKon.Eingang)
- * (AufGKon.Depot + AufGKon.Gebuehr).
- LEAVE.
- END.
- LEAVE.
- END.
- /* ------------------------------------------ */
- /* Summengruppen (Rabatte / Spezialrabatte) */
- /* ------------------------------------------ */
- DEF VAR VMenge AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR FWert AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR AWert AS DEC DECIMALS 4 NO-UNDO.
- DEF VAR RRecid AS RECID NO-UNDO.
- DO WHILE TRUE:
- DO WHILE Aufze.Auf_Sp_Grp > 0:
- FIND AufSpRab USE-INDEX AufSpRab-k1
- WHERE AufSpRab.Firma = Aufze.Firma
- AND AufSpRab.Aufnr = Aufze.Aufnr
- AND AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp NO-ERROR.
- IF NOT AVAILABLE AufSpRab THEN DO:
- CREATE AufSpRab.
- ASSIGN AufSpRab.Firma = Aufze.Firma
- AufSpRab.Aufnr = Aufze.Aufnr
- AufSpRab.Rab_Grp = Aufze.Auf_Sp_Grp.
- END.
- AufSpRab.Menge = AufSpRab.Menge + Menge.
- FIND LAST SpPrRab USE-INDEX SpPrRab-k1
- WHERE SpPrRab.Firma = Aufko.Firma
- AND SpPrRab.Knr = Aufko.Knr
- AND SpPrRab.Rab_Grp = AufSpRab.Rab_Grp
- AND SpPrRab.Menge <= AufSpRab.Menge
- AND SpPrRab.Ab_Datum <= Aufko.Kond_Datum
- AND SpPrRab.Bis_Datum >= Aufko.Kond_Datum
- NO-LOCK NO-ERROR.
- IF AVAILABLE SpPrRab THEN DO:
- ASSIGN AufSpRab.Auf_Proz_Betr = SpPrRab.Auf_Proz_Betr
- AufSpRab.Auf_Wert = SpPrRab.Auf_Wert.
- END.
- ELSE DO:
- Aufze.Auf_Sp_Grp = 0.
- END.
- LEAVE.
- END.
-
- IF Aufze.Rab_Su_Grp = 0 THEN DO:
- ASSIGN Aufze.Auf_Rab = 0
- Aufze.Abh_Rab = 0
- Aufze.Rab_Su_Art = 0.
- LEAVE.
- END.
-
- FIND AufRabSu USE-INDEX AufRabSu-k1
- WHERE AufRabSu.Firma = Aufze.Firma
- AND AufRabSu.Aufnr = Aufze.Aufnr
- AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp
- AND AufRabSu.MWST_Cd = Aufze.WuCd NO-ERROR.
- IF NOT AVAILABLE AufRabSu THEN DO:
- FIND FIRST RabSumm NO-LOCK USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = Aufze.Rab_Su_Grp.
- CREATE AufRabSu.
- ASSIGN AufRabSu.Firma = Aufze.Firma
- AufRabSu.Aufnr = Aufze.Aufnr
- AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp
- AufRabSu.MWST_Cd = Aufze.WuCd
- AufRabSu.F_Art = RabSumm.F_Rab_Art
- AufRabSu.F_Proz_Betr = RabSumm.F_Proz_Betr
- AufRabSu.A_Art = RabSumm.A_Rab_Art
- AufRabSu.A_Proz_Betr = RabSumm.A_Proz_Betr.
- END.
- RRecid = RECID(AufRabSu).
-
- DO WHILE TRUE:
- ASSIGN AufRabSu.M_Menge = AufRabSu.M_Menge + Menge
- AufRabSu.M_Betrag = AufRabSu.M_Betrag + Net_Betr
- AufRabSu.M_Inhalt = AufRabSu.M_Inhalt + Liter.
- IF Aufze.Rab_Su_Art = 0 THEN LEAVE.
- ASSIGN AufRabSu.R_Menge = AufRabSu.R_Menge + Menge
- AufRabSu.R_Betrag = AufRabSu.R_Betrag + Net_Betr
- AufRabSu.R_Inhalt = AufRabSu.R_Inhalt + Liter.
- LEAVE.
- END.
-
- VMenge = 0.
- FOR EACH AufRabSu USE-INDEX AufRabSu-k1
- WHERE AufRabSu.Firma = Aufze.Firma
- AND AufRabSu.Aufnr = Aufze.Aufnr
- AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp NO-LOCK:
-
- CASE AufRabSu.F_Art:
- WHEN 0 THEN VMenge = VMenge + AufRabSu.M_Menge.
- WHEN 1 THEN VMenge = VMenge + AufRabSu.M_Betrag.
- WHEN 2 THEN VMenge = VMenge + AufRabSu.M_Inhalt.
- END.
- END.
- FIND AufRabSu WHERE RECID(AufRabSu) = RRecid.
-
- IF VMenge < 0 THEN VMenge = - VMenge.
-
- DO WHILE TRUE:
- IF AufRabSu.F_Art = 0 THEN DO: /* Mengen */
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge <= VMenge
- NO-LOCK NO-ERROR.
- END.
- IF AufRabSu.F_Art = 1 THEN DO: /* Betrag */
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge = 0
- AND RabSumm.Betrag <= VMenge
- NO-LOCK NO-ERROR.
- END.
- IF AufRabSu.F_Art = 2 THEN DO: /* Hektoliter */
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge = 0
- AND RabSumm.Betrag = 0
- AND RabSumm.Inhalt <= (VMenge / 100)
- NO-LOCK NO-ERROR.
- END.
- IF NOT AVAILABLE RabSumm THEN FWert = 0.
- ELSE FWert = RabSumm.F_Wert.
-
- IF AufRabSu.A_Art = 0 THEN DO:
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge <= VMenge NO-LOCK NO-ERROR.
- END.
- IF AufRabSu.A_Art = 1 THEN DO:
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge = 0
- AND RabSumm.Betrag <= VMenge NO-LOCK NO-ERROR.
- END.
- IF AufRabSu.A_Art = 2 THEN DO:
- FIND LAST RabSumm USE-INDEX RabSumm-k1
- WHERE RabSumm.Firma = Aufze.Firma
- AND RabSumm.Rab_Summ = AufRabSu.Rab_Summ
- AND RabSumm.Menge = 0
- AND RabSumm.Betrag = 0
- AND RabSumm.Inhalt <= (VMenge / 100) NO-LOCK NO-ERROR.
- END.
- IF NOT AVAILABLE RabSumm THEN AWert = 0.
- ELSE AWert = RabSumm.A_Wert.
-
- LEAVE.
- END.
-
- FOR EACH AufRabSu USE-INDEX AufRabSu-k1
- WHERE AufRabSu.Firma = Aufze.Firma
- AND AufRabSu.Aufnr = Aufze.Aufnr
- AND AufRabSu.Rab_Summ = Aufze.Rab_Su_Grp:
- AufRabSu.F_Wert = FWert.
- AufRabSu.A_Wert = AWert.
- END.
-
- LEAVE.
- END.
- DO WHILE Aufze.EP = 0:
- IF Artst.Listen_EP <> 0 THEN Aufze.EP = Artst.Listen_EP.
- IF Artst.LEP <> 0 THEN Aufze.EP = Artst.LEP.
- IF Artst.DEP <> 0 THEN Aufze.EP = Artst.DEP.
- LEAVE.
- END.
- /* ------------------------------------------ */
- /* Artikelbewegung mutieren */
- /* ------------------------------------------ */
- DO WHILE TRUE:
- IF ipArt = 1 THEN LEAVE.
- IF ipArt = 2 THEN DO:
- DELETE Artbw.
- LEAVE.
- END.
- FIND FIRST TAufko.
- BUFFER-COPY Aufko TO TAufko.
- FIND FIRST TAufze.
- BUFFER-COPY Aufze TO TAufze.
- RUN ARTBWMUT ( INPUT RECID(Artbw) ).
- LEAVE.
- END.
- RELEASE ArtLager.
- RELEASE Artst.
- RELEASE AufSpRab.
- RELEASE AufRabSu.
- RELEASE AufGKon.
- RELEASE Aufze.
- RELEASE Artbw.
- RELEASE GebKonto.
- /* ------------------------------------------ */
- /* Auftragskopf (-köpfe) mutieren */
- /* ------------------------------------------ */
- DO WHILE TRUE:
- DEF VAR KoRecid AS RECID NO-UNDO.
- DEF VAR FwSprcd AS INT NO-UNDO.
- DEF VAR AufSta AS INT NO-UNDO.
- DEF BUFFER BAufko FOR Aufko.
- IF Aufko.Samm_Nr = 0 THEN LEAVE.
- FIND Tabel USE-INDEX Tabel-k1
- WHERE Tabel.Firma = Aufze.Firma
- AND Tabel.RecArt = 'FAKART'
- AND Tabel.CodeC = ''
- AND Tabel.CodeI = Aufko.Fak_Art
- AND Tabel.Sprcd = FwSprcd NO-LOCK NO-ERROR.
- IF Tabel.Int_3 <> 4 THEN LEAVE. /* nicht Sammelrechnung */
- KoRecid = RECID(Aufko).
- FwSprcd = DYNAMIC-FUNCTION('GETFWSPRCD':U) NO-ERROR.
- AufSta = DYNAMIC-FUNCTION('GETFWSRNICHT':U) NO-ERROR.
- RELEASE Aufko.
- FIND Aufko WHERE RECID(Aufko) = KoRecid.
- Aufko.Gedruckt = FALSE.
- Aufko.Auf_Sta = AufSta.
- FOR EACH BAufko USE-INDEX Aufko-k4
- WHERE BAufko.Firma = Aufko.Firma
- AND BAufko.Knr = Aufko.Knr
- AND BAufko.Fak_Art = Aufko.Fak_Art
- AND BAufko.Samm_Nr = Aufko.Samm_Nr
- AND BAufko.Aufnr <> Aufko.Aufnr :
- BAufko.Gedruckt = FALSE.
- BAufko.Auf_Sta = AufSta.
- END.
- LEAVE.
- END.
- RELEASE Aufko.
- RELEASE BAufko.
- RELEASE Aufze.
- RELEASE Tabel.
- END PROCEDURE.
|