Code: Alles auswählen.
REPORT RQQMRB01 .
************************************************************************
* Druckprogramm für ein Reklamationsschreiben in Qualitätsmeldungssystem
* *
* Standard FORMULAR ist ZQM_COMPLAIN *
*A.Schneider AII, 22.09.99 => AII-SCH
* *
************************************************************************
* 2011-04-11 SLU: Zusätzlich E-Mail selektieren
*$*$ D A T A S E C T I O N I N C L U D E S ---------------------*
************************************************************************
*zusätzliche Daten "aii-sch
TABLES: T024.
TABLES: EKKO,
pa0001,
pa0032.
data: h_qname like pa0001-sname,
h_qtel01(5).
********************Ende AII-SCH****************************************
INCLUDE ZIPRID01. " Enthält DATA und TABLE Anweisung
TABLES: LFA1, "Lieferantenadresse
SADR, "spez. Adresse
T001, "Absenderland
MEICO, "Einkaufsinfosatz
EINA, "Einkaufsinfosatz
T024E. "Einkaufsorganisationen
DATA: G_ANZAHL TYPE I.
DATA: BEGIN OF G_INDEX_TAB OCCURS 10.
INCLUDE STRUCTURE TOA_DARA.
DATA: END OF G_INDEX_TAB.
DATA: BEGIN OF G_PARAMS_TAB OCCURS 10.
INCLUDE STRUCTURE ARC_PARAMS.
DATA: END OF G_PARAMS_TAB.
* 2011-04-11 SLU
TABLES: adr6.
DATA: email like adr6-smtp_addr.
*------------------*
START-OF-SELECTION.
*------------------*
PERFORM PRINT_PAPER. "ABAP kann direkt oder über Formular auf-
"gerufen werden
*$*$ ................ M A I N F O R M .............................*
*... DATA STRUCTURE: ..................................................*
*... *
*... VIQMEL (QMEL ILOA und QMIH in einer View) Meldungskopf *
*... ! *
*... !-- WQMFE/WQMUR Fehlerposition *
*... ! ! *
*... !-- !-- WQMMA Aktionen zum Kopf/Fehler *
*... ! ! *
*... !-- !-- WQMSM Maßnahmen zum Kopf/Fehler *
*... *
*......................................................................*
*----------------------------------------------------------------------*
* FORM PRINT_PAPER *
*----------------------------------------------------------------------*
* Hauptform des Drucks *
* Alle Daten werden aus dem MEMORY importiert *
*----------------------------------------------------------------------*
* --> FORM Name des SAPSCRIPT *
* --> WWORKPAPER Druckoptionen für SAPSCRIPT. *
* --> DATA STRUCTURES Siehe Form DATA_IMPORT INCLUDE RIPRID01 *
*----------------------------------------------------------------------*
FORM PRINT_PAPER.
PERFORM DATA_IMPORT. " Siehe INCLUDE RIPRID01
PERFORM EXTRA_DATEN. "aii-sch
PERFORM ABSENDERLAND. " Absenderland ermitteln
PERFORM SENDER. " Anschrift ermitteln
PERFORM INFOSATZ. " Einkaufsinfosatz
PERFORM PARTNER " Sachbearbeiter
TABLES NOTIF_IHPAD_TAB. "
PERFORM READ_CATALOGUE_TABLES " Kontroll Tabellen des QM lesen
USING VIQMEL-QMART. "
PERFORM READ_VIEW_TEXT_TABLES. " Tabellen zu VIQMEL lesen
PERFORM MAIN_PRINT. " Brief-Druck
ENDFORM.
*$*$ MAIN PRINT SECTION CONTROLLED HERE................................
*... If you are making changes to Print ABAPS, (Naturally a copied
*... version) here is the place you can alter the logic and
*... and data supplied to the form. You should not alter logic
*... before this point if you wish it to operate successfully
*... with the standard transactions
*... However if you wish the PRINT LOG to work you must take
*... care to make sure the LOG records are written to PMPP.
*......................................................................
FORM MAIN_PRINT.
*... Es wird ein Schreiben gedruck, das dafür gedacht ist es als
*... Reklamationsbericht an den Lieferanten zu versenden
PERFORM LOCK_AND_SET " Enque and determine copy number
USING C_HEADER. " Overview logged at header level
PERFORM OPEN_FORM USING G_ARC_TYPE "archive type
VIQMEL-QMNUM "notif number as key
' '. " New form for each position
*... Variable PRINT_LANGUAGE setzen
PERFORM DEFINE_VARIABLE USING 'PRINT_LANGUAGE' PRINT_LANGUAGE.
PERFORM REPEAT. " Wiederholungsdruck
PERFORM TEXT1. " 1. Text des Hauptteils
*aii-sch: Daten für Infofenster Lieferant:
PERFORM PRINT_INFO3.
*ende aii-sch
*... um zu verhindern, das die folgenden Textelemente nicht aus-
*... einandergerissen werden
PERFORM SAPSCRIPT_COMMAND USING 'PROTECT'. "Nicht übersetzen
DESCRIBE TABLE IVIQMFE LINES G_ANZAHL.
IF G_ANZAHL GT 0.
PERFORM FINDINGS. " Überschrift für Fehlerliste
MOVE SPACE TO IVIQMFE.
LOOP AT IVIQMFE
WHERE KZLOESCH = SPACE. " deleted position.
*... drucke jeden Fehler
MOVE-CORRESPONDING IVIQMFE TO WQMFE.
*... die workarea für QMFE ist nun gefüllt (WQMFE)
IF SY-TABIX > 1.
PERFORM SKIP_AUSFUEHREN.
ENDIF.
IF NOT PRINT_LANGUAGE IS INITIAL.
break aii-sch.
PERFORM READ_CODE_TEXT USING TQ80-FEKAT
WQMFE-FEGRP
WQMFE-FECOD
WQMFE-FEVER
CHANGING WQMFE-TXTCDGR.
ENDIF.
*aii-sch: 23.05.2000: Kein Andruck der Fehlerpositionen
PERFORM DEFECTS. " Druckt die Fehler
*ende aii_sch.
ENDLOOP.
*aii-sch: 23.05.2000: Kein Andruck der Fehlerpositionen
PERFORM ULINE. " Unterstreichungslinie
ENDIF.
*... beenden des Seitenumbruchschutzes
PERFORM SAPSCRIPT_COMMAND USING 'ENDPROTECT'. "
*... um zu verhindern, das der Langtext und die Ulines nicht durch
*... einen Seitenumbruch auseinandergerissen werden
PERFORM SAPSCRIPT_COMMAND USING 'PROTECT'. "Nicht übersetzen
PERFORM REMARKS. " Langtext zur Q-Meldung
*... beenden des Seitenumbruchschutzes
PERFORM SAPSCRIPT_COMMAND USING 'ENDPROTECT'. "
PERFORM TEXT2. " 2. Text des Hauptteils
PERFORM TEXT3. " 3. Text des Hauptteils
PERFORM CLOSE_FORM. " Schließt das Formular
PERFORM UNLOCK_AND_LOG. " Dequeue and Log print
ENDFORM.
*$*$ F O R M R O U T I N E S -------------------------------------*
*... Spezielle Formroutinen
INCLUDE ZIPRIF01. " General PRINT routines
INCLUDE ZZPRIFQM. " Special QM routines
*.......................................................................
*$*$ G E N E R A L F O R M R O U T I N E S ....................*
*&---------------------------------------------------------------------*
*& Form FINDINGS
*&---------------------------------------------------------------------*
FORM FINDINGS.
CALL FUNCTION 'WRITE_FORM' " Druckt die Überschrift für den Befund
EXPORTING
ELEMENT = 'FINDINGS'
WINDOW = 'MAIN'.
ENDFORM. " FINDINGS
*&---------------------------------------------------------------------*
*& Form REMARKS
*&---------------------------------------------------------------------*
* Druck den Langtexdt der Q-Meldung *
*----------------------------------------------------------------------*
FORM REMARKS.
*... Langtext zum Meldungskopf
IF NOT VIQMEL-INDTX IS INITIAL. "gibt es überhaupt einen Langtext
CALL FUNCTION 'WRITE_FORM' " Druckt eine Überschrift zum Langtext
EXPORTING
ELEMENT = 'REMARKS'
WINDOW = 'MAIN'.
*... setzt den Textnamen zusammen
TEXT_OBJECT_NAME = VIQMEL-QMNUM.
CONDENSE TEXT_OBJECT_NAME NO-GAPS.
*... druckt den Langtext
PERFORM PRINT_LONGTEXT USING C_QMEL
TEXT_OBJECT_NAME
VIQMEL-KZMLA
LTXT_ID
C_MAIN
C_START_LINE_NR
C_LAST_LINE_NR
NO. "with underline around text
ENDIF.
ENDFORM. " BEMERKUNG
*&---------------------------------------------------------------------*
*& Form DEFECTS
*&---------------------------------------------------------------------*
* Listet die Fehlersätze auf *
*----------------------------------------------------------------------*
FORM DEFECTS.
PERFORM TEXTKEY_QMFE.
CALL FUNCTION 'WRITE_FORM' " Druckt eine Fehlerliste
EXPORTING
ELEMENT = 'DEFECTS'
WINDOW = 'MAIN'.
ENDFORM. " FEHLERLISTE
*&---------------------------------------------------------------------*
*& Form TEXT1
*&---------------------------------------------------------------------*
* Gibt einen Text aus *
*----------------------------------------------------------------------*
FORM TEXT1.
CALL FUNCTION 'WRITE_FORM' " Druckt einen Text
EXPORTING
ELEMENT = 'TEXT1'
WINDOW = 'MAIN'.
ENDFORM. " TEXT1
*&---------------------------------------------------------------------*
*& Form UNDERLINE
*&---------------------------------------------------------------------*
* Gibt eine ULINE aus *
*----------------------------------------------------------------------*
FORM UNDERLINE.
DATA: L_UNDERSCORE_STR(80) VALUE
'______________________________________________________________'.
WRITE L_UNDERSCORE_STR TO WIPRT-COLHD. " Underline
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'UNDERLINE'
WINDOW = 'MAIN'.
ENDFORM. " UNDERLINE
*&---------------------------------------------------------------------*
*& Form TEXT2
*&---------------------------------------------------------------------*
* Gibt einen Text aus *
*----------------------------------------------------------------------*
FORM TEXT2.
CALL FUNCTION 'WRITE_FORM' " Druckt einen Text
EXPORTING
ELEMENT = 'TEXT2'
WINDOW = 'MAIN'.
ENDFORM. " TEXT2
*&---------------------------------------------------------------------*
*& Form TEXTKEY_QMFE
*&---------------------------------------------------------------------*
* generiert den Textschlüssel für Positionen *
*----------------------------------------------------------------------*
FORM TEXTKEY_QMFE.
*... Langtext zur Position
*... Textschlüssel zusammen bauen
TEXT_OBJECT_NAME+0(12) = WQMFE-QMNUM.
TEXT_OBJECT_NAME+12(4) = WQMFE-FENUM.
CONDENSE TEXT_OBJECT_NAME NO-GAPS.
PERFORM DEFINE_VARIABLE USING 'TEXT_QMFE' TEXT_OBJECT_NAME.
ENDFORM. " TEXTKEY_QMFE
*&---------------------------------------------------------------------*
*& Form DEFINE_VARIABLE
*&---------------------------------------------------------------------*
* Textschlüssel ans Formular schicken *
*----------------------------------------------------------------------*
* --> P_NAME name of the DEFINE *
* --> P_CONTENT Value of the defined variable *
*----------------------------------------------------------------------*
FORM DEFINE_VARIABLE USING VALUE(P_NAME)
VALUE(P_CONTENT).
*
DATA: BEGIN OF COMMAND,
X1(8) VALUE 'DEFINE',
X2(30),
X3(3) VALUE ' = ',
X4 LIKE THEAD-TDNAME,
END OF COMMAND,
LENGTH TYPE I.
FIELD-SYMBOLS: <L_F>.
*
MOVE P_NAME TO COMMAND-X2.
SHIFT COMMAND-X2 RIGHT.
MOVE '&' TO COMMAND-X2(1).
LENGTH = STRLEN( COMMAND-X2 ).
ASSIGN COMMAND-X2+LENGTH(1) TO <L_F>.
MOVE '&' TO <L_F>.
*
MOVE P_CONTENT TO COMMAND-X4.
SHIFT COMMAND-X4 RIGHT.
MOVE '''' TO COMMAND-X4(1).
LENGTH = STRLEN( COMMAND-X4 ).
ASSIGN COMMAND-X4+LENGTH(1) TO <L_F>.
MOVE '''' TO <L_F>.
*
CALL FUNCTION 'CONTROL_FORM'
EXPORTING
COMMAND = COMMAND.
*
ENDFORM. " DEFINE_VARIABLE
*&---------------------------------------------------------------------*
*& Form ABSENDERLAND
*&---------------------------------------------------------------------*
* Absenderland ermitteln *
*----------------------------------------------------------------------*
FORM ABSENDERLAND.
SELECT SINGLE * FROM T024E WHERE EKORG EQ VIQMEL-EKORG.
SELECT SINGLE * FROM T001 WHERE BUKRS EQ T024E-BUKRS.
ENDFORM. " ABSENDERLAND
*&---------------------------------------------------------------------*
*& Form SENDER
*&---------------------------------------------------------------------*
* Absender ermittel *
*----------------------------------------------------------------------*
FORM SENDER.
IF VIQMEL-ADRNR IS INITIAL.
SELECT SINGLE * FROM LFA1 WHERE
LIFNR = VIQMEL-LIFNUM.
IF WWORKPAPER-PRINT_LANG IS INITIAL.
MOVE LFA1-SPRAS TO WWORKPAPER-PRINT_LANG.
ENDIF.
IF WWORKPAPER-TDTELENUM IS INITIAL.
MOVE LFA1-TELFX TO WWORKPAPER-TDTELENUM.
ENDIF.
ELSE.
CALL FUNCTION 'ADDRESS_GET_DATA'
EXPORTING
ENTRY_ADRNR = VIQMEL-ADRNR
IMPORTING
COMPANY_DATA = SADR.
IF WWORKPAPER-PRINT_LANG IS INITIAL.
MOVE SADR-SPRAS TO WWORKPAPER-PRINT_LANG.
ENDIF.
IF WWORKPAPER-TDTELENUM IS INITIAL.
MOVE SADR-TELFX TO WWORKPAPER-TDTELENUM.
ENDIF.
ENDIF.
ENDFORM. " SENDER
*&---------------------------------------------------------------------*
*& Form INFOSATZ
*&---------------------------------------------------------------------*
* Einkaufsinfosatz *
*----------------------------------------------------------------------*
FORM INFOSATZ.
MEICO-LIFNR = VIQMEL-LIFNUM.
MEICO-MATNR = VIQMEL-MATNR.
CALL FUNCTION 'ME_READ_INFORECORD'
EXPORTING
INCOM = MEICO
* INPREISSIM = ' '
IMPORTING
* daten =
EINADATEN = EINA
* einedaten =
* excom =
* expreissim =
EXCEPTIONS
BAD_COMIN = 1
BAD_MATERIAL = 2
BAD_MATERIALCLASS = 3
BAD_SUPPLIER = 4
NOT_FOUND = 5
OTHERS = 6.
ENDFORM. " INFOSATZ
*&---------------------------------------------------------------------*
*& Form TEXT3
*&---------------------------------------------------------------------*
* Gibt einen Text aus
*----------------------------------------------------------------------*
FORM TEXT3.
CALL FUNCTION 'WRITE_FORM' " Druckt einen Text
EXPORTING
ELEMENT = 'TEXT3'
WINDOW = 'MAIN'.
ENDFORM. " TEXT3
*&---------------------------------------------------------------------*
*& Form REPEAT
*&---------------------------------------------------------------------*
* Wiederholungsdruck *
*----------------------------------------------------------------------*
FORM REPEAT.
IF G_REPEAT GT 1.
CALL FUNCTION 'WRITE_FORM' " Druckt einen Text
EXPORTING
ELEMENT = 'REPEAT'
WINDOW = 'REPEAT'.
ENDIF.
ENDFORM. " REPEAT
*&---------------------------------------------------------------------*
*& Form SKIP_AUSFUEHREN
*&---------------------------------------------------------------------*
FORM SKIP_AUSFUEHREN.
CALL FUNCTION 'WRITE_FORM' " Druckt eine Leerzeile
EXPORTING
ELEMENT = 'SKIP'
WINDOW = 'MAIN'.
ENDFORM. " SKIP_AUSFUEHREN
*&---------------------------------------------------------------------*
*& Form PARTNER
*&---------------------------------------------------------------------*
* Sachbearbeiter ermitteln *
* das Programm ermittelt als verantwortlichen Sachbearbeiter den *
* Partner, der als erster die Partnerrolle besitzt, die in der Tabelle *
* TQ80 als Verantwortlicher angegeben ist *
*----------------------------------------------------------------------*
FORM PARTNER TABLES IHPAD_LOC STRUCTURE IHPAD.
*AII-SCH: Änderung Andruck Sachbearbeiter immer 'AUSSTELLER' (A1)
* loop at ihpad_loc "aii-sch
* where parvw = tq80-parvw_vera. "aii-sch
LOOP AT IHPAD_LOC "aii-sch neu
WHERE PARVW = 'A1' "aii-sch neu
AND KZLOESCH ne 'X'. "aii-feld,08.10.02
break aii-feld.
*ende aii-sch
IHPAD = IHPAD_LOC. " only can pass ddic fields to SAPSCRIPT
* Aii-sch, 07. Mai 2001 : Ansprechpartner Qualitätsprüfung
clear: h_qname, h_qtel01.
select single * from PA0001 where pernr = ihpad-parnr
* and endda ge sy-datum
* and begda le sy-datum.
and endda ge viqmel-erdat "Aii-feld,08.10.02
and begda le viqmel-erdat. "Aii-feld,08.10.02
if sy-subrc = 0.
move Pa0001-ename to h_qname.
endif.
select single * from Pa0032 where pernr = ihpad-parnr
* and endda ge sy-datum
* and begda le sy-datum.
and endda ge viqmel-erdat "Aii-feld,08.10.02
and begda le viqmel-erdat. "Aii-feld,08.10.02
if sy-subrc = 0.
move pa0032-tel01 to h_qtel01.
endif.
*ende aii-sch, 07.Mai 2001
EXIT.
ENDLOOP.
ENDFORM. " PARTNER
*&---------------------------------------------------------------------*
*& Form ULINE
*&---------------------------------------------------------------------*
* UNTERSTRICH *
*----------------------------------------------------------------------*
FORM ULINE.
CALL FUNCTION 'WRITE_FORM' " Druckt eine Leerzeile
EXPORTING
ELEMENT = 'ULINE'
WINDOW = 'MAIN'.
ENDFORM. " ULINE
*&---------------------------------------------------------------------*
*& Form EXTRA_DATEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXTRA_DATEN.
SELECT SINGLE * FROM EKKO WHERE EBELN = VIQMEL-ZZEBELN.
SELECT SINGLE * FROM T024 WHERE EKGRP EQ EKKO-EKGRP.
ENDFORM. " EXTRA_DATEN
*&---------------------------------------------------------------------*
*& Form PRINT_INFO3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINT_INFO3.
********************************** " geändert BW 12.06.2012 + Anfang
if viqmel-ADRNR is initial. " BW +
select single * from adr6 where addrnumber = viqmel-adrnr. " BW +
email = adr6-smtp_addr. " BW +
else. " BW +
********************************** " geändert BW 12.06.2012 + Ende
SELECT SINGLE * FROM LFA1 WHERE LIFNR = VIQMEL-LIFNUM.
* 2011-04-11 SLU Email
select single * from adr6 where addrnumber = lfa1-adrnr and
flgdefault = 'X'.
email = adr6-smtp_addr.
endif. " BW +
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'LIEFERANTENDATEN'
* FUNCTION = 'SET'
* TYPE = 'BODY'
WINDOW = 'INFO3'
* IMPORTING
* PENDING_LINES =
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
OTHERS = 7.
ENDFORM. " PRINT_INFO3
ich habe da eine Vermutung, siehe Zeile 566-567:Es hat sich trotz meiner Änderung nicht geändert. Hat jemand eine Ahnung wieso?
Code: Alles auswählen.
IF viqmel-adrnr IS INITIAL.
SELECT SINGLE * FROM adr6 WHERE addrnumber = viqmel-adrnr.
als Entwicklerwerkzeug ist es eigentlich unverzichtbar. Ich würde daher versuchen die Ursache dafür zu finden, dass es nicht funktioniert. Hast du z.B. die dafür notwendigen Berechtigungen?commolus hat geschrieben:Mein Problem ist mit dem Debugger dass ich ihn nicht starten kann. Habe sowohl externe als auch interne Breakpoints gesetzt komme aber leider nicht in den Debugger ( weder über das Programm direkt noch über das Formular).
ok, dann hast du es wirklich vertauscht. Ist aber eigentlich leicht zu merken: wenn das Feld viqmel-ADRNR befüllt ist --> ADRNR ist nicht leer --> ADRNR IS NOT INITIALcommolus hat geschrieben:Mein Ansatz war dieser wenn das Feld viqmel-ADRNR befüllt ist, nimm diesen Wert für die ADR6.
Wenn dieses Feld leer ist besorg dir diese Nummer aus den selects unterhalb der ELSE Anweisung.
Hmm, dieses Verflixte Initial
bist du sicher, dass das Programm an dieser Stelle überhaupt durchläuft? Passiert es nicht mal bei PERFORM print_paper?Berechtigungen habe ich alle. Ich habe schon aus Verzweiflung einen Breakpoint zu beginn des Programmes gesetzt damit, so war meine Hoffnung, er startet sobald das Formular aufgerufen wird. Aber leider NIX.
Wie startest du den Druck?commolus hat geschrieben:Nein leider. Weder ein Session.- noch ein externe Breakpoint wird angesprochen.
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
commolus
Code: Alles auswählen.
sy-subrc = 0.
WHILE sy-subrc EQ 0.
sy-subrc = 1. "<-- Nur dass hier überhaupt was abgearbeitet wird
sy-subrc = 0.
ENDWHILE.
und, hat SAP mit der Fehlermeldung Recht? Hast du nachgeschaut ob die Adressen 35062 bzw. 37044 in ADR6 vorhanden sind? ADR6 enthält nur Emailadressen, da muss nicht unbedingt zu jeder ADDRNUMBER ein Datensatz existieren!commolus hat geschrieben:Anstatt der Anzeige erscheint die Fehlermeldung: Addressnummer 37044 existiert nicht.