AB- und Rechnungsdruck -> mehrere Serien-Nr. pro Zeile

Anfragen und Lösungen, die per SQL-Script zu lösen sind und von Anwendern entwickelt oder von Dienstleistern zur Verfügung gestellt wurden

Moderator: SYNERPY

Antworten
Geri12
Beiträge: 589
Registriert: Mi Apr 16, 2008 7:51 am

AB- und Rechnungsdruck -> mehrere Serien-Nr. pro Zeile

Beitrag von Geri12 » Do Aug 28, 2008 8:46 am

Hallo

Um beim Auftragsbestätigungs- und dem Rechnungsdruck immer 7 Seriennummern in einer Zeile anzudrucken, könnt Ihr im IBExpert die Stored Procedure P_REP_SERIENNR wie unten erweitern. Hierbei ist es natürlich kein Problem, die Anzahl der dargestellten Serien-Nr. auf Euere Bedürfnisse abzuändern. Einfach in dem Term (nZaehler = 7) die "7" entsprechend ersetzen. Getestet mit den Datenbankversionen AvERP2008-A.12 und A.14

(Zur besseren Erkennung habe ich alle Erweiterungen rot markiert.)
  • ***************************************************

    SET TERM ^ ;

    CREATE PROCEDURE P_REP_SERIENNR (
    BAUFPO_ID INTEGER)
    RETURNS (
    SERIENNUMMERN VARCHAR(30000))
    AS
    DECLARE VARIABLE MASKENKEY VARCHAR(40);
    DECLARE VARIABLE NZAEHLER INTEGER;
    BEGIN
    /* Letzter Stand 18.08.2008 09:23 Geri12 */

    /* LETZTER STAND 23.05.2008 09:03:31 HB */
    /* Protokollieren, dass Aktion hier durchgelaufen ist */
    IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
    INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_REP_SERIENNR');

    /* Liefert für Formulardruck Auftrag, Lieferschein, Rechnung die
    Seriennummern als String zurück */

    SERIENNUMMERN = '';
    IF (BAUFPO_ID IS NULL) THEN
    EXIT;

    nZaehler = 0;

    FOR SELECT MASKENKEY
    FROM BSSN
    WHERE BAUFPO_ID_AUFNRPOS = :BAUFPO_ID
    ORDER BY MASKENKEY
    INTO :MASKENKEY
    DO
    BEGIN

    IF ((SERIENNUMMERN <> '') and (nZaehler = 7)) THEN
    begin
    SERIENNUMMERN = SERIENNUMMERN || ', ' || F_CRLF();
    nZaehler = 0;
    end


    if (nZaehler > 0) then
    SERIENNUMMERN = SERIENNUMMERN || ', ';


    SERIENNUMMERN = SERIENNUMMERN || MASKENKEY;
    nZaehler = nZaehler + 1;

    END

    IF (SERIENNUMMERN <> '') THEN
    SUSPEND;
    END^

    SET TERM ; ^

    DESCRIBE PROCEDURE P_REP_SERIENNR
    'Ausdruck: Alle Serien-Nr. fuer 1 Auftr.Pos. als String zurueckliefern';

    GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_REP_SERIENNR;

    GRANT SELECT ON BSSN TO PROCEDURE P_REP_SERIENNR;

    GRANT EXECUTE ON PROCEDURE P_REP_SERIENNR TO "PUBLIC";
    GRANT EXECUTE ON PROCEDURE P_REP_SERIENNR TO SYSDBA;

    ***************************************************
Wegen der farbigen Markierung musste ich die Option LIST statt CODE verwenden. Dadurch und durch die Einfärbung wird natürlich die Formatierung verändert. Hier nochmals als formatierter CODE zum Kopieren ...

Code: Alles auswählen

SET TERM ^ ;

CREATE PROCEDURE P_REP_SERIENNR (
    BAUFPO_ID INTEGER)
RETURNS (
    SERIENNUMMERN VARCHAR(30000))
AS
DECLARE VARIABLE MASKENKEY VARCHAR(40);
DECLARE VARIABLE NZAEHLER INTEGER;
BEGIN
  /* Letzter Stand 18.08.2008 09:23 Geri12 */

  /* LETZTER STAND 23.05.2008 09:03:31 HB */
  /* Protokollieren, dass Aktion hier durchgelaufen ist */
  IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
    INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_REP_SERIENNR');

  /* Liefert für Formulardruck Auftrag, Lieferschein, Rechnung die
     Seriennummern als String zurück */

  SERIENNUMMERN = '';
  IF (BAUFPO_ID IS NULL) THEN
    EXIT;

  nZaehler = 0;

  FOR SELECT MASKENKEY
  FROM BSSN
  WHERE BAUFPO_ID_AUFNRPOS = :BAUFPO_ID
  ORDER BY MASKENKEY
  INTO :MASKENKEY
  DO
  BEGIN

    IF ((SERIENNUMMERN <> '') and (nZaehler = 7)) THEN
    begin
       SERIENNUMMERN = SERIENNUMMERN || ', ' || F_CRLF();
       nZaehler = 0;
    end

    if (nZaehler > 0) then
      SERIENNUMMERN = SERIENNUMMERN || ', ';

    SERIENNUMMERN = SERIENNUMMERN || MASKENKEY;
    nZaehler = nZaehler + 1;

  END

  IF (SERIENNUMMERN <> '') THEN
    SUSPEND;
END^

SET TERM ; ^

DESCRIBE PROCEDURE P_REP_SERIENNR
'Ausdruck: Alle Serien-Nr. fuer 1 Auftr.Pos. als String zurueckliefern';

GRANT INSERT ON A_WASMACHTIB TO PROCEDURE P_REP_SERIENNR;

GRANT SELECT ON BSSN TO PROCEDURE P_REP_SERIENNR;

GRANT EXECUTE ON PROCEDURE P_REP_SERIENNR TO "PUBLIC";
GRANT EXECUTE ON PROCEDURE P_REP_SERIENNR TO SYSDBA;
Viel Erfolg damit ...

[EDIT] Hier hatte ich leider Unsinn geschrieben mit meinem ursprünglichen Verweis auf den Lieferschein statt korrekterweise auf AB und Rechnung. Asche auf mein Haupt :roll:
Gruß
Geri12

Software-Version: V4.2.5.2
FDB-Version: AvERP2008-A.14

Antworten