This is a module program for gate entry of materials(miro). This is a simple entry form which updates z tables with data entered. I have to send the new record details automatically through mail to the particular vendor email id from where the material has been purchased.
Problem: new entered data is saved but I am facing one error message --- no authorization to unpack list with rfc when the program is sending list through mail.
PROGRAM ZMMI001_GRN_ENTRY_BARCODE MESSAGE-ID ZMM .
*Table Declaration
TABLES : EKKO , EKPO , LFA1 , MARC ,
MARD , J_1IMTCHID , EKET , MSEG,
MKPF , ZMMT001_GRN_GATE,
ZMMT002_GRN_ITEM.
TABLES: ADR6.
*Table Control Declaration
CONTROLS : TC1 TYPE TABLEVIEW USING SCREEN 1000.
DATA: COLS LIKE LINE OF TC1-COLS.
*Internal Table Declaration
DATA : BEGIN OF IT_TC1 OCCURS 0,
SEL,
SNO(2) TYPE C,
ITEMCODE(18) TYPE C,
ITEMNAME(40) TYPE C,
QUANTITY TYPE P DECIMALS 2,
EXCISE(13) TYPE P DECIMALS 2,
END OF IT_TC1.
DATA : IT_TEMP_TC1 LIKE IT_TC1 OCCURS 0 WITH HEADER LINE.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA : IT_EKPO LIKE EKPO OCCURS 0 WITH HEADER LINE.
DATA : IT_EKKO LIKE EKKO OCCURS 0 WITH HEADER LINE.
DATA : IT_EKET LIKE EKET OCCURS 0 WITH HEADER LINE.
DATA : WK_ZMMT01 LIKE ZMMT001_GRN_GATE.
DATA : IT_ZMMT01 LIKE ZMMT001_GRN_GATE OCCURS 0 WITH HEADER LINE.
DATA : IT_ZMMT02 LIKE ZMMT002_GRN_ITEM OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF IT_TEMP_EKPO OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
END OF IT_TEMP_EKPO.
DATA : BEGIN OF IT_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
BWART LIKE MSEG-BWART,
MATNR LIKE MSEG-MATNR,
EBELN LIKE MSEG-EBELN,
EBELP LIKE MSEG-EBELP,
BUDAT LIKE MKPF-BUDAT,
MENGE LIKE MSEG-MENGE,
END OF IT_MSEG.
DATA : BEGIN OF IT_TEMP_MSEG OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
BWART LIKE MSEG-BWART,
EBELN LIKE MSEG-EBELN,
END OF IT_TEMP_MSEG.
DATA : BEGIN OF IT_TEMP_MKPF OCCURS 0,
MBLNR LIKE MKPF-MBLNR,
MJAHR LIKE MKPF-MJAHR,
BUDAT LIKE MKPF-BUDAT,
BKTXT LIKE MKPF-BKTXT,
END OF IT_TEMP_MKPF.
*Data Declaration
DATA : WK_SNO TYPE I,
WK_LIFNR LIKE LFA1-LIFNR,
WK_EBELN(10) TYPE C,
WK_VBELN(10) TYPE C,
WK_FKDAT TYPE D,
WK_NAME LIKE LFA1-NAME1,
WK_SCHNO(10) TYPE C,
WK_CHALNO(10) TYPE C,
WK_CHALDATE(10) TYPE C,
WK_GRNO(10) TYPE C,
WK_GRDATE(10) TYPE C,
WK_VEHICLE(10) TYPE C,
WK_CARRIER(10) TYPE C,
WK_FREIGHT(13) TYPE P DECIMALS 2,
WK_MDOC(3) TYPE C,
WK_DEPT(7) TYPE C,
WK_MODE(7) TYPE C,
WK_BASIC(13) TYPE P DECIMALS 2,
WK_EXCISE(13) TYPE P DECIMALS 2,
WK_TAX(13) TYPE P DECIMALS 2,
WK_APPVAL(13) TYPE P DECIMALS 2,
WK_CHAL(2) TYPE C,
WK_FORM38(9) TYPE C,
WK_COMMENT(30) TYPE C,
WK_MAKTX(40) TYPE C,
WK_LINES TYPE I,
WK_TOTAL LIKE MARD-LABST,
WK_LGORT LIKE MARD-LGORT,
WK_EXCISE_IND,
WK_TOT_EXCISE LIKE EKPO-NETWR,
WK_DIFF LIKE EKPO-NETWR,
WK_BSTYP LIKE EKKO-BSTYP,
WK_BSART LIKE EKKO-BSART,
WK_DIFF_QTY LIKE EKET-MENGE,
WK_101_QTY LIKE EKET-MENGE,
WK_102_QTY LIKE EKET-MENGE,
WK_122_QTY LIKE EKET-MENGE,
WK_WERKS LIKE EKPO-WERKS,
WK_CHAR_SNO TYPE STRING,
WK_DATE LIKE SY-DATUM,
WK_TIME LIKE SY-UZEIT.
DATA : WK_DATE1 LIKE SY-DATUM,
WK_DATE2 LIKE SY-DATUM,
WK_FISYEAR TYPE I,
WK_CHAR_YEAR(20) TYPE C.
DATA : V_UCOMM TYPE SY-UCOMM,
V_INDEX(10) TYPE C,
V_QUANTITY(8) TYPE C.
**DECLARATION FOR INPUT HELP*
TYPES : BEGIN OF VALUES,
TXZ01 LIKE EKPO-TXZ01,
MENGE LIKE EKPO-MENGE,
MATNR LIKE EKPO-MATNR,
END OF VALUES.
TYPES : BEGIN OF VALUES1,
EBELN LIKE EKKO-EBELN,
END OF VALUES1.
TYPES : BEGIN OF VALUES2,
NAME1 LIKE LFA1-NAME1,
LIFNR LIKE LFA1-LIFNR,
END OF VALUES2.
DATA: PROGNAME LIKE SY-REPID,
DYNNUM LIKE SY-DYNNR,
DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
VALUES_TAB TYPE TABLE OF VALUES WITH HEADER LINE,
VALUES_TAB1 TYPE TABLE OF VALUES1,
VALUE_EBELN TYPE TABLE OF VALUES1.
VALUES_TAB2 TYPE TABLE OF VALUES2.
DATA : VALUES_TAB2 TYPE VALUES2 OCCURS 0 WITH HEADER LINE.
DATA : RETURN_TAB LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE.
************************************************************************
*nidhi
************************************************************************
DATA: BEGIN OF IT_LFA1 OCCURS 0,
LIFNR LIKE LFA1-LIFNR,
ADRNR LIKE LFA1-ADRNR,
END OF IT_LFA1.
DATA: BEGIN OF IT_ADR6 OCCURS 0,
ADDRNUMBER TYPE ADR6-ADDRNUMBER,
SMTP_ADDR TYPE ADR6-SMTP_ADDR,
END OF IT_ADR6.
************************************************************************
*nidhi
************************************************************************
&----
*& Module FILL_TABLE_CONTROL OUTPUT
&----
text
----
MODULE FILL_TABLE_CONTROL OUTPUT.
READ TABLE IT_TEMP_TC1 INTO IT_TC1 INDEX TC1-CURRENT_LINE.
ENDMODULE. " FILL_TABLE_CONTROL OUTPUT
&----
*& Module READ_TABLE_CONTROL INPUT
&----
text
----
MODULE READ_TABLE_CONTROL INPUT.
*Validation for Item code
CLEAR : EKPO-MATNR,
EKPO-WERKS.
************************************************************************
********
IF sy-uname = 'GATE1020'.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR
SY-UNAME = 'ABAP' ).
**SELECT SINGLE bstyp FROM EKKO INTO WK_BSTYP WHERE ebeln = wk_ebeln.
**SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
**ELSE.
SELECT SINGLE MATNR WERKS
FROM EKPO CLIENT SPECIFIED
INTO (EKPO-MATNR , EKPO-WERKS )
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
MATNR EQ IT_TC1-ITEMCODE.
ENDIF.
IF SY-SUBRC NE 0 AND NOT IT_TC1-ITEMCODE IS INITIAL.
CLEAR it_tc1.
MESSAGE E003 WITH TEXT-002.
ELSE.
SELECT SINGLE MAKTX FROM MAKT
CLIENT SPECIFIED
INTO WK_MAKTX WHERE
MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND SPRAS = SY-LANGU.
ENDIF.
ENDIF.
**SELECT SINGLE bstyp FROM EKKO INTO WK_BSTYP WHERE ebeln = wk_ebeln.
**SELECT SINGLE bsart FROM EKKO INTO WK_BSART WHERE ebeln = wk_ebeln.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
IF WK_BSART = 'ZLR' .
Validation for Quantity.
IF NOT IT_TC1-QUANTITY IS INITIAL.
READ TABLE VALUES_TAB WITH KEY MATNR = IT_TC1-ITEMCODE.
IF SY-SUBRC EQ 0 AND IT_TC1-QUANTITY GT VALUES_TAB-MENGE.
MESSAGE E003 WITH TEXT-013.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*Validation for Max.Stock Level
CLEAR : MARC-MABST.
SELECT SINGLE MABST FROM MARC
CLIENT SPECIFIED
INTO MARC-MABST
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND
WERKS = EKPO-WERKS.
CLEAR : MARD-LABST ,
MARD-INSME .
***********************************************
SELECT SINGLE labst insme FROM mard
CLIENT SPECIFIED
INTO (mard-labst , mard-insme )
WHERE MANDT = SY-MANDT AND
matnr = it_tc1-itemcode
AND werks = ekpo-werks.
***********************************************
***********************************************
SELECT SUM( LABST ) SUM( INSME ) FROM MARD
CLIENT SPECIFIED
INTO (MARD-LABST , MARD-INSME )
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE
AND WERKS = EKPO-WERKS.
***********************************************
CLEAR : WK_TOTAL.
WK_TOTAL = MARD-LABST + MARD-INSME + IT_TC1-QUANTITY.
IF WK_BSART = 'ZLR'.
IF WK_TOTAL GT MARC-MABST.
MESSAGE E001 WITH IT_TC1-ITEMCODE.
ENDIF.
ENDIF.
Appending the table control data to Internal table
READ TABLE IT_TEMP_TC1 INDEX TC1-CURRENT_LINE.
IT_TC1-SNO = TC1-CURRENT_LINE.
IF SY-SUBRC EQ 0.
MODIFY IT_TEMP_TC1 FROM IT_TC1 INDEX TC1-CURRENT_LINE.
ELSE.
READ TABLE IT_TEMP_TC1 WITH KEY ITEMCODE = IT_TC1-ITEMCODE.
IF SY-SUBRC NE 0.
IT_TC1-ITEMNAME = WK_MAKTX.
IF IT_TC1-ITEMCODE IS INITIAL.
CLEAR IT_TC1.
ELSE.
APPEND IT_TC1 TO IT_TEMP_TC1.
ENDIF.
ELSE.
MESSAGE E003 WITH TEXT-004.
ENDIF.
ENDIF.
CLEAR : J_1IMTCHID-J_1ICAPIND.
SELECT SINGLE J_1ICAPIND FROM J_1IMTCHID
CLIENT SPECIFIED
INTO J_1IMTCHID-J_1ICAPIND
WHERE MANDT = SY-MANDT AND
MATNR = IT_TC1-ITEMCODE AND
WERKS = EKPO-WERKS.
IF SY-SUBRC EQ 0.
IF J_1IMTCHID-J_1ICAPIND = 'N'.
WK_EXCISE_IND = 'N'.
ELSE.
WK_EXCISE_IND = 'E'.
ENDIF.
ENDIF.
ENDMODULE. " READ_TABLE_CONTROL INPUT
&----
*& Module USER_COMMAND_1000 INPUT
&----
text
----
MODULE USER_COMMAND_1000 INPUT.
V_UCOMM = SY-UCOMM.
CASE V_UCOMM.
WHEN 'WK_SAVE'.
IF WK_APPVAL > 0.
IF ( SY-UNAME = 'STORE1010' OR SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR SY-UNAME = 'STORE1080' ).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = WK_VBELN
IMPORTING
OUTPUT = WK_VBELN.
SELECT * FROM EKKO INTO TABLE IT_EKKO WHERE EBELN = WK_EBELN
AND
LOEKZ NE 'X'.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKKO INDEX 1.
WK_BSTYP = IT_EKKO-BSTYP.
ENDIF.
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND LOEKZ NE 'X'.
SORT IT_EKPO BY EBELN EBELP.
IF WK_BSTYP = 'L'.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
SORT IT_EKET BY EBELN EBELP ETENR.
LOOP AT IT_EKPO.
CLEAR WK_DIFF_QTY.
LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
AND EBELP = IT_EKPO-EBELP
AND EINDT LE SY-DATUM.
WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE -
IT_EKET-WEMNG.
ENDLOOP.
IF WK_DIFF_QTY GT 0.
IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
APPEND IT_TEMP_EKPO.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF WK_BSTYP = 'F'.
SELECT * FROM EKET
CLIENT SPECIFIED
INTO TABLE IT_EKET
WHERE MANDT = SY-MANDT AND
EBELN = IT_EKPO-EBELN.
LOOP AT IT_EKPO.
CLEAR : WK_DIFF_QTY.
READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
EBELP = IT_EKPO-EBELP.
IF SY-SUBRC EQ 0.
WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
ENDIF.
IF WK_DIFF_QTY GT 0.
IT_TEMP_EKPO-EBELN = IT_EKET-EBELN.
IT_TEMP_EKPO-EBELP = IT_EKET-EBELP.
IT_TEMP_EKPO-MATNR = IT_EKPO-MATNR.
APPEND IT_TEMP_EKPO.
ENDIF.
ENDLOOP.
ENDIF.
SORT IT_TEMP_EKPO BY EBELN EBELP.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GODYNPRO-PO_NUMBER'.
PERFORM BDC_FIELD USING 'GODYNPRO-PO_NUMBER'
WK_EBELN.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
IF WK_EXCISE_IND = 'E'.
PERFORM BDC_FIELD USING 'J_1IEXHEAD-EXNUM'
WK_VBELN.
PERFORM BDC_FIELD USING 'J_1IEXHEAD-EXDAT'
WK_FKDAT.
PERFORM BDC_FIELD USING 'GOHEAD-LFSNR'
WK_VBELN.
ELSE.
PERFORM BDC_FIELD USING 'GOHEAD-LFSNR'
WK_VBELN.
ENDIF.
CLEAR : WK_CHAR_SNO.
WK_CHAR_SNO = WK_SNO.
CONDENSE WK_CHAR_SNO NO-GAPS.
PERFORM BDC_FIELD USING 'GOHEAD-BKTXT'
WK_CHAR_SNO.
LOOP AT IT_TEMP_TC1.
READ TABLE IT_TEMP_EKPO WITH KEY MATNR =
IT_TEMP_TC1-ITEMCODE.
IF SY-SUBRC EQ 0.
CLEAR V_INDEX.
V_INDEX = SY-TABIX.
CONDENSE V_INDEX NO-GAPS.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GODYNPRO-DETAIL_ZEILE'.
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE'
''.
PERFORM BDC_FIELD USING 'GODYNPRO-DETAIL_ZEILE'
V_INDEX.
PERFORM BDC_DYNPRO USING 'SAPLMIGO' '0001'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OK_GO'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'GOITEM-ERFMG'.
PERFORM BDC_FIELD USING 'GOITEM-ERFMG'
''.
CLEAR V_QUANTITY.
V_QUANTITY = IT_TEMP_TC1-QUANTITY.
CONDENSE V_QUANTITY NO-GAPS.
PERFORM BDC_FIELD USING 'GOITEM-ERFMG'
V_QUANTITY.
PERFORM BDC_FIELD USING 'GOITEM-LSMNG'
V_QUANTITY.
perform bdc_field using 'GOITEM-LGOBE'
WK_LGORT.
ENDIF.
ENDLOOP.
CALL TRANSACTION 'MIGO' USING BDCDATA
MODE 'E'
UPDATE 'L'.
IF SY-SUBRC NE 0.
MESSAGE E003 WITH TEXT-003.
LOOP AT SCREEN.
SCREEN-INPUT = 1.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
LEAVE PROGRAM.
ELSE.
************************************
CLEAR : WK_TOT_EXCISE.
IF NOT WK_EXCISE IS INITIAL.
LOOP AT IT_TEMP_TC1.
READ TABLE IT_EKPO WITH KEY MATNR = IT_TEMP_TC1-ITEMCODE.
IF SY-SUBRC EQ 0.
WK_TOT_EXCISE = WK_TOT_EXCISE +
( ( ( IT_EKPO-NETWR / IT_EKPO-MENGE ) * 16 / 100 )
IT_TEMP_TC1-QUANTITY ).
ENDIF.
ENDLOOP.
WK_DIFF = WK_EXCISE - WK_TOT_EXCISE.
IF WK_DIFF LE 0.
WK_DIFF = -1 * WK_DIFF.
ENDIF.
IF WK_DIFF GE 1.
WK_COMMENT = 'Difference in Excise. Please Check!'.
ENDIF.
ENDIF.
*****************************************************
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKPO INDEX 1.
WK_WERKS = IT_EKPO-WERKS.
ENDIF.
SELECT * FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
INTO TABLE IT_ZMMT01
WHERE MANDT = SY-MANDT AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
SORT IT_ZMMT01 BY SERIAL DESCENDING.
READ TABLE IT_ZMMT01 INDEX 1.
WK_SNO = IT_ZMMT01-SERIAL + 1.
ELSE.
WK_SNO = 1.
ENDIF.
CLEAR WK_ZMMT01.
WK_ZMMT01-MANDT = SY-MANDT.
WK_ZMMT01-SERIAL = WK_SNO.
WK_ZMMT01-WERKS = WK_WERKS.
WK_ZMMT01-EBELN = WK_EBELN.
WK_ZMMT01-LIFNR = WK_LIFNR.
WK_ZMMT01-CHALNO = WK_CHALNO.
WK_ZMMT01-CHALDATE = WK_CHALDATE.
WK_ZMMT01-BILLNO = WK_VBELN.
WK_ZMMT01-BILLDATE = WK_FKDAT.
WK_ZMMT01-GRNUMBER = WK_GRNO.
WK_ZMMT01-GRDATE = WK_GRDATE.
WK_ZMMT01-VEHICLE = WK_VEHICLE.
WK_ZMMT01-CARRIER = WK_CARRIER.
WK_ZMMT01-FREIGHT = WK_FREIGHT.
WK_ZMMT01-MDOC = WK_MDOC.
WK_ZMMT01-DEPT = WK_DEPT.
WK_ZMMT01-PAYMODE = WK_MODE.
WK_ZMMT01-BASIC = WK_BASIC.
WK_ZMMT01-EXCISE = WK_EXCISE.
WK_ZMMT01-TAXAMT = WK_TAX.
WK_ZMMT01-APPVAL = WK_APPVAL.
WK_ZMMT01-CHALINV = WK_CHAL.
WK_ZMMT01-FORM38 = WK_FORM38.
WK_ZMMT01-COMMENTS = WK_COMMENT.
WK_ZMMT01-CDATE = SY-DATUM.
WK_ZMMT01-CTIME = SY-UZEIT.
WK_ZMMT01-PERSON = SY-UNAME.
IF WK_FKDAT+4(2) = '04' OR
WK_FKDAT+4(2) = '05' OR
WK_FKDAT+4(2) = '06' OR
WK_FKDAT+4(2) = '07' OR
WK_FKDAT+4(2) = '08' OR
WK_FKDAT+4(2) = '09' OR
WK_FKDAT+4(2) = '10' OR
WK_FKDAT+4(2) = '11' OR
WK_FKDAT+4(2) = '12'.
WK_DATE10(4) = WK_FKDAT0(4).
WK_DATE1+4(2) = '04'.
WK_DATE1+6(2) = '01'.
ELSEIF
WK_FKDAT+4(2) = '01' OR
WK_FKDAT+4(2) = '02' OR
WK_FKDAT+4(2) = '03'.
WK_FISYEAR = WK_FKDAT+0(4).
WK_FISYEAR = WK_FISYEAR - 1.
WK_CHAR_YEAR = WK_FISYEAR.
CONDENSE WK_CHAR_YEAR NO-GAPS.
WK_DATE1+0(4) = WK_CHAR_YEAR.
WK_DATE1+4(2) = '04'.
WK_DATE1+6(2) = '01'.
ELSE.
ENDIF.
************************************************************************
nidhi
************************************************************************
SELECT LIFNR ADRNR FROM LFA1 INTO TABLE IT_LFA1 WHERE LIFNR =
WK_ZMMT01-LIFNR.
SELECT ADDRNUMBER SMTP_ADDR FROM ADR6 INTO TABLE IT_ADR6 FOR
ALL ENTRIES IN IT_LFA1 WHERE ADDRNUMBER = IT_LFA1-ADRNR.
************************************************************************
************************************************************************
SELECT SINGLE * FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
WHERE MANDT = SY-MANDT AND
WERKS = WK_WERKS AND
LIFNR = WK_LIFNR AND
BILLNO = WK_VBELN AND
BILLDATE GE WK_DATE1.
IF SY-SUBRC EQ 0.
MESSAGE E003 WITH TEXT-006.
ENDIF.
CLEAR IT_ZMMT02.
REFRESH IT_ZMMT02.
LOOP AT IT_TEMP_TC1.
IT_ZMMT02-MANDT = SY-MANDT.
IT_ZMMT02-SERIAL = WK_SNO.
IT_ZMMT02-WERKS = WK_WERKS.
IT_ZMMT02-EBELN = WK_EBELN.
IT_ZMMT02-ITEMCODE = IT_TEMP_TC1-ITEMCODE.
IT_ZMMT02-DESCRIPTION = IT_TEMP_TC1-ITEMNAME.
IT_ZMMT02-QUANTITY = IT_TEMP_TC1-QUANTITY.
IT_ZMMT02-EXCISE = IT_TEMP_TC1-EXCISE.
APPEND IT_ZMMT02.
CLEAR IT_ZMMT02.
ENDLOOP.
IF IT_ZMMT02[] IS INITIAL.
MESSAGE E003 WITH TEXT-007.
ENDIF.
IF SY-UNAME = 'GATE1010' AND WK_WERKS NE '1010'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1020' AND WK_WERKS NE '1020'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1030' AND WK_WERKS NE '1030'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1040' AND WK_WERKS NE '1040'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1050' AND WK_WERKS NE '1050'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1060' AND WK_WERKS NE '1060'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'ABAP' AND WK_WERKS NE 'ABAP'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1070' AND WK_WERKS NE '1070'.
MESSAGE E003 WITH TEXT-008.
ELSEIF SY-UNAME = 'GATE1080' AND WK_WERKS NE '1080'.
MESSAGE E003 WITH TEXT-008.
ENDIF.
INSERT ZMMT001_GRN_GATE FROM WK_ZMMT01.
INSERT ZMMT002_GRN_ITEM FROM TABLE IT_ZMMT02.
IF SY-SUBRC EQ 0.
COMMIT WORK.
MESSAGE I002 WITH WK_SNO.
************************************************************************
********nidhi*******************************************************
CALL SCREEN 1001.
**********************************************************************
CLEAR WK_LIFNR.
CLEAR WK_EBELN.
CLEAR WK_NAME.
CLEAR WK_SCHNO.
CLEAR WK_CHALNO.
CLEAR WK_CHALDATE.
CLEAR WK_VBELN.
CLEAR WK_FKDAT.
CLEAR WK_GRNO.
CLEAR WK_GRDATE.
CLEAR WK_VEHICLE.
CLEAR WK_CARRIER.
CLEAR WK_FREIGHT.
CLEAR WK_MDOC.
CLEAR WK_DEPT.
CLEAR WK_MODE.
CLEAR WK_BASIC.
CLEAR WK_EXCISE.
CLEAR WK_TAX.
CLEAR WK_APPVAL.
CLEAR WK_CHAL.
CLEAR WK_FORM38.
REFRESH IT_TEMP_TC1.
CLEAR WK_FISYEAR.
CLEAR WK_DATE1.
CLEAR WK_CHAR_YEAR.
CALL TRANSACTION 'ZMMI001'.
ELSE.
ROLLBACK WORK.
MESSAGE E003 WITH TEXT-006.
ENDIF.
ENDIF.
ELSE.
MESSAGE E009 WITH TEXT-014.
ENDIF.
WHEN 'WK_EXIT'.
WHEN 'WK_CLEAR'.
CLEAR WK_LIFNR.
CLEAR WK_EBELN.
CLEAR WK_NAME.
CLEAR WK_SCHNO.
CLEAR WK_CHALNO.
CLEAR WK_CHALDATE.
CLEAR WK_VBELN.
CLEAR WK_FKDAT.
CLEAR WK_GRNO.
CLEAR WK_GRDATE.
CLEAR WK_VEHICLE.
CLEAR WK_CARRIER.
CLEAR WK_FREIGHT.
CLEAR WK_MDOC.
CLEAR WK_DEPT.
CLEAR WK_MODE.
CLEAR WK_BASIC.
CLEAR WK_EXCISE.
CLEAR WK_TAX.
CLEAR WK_APPVAL.
CLEAR WK_CHAL.
CLEAR WK_FORM38.
REFRESH IT_TEMP_TC1 .
CLEAR WK_FISYEAR.
CLEAR WK_DATE1.
CLEAR WK_CHAR_YEAR.
WHEN 'DELETE'.
DELETE IT_TEMP_TC1 WHERE SEL = 'X'.
ENDCASE.
ENDMODULE. " USER_COMMAND_1000 INPUT
----
Start new screen *
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Module STATUS_1000 OUTPUT
&----
text
----
MODULE STATUS_1000 OUTPUT.
SET PF-STATUS 'GRN'.
SET TITLEBAR 'GRN'.
*
PROGNAME = SY-REPID.
DYNNUM = SY-DYNNR.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'IT_TC1-ITEMCODE'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'WK_EBELN'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'WK_LIFNR'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
LOOP AT SCREEN.
IF SCREEN-NAME NE 'WK_COMMENT'.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
LOOP AT SCREEN.
IF SCREEN-NAME = 'WK_SNO' OR
SCREEN-NAME = 'SNO' OR
SCREEN-NAME = 'WK_COMMENT' .
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 0.
SCREEN-INPUT = 0.
SCREEN-OUTPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
IF WK_LIFNR IS INITIAL.
SET CURSOR FIELD 'WK_LIFNR'.
ELSEIF WK_EBELN IS INITIAL.
SET CURSOR FIELD 'WK_EBELN'.
ELSEIF WK_VBELN IS INITIAL.
SET CURSOR FIELD 'WK_VBELN'.
ELSEIF WK_FKDAT IS INITIAL.
SET CURSOR FIELD 'WK_FKDAT'.
ENDIF.
ELSE.
IF NOT WK_SNO IS INITIAL.
IF SY-UNAME = 'STORE1010'.
WK_WERKS = '1010'.
ELSEIF SY-UNAME = 'STORE1020'.
WK_WERKS = '1020'.
ELSEIF SY-UNAME = 'STORE1030'.
WK_WERKS = '1030'.
ELSEIF SY-UNAME = 'STORE1040'.
WK_WERKS = '1040'.
ELSEIF SY-UNAME = 'STORE1050'.
WK_WERKS = '1050'.
ELSEIF SY-UNAME = 'STORE1060'.
WK_WERKS = '1060'.
ELSEIF SY-UNAME = 'STORE1070'.
WK_WERKS = '1070'.
ELSEIF SY-UNAME = 'STORE1080'.
WK_WERKS = '1080'.
ENDIF.
SELECT SINGLE * FROM ZMMT001_GRN_GATE INTO WK_ZMMT01
WHERE SERIAL = WK_SNO AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
WK_WERKS = WK_ZMMT01-WERKS.
WK_EBELN = WK_ZMMT01-EBELN.
WK_LIFNR = WK_ZMMT01-LIFNR.
WK_CHALNO = WK_ZMMT01-CHALNO.
WK_CHALDATE = WK_ZMMT01-CHALDATE.
WK_VBELN = WK_ZMMT01-BILLNO.
WK_FKDAT = WK_ZMMT01-BILLDATE.
WK_GRNO = WK_ZMMT01-GRNUMBER.
WK_GRDATE = WK_ZMMT01-GRDATE.
WK_VEHICLE = WK_ZMMT01-VEHICLE.
WK_CARRIER = WK_ZMMT01-CARRIER.
WK_FREIGHT = WK_ZMMT01-FREIGHT.
WK_MDOC = WK_ZMMT01-MDOC.
WK_DEPT = WK_ZMMT01-DEPT.
WK_MODE = WK_ZMMT01-PAYMODE.
WK_BASIC = WK_ZMMT01-BASIC.
WK_EXCISE = WK_ZMMT01-EXCISE.
WK_TAX = WK_ZMMT01-TAXAMT.
WK_APPVAL = WK_ZMMT01-APPVAL.
WK_CHAL = WK_ZMMT01-CHALINV.
WK_FORM38 = WK_ZMMT01-FORM38.
WK_COMMENT = WK_ZMMT01-COMMENTS.
SELECT * FROM ZMMT002_GRN_ITEM INTO TABLE IT_ZMMT02
WHERE SERIAL = WK_SNO AND
WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
CLEAR IT_TEMP_TC1.
REFRESH IT_TEMP_TC1.
LOOP AT IT_ZMMT02.
IT_TEMP_TC1-SNO = SY-TABIX.
IT_TEMP_TC1-ITEMCODE = IT_ZMMT02-ITEMCODE.
IT_TEMP_TC1-ITEMNAME = IT_ZMMT02-DESCRIPTION.
IT_TEMP_TC1-QUANTITY = IT_ZMMT02-QUANTITY.
APPEND IT_TEMP_TC1.
CLEAR IT_TEMP_TC1.
ENDLOOP.
ENDIF.
ENDIF.
LOOP AT SCREEN.
IF ( SCREEN-NAME NE 'WK_SNO' ) AND
( SCREEN-NAME NE 'WK_SAVE' ) AND
( SCREEN-NAME NE 'WK_CLEAR' ) AND
( SCREEN-NAME NE 'WK_EXIT' ).
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
LOOP AT TC1-COLS INTO COLS WHERE INDEX GT 0.
COLS-SCREEN-INPUT = '0'.
MODIFY TC1-COLS FROM COLS INDEX SY-TABIX.
ENDLOOP.
ENDIF.
ENDIF.
WK_DATE = SY-DATUM.
WK_TIME = SY-UZEIT.
TC1-LINES = 20.
ENDMODULE. " STATUS_1000 OUTPUT
&----
*& Module EXIT_1000 INPUT
&----
text
----
MODULE EXIT_1000 INPUT.
CASE SY-UCOMM.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT' OR 'WK_EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " EXIT_1000 INPUT
&----
*& Module ITEM_CODE INPUT
&----
text
----
MODULE ITEM_CODE INPUT.
REFRESH : VALUES_TAB.
CLEAR : VALUES_TAB.
IF ( SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1010' OR
SY-UNAME = 'GATE1030' OR
SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR
SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR
SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR
SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR
SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR
SY-UNAME = 'STORE1010' OR
SY-UNAME = 'ABAP' ).
SELECT * FROM EKKO CLIENT SPECIFIED
INTO TABLE IT_EKKO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
IF SY-SUBRC EQ 0.
READ TABLE IT_EKKO INDEX 1.
WK_BSTYP = IT_EKKO-BSTYP.
WK_BSART = IT_EKKO-BSART.
ENDIF.
if wk_bsart = 'ZLR'.
SELECT * FROM EKPO CLIENT SPECIFIED
INTO TABLE IT_EKPO WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
SORT IT_EKPO BY EBELN EBELP.
IF WK_BSTYP = 'L' AND WK_BSART = 'ZLR'.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC EQ 0.
SORT IT_EKET BY EBELN EBELP ETENR.
LOOP AT IT_EKPO.
CLEAR WK_DIFF_QTY.
LOOP AT IT_EKET WHERE EBELN = IT_EKPO-EBELN
AND EBELP = IT_EKPO-EBELP
AND EINDT LE SY-DATUM.
WK_DIFF_QTY = WK_DIFF_QTY + IT_EKET-MENGE - IT_EKET-WEMNG.
ENDLOOP.
IF WK_DIFF_QTY GT 0.
VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
VALUES_TAB-MENGE = WK_DIFF_QTY.
VALUES_TAB-MATNR = IT_EKPO-MATNR.
APPEND VALUES_TAB.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF WK_BSTYP = 'F'.
SELECT mseg~mblnr
mseg~mjahr
mseg~zeile
mseg~bwart
mseg~matnr
mseg~ebeln
mseg~ebelp
mkpf~budat
mseg~menge INTO TABLE it_mseg
FROM mkpf INNER JOIN mseg
ON mkpfmblnr EQ msegmblnr
AND mkpfmjahr EQ msegmjahr
FOR ALL entries IN it_ekpo
WHERE bwart IN ('101','122','102')
AND werks = it_ekpo-werks
AND ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.
SELECT * FROM EKET CLIENT SPECIFIED
INTO TABLE IT_EKET
WHERE MANDT = SY-MANDT AND
EBELN = IT_EKPO-EBELN.
LOOP AT IT_EKPO.
CLEAR : WK_DIFF_QTY.
wk_101_qty,
wk_102_qty,
wk_122_qty.
LOOP AT it_mseg WHERE ebeln = it_ekpo-ebeln AND
ebelp = it_ekpo-ebelp.
IF it_mseg-bwart = '101'.
wk_101_qty = wk_101_qty + it_mseg-menge.
ENDIF.
IF it_mseg-bwart = '102'.
wk_102_qty = wk_102_qty + it_mseg-menge.
ENDIF.
IF it_mseg-bwart = '122'.
wk_122_qty = wk_122_qty + it_mseg-menge.
ENDIF.
ENDLOOP.
if not it_mseg[] is initial.
wk_diff_qty = it_ekpo-menge - wk_101_qty
- wk_102_qty - wk_122_qty.
else.
wk_diff_qty = it_ekpo-menge.
endif.
READ TABLE IT_EKET WITH KEY EBELN = IT_EKPO-EBELN
EBELP = IT_EKPO-EBELP.
IF SY-SUBRC EQ 0.
WK_DIFF_QTY = IT_EKPO-MENGE - IT_EKET-WEMNG.
ENDIF.
IF wk_diff_qty LE it_ekpo-menge.
IF WK_DIFF_QTY GT 0.
VALUES_TAB-TXZ01 = IT_EKPO-TXZ01.
VALUES_TAB-MENGE = WK_DIFF_QTY.
VALUES_TAB-MATNR = IT_EKPO-MATNR.
APPEND VALUES_TAB.
ENDIF.
ENDLOOP.
ENDIF.
ELSE.
SELECT TXZ01
MATNR FROM EKPO CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
ENDIF.
ELSE.
SELECT TXZ01
MATNR FROM EKPO CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE MANDT = SY-MANDT AND
EBELN = WK_EBELN AND
LOEKZ NE 'X'.
ENDIF.
SORT VALUES_TAB BY TXZ01.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'IT_TC1-ITEMCODE'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'IT_TC1-ITEMCODE'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB
RETURN_TAB = RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
*BREAK-POINT.
IF SY-SUBRC = 0.
READ TABLE RETURN_TAB INDEX 1.
SELECT SINGLE MAKTX FROM MAKT CLIENT SPECIFIED
INTO WK_MAKTX WHERE
MANDT = SY-MANDT AND
MATNR = RETURN_TAB-FIELDVAL AND SPRAS = SY-LANGU.
ENDIF.
ENDMODULE. " ITEM_CODE INPUT
&----
*& Module CHECK_INPUT INPUT
&----
text
----
MODULE CHECK_INPUT INPUT.
CLEAR : EKKO-EBELN , EKKO-LIFNR.
SELECT SINGLE EBELN LIFNR FROM EKKO CLIENT SPECIFIED
INTO (EKKO-EBELN , EKKO-LIFNR ) WHERE
MANDT = SY-MANDT AND
EBELN = WK_EBELN.
IF SY-SUBRC NE 0 AND ( SY-UNAME = 'GATE1010' OR
SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR
SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR
SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR
SY-UNAME = 'GATE1080' OR SY-UNAME = 'ABAP' ).
IF WK_EBELN NE SPACE.
MESSAGE E003 WITH TEXT-001.
ENDIF.
ELSE.
WK_LIFNR = EKKO-LIFNR.
CLEAR : LFA1-NAME1.
SELECT SINGLE NAME1 FROM LFA1 CLIENT SPECIFIED
INTO LFA1-NAME1 WHERE
MANDT = SY-MANDT AND
LIFNR = WK_LIFNR.
IF SY-SUBRC EQ 0.
WK_NAME = LFA1-NAME1.
ENDIF.
ENDIF.
IF ( SY-UNAME = 'GATE1010' OR SY-UNAME = 'GATE1020' OR
SY-UNAME = 'GATE1030' OR SY-UNAME = 'GATE1040' OR
SY-UNAME = 'GATE1050' OR SY-UNAME = 'GATE1060' OR
SY-UNAME = 'GATE1070' OR SY-UNAME = 'GATE1080' OR SY-UNAME =
'ABAP' ).
IF wk_vbeln IS INITIAL.
set cursor field wk_vbeln.
MESSAGE E003 WITH text-009.
*
ENDIF.
IF wk_fkdat IS INITIAL.
MESSAGE E003 WITH text-010.
ENDIF.
ENDIF.
IF ( SY-UNAME = 'STORE1010' OR SY-UNAME = 'STORE1020' OR
SY-UNAME = 'STORE1030' OR SY-UNAME = 'STORE1040' OR
SY-UNAME = 'STORE1050' OR SY-UNAME = 'STORE1060' OR
SY-UNAME = 'STORE1070' OR SY-UNAME = 'STORE1080' ).
CLEAR : ZMMT001_GRN_GATE.
SELECT SINGLE EBELN CDATE FROM ZMMT001_GRN_GATE
CLIENT SPECIFIED
INTO (ZMMT001_GRN_GATE-EBELN ,
ZMMT001_GRN_GATE-CDATE )
WHERE MANDT = SY-MANDT AND
SERIAL = WK_SNO AND WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
SELECT MBLNR
MJAHR
BUDAT
BKTXT FROM MKPF CLIENT SPECIFIED
INTO TABLE IT_TEMP_MKPF
WHERE MANDT = SY-MANDT AND
BUDAT = ZMMT001_GRN_GATE-CDATE
AND BKTXT = WK_SNO.
IF NOT IT_TEMP_MKPF[] IS INITIAL.
SELECT MBLNR
MJAHR
ZEILE
BWART
EBELN FROM MSEG CLIENT SPECIFIED
INTO TABLE IT_TEMP_MSEG
FOR ALL ENTRIES IN IT_TEMP_MKPF
WHERE MANDT = SY-MANDT AND
MBLNR = IT_TEMP_MKPF-MBLNR
AND MJAHR = IT_TEMP_MKPF-MJAHR
AND BWART = '101'
AND WERKS = WK_WERKS.
IF SY-SUBRC EQ 0.
MESSAGE E003 WITH TEXT-012.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE. " CHECK_INPUT INPUT
&----
*& Module EBLEN_VALUES INPUT
&----
This is used to get the Purchase Order values
----
MODULE EBLEN_VALUES INPUT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WK_LIFNR
IMPORTING
OUTPUT = WK_LIFNR.
IF SY-UNAME = 'GATE1010'.
WK_WERKS = '1010'.
ELSEIF SY-UNAME = 'GATE1020'.
WK_WERKS = '1020'.
ELSEIF SY-UNAME = 'GATE1030'.
WK_WERKS = '1030'.
ELSEIF SY-UNAME = 'GATE1040'.
WK_WERKS = '1040'.
ELSEIF SY-UNAME = 'GATE1050'.
WK_WERKS = '1050'.
ELSEIF SY-UNAME = 'GATE1060'.
WK_WERKS = '1060'.
ELSEIF SY-UNAME = 'GATE1070'.
WK_WERKS = '1070'.
ELSEIF SY-UNAME = 'ABAP'.
WK_WERKS = '1020'.
ELSEIF SY-UNAME = 'GATE1080'.
WK_WERKS = '1080'.
ENDIF.
CLEAR : VALUE_EBELN.
REFRESH : VALUE_EBELN.
SELECT EBELN
FROM EKKO INTO TABLE VALUE_EBELN WHERE LIFNR = WK_LIFNR AND
LOEKZ NE 'X'.
IF NOT VALUE_EBELN[] IS INITIAL.
SELECT EBELN FROM EKPO CLIENT SPECIFIED
INTO TABLE VALUES_TAB1 FOR ALL ENTRIES IN
VALUE_EBELN WHERE
MANDT = SY-MANDT AND
EBELN = VALUE_EBELN-EBELN
AND WERKS = WK_WERKS
AND LOEKZ NE 'X' .
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'WK_EBELN'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'WK_EBELN'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB1
RETURN_TAB = RETURN_TAB.
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
*
ENDMODULE. " EBLEN_VALUES INPUT
&----
*& Module LIFNR_VALUES INPUT
&----
This is used to get the possible values of Vendor
----
MODULE LIFNR_VALUES INPUT.
SELECT LIFNR
NAME1
FROM LFA1 INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB2 .
SORT VALUES_TAB2 BY NAME1.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'WK_LIFNR'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'WK_LIFNR'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB2
RETURN_TAB = RETURN_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
ENDMODULE. "LIFNR_VALUES INPUT
*****************nidhi
&----
*& Module STATUS_1001 OUTPUT
&----
text
----
MODULE STATUS_1001 OUTPUT.
SET PF-STATUS 'xxxxxxxx'.
SET TITLEBAR 'xxx'.
SUPPRESS DIALOG.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDMODULE. " STATUS_1001 OUTPUT
***************nidhi
&----
*& Module display_list INPUT
&----
text
----
MODULE DISPLAY_LIST INPUT.
LOOP AT IT_ZMMT02.
WRITE: /1 'Dear Sir/Madam '.
WRITE:/.
*WRITE :3 'We have received the following material vise Bill No.:',
WK_ZMMT01-BILLNO, 'and Date:', WK_ZMMT01-BILLDATE.
WRITE:/ ' Those material are subjected to quality inspection.'.
WRITE:/.
ULINE.
FORMAT COLOR 1 ON.
WRITE : /1 'ITEMCODE', 20 'DESCRIPTION', 35 'QUANTITY'.
FORMAT COLOR 1 OFF.
WRITE :/1 IT_ZMMT02-ITEMCODE,
20 IT_ZMMT02-DESCRIPTION,
45 IT_ZMMT02-QUANTITY.
endloop.
DATA : IT_HTML TYPE W3HTML OCCURS 0 .
CALL FUNCTION 'WWW_LIST_TO_HTML'
EXPORTING
LIST_INDEX = 0 " list index
TABLES
HTML = IT_HTML.
*
After Downloading into a table it Send This As An Attachment with
*the Mail as follows
DATA: IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH
HEADER LINE.
DATA: IT_MESSAGE1 TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH
HEADER LINE.
DATA: IT_ATTACH TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0 WITH
HEADER LINE.
DATA V_NUM TYPE I.
DATA: T_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
T_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
T_ATTACHMENT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
T_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
W_CNT TYPE I,
W_SENT_ALL(1) TYPE C,
W_DOC_DATA LIKE SODOCCHGI1,
GD_ERROR TYPE SY-SUBRC,
GD_RECIEVER TYPE SY-SUBRC.
PERFORM SEND_FILE_AS_EMAIL_ATTACHMENT
TABLES IT_MESSAGE
IT_ATTACH
USING
IT_ADR6-SMTP_ADDR
'EXPENSES BOOKED IN YOUR COST CENTER'
'HTM'
'filename'
''
' '
' '
CHANGING GD_ERROR
GD_RECIEVER.
ENDMODULE. " display_list INPUT
*&----
*
*& Form send_file_as_email_attachment
*&----
*
text
*----
*
-->PIT_MESSAGE text
-->PIT_ATTACH text
-->P_EMAIL text
-->P_MTITLE text
-->P_FORMAT text
-->P_FILENAME text
-->P_ATTDESCRIPTION text
-->P_SENDER_ADDRESS text
-->P_SENDER_ADDRES_TYPE text
-->P_ERROR text
-->P_RECIEVER text
*----
*
FORM SEND_FILE_AS_EMAIL_ATTACHMENT
TABLES PIT_MESSAGE
PIT_ATTACH
USING
P_EMAIL
P_MTITLE
P_FORMAT
P_FILENAME
P_ATTDESCRIPTION
P_SENDER_ADDRESS
P_SENDER_ADDRES_TYPE
CHANGING P_ERROR
P_RECIEVER.
CONSTANTS: CON_TAB TYPE C VALUE
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
CON_CRET TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.
DATA: LD_ERROR TYPE SY-SUBRC,
LD_RECIEVER TYPE SY-SUBRC,
LD_MTITLE LIKE SODOCCHGI1-OBJ_DESCR,
LD_EMAIL LIKE SOMLRECI1-RECEIVER,
LD_FORMAT TYPE SO_OBJ_TP ,
LD_ATTDESCRIPTION TYPE SO_OBJ_NAM ,
LD_ATTFILENAME TYPE SO_OBJ_DES ,
LD_SENDER_ADDRESS LIKE SOEXTRECI1-RECEIVER,
LD_SENDER_ADDRESS_TYPE LIKE SOEXTRECI1-ADR_TYP,
LD_RECEIVER LIKE SY-SUBRC,
W_DOC_DATA LIKE SODOCCHGI1.
DATA V_SENT TYPE SONV-FLAG.
LD_EMAIL = P_EMAIL.
LD_MTITLE = P_MTITLE.
LD_FORMAT = P_FORMAT.
LD_ATTDESCRIPTION = P_ATTDESCRIPTION.
LD_ATTFILENAME = P_FILENAME.
LD_SENDER_ADDRESS = P_SENDER_ADDRESS.
LD_SENDER_ADDRESS_TYPE = P_SENDER_ADDRES_TYPE.
Fill the document data.
W_DOC_DATA-DOC_SIZE = 1.
Populate the subject/generic message attributes
W_DOC_DATA-OBJ_LANGU = SY-LANGU.
W_DOC_DATA-OBJ_NAME = 'SAPRPT'.
W_DOC_DATA-OBJ_DESCR = LD_MTITLE .
W_DOC_DATA-SENSITIVTY = 'F'.
Fill the document data and get size of attachment
CLEAR W_DOC_DATA.
READ TABLE IT_ATTACH INDEX W_CNT.
W_DOC_DATA-DOC_SIZE = ( W_CNT - 1 ) * 90000 + STRLEN( IT_ATTACH ).
W_DOC_DATA-OBJ_LANGU = SY-LANGU.
W_DOC_DATA-OBJ_NAME = 'SAPRPT'.
W_DOC_DATA-OBJ_DESCR = LD_MTITLE.
W_DOC_DATA-SENSITIVTY = 'P'.
CLEAR IT_MESSAGE.
REFRESH IT_MESSAGE.
IT_MESSAGE[] = PIT_ATTACH[].
Describe the body of the message
CLEAR T_PACKING_LIST.
REFRESH T_PACKING_LIST.
T_PACKING_LIST-TRANSF_BIN = SPACE.
T_PACKING_LIST-HEAD_START = 1.
T_PACKING_LIST-HEAD_NUM = 1.
T_PACKING_LIST-BODY_START = 1.
DESCRIBE TABLE IT_MESSAGE LINES T_PACKING_LIST-BODY_NUM.
T_PACKING_LIST-DOC_TYPE = 'RAW'.
APPEND T_PACKING_LIST.
Create attachment notification
REFRESH IT_MESSAGE.
IT_MESSAGE[] = IT_HTML[].
T_PACKING_LIST-TRANSF_BIN = ' '.
T_PACKING_LIST-HEAD_START = 1.
T_PACKING_LIST-HEAD_NUM = 4.
T_PACKING_LIST-BODY_START = 1.
CLEAR V_NUM.
DESCRIBE TABLE IT_MESSAGE LINES T_PACKING_LIST-BODY_NUM.
T_PACKING_LIST-DOC_TYPE = LD_FORMAT.
T_PACKING_LIST-OBJ_DESCR = LD_ATTDESCRIPTION.
T_PACKING_LIST-OBJ_NAME = 'TCS Scenario'.
T_PACKING_LIST-DOC_SIZE = T_PACKING_LIST-BODY_NUM * 255.
APPEND T_PACKING_LIST.
Add the recipients email address
CLEAR T_RECEIVERS.
REFRESH T_RECEIVERS.
T_RECEIVERS-RECEIVER = IT_ADR6-SMTP_ADDR.
T_RECEIVERS-RECEIVER = 'mamta@omaxauto.com'.
T_RECEIVERS-REC_TYPE = 'U'.
T_RECEIVERS-EXPRESS = 'X'.
*t_receivers-com_type = 'INT'.
*t_receivers-notif_del = 'X'.
*t_receivers-notif_ndel = 'X'.
APPEND T_RECEIVERS.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = W_DOC_DATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
IMPORTING
SENT_TO_ALL = V_SENT
NEW_OBJECT_ID =
TABLES
PACKING_LIST = T_PACKING_LIST
OBJECT_HEADER =* CONTENTS_BIN =
CONTENTS_TXT = IT_MESSAGE
CONTENTS_HEX =*
OBJECT_PARA = OBJECT_PARB =
RECEIVERS = T_RECEIVERS
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO* WITH SY-MSGV1 SY-
*MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Populate zreceiver return code
LOOP AT T_RECEIVERS.
LD_RECEIVER = T_RECEIVERS-RETRN_CODE.
ENDLOOP.
ENDFORM. "SEND_FILE_AS_EMAIL_ATTACHMENT