Industrie-Zahlungsbedingung

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Industrie-Zahlungsbedingung

Beitrag von TE999 »

Hallo,

wer hat Erfahrung mit den Industriezahlungsbedingungen?
Ich habe in der Maske Zahlungsbedingungen folgende Einträge:

Zahlungs-KZ : 25FM
Bez. am 25. des der Lieferung folgenden Monates
Zahlungsziel: 0
Fenster Industriezahlungsbedingungen
bei RG bis zum Tag im Monat: 31
% Skonto: 0 %
bis zum Tag des Folgemonat: 25
Folgemonat: 1

Die Berechnung des Fälligkeitsdatums ist immer gleich den Rechnungsdatum.
Sind hier noch zusätzliche Eintragungen möglich.
Bsp. RG-Datum 2.10.2008 z.Z Fälligkeit 2.10.2008
Richtig wäre aber 25.11.2008

Frage: Kann zusätzlich die Bedingung erweiteret werden " bei Lieferung bis zum Tag im Monat:"

Danke
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Hallo,
habe die Funktion heute im neuen Relase 2009-RC1 getestet.
Die Fälligkeit wird nicht richtig berechnet.

Hat hier jemand Erfahrung damit?

Danke


Software 2009-RC1
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Hallo,

habe heute in der Hilfe für die Industrie-Zahlungsbedingung gelesen, das diese noch nicht implementiert sind.

Hat jemand das schon einmal realisiert? Wir würden das gern in die aktuelle Version einpflegen.

Danke


Datenbank 2009-A0.1
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Hallo,

habe heute in der Hilfe für die Industrie-Zahlungsbedingung gelesen, das diese noch nicht implementiert sind.

Hat jemand das schon einmal realisiert? Wir würden das gern in die aktuelle Version einpflegen.

An welcher Stelle und in welcher Prozedur wird die Fälligkeit berechnet?

Danke


Datenbank 2009-A0.1
NPLADMIN
Beiträge: 163
Registriert: Di Okt 07, 2008 7:54 am
Wohnort: Oxbüll / Wees

Beitrag von NPLADMIN »

Hallo zusammen,

da ich auch in der Datenbank "2010-B09" noch keine Änderung für die Zahlungsbedingungen finden konnte
und aus gegebenen Anlass gebraucht wurde habe ich eine bis jetzt funktionierende Lösung entwickelt.

In BZAHBE unter Bezeichnung "Zahlung @DD@ @S@ ! 15. Folgemonat 3%" ergibt:
Bestellung: "Zahlung bis zum 15. des Folgemonats mit 3% Skonto"

Auftrag: "Zahlung bis zum 15. des Folgemonats mit 3% Skonto"

Rechnung: Bei Zahlbarab-Datum= xx.02.2010 und Gesamtbetrag= 100,- Euro
"Zahlung bis zum 15.03.2010 mit 3.00% Skonto (3.00) = 97.00 EUR"

Dazu habe ich die Prozedur "P_REP_BRRC_ZAHBE" wie folgt überarbeitet:

Code: Alles auswählen

SET TERM ^ ;

create or alter procedure P_REP_BRRC_ZAHBE (
    DATUM date,
    BZAHBE_ID integer)
returns (
    ZTERMIN date,
    PROZENT numeric(15,2),
    RSKONTO numeric(15,2),
    ZAHLZIEL integer,
    ART char(1),
    MONATANZAHL integer)
as
declare variable TAG integer;
declare variable MONAT integer;
declare variable DIFF integer;
declare variable RFOLGEMON integer;
declare variable RF_TAG integer;
declare variable RTAG integer;
begin
  /* LETZTER STAND: 06.06.2004 13:27:16 GK */

  /* Protokollieren, dass Aktion hier durchgelaufen ist */
  IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
    INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_REP_BRRC_ZAHBEH');

  IF ((DATUM IS NULL) OR (BZAHBE_ID IS NULL)) THEN EXIT;

  /* Zahlungsbedingung auslesen */
  SELECT RFOLGEMON, RF_TAG, RTAG, PROZENT, RSKONTO, ZAHLZIEL
  FROM BZAHBE
  WHERE ID = :BZAHBE_ID
  INTO :RFOLGEMON, :RF_TAG, :RTAG, :PROZENT, :RSKONTO, :ZAHLZIEL;

  IF ((RF_TAG > 0) AND (RTAG > 0)) THEN
  BEGIN
    /*  GK 06.06.2005
        wenn Rechnungstag größer als definierter Tag in Zahlbed., dann
        noch einen Monat hinzufügen  */
    IF (RTAG < EXTRACT(DAY FROM DATUM)) THEN
      RFOLGEMON = RFOLGEMON +1;

    ART = 'I';   /* Industriezahlungsbedingung */
    ZAHLZIEL = :RF_TAG; /*Für Andruck der Tage - 09.02.2010 KTS*/
    MONATANZAHL = :RFOLGEMON; /*Für richtigen Monatsandruck in Belegen - 09.02.2010 KTS*/
    ZTERMIN = CAST( F_ADDMONTH(DATUM, RFOLGEMON) AS DATE);  /* Monate aufaddieren */
    TAG = F_DAYOFMONTH(ZTERMIN);             /* Tag und Monat merken */
    MONAT = F_MONTH(ZTERMIN);
    DIFF = RF_TAG - TAG;                     /* soviele Tage aufaddieren */
    ZTERMIN = ZTERMIN + DIFF;
    /* falls er in nächsten Monat springt z.B. RF_TAG=31 im Februar */
    /* kann im Dezember nicht passieren */
    IF (MONAT < F_MONTH(ZTERMIN)) THEN
      ZTERMIN = ZTERMIN - F_DAYOFMONTH(ZTERMIN);
    ZAHLZIEL = ZTERMIN - DATUM;
    PROZENT = :RSKONTO;
    
  END
  ELSE
  BEGIN
    ZTERMIN = DATUM + ZAHLZIEL;
  END
  SUSPEND;
END^

SET TERM ; ^

DESCRIBE PROCEDURE P_REP_BRRC_ZAHBE
'Ausdruck: Zahlungstermin in Rechnungsausdruck bestimmen';

GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_REP_BRRC_ZAHBE;

GRANT SELECT ON BZAHBE TO PROCEDURE P_REP_BRRC_ZAHBE;

GRANT EXECUTE ON PROCEDURE P_REP_BRRC_ZAHBE TO PROCEDURE P_REP_BRRC;
GRANT EXECUTE ON PROCEDURE P_REP_BRRC_ZAHBE TO PROCEDURE P_REP_ZAHBE;
GRANT EXECUTE ON PROCEDURE P_REP_BRRC_ZAHBE TO "PUBLIC";
GRANT EXECUTE ON PROCEDURE P_REP_BRRC_ZAHBE TO SYSDBA;

und die Prozedur "P_REP_ZAHBE" vollständig überarbeitet:

Code: Alles auswählen

SET TERM ^ ;

create or alter procedure P_REP_ZAHBE (
    ID integer,
    WOHER varchar(10))
returns (
    MYZAHLBEDINGUNG varchar(1000),
    WELCHE smallint,
    ZAHLZIEL integer)
as
declare variable NSPRACHE integer;
declare variable BZAHBE_ID1 integer;
declare variable BZAHBE_ID2 integer;
declare variable BZAHBE_ID3 integer;
declare variable BZAHBE_ID4 integer;
declare variable MONATANZAHL integer; /* Für Industriezahlbed. */
declare variable RF_TAG integer; /* Für Industriezahlbed. */
declare variable BEZ varchar(200);
declare variable WAER varchar(15);
declare variable MYDATUM date;
declare variable KURSDF numeric(15,6);
declare variable MYDAYS varchar(20);
declare variable MYDAY varchar(20);
declare variable MIT varchar(20);
declare variable SKONTO varchar(20);
declare variable BISZUM varchar(20); /* Neu 01.02.2010 - KTS */
declare variable INNERHALB varchar(20); /* Neu 01.02.2010 - KTS */
declare variable REINNETTO varchar(20);
declare variable MYDAYS_RETURN varchar(254);
declare variable MYDAY_RETURN varchar(254);
declare variable MIT_RETURN varchar(254);
declare variable SKONTO_RETURN varchar(254);
declare variable BISZUM_RETURN varchar(254); /* Neu 01.02.2010 - KTS */
declare variable INNERHALB_RETURN varchar(254);
declare variable REINNETTO_RETURN varchar(254); /* Neu 01.02.2010 - KTS */
declare variable MYSKONTO numeric(15,2);
declare variable MYSKONTODIFF numeric(15,2); /* Neu 01.02.2010 - KTS */
declare variable MYSKONTOBETRAG numeric(15,2);
declare variable GESAMT numeric(15,2);
declare variable MYBEZ varchar(200);
declare variable KOMMENTAR varchar(100);
declare variable POS1 integer;
declare variable ENDE integer;
declare variable SYN_KUNDE varchar(40);
declare variable BETRAG_HW numeric(15,2);
declare variable NMWST_HW numeric(15,2);
BEGIN
  /* Letzter Stand 14.07.2009 10:32:48 MG */
  /* Erster Stand 03.08.2008 10:08:03 MG */
  /* Protokollieren, dass Aktion hier durchgelaufen ist */
  IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
    INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_REP_ZAHBE');

  /* Zahlungsbedingungen im Ausdruck übersetzen */
  /* Bezeichnung aus Zahlungsbedingungen wird zurückgegeben */
  /* mit @D@  -> wird das Zahlziel eingebaut */
  /* mit @S@  -> wird das Skonto eingebaut */
  /* mit @DD@ -> wird das Zahlziel (Datum) eingebaut */

  /* WICHTIG: Die beiden Datumswerte müssen jeweils in den Ausdrucken in das
              entsprechende Format umgewandelt werden */

  MyZahlbedingung = '';
  KURSDF = 1;

  -- Kundenspezifisch
  SELECT F_LRTRIM(A.SYNERPY_KUNR)
  FROM BFIRMA A
  INTO :SYN_KUNDE;

  IF (SYN_KUNDE IS NULL) THEN SYN_KUNDE = '';

  IF (ID IS NULL) THEN EXIT;
  ELSE
  BEGIN
    IF (WOHER = 'BRRC') THEN
      -- Gesamt-GESAMT 
      SELECT (X.GESAMT + X.MWST),
             X.BZAHBE_ID_ZAHLBED1K, X.BZAHBE_ID_ZAHLBED2K,
             X.BZAHBE_ID_ZAHLBED3K, X.BZAHBE_ID_ZAHLBED4K,
             Z.A_SPRACHE_ID, X.KURSDF, W.MASKENKEY, X.ZAHLBARAB
      FROM BRRC X
      LEFT OUTER JOIN BADR Y ON X.BADR_ID_RADRCODE = Y.ID
      LEFT OUTER JOIN BSPRA Z ON Y.BSPRA_ID_DRUSPRA = Z.ID
      LEFT OUTER JOIN BWAER W ON X.BWAER_ID_WAEHRUNGK = W.ID
      WHERE X.ID = :ID AND
            NULLIF('G', X.GUTSCHRART) = 'G' -- keine Zahlungsbedingung auf Gutschrift
      INTO :GESAMT, :BZAHBE_ID1, :BZAHBE_ID2, :BZAHBE_ID3, :BZAHBE_ID4, :NSPRACHE,
           :KURSDF, :WAER, :MYDATUM;
    ELSE IF (WOHER = 'BAUF') THEN
    BEGIN
      FOR SELECT A.BETRAG_HW
      FROM P_REP_BAUF_MWST(:ID) A
      INTO :BETRAG_HW
      DO
        nMWST_HW = nMWST_HW + BETRAG_HW;

      SELECT A.BZAHBE_ID_ZAHLBED1K, A.BZAHBE_ID_ZAHLBED2K,
             A.BZAHBE_ID_ZAHLBED3K, A.BZAHBE_ID_ZAHLBED4K, A.KLTERMIN,
             (A.GESAMT + :nMWST_HW),
             D.A_SPRACHE_ID
      FROM BAUF A
      LEFT OUTER JOIN BKUNDE B ON A.BKUNDE_ID_KUNR = B.ID
      LEFT OUTER JOIN BADR C ON B.BADR_ID_ADRNR = C.ID
      LEFT OUTER JOIN BSPRA D ON C.BSPRA_ID_DRUSPRA = D.ID
      LEFT OUTER JOIN BWAER E ON A.BWAER_ID_WAEHRUNGK = E.ID
      WHERE A.ID = :ID
      INTO :BZAHBE_ID1, :BZAHBE_ID2, :BZAHBE_ID3, :BZAHBE_ID4,
           :MyDATUM, :GESAMT, :NSPRACHE;
    END
    ELSE IF (WOHER = 'BBES') THEN
      SELECT A.BZAHBE_ID_ZAHL1K, A.BZAHBE_ID_ZAHL2K, A.BZAHBE_ID_ZAHL3K,
             A.BZAHBE_ID_ZAHL4K, A.BESTDATUM, A.GESAMT, D.A_SPRACHE_ID
      FROM BBES A
      LEFT OUTER JOIN BLIEF B ON A.BLIEF_ID_LIEFNR = B.ID
      LEFT OUTER JOIN BADR C ON B.BADR_ID_ADRNR = C.ID
      LEFT OUTER JOIN BSPRA D ON C.BSPRA_ID_DRUSPRA = D.ID
      WHERE A.ID = :ID
      INTO :BZAHBE_ID1, :BZAHBE_ID2, :BZAHBE_ID3, :BZAHBE_ID4,
           :MyDATUM, :GESAMT, :NSPRACHE;
      
    IF (MYDATUM IS NULL) THEN
      MYDATUM = CURRENT_DATE;

    -- Sprach_ID
    IF (NSPRACHE IS NULL) THEN
    BEGIN
      SELECT A_SPRACHE_ID
      FROM A_USER
      WHERE MASKENKEY = USER
      INTO :NSPRACHE;

      IF (NSPRACHE IS NULL) THEN NSPRACHE = 3;
    END
  
    -- Übersetzungen
    -- Tagen
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_Tagen','Tagen')
    RETURNING_VALUES(:MyDays_return);
    -- Tag
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_Tag','Tag')
    RETURNING_VALUES(:MyDay_return);
    -- mit
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_Mit','mit')
    RETURNING_VALUES(:Mit_return);
    -- Skonto
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_Skonto','Skonto')
    RETURNING_VALUES(:SKONTO_return);
    -- bis zum
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_BISZUM','bis zum')
    RETURNING_VALUES(:BISZUM_return);
    -- innerhalb
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'LB_INNERHALB','innerhalb')
    RETURNING_VALUES(:INNERHALB_return);
    -- rein netto
    EXECUTE PROCEDURE P_SMREPORTLABEL(:NSPRACHE,'REIN NETTO','rein netto')
    RETURNING_VALUES(:REINNETTO_return);


  
    MyDays = F_LEFT(MyDays_return, 20);
    MyDay = F_LEFT(MyDay_return, 20);
    Mit = F_LEFT(Mit_return, 20);
    SKONTO = F_LEFT(SKONTO_return, 20);
    BISZUM = F_LEFT(BISZUM_return,20);
    INNERHALB = F_LEFT(INNERHALB_return, 20);
    REINNETTO = F_LEFT(REINNETTO_return,20);

    IF ((KURSDF = 0) OR (KURSDF IS NULL)) THEN KURSDF = 1;

    -- Zahlbedingung 1 
    IF(BZAHBE_ID1 IS NOT NULL) THEN
    BEGIN
      SELECT C.TRANS, B.PROZENT, B.ZAHLZIEL, B.MONATANZAHL, A.RF_TAG
      FROM BZAHBE A
      LEFT OUTER JOIN P_REP_BRRC_ZAHBE(:MYDATUM,:BZAHBE_ID1) B ON A.ID = A.ID
      LEFT OUTER JOIN P_SMREPORTLABEL(:NSPRACHE,A.BEZ,A.BEZ) C ON A.ID = A.ID
      WHERE A.ID = :BZAHBE_ID1
      INTO :BEZ, :MYSKONTO, :ZAHLZIEL, :MONATANZAHL, :RF_TAG;

      BEZ = F_REPLACESTRING(BEZ,'@d@','@D@',1,0);
      BEZ = F_REPLACESTRING(BEZ,'@s@','@S@',1,0);
      -- Übersetzung nur in Rechnung
      IF (WOHER = 'BRRC') THEN
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','@DD@',1,0);
      END
      ELSE
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','',1,0);
      END

      IF ((BEZ CONTAINING '@D@') OR (BEZ CONTAINING '@S@') OR
          (BEZ CONTAINING '@DD@')) THEN

      BEGIN
        -- eventuellen Kommentar entfernen
        Pos1 = F_SUBSTR('!',:BEZ);
        Ende = F_STRINGLENGTH(:BEZ);
        Kommentar = F_COPY(:BEZ,Pos1,Ende);
        IF (Pos1 >= 0) THEN
          BEZ = F_REPLACESTRING(:BEZ,:Kommentar,'',1,0);

        -- wenn irgendwo "innerhalb" oder "zum" enthalten ist aber kein Datum 
        IF (((F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(BISZUM)) OR
             (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB))) AND
             (F_ANSIUPPERCASE(BEZ) NOT CONTAINING '@D@') AND (SYN_KUNDE <> 'AR03')) THEN
        BEGIN
          BEZ = F_REPLACESTRING(BEZ,BISZUM,'',1,0);
          BEZ = F_REPLACESTRING(BEZ,INNERHALB,'',1,0);
        END
  
        IF (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(MIT)) THEN
          BEZ = F_REPLACESTRING(BEZ,MIT,'',1,0);

        -- Datum (bis zum DATE)
        IF (BEZ CONTAINING '@DD@') THEN
        -- Für Auftragsbestätigung und Bestellung nur Zahlungsbedingungen angeben. 18.01.2010 - KTS
         IF ((WOHER = 'BAUF') OR (WOHER = 'BBES')) THEN
          BEGIN
           IF (MONATANZAHL = 1) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des Folgemonats',1,0);
           ELSE IF (MONATANZAHL = 2) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des uebern. Monats',1,0);
           ELSE
           MyBez = F_REPLACESTRING(BEZ, '@DD@',INNERHALB || ' ' || '@D@',1,0);
          END
         ELSE
          MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || '&DATE?',1,0);
  
        IF ((MyBEZ IS NULL) OR (MyBEZ = '')) THEN MyBEZ = BEZ;
        -- Skonto einsetzen
        IF (MYSKONTO = '0') THEN
         MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',REINNETTO,1,0);
        
        IF (WOHER = 'BRRC') THEN
        BEGIN
          MYSKONTODIFF = (GESAMT * MySKONTO / 100);
          MySKONTOBETRAG = GESAMT - MYSKONTODIFF;
          IF (KURSDF <> 0) THEN
          MYSKONTODIFF = MYSKONTODIFF * KURSDF;
          MySKONTOBETRAG = MySKONTOBETRAG * KURSDF;

          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO || ' (' || MYSKONTODIFF || ') ' ||
                                  ' = ' || MYSKONTOBETRAG || ' ' || WAER),1,0);
        END
        ELSE
          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO),1,0);

        IF (ZAHLZIEL = 1) THEN
        BEGIN
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAY),1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        ELSE IF (ZAHLZIEL > 1) THEN
          MyZahlbedingung = MyZahlbedingung ||  ' ' ||
                            F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAYS),1,0);
        ELSE IF (ZAHLZIEL = 0) THEN
        BEGIN
          IF (F_ANSIUPPERCASE(MyBEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,INNERHALB,BISZUM,1,0);
  
          IF (F_ANSIUPPERCASE(MyBEZ) NOT CONTAINING F_ANSIUPPERCASE(BISZUM)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(BISZUM || ' ' || '#DATE*'),1,0);
  
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@','#DATE*',1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        WELCHE = 1;
        IF (MYZAHLBEDINGUNG IS NOT NULL AND MYZAHLBEDINGUNG <> '') THEN
          SUSPEND;
        MyBEZ = '';
        MyZahlbedingung = '';
      END
      ELSE
      BEGIN
        MYZAHLBEDINGUNG = BEZ;
        SUSPEND;
        MYZAHLBEDINGUNG = '';
      END
    END

    -- Zahlbedingung 2 
    IF (BZAHBE_ID2 IS NOT NULL) THEN
    BEGIN
      SELECT C.TRANS, B.PROZENT, B.ZAHLZIEL, B.MONATANZAHL, A.RF_TAG
      FROM BZAHBE A
      LEFT OUTER JOIN P_REP_BRRC_ZAHBE(:MYDATUM,:BZAHBE_ID2) B ON A.ID = A.ID
      LEFT OUTER JOIN P_SMREPORTLABEL(:NSPRACHE,A.BEZ,A.BEZ) C ON A.ID = A.ID
      WHERE A.ID = :BZAHBE_ID2
      INTO :BEZ, :MYSKONTO, :ZAHLZIEL, :MONATANZAHL, :RF_TAG;

      BEZ = F_REPLACESTRING(BEZ,'@d@','@D@',1,0);
      BEZ = F_REPLACESTRING(BEZ,'@s@','@S@',1,0);
      -- Übersetzung nur in Rechnung
      IF (WOHER = 'BRRC') THEN
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','@DD@',1,0);
      END
      ELSE
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','',1,0);
      END

      IF ((BEZ CONTAINING '@D@') OR (BEZ CONTAINING '@S@') OR
          (BEZ CONTAINING '@DD@')) THEN
      BEGIN
        -- eventuellen Kommentar entfernen 
        Pos1 = F_SUBSTR('!',:BEZ);
        Ende = F_STRINGLENGTH(:BEZ);
        Kommentar = F_COPY(:BEZ,Pos1,Ende);
        IF (Pos1 >= 0) THEN
          BEZ = F_REPLACESTRING(:BEZ,:Kommentar,'',1,0);
  
        -- wenn irgendwo "innerhalb" oder "zum" enthalten ist aber kein Datum 
        IF (((F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(BISZUM)) OR
             (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB))) AND
             (F_ANSIUPPERCASE(BEZ) NOT CONTAINING '@D@') AND (SYN_KUNDE <> 'AR03')) THEN
        BEGIN
          BEZ = F_REPLACESTRING(BEZ,BISZUM,'',1,0);
          BEZ = F_REPLACESTRING(BEZ,INNERHALB,'',1,0);
        END
  

        IF (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(MIT)) THEN
          BEZ = F_REPLACESTRING(BEZ,MIT,'',1,0);

        -- Datum (bis zum DATE)
        IF (BEZ CONTAINING '@DD@') THEN
        -- Für Auftragsbestätigung und Bestellung nur Zahlungsbedingungen angeben. 18.01.2010 - KTS
         IF ((WOHER = 'BAUF') OR (WOHER = 'BBES')) THEN
          BEGIN
           IF (MONATANZAHL = 1) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des Folgemonats',1,0);
           ELSE IF (MONATANZAHL = 2) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des uebern. Monats',1,0);
           ELSE
           MyBez = F_REPLACESTRING(BEZ, '@DD@',INNERHALB || ' ' || '@D@',1,0);
          END
         ELSE
          MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || '&DATE?',1,0);
  
        IF ((MyBEZ IS NULL) OR (MyBEZ = '')) THEN MyBEZ = BEZ;
        -- Skonto einsetzen
        IF (MYSKONTO = '0') THEN
         MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',REINNETTO,1,0);
         
        IF (WOHER = 'BRRC') THEN
        BEGIN
          MYSKONTODIFF = (GESAMT * MySKONTO / 100);
          MySKONTOBETRAG = GESAMT - MYSKONTODIFF;
          IF (KURSDF <> 0) THEN
          MYSKONTODIFF = MYSKONTODIFF * KURSDF;
          MySKONTOBETRAG = MySKONTOBETRAG * KURSDF;

          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO || ' (' || MYSKONTODIFF || ') ' ||
                                  ' = ' || MYSKONTOBETRAG || ' ' || WAER),1,0);
        END
        ELSE
          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO),1,0);

        IF (ZAHLZIEL = 1) THEN
        BEGIN
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAY),1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        ELSE IF (ZAHLZIEL > 1) THEN
          MyZahlbedingung = MyZahlbedingung ||  ' ' ||
                            F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAYS),1,0);
        ELSE IF (ZAHLZIEL = 0) THEN
        BEGIN
          IF (F_ANSIUPPERCASE(MyBEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,INNERHALB,BISZUM,1,0);
  
          IF (F_ANSIUPPERCASE(MyBEZ) NOT CONTAINING F_ANSIUPPERCASE(BISZUM)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(BISZUM || ' ' || '#DATE*'),1,0);
  
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@','#DATE*',1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        WELCHE = 2;
        IF (MYZAHLBEDINGUNG IS NOT NULL AND MYZAHLBEDINGUNG <> '') THEN
          SUSPEND;
        MyBEZ = '';
        MyZahlbedingung = '';
      END
      ELSE
      BEGIN
        MYZAHLBEDINGUNG = BEZ;
        SUSPEND;
        MYZAHLBEDINGUNG = '';
      END
    END

    -- Zahlbedingung 3 
    IF (BZAHBE_ID3 IS NOT NULL) THEN
    BEGIN
      SELECT C.TRANS, B.PROZENT, B.ZAHLZIEL, B.MONATANZAHL, A.RF_TAG -- Für Industriezahlbed.
      FROM BZAHBE A
      LEFT OUTER JOIN P_REP_BRRC_ZAHBE(:MYDATUM,:BZAHBE_ID3) B ON A.ID = A.ID
      LEFT OUTER JOIN P_SMREPORTLABEL(:NSPRACHE,A.BEZ,A.BEZ) C ON A.ID = A.ID
      WHERE A.ID = :BZAHBE_ID3
      INTO :BEZ, :MYSKONTO, :ZAHLZIEL, :MONATANZAHL, :RF_TAG; -- Für Industriezahlbed.

      BEZ = F_REPLACESTRING(BEZ,'@d@','@D@',1,0);
      BEZ = F_REPLACESTRING(BEZ,'@s@','@S@',1,0);
      -- Übersetzung nur in Rechnung
      IF (WOHER = 'BRRC') THEN
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','@DD@',1,0);
      END
      ELSE
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','',1,0);
      END

      IF ((BEZ CONTAINING '@D@') OR (BEZ CONTAINING '@S@') OR
          (BEZ CONTAINING '@DD@')) THEN
      BEGIN
        -- eventuellen Kommentar entfernen 
        Pos1 = F_SUBSTR('!',:BEZ);
        Ende = F_STRINGLENGTH(:BEZ);
        Kommentar = F_COPY(:BEZ,Pos1,Ende);
        IF (Pos1 >= 0) THEN
          BEZ = F_REPLACESTRING(:BEZ,:Kommentar,'',1,0);
  
        -- wenn irgendwo "innerhalb" oder "zum" enthalten ist aber kein Datum 
        IF (((F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(BISZUM)) OR
             (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB))) AND
             (F_ANSIUPPERCASE(BEZ) NOT CONTAINING '@D@') AND (SYN_KUNDE <> 'AR03')) THEN
        BEGIN
          BEZ = F_REPLACESTRING(BEZ,BISZUM,'',1,0);
          BEZ = F_REPLACESTRING(BEZ,INNERHALB,'',1,0);
        END
  
        IF (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(MIT)) THEN
          BEZ = F_REPLACESTRING(BEZ,MIT,'',1,0);

        -- Datum (bis zum DATE)
        IF (BEZ CONTAINING '@DD@') THEN
        -- Für Auftragsbestätigung und Bestellung nur Zahlungsbedingungen angeben. 18.01.2010 - KTS
         IF ((WOHER = 'BAUF') OR (WOHER = 'BBES')) THEN
          BEGIN
           IF (MONATANZAHL = 1) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des Folgemonats',1,0);
           ELSE IF (MONATANZAHL = 2) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des uebern. Monats',1,0);
           ELSE
           MyBez = F_REPLACESTRING(BEZ, '@DD@',INNERHALB || ' ' || '@D@',1,0);
          END
         ELSE
          MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || '&DATE?',1,0);
  
        IF ((MyBEZ IS NULL) OR (MyBEZ = '')) THEN MyBEZ = BEZ;
        -- Skonto einsetzen 
        IF (MYSKONTO = '0') THEN
         MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',REINNETTO,1,0);
        
        IF (WOHER = 'BRRC') THEN
        BEGIN
          MYSKONTODIFF = (GESAMT * MySKONTO / 100);
          MySKONTOBETRAG = GESAMT - MYSKONTODIFF;
          IF (KURSDF <> 0) THEN
          MYSKONTODIFF = MYSKONTODIFF * KURSDF;
          MySKONTOBETRAG = MySKONTOBETRAG * KURSDF;

          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO || ' (' || MYSKONTODIFF || ') ' ||
                                  ' = ' || MYSKONTOBETRAG || ' ' || WAER),1,0);
        END
        ELSE
          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO),1,0);
        IF (ZAHLZIEL = 1) THEN
        BEGIN
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAY),1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        ELSE IF (ZAHLZIEL > 1) THEN
          MyZahlbedingung = MyZahlbedingung ||  ' ' ||
                            F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAYS),1,0);
        ELSE IF (ZAHLZIEL = 0) THEN
        BEGIN
          IF (F_ANSIUPPERCASE(MyBEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,INNERHALB,BISZUM,1,0);
  
          IF (F_ANSIUPPERCASE(MyBEZ) NOT CONTAINING F_ANSIUPPERCASE(BISZUM)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(BISZUM || ' ' || '#DATE*'),1,0);
  
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@','#DATE*',1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        WELCHE = 3;
        IF (MYZAHLBEDINGUNG IS NOT NULL AND MYZAHLBEDINGUNG <> '') THEN
          SUSPEND;
        MyBEZ = '';
        MyZahlbedingung = '';
      END
      ELSE
      BEGIN
        MYZAHLBEDINGUNG = BEZ;
        SUSPEND;
        MYZAHLBEDINGUNG = '';
      END
    END

    -- Zahlbedingung 4 
    IF (BZAHBE_ID4 IS NOT NULL) THEN
    BEGIN
      SELECT C.TRANS, B.PROZENT, B.ZAHLZIEL, B.MONATANZAHL, A.RF_TAG -- Für Industriezahlbed.
      FROM BZAHBE A
      LEFT OUTER JOIN P_REP_BRRC_ZAHBE(:MYDATUM,:BZAHBE_ID4) B ON A.ID = A.ID
      LEFT OUTER JOIN P_SMREPORTLABEL(:NSPRACHE,A.BEZ,A.BEZ) C ON A.ID = A.ID
      WHERE A.ID = :BZAHBE_ID4
      INTO :BEZ, :MYSKONTO, :ZAHLZIEL, :MONATANZAHL, :RF_TAG; -- Für Industriezahlbed.

      BEZ = F_REPLACESTRING(BEZ,'@d@','@D@',1,0);
      BEZ = F_REPLACESTRING(BEZ,'@s@','@S@',1,0);
      -- Übersetzung nur in Rechnung
      IF (WOHER = 'BRRC') THEN
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','@DD@',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','@DD@',1,0);
      END
      ELSE
      BEGIN
        BEZ = F_REPLACESTRING(BEZ,'@dd@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@dD@','',1,0);
        BEZ = F_REPLACESTRING(BEZ,'@Dd@','',1,0);
      END

      IF ((BEZ CONTAINING '@D@') OR (BEZ CONTAINING '@S@') OR
          (BEZ CONTAINING '@DD@')) THEN
      BEGIN
        -- eventuellen Kommentar entfernen 
        Pos1 = F_SUBSTR('!',:BEZ);
        Ende = F_STRINGLENGTH(:BEZ);
        Kommentar = F_COPY(:BEZ,Pos1,Ende);
        IF (Pos1 >= 0) THEN
          BEZ = F_REPLACESTRING(:BEZ,:Kommentar,'',1,0);
  
        -- wenn irgendwo "innerhalb" oder "zum" enthalten ist aber kein Datum 
        IF (((F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(BISZUM)) OR
             (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB))) AND
             (F_ANSIUPPERCASE(BEZ) NOT CONTAINING '@D@') AND (SYN_KUNDE <> 'AR03')) THEN
        BEGIN
          BEZ = F_REPLACESTRING(BEZ,BISZUM,'',1,0);
          BEZ = F_REPLACESTRING(BEZ,INNERHALB,'',1,0);
        END
  
        IF (F_ANSIUPPERCASE(BEZ) CONTAINING F_ANSIUPPERCASE(MIT)) THEN
          BEZ = F_REPLACESTRING(BEZ,MIT,'',1,0);

        -- Datum (bis zum DATE)
        IF (BEZ CONTAINING '@DD@') THEN
        -- Für Auftragsbestätigung und Bestellung nur Zahlungsbedingungen angeben. 18.01.2010 - KTS
         IF ((WOHER = 'BAUF') OR (WOHER = 'BBES')) THEN
          BEGIN
           IF (MONATANZAHL = 1) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des Folgemonats',1,0);
           ELSE IF (MONATANZAHL = 2) THEN
           MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || RF_TAG || '. des uebern. Monats',1,0);
           ELSE
           MyBez = F_REPLACESTRING(BEZ, '@DD@',INNERHALB || ' ' || '@D@',1,0);
          END
         ELSE
          MyBez = F_REPLACESTRING(BEZ, '@DD@', BISZUM || ' ' || '&DATE?',1,0);
  
        IF ((MyBEZ IS NULL) OR (MyBEZ = '')) THEN MyBEZ = BEZ;
        -- Skonto einsetzen 
        IF (MYSKONTO = '0') THEN
         MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',REINNETTO,1,0);
        
        IF (WOHER = 'BRRC') THEN
        BEGIN
          MYSKONTODIFF = (GESAMT * MySKONTO / 100);
          MySKONTOBETRAG = GESAMT - MYSKONTODIFF;
          IF (KURSDF <> 0) THEN
          MYSKONTODIFF = MYSKONTODIFF * KURSDF;
          MySKONTOBETRAG = MySKONTOBETRAG * KURSDF;

          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO || ' (' || MYSKONTODIFF || ') ' ||
                                  ' = ' || MYSKONTOBETRAG || ' ' || WAER),1,0);
        END
        ELSE
          MyBEZ = F_REPLACESTRING(MyBEZ,'@S@',
                                 (Mit || ' ' || MySkonto || '%' || ' ' || SKONTO),1,0);
        IF (ZAHLZIEL = 1) THEN
        BEGIN
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAY),1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        ELSE IF (ZAHLZIEL > 1) THEN
          MyZahlbedingung = MyZahlbedingung ||  ' ' ||
                            F_REPLACESTRING(MyBEZ,'@D@',(ZAHLZIEL || ' ' || MyDAYS),1,0);
        ELSE IF (ZAHLZIEL = 0) THEN
        BEGIN
          IF (F_ANSIUPPERCASE(MyBEZ) CONTAINING F_ANSIUPPERCASE(INNERHALB)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,INNERHALB,BISZUM,1,0);
  
          IF (F_ANSIUPPERCASE(MyBEZ) NOT CONTAINING F_ANSIUPPERCASE(BISZUM)) THEN
            MyBEZ = F_REPLACESTRING(MyBEZ,'@D@',(BISZUM || ' ' || '#DATE*'),1,0);
  
          MyBEZ = F_REPLACESTRING(MyBEZ,'@D@','#DATE*',1,0);
          MyZahlbedingung = MyZahlbedingung || ' ' || MyBEZ;
        END
        WELCHE = 4;
        IF (MYZAHLBEDINGUNG IS NOT NULL AND MYZAHLBEDINGUNG <> '') THEN
          SUSPEND;
        MyBEZ = '';
        MyZahlbedingung = '';
      END
      ELSE
      BEGIN
        MYZAHLBEDINGUNG = BEZ;
        SUSPEND;
        MYZAHLBEDINGUNG = '';
      END
    END
  END
END^

SET TERM ; ^

GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BFIRMA TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BRRC TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BADR TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BSPRA TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BWAER TO PROCEDURE P_REP_ZAHBE;

GRANT EXECUTE ON PROCEDURE P_REP_BAUF_MWST TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BAUF TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BKUNDE TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BBES TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BLIEF TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON A_USER TO PROCEDURE P_REP_ZAHBE;

GRANT EXECUTE ON PROCEDURE P_SMREPORTLABEL TO PROCEDURE P_REP_ZAHBE;

GRANT SELECT ON BZAHBE TO PROCEDURE P_REP_ZAHBE;

GRANT EXECUTE ON PROCEDURE P_REP_BRRC_ZAHBE TO PROCEDURE P_REP_ZAHBE;

GRANT EXECUTE ON PROCEDURE P_REP_ZAHBE TO "PUBLIC";
GRANT EXECUTE ON PROCEDURE P_REP_ZAHBE TO SYSDBA; 
!!!ACHTUNG!! Ist noch nicht auf die Version 2010 abgestimmt!!!

Für Verbesserungsvorschläge bin ich gerne offen.
Gruß
KTS

AvERP-Exe: 4.2.1.6
Datenbank: AvERP2009-A.01
_________________________
Suchen heißt finden und je mehr man sucht um so mehr findet man. ;-)
Antworten