Вы находитесь на странице: 1из 39

*&---------------------------------------------------------------------*

*& Report ZFI_CASH_DISCOUNT_PAYBASE_RUN


*&
*&---------------------------------------------------------------------*
*&
* SEDK907357 | Shubhanshu Agrawal | 03/06/2015 | Change in CD Policy *
*&---------------------------------------------------------------------*

REPORT ZFI_CASH_DISCOUNT_PAYBASE_RUN.

TABLES : BSID , BSAD ,BKPF, VBRK ,VBRP ,BSEG ,KONV.

TYPE-POOLS : SLIS.

TYPE-POOLS : VRM .

TYPES : BEGIN OF TY_OUTPUT,


VBELN TYPE VBRK-VBELN,
FKART TYPE VBRK-FKART,
KUNNR TYPE VBRK-KUNAG,
NAME1 TYPE ADRC-NAME1,
ZFBDT TYPE BSEG-ZFBDT,
REBZG TYPE BSAD-REBZG,
KAWRT TYPE KONV-KAWRT,
* Base Amt Stored in ZFI_CD
KAWRT_SAVE TYPE KONV-KAWRT,

INV_AMT TYPE KONV-KAWRT,


* Invoice Amt Stored in ZFI_CD
INV_AMT_SAVE TYPE KONV-KAWRT,

INV_DISC_PER TYPE KONV-KAWRT,


* Invoice Disc % Stored in ZFI_CD
INV_DISC_PER_SAVE TYPE KONV-KAWRT,

VAT_RATE TYPE P DECIMALS 3, " KONV-KBETR,


* VAT Rate Stored in ZFI_CD
VAT_RATE_SAVE TYPE P DECIMALS 3, " KONV-KBETR,

VAT_AMT TYPE KONV-KWERT,


* VAT Amt Stored in ZFI_CD
VAT_AMT_SAVE TYPE KONV-KWERT,

AUGBL TYPE BSAD-AUGBL,


AUGBL_NEW TYPE BSAD-AUGBL,
AUGBL_NEW_DATE TYPE BKPF-BUDAT,
BUDAT TYPE BKPF-BUDAT,
PAY_AMT TYPE BSAD-DMBTR,
PAY_AMT_NEW TYPE BSAD-DMBTR,
DIS_APPL_PER TYPE BSAD-DMBTR,
* Disc. Applicable % Stored in ZFI_CD
DIS_APPL_PER_SAVE TYPE BSAD-DMBTR,

DISC_APPL_AMT TYPE BSAD-DMBTR,


* Disc. Applicable Amt Stored in ZFI_CD
DISC_APPL_AMT_SAVE TYPE BSAD-DMBTR,
DAYS TYPE I,
* Days Stored in ZFI_CD
DAYS_SAVE TYPE P,
* VBELN_CR TYPE VBFA-VBELN,
* CR_AMT TYPE BSAD-DMBTR,
BUKRS TYPE BKPF-BUKRS,
AUGGJ TYPE BSEG-AUGGJ,
GJAHR TYPE BSEG-GJAHR,
REBZJ TYPE BSEG-REBZJ,
BLART(4) TYPE C,
DISC_AMT_INV TYPE P DECIMALS 2, " Invoice Discount Value
* Inv. Disc Amt Stored in ZFI_CD
DISC_AMT_INV_SAVE TYPE P DECIMALS 2,
*Difference between Inv. Disc. Val. and eligible disc. value
DISC_AMT_DIFF TYPE P DECIMALS 2,
* Difference Stored in ZFI_CD
DISC_AMT_DIFF_SAVE TYPE P DECIMALS 2,
PERCENT_COL(4) TYPE C,
FLAG(1) TYPE C,
FLAG_CR_MEMO(1) TYPE C,
RGR_DOC TYPE VBRK-VBELN ,
RGR_AMT TYPE P DECIMALS 2 , " RGR AMOUNT .

VKGRP TYPE VKGRP ,


VKBUR TYPE VKBUR ,
GSBER TYPE GSBER ,
FKDAT TYPE FKDAT ,
" Flag to indicate that entry is a credit memo
END OF TY_OUTPUT.

TYPES : TT_OUTPUT TYPE STANDARD TABLE OF TY_OUTPUT .

DATA : LW_OUTPUT TYPE TY_OUTPUT ,


LT_OUTPUT TYPE TT_OUTPUT .

DATA: GT_CRMEMO_DATA LIKE LT_OUTPUT,


GT_DBMEMO_DATA LIKE LT_OUTPUT.

DATA : GT_FCAT TYPE SLIS_T_FIELDCAT_ALV,


GS_FCAT LIKE LINE OF GT_FCAT,
GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_SORT TYPE SLIS_SORTINFO_ALV OCCURS 0,
GS_SORT LIKE LINE OF GT_SORT.

DATA : GT_FCAT_MSG_LOG TYPE SLIS_T_FIELDCAT_ALV.

DATA : IT_EVENTS TYPE SLIS_T_EVENT,


WA_EVENTS TYPE SLIS_ALV_EVENT.

DATA GV_MEMO_CREATE(1) TYPE C.

DATA : GS_BAPISDHEAD1 TYPE BAPISDHEAD1,


GS_BAPISDHEAD1X TYPE BAPISDHEAD1X,
GT_BAPIRET2 TYPE TABLE OF BAPIRET2,
GS_BAPIRET2 TYPE BAPIRET2,
GT_BAPISDITEM TYPE TABLE OF BAPISDITEM,
GS_BAPISDITEM TYPE BAPISDITEM,
GT_BAPISDITEMX TYPE TABLE OF BAPISDITEMX,
GS_BAPISDITEMX TYPE BAPISDITEMX,
GT_BAPIPARTNR TYPE TABLE OF BAPIPARTNR,
GS_BAPIPARTNR TYPE BAPIPARTNR,
GT_BAPICONDITION TYPE TABLE OF BAPICONDITION,
GS_BAPICONDITION TYPE BAPICONDITION.

*DATA GT_CRMEMO_DATA LIKE LT_OUTPUT.

DATA : BEGIN OF GT_MSG_LOG OCCURS 0,

KUNNR LIKE VBAK-KUNNR,


VBELN_VA LIKE VBAK-VBELN,
MSGTY LIKE BAPIRET2-TYPE,
MSGV1 LIKE BAPIRET2-MESSAGE, " BDC_VTEXT1
BILL TYPE BILL_DOC,
MESG TYPE CHAR200,
RELEASE TYPE CHAR50 ,
END OF GT_MSG_LOG.

TYPES : BEGIN OF TT_KNVV,


KUNNR TYPE KUNNR,
VKORG TYPE VKORG,
VTWEG TYPE VTWEG,
SPART TYPE SPART,
VKBUR TYPE VKBUR, " add by anup
END OF TT_KNVV.

DATA : GT_KNVV TYPE SORTED TABLE OF TT_KNVV


WITH UNIQUE KEY KUNNR VKORG VTWEG SPART,
GS_KNVV TYPE TT_KNVV.

DATA : GT_EVENTS TYPE SLIS_T_EVENT.

DATA GV_CDCND(4) TYPE C VALUE 'ZPR0' . " Cash Deiscount ConditionType

DATA GS_CTU_MODE LIKE CTU_PARAMS.

* Var. to indicate that an error occured during ZVAT Cnd. Rec. creation
DATA GV_VK11_ERR(1) TYPE C.

DATA : GT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

* messages of call transaction


DATA : GT_MESSTAB TYPE TABLE OF BDCMSGCOLL,
GS_MESSTAB TYPE BDCMSGCOLL.

DATA : GT_VBRP_CR TYPE SORTED TABLE OF VBRP WITH UNIQUE KEY VBELN POSNR,
GS_VBRP_CR TYPE VBRP.

DATA : GT_KONV_CR TYPE STANDARD TABLE OF KONV,


GS_KONV_CR TYPE KONV.

DATA : GT_KONV_CR1 TYPE STANDARD TABLE OF KONV,


GS_KONV_CR1 TYPE KONV.

DATA : GT_KONV_CR_ZVAT TYPE STANDARD TABLE OF KONV,


GS_KONV_CR_ZVAT TYPE KONV.

DATA : FIRST_MONTH TYPE BKPF-MONAT,


SECOND_MONTH TYPE BKPF-MONAT,
YEAR1 TYPE BKPF-GJAHR,
YEAR2 TYPE BKPF-GJAHR.
DATA: PARAM TYPE VRM_ID,
VALUES TYPE VRM_VALUES ,
VALUE LIKE LINE OF VALUES.

TYPES : BEGIN OF TT_VATRT,


KUNNR TYPE VBRK-KUNAG,
VAT_RATE TYPE P DECIMALS 3, " KONV-KBETR,
END OF TT_VATRT.

DATA : GT_VAT_RT TYPE TABLE OF TT_VATRT,


GS_VAT_RT TYPE TT_VATRT.

DATA : LV_TABIX TYPE SY-TABIX.

TYPES: BEGIN OF STR_ERR,


BILL TYPE CHAR32,
MESG TYPE CHAR200,
END OF STR_ERR.

TYPES: BEGIN OF REL_ERR,


MSG(110) TYPE C,
END OF REL_ERR.

DATA :IT_BILLING TYPE TABLE OF BAPIVBRK,


WA_BILLING TYPE BAPIVBRK ,
IT_RET TYPE TABLE OF BAPIRET1,
WA_RET TYPE BAPIRET1 ,
IT_SUCCESS TYPE TABLE OF BAPIVBRKSUCCESS,
WA_SUCCESS TYPE BAPIVBRKSUCCESS ,
IT_ERR TYPE TABLE OF STR_ERR,
WA_ERR TYPE STR_ERR ,
IT_RELERR TYPE TABLE OF REL_ERR,
WA_RELERR TYPE REL_ERR .

DATA : IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA,


WA_BDCDATA TYPE BDCDATA ,
OPTIONS TYPE CTU_PARAMS,
IT_MESSAGES TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE .

TYPES : BEGIN OF T_GSBER ,


GSBER TYPE GSBER ,
END OF T_GSBER .

TYPES : TT_GSBER TYPE STANDARD TABLE OF T_GSBER .

DATA : LW_GSBER TYPE T_GSBER ,


LT_GSBER TYPE TT_GSBER ,
LV_CR_MEMO_NO TYPE BAPIVBELN-VBELN,
LS_BAPIRET2_COMMIT TYPE BAPIRET2.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .


PARAMETER : P_BUKRS LIKE BKPF-BUKRS OBLIGATORY,
P_GJAHR LIKE BKPF-GJAHR OBLIGATORY .

SELECT-OPTIONS : "SO_MONAT FOR BKPF-MONAT OBLIGATORY,


SO_FKDAT FOR VBRK-FKDAT OBLIGATORY.
SELECT-OPTIONS : SO_KUNNR FOR BSEG-KUNNR .

SELECT-OPTIONS : SO_GSBER FOR BSEG-GSBER,


SO_VKGRP FOR VBRP-VKGRP,
SO_VKBUR FOR VBRP-VKBUR.

*PARAMETERS NAME(20) AS LISTBOX VISIBLE LENGTH 20 OBLIGATORY.

SELECTION-SCREEN SKIP.
PARAMETERS P_RUN_DT TYPE VBRK-FKDAT OBLIGATORY.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-005.


PARAMETERS : P_VAT RADIOBUTTON GROUP G2,
P_NOVAT RADIOBUTTON GROUP G2.
SELECTION-SCREEN END OF BLOCK B3.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.


PARAMETERS : P_ALL RADIOBUTTON GROUP G1,
P_85 RADIOBUTTON GROUP G1.
SELECTION-SCREEN END OF BLOCK B2.

SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-006.

PARAMETER : C_TAX AS CHECKBOX .

SELECTION-SCREEN END OF BLOCK B5 .

SELECTION-SCREEN BEGIN OF BLOCK B6 WITH FRAME TITLE TEXT-007.

PARAMETER : P_CREDIT AS CHECKBOX,


P_DEBIT AS CHECKBOX,
P_CRDR AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK B6 .

*PARAMETERS: P_CHECK AS CHECKBOX USER-COMMAND PRT.


DATA GV_RUN_DT(10) TYPE C. " added by anup

TYPES : BEGIN OF TT_ZFI_CD,


VBELN TYPE VBELN_VF,
PAY_DOC TYPE ZFI_CD-PAY_DOC,
END OF TT_ZFI_CD.

DATA : LT_ZFI_CD TYPE SORTED TABLE OF TT_ZFI_CD


WITH NON-UNIQUE KEY VBELN PAY_DOC,
LS_ZFI_CD TYPE ZFI_CD.

DATA : LT_ZFI_CD1 TYPE SORTED TABLE OF TT_ZFI_CD


WITH NON-UNIQUE KEY VBELN PAY_DOC,
LS_ZFI_CD1 TYPE ZFI_CD.

DATA : LT_ZFI_CD_SAVE TYPE STANDARD TABLE OF ZFI_CD_SAVE ,


LS_ZFI_CD_SAVE TYPE ZFI_CD_SAVE.
AT SELECTION-SCREEN ON SO_FKDAT.

DATA LV_TEXT TYPE STRING.

DATA : CURTDATE TYPE SY-DATUM.

CURTDATE = '20130731'.

IF SO_FKDAT-LOW < CURTDATE .

CONCATENATE 'Date before July 2013 is not accepted'


'Please contact with system Administrator or enter date after month
July and run it again .'
INTO LV_TEXT SEPARATED BY SPACE.
MESSAGE LV_TEXT TYPE 'I' DISPLAY LIKE 'E'.

LEAVE PROGRAM.

ENDIF.

START-OF-SELECTION .

SELECT * FROM ZFI_CD_SAVE


INTO CORRESPONDING FIELDS OF TABLE LT_ZFI_CD_SAVE
WHERE KUNNR IN SO_KUNNR
AND FKDAT IN SO_FKDAT
AND VKGRP IN SO_VKGRP
AND VKBUR IN SO_VKBUR .
* AND GSBER IN SO_GSBER .

IF LT_ZFI_CD_SAVE IS NOT INITIAL.

IF P_CREDIT IS NOT INITIAL.


LOOP AT LT_ZFI_CD_SAVE INTO LS_ZFI_CD_SAVE WHERE DISC_AMT_DIFF LT '0.00'.

SELECT SINGLE VBELN PAY_DOC FROM ZFI_CD


INTO LS_ZFI_CD1 WHERE VBELN = LS_ZFI_CD_SAVE-VBELN
AND PAY_DOC = LS_ZFI_CD_SAVE-AUGBL.

IF SY-SUBRC NE 0 .
* LS_ZFI_CD_SAVE-MANDT = SY-MANDT.
LW_OUTPUT-KUNNR = LS_ZFI_CD_SAVE-KUNNR .
LW_OUTPUT-VBELN = LS_ZFI_CD_SAVE-VBELN .
LW_OUTPUT-FKDAT = LS_ZFI_CD_SAVE-FKDAT .
LW_OUTPUT-AUGBL_NEW = LS_ZFI_CD_SAVE-AUGBL_NEW.
LW_OUTPUT-AUGBL_NEW_DATE = LS_ZFI_CD_SAVE-AUGBL_NEW_DATE.
LW_OUTPUT-FKART = LS_ZFI_CD_SAVE-FKART.
LW_OUTPUT-NAME1 = LS_ZFI_CD_SAVE-NAME1.
LW_OUTPUT-VKGRP = LS_ZFI_CD_SAVE-VKGRP.
LW_OUTPUT-VKBUR = LS_ZFI_CD_SAVE-VKBUR.
LW_OUTPUT-GSBER = LS_ZFI_CD_SAVE-GSBER.
LW_OUTPUT-ZFBDT = LS_ZFI_CD_SAVE-ZFBDT.
LW_OUTPUT-REBZG = LS_ZFI_CD_SAVE-REBZG.
LW_OUTPUT-REBZJ = LS_ZFI_CD_SAVE-REBZJ.
LW_OUTPUT-KAWRT = LS_ZFI_CD_SAVE-KAWRT.
LW_OUTPUT-INV_AMT = LS_ZFI_CD_SAVE-INV_AMT.
LW_OUTPUT-INV_DISC_PER = LS_ZFI_CD_SAVE-INV_DISC_PER.
LW_OUTPUT-DISC_AMT_INV = LS_ZFI_CD_SAVE-DISC_AMT_INV.
LW_OUTPUT-VAT_RATE = LS_ZFI_CD_SAVE-VAT_RATE.
LW_OUTPUT-VAT_AMT = LS_ZFI_CD_SAVE-VAT_AMT.
LW_OUTPUT-RGR_DOC = LS_ZFI_CD_SAVE-RGR_DOC.
LW_OUTPUT-RGR_AMT = LS_ZFI_CD_SAVE-RGR_AMT.
LW_OUTPUT-BLART = LS_ZFI_CD_SAVE-BLART.
LW_OUTPUT-AUGBL = LS_ZFI_CD_SAVE-AUGBL.
LW_OUTPUT-BUDAT = LS_ZFI_CD_SAVE-BUDAT.
LW_OUTPUT-PAY_AMT = LS_ZFI_CD_SAVE-PAY_AMT.
LW_OUTPUT-PAY_AMT_NEW = LS_ZFI_CD_SAVE-PAY_AMT_NEW.
LW_OUTPUT-DIS_APPL_PER = LS_ZFI_CD_SAVE-DIS_APPL_PER.
LW_OUTPUT-DISC_APPL_AMT = LS_ZFI_CD_SAVE-DISC_APPL_AMT.
LW_OUTPUT-DAYS = LS_ZFI_CD_SAVE-DAYS_DIFF.
LW_OUTPUT-DISC_AMT_DIFF = LS_ZFI_CD_SAVE-DISC_AMT_DIFF.
LW_OUTPUT-PERCENT_COL = LS_ZFI_CD_SAVE-PERCENT_COL.

COLLECT LW_OUTPUT INTO LT_OUTPUT.


ENDIF.
CLEAR : LW_OUTPUT.

ENDLOOP.

ELSEIF P_DEBIT IS NOT INITIAL.


LOOP AT LT_ZFI_CD_SAVE INTO LS_ZFI_CD_SAVE WHERE DISC_AMT_DIFF GT '0.00' .

SELECT SINGLE VBELN PAY_DOC FROM ZFI_CD


INTO LS_ZFI_CD1 WHERE VBELN = LS_ZFI_CD_SAVE-VBELN
AND PAY_DOC = LS_ZFI_CD_SAVE-AUGBL.

IF SY-SUBRC NE 0 .
* LS_ZFI_CD_SAVE-MANDT = SY-MANDT.
LW_OUTPUT-KUNNR = LS_ZFI_CD_SAVE-KUNNR .
LW_OUTPUT-VBELN = LS_ZFI_CD_SAVE-VBELN .
LW_OUTPUT-FKDAT = LS_ZFI_CD_SAVE-FKDAT .
LW_OUTPUT-AUGBL_NEW = LS_ZFI_CD_SAVE-AUGBL_NEW.
LW_OUTPUT-AUGBL_NEW_DATE = LS_ZFI_CD_SAVE-AUGBL_NEW_DATE.
LW_OUTPUT-FKART = LS_ZFI_CD_SAVE-FKART.
LW_OUTPUT-NAME1 = LS_ZFI_CD_SAVE-NAME1.
LW_OUTPUT-VKGRP = LS_ZFI_CD_SAVE-VKGRP.
LW_OUTPUT-VKBUR = LS_ZFI_CD_SAVE-VKBUR.
LW_OUTPUT-GSBER = LS_ZFI_CD_SAVE-GSBER.
LW_OUTPUT-ZFBDT = LS_ZFI_CD_SAVE-ZFBDT.
LW_OUTPUT-REBZG = LS_ZFI_CD_SAVE-REBZG.
LW_OUTPUT-REBZJ = LS_ZFI_CD_SAVE-REBZJ.
LW_OUTPUT-KAWRT = LS_ZFI_CD_SAVE-KAWRT.
LW_OUTPUT-INV_AMT = LS_ZFI_CD_SAVE-INV_AMT.
LW_OUTPUT-INV_DISC_PER = LS_ZFI_CD_SAVE-INV_DISC_PER.
LW_OUTPUT-DISC_AMT_INV = LS_ZFI_CD_SAVE-DISC_AMT_INV.
LW_OUTPUT-VAT_RATE = LS_ZFI_CD_SAVE-VAT_RATE.
LW_OUTPUT-VAT_AMT = LS_ZFI_CD_SAVE-VAT_AMT.
LW_OUTPUT-RGR_DOC = LS_ZFI_CD_SAVE-RGR_DOC.
LW_OUTPUT-RGR_AMT = LS_ZFI_CD_SAVE-RGR_AMT.
LW_OUTPUT-BLART = LS_ZFI_CD_SAVE-BLART.
LW_OUTPUT-AUGBL = LS_ZFI_CD_SAVE-AUGBL.
LW_OUTPUT-BUDAT = LS_ZFI_CD_SAVE-BUDAT.
LW_OUTPUT-PAY_AMT = LS_ZFI_CD_SAVE-PAY_AMT.
LW_OUTPUT-PAY_AMT_NEW = LS_ZFI_CD_SAVE-PAY_AMT_NEW.
LW_OUTPUT-DIS_APPL_PER = LS_ZFI_CD_SAVE-DIS_APPL_PER.
LW_OUTPUT-DISC_APPL_AMT = LS_ZFI_CD_SAVE-DISC_APPL_AMT.
LW_OUTPUT-DAYS = LS_ZFI_CD_SAVE-DAYS_DIFF.
LW_OUTPUT-DISC_AMT_DIFF = LS_ZFI_CD_SAVE-DISC_AMT_DIFF.
LW_OUTPUT-PERCENT_COL = LS_ZFI_CD_SAVE-PERCENT_COL.

COLLECT LW_OUTPUT INTO LT_OUTPUT.


ENDIF.
CLEAR : LW_OUTPUT.

ENDLOOP.

ELSEIF P_ALL IS NOT INITIAL.


LOOP AT LT_ZFI_CD_SAVE INTO LS_ZFI_CD_SAVE.

SELECT SINGLE VBELN PAY_DOC FROM ZFI_CD


INTO LS_ZFI_CD1 WHERE VBELN = LS_ZFI_CD_SAVE-VBELN
AND PAY_DOC = LS_ZFI_CD_SAVE-AUGBL.

IF SY-SUBRC NE 0 .
* LS_ZFI_CD_SAVE-MANDT = SY-MANDT.
LW_OUTPUT-KUNNR = LS_ZFI_CD_SAVE-KUNNR .
LW_OUTPUT-VBELN = LS_ZFI_CD_SAVE-VBELN .
LW_OUTPUT-FKDAT = LS_ZFI_CD_SAVE-FKDAT .
LW_OUTPUT-AUGBL_NEW = LS_ZFI_CD_SAVE-AUGBL_NEW.
LW_OUTPUT-AUGBL_NEW_DATE = LS_ZFI_CD_SAVE-AUGBL_NEW_DATE.
LW_OUTPUT-FKART = LS_ZFI_CD_SAVE-FKART.
LW_OUTPUT-NAME1 = LS_ZFI_CD_SAVE-NAME1.
LW_OUTPUT-VKGRP = LS_ZFI_CD_SAVE-VKGRP.
LW_OUTPUT-VKBUR = LS_ZFI_CD_SAVE-VKBUR.
LW_OUTPUT-GSBER = LS_ZFI_CD_SAVE-GSBER.
LW_OUTPUT-ZFBDT = LS_ZFI_CD_SAVE-ZFBDT.
LW_OUTPUT-REBZG = LS_ZFI_CD_SAVE-REBZG.
LW_OUTPUT-REBZJ = LS_ZFI_CD_SAVE-REBZJ.
LW_OUTPUT-KAWRT = LS_ZFI_CD_SAVE-KAWRT.
LW_OUTPUT-INV_AMT = LS_ZFI_CD_SAVE-INV_AMT.
LW_OUTPUT-INV_DISC_PER = LS_ZFI_CD_SAVE-INV_DISC_PER.
LW_OUTPUT-DISC_AMT_INV = LS_ZFI_CD_SAVE-DISC_AMT_INV.
LW_OUTPUT-VAT_RATE = LS_ZFI_CD_SAVE-VAT_RATE.
LW_OUTPUT-VAT_AMT = LS_ZFI_CD_SAVE-VAT_AMT.
LW_OUTPUT-RGR_DOC = LS_ZFI_CD_SAVE-RGR_DOC.
LW_OUTPUT-RGR_AMT = LS_ZFI_CD_SAVE-RGR_AMT.
LW_OUTPUT-BLART = LS_ZFI_CD_SAVE-BLART.
LW_OUTPUT-AUGBL = LS_ZFI_CD_SAVE-AUGBL.
LW_OUTPUT-BUDAT = LS_ZFI_CD_SAVE-BUDAT.
LW_OUTPUT-PAY_AMT = LS_ZFI_CD_SAVE-PAY_AMT.
LW_OUTPUT-PAY_AMT_NEW = LS_ZFI_CD_SAVE-PAY_AMT_NEW.
LW_OUTPUT-DIS_APPL_PER = LS_ZFI_CD_SAVE-DIS_APPL_PER.
LW_OUTPUT-DISC_APPL_AMT = LS_ZFI_CD_SAVE-DISC_APPL_AMT.
LW_OUTPUT-DAYS = LS_ZFI_CD_SAVE-DAYS_DIFF.
LW_OUTPUT-DISC_AMT_DIFF = LS_ZFI_CD_SAVE-DISC_AMT_DIFF.
LW_OUTPUT-PERCENT_COL = LS_ZFI_CD_SAVE-PERCENT_COL.

COLLECT LW_OUTPUT INTO LT_OUTPUT.


ENDIF.
CLEAR : LW_OUTPUT.

ENDLOOP.
ENDIF.

IF SO_GSBER-LOW IS NOT INITIAL .

SELECT GSBER INTO TABLE LT_GSBER FROM TGSB WHERE GSBER IN SO_GSBER .
ENDIF.

ENDIF.

END-OF-SELECTION .

PERFORM FIELD_CATALOG .
PERFORM FILL_EVENTS_TABLE.
PERFORM BUILD_LAYOUT.
PERFORM DISPLAY_DATA.
*&---------------------------------------------------------------------*
*& Form FIELD_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FIELD_CATALOG .

GS_FCAT-FIELDNAME = 'VBELN'.
GS_FCAT-SELTEXT_S = 'Bill Num'.
GS_FCAT-SELTEXT_L = 'Billing Num'.
GS_FCAT-HOTSPOT = 'X'.
* GS_FCAT-FIX_COLUMN = 'X'.
GS_FCAT-KEY = 'X'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'FKART'.
GS_FCAT-SELTEXT_S = 'Doc. Type'.
GS_FCAT-SELTEXT_L = 'Document Type'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'KUNNR'.
GS_FCAT-SELTEXT_S = 'Customer'.
GS_FCAT-SELTEXT_L = 'Customer'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'NAME1'.
GS_FCAT-SELTEXT_S = 'Customer Name'.
GS_FCAT-SELTEXT_L = 'Customer Name'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'ZFBDT'.
GS_FCAT-SELTEXT_S = 'Base Line Date'.
GS_FCAT-SELTEXT_L = 'Base Line Date'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'REBZG'.
GS_FCAT-SELTEXT_S = 'FI Doc Num'.
GS_FCAT-SELTEXT_L = 'FI document number'.
APPEND GS_FCAT TO GT_FCAT.

** Added by Zubin on 15.07.2010


GS_FCAT-FIELDNAME = 'REBZJ'.
GS_FCAT-SELTEXT_S = 'FI Year'.
GS_FCAT-SELTEXT_L = 'FI Year'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'KAWRT'.
GS_FCAT-SELTEXT_S = 'Base Amt'.
GS_FCAT-SELTEXT_L = 'Base Amt'.
APPEND GS_FCAT TO GT_FCAT.

*** Added by Zubin on 26.07.2010


* GS_FCAT-FIELDNAME = 'KAWRT_SAVE'.
* GS_FCAT-SELTEXT_S = 'Base Amt'.
* GS_FCAT-SELTEXT_L = 'Base Amt'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'INV_AMT'.
GS_FCAT-SELTEXT_S = 'Invoice AMT'.
GS_FCAT-SELTEXT_L = 'Invoice Amount'.
APPEND GS_FCAT TO GT_FCAT.

** Added by Zubin on 26.07.2010


* GS_FCAT-FIELDNAME = 'INV_AMT_SAVE'.
* GS_FCAT-SELTEXT_S = 'Invoice AMT'.
* GS_FCAT-SELTEXT_L = 'Invoice Amount'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'INV_DISC_PER'.
GS_FCAT-SELTEXT_S = 'Invoice Discount %'.
GS_FCAT-SELTEXT_L = 'Invoice Discount %'.
APPEND GS_FCAT TO GT_FCAT.

** Added by Zubin on 26.07.2010


* GS_FCAT-FIELDNAME = 'INV_DISC_PER_SAVE'.
* GS_FCAT-SELTEXT_S = 'Invoice Discount %'.
* GS_FCAT-SELTEXT_L = 'Invoice Discount %'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 08.07.2010


GS_FCAT-FIELDNAME = 'DISC_AMT_INV'.
GS_FCAT-SELTEXT_S = 'Inv. Disc. Amt'.
GS_FCAT-SELTEXT_L = 'Invoice Discount Amount'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'DISC_AMT_INV_SAVE'.
* GS_FCAT-SELTEXT_S = 'Inv. Disc. Amt'.
* GS_FCAT-SELTEXT_L = 'Invoice Discount Amount'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 21.07.2010


GS_FCAT-FIELDNAME = 'VAT_RATE'.
GS_FCAT-SELTEXT_S = 'VAT Rate'.
GS_FCAT-SELTEXT_L = 'VAT Rate'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'VAT_RATE_SAVE'.
* GS_FCAT-SELTEXT_S = 'VAT Rate'.
* GS_FCAT-SELTEXT_L = 'VAT Rate'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'VAT_AMT'.
GS_FCAT-SELTEXT_S = 'VAT Amt.'.
GS_FCAT-SELTEXT_L = 'VAT Amount'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'VAT_AMT_SAVE'.
* GS_FCAT-SELTEXT_S = 'VAT Amt.'.
* GS_FCAT-SELTEXT_L = 'VAT Amount'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'RGR_DOC'.
GS_FCAT-SELTEXT_S = 'RGR DOC'.
GS_FCAT-SELTEXT_L = 'RGR DOC'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'RGR_AMT'.
GS_FCAT-SELTEXT_S = 'RGR AMT'.
GS_FCAT-SELTEXT_L = 'RGR Amount'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Added by Zubin On 08.07.2010

GS_FCAT-FIELDNAME = 'AUGBL_NEW'.
GS_FCAT-SELTEXT_S = 'PAY DOC'.
GS_FCAT-SELTEXT_L = 'Payment Document'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'AUGBL_NEW_DATE'.
GS_FCAT-SELTEXT_S = 'PAY DOC DATE'.
GS_FCAT-SELTEXT_L = 'Payment Document Date'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'BLART'.
GS_FCAT-SELTEXT_S = 'Doc. type'.
GS_FCAT-SELTEXT_L = 'Doc. type'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
GS_FCAT-FIELDNAME = 'AUGBL'.
GS_FCAT-SELTEXT_S = 'CLR DOC'.
GS_FCAT-SELTEXT_L = 'Clearing Document'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'BUDAT'.
GS_FCAT-SELTEXT_S = 'Posting Date'.
GS_FCAT-SELTEXT_L = 'Posting Date'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'PAY_AMT'.
GS_FCAT-SELTEXT_S = 'Payment Amount'.
GS_FCAT-SELTEXT_L = 'Payment Amount'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'PAY_AMT_NEW'.
GS_FCAT-SELTEXT_S = 'Pending Payment'.
GS_FCAT-SELTEXT_L = 'Pending Payment'.
APPEND GS_FCAT TO GT_FCAT.

GS_FCAT-FIELDNAME = 'DIS_APPL_PER'.
GS_FCAT-SELTEXT_S = 'Disc. Appl. (%)'.
GS_FCAT-SELTEXT_L = 'Discount Appicable (%)'.
APPEND GS_FCAT TO GT_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'DIS_APPL_PER_SAVE'.
* GS_FCAT-SELTEXT_S = 'Disc. Appl. (%)'.
* GS_FCAT-SELTEXT_L = 'Discount Appicable (%)'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'DISC_APPL_AMT'.
GS_FCAT-SELTEXT_S = 'Disc. Appl. Amt.'.
GS_FCAT-SELTEXT_L = 'Discount Appicable Amount'.
APPEND GS_FCAT TO GT_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'DISC_APPL_AMT_SAVE'.
* GS_FCAT-SELTEXT_S = 'Disc. Appl. Amt.'.
* GS_FCAT-SELTEXT_L = 'Discount Appicable Amount'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'DAYS'.
GS_FCAT-SELTEXT_S = 'Days'.
GS_FCAT-SELTEXT_L = 'Days'.
APPEND GS_FCAT TO GT_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'DAYS_SAVE'.
* GS_FCAT-SELTEXT_S = 'Days'.
* GS_FCAT-SELTEXT_L = 'Days'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.
** Aded by Zubin 08.07.2010
GS_FCAT-FIELDNAME = 'DISC_AMT_DIFF'.
GS_FCAT-SELTEXT_S = 'Diff. Amt.'.
GS_FCAT-SELTEXT_L = 'Difference Amount'.
GS_FCAT-DO_SUM = 'X'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

** Aded by Zubin 26.07.2010


* GS_FCAT-FIELDNAME = 'DISC_AMT_DIFF_SAVE'.
* GS_FCAT-SELTEXT_S = 'Diff. Amt.'.
* GS_FCAT-SELTEXT_L = 'Difference Amount'.
* GS_FCAT-TECH = 'X'.
* APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

ENDFORM. " FIELD_CATALOG


*&---------------------------------------------------------------------*
*& Form FILL_EVENTS_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_EVENTS_TABLE .

CLEAR WA_EVENTS.
WA_EVENTS-NAME = 'TOP_OF_PAGE'.
WA_EVENTS-FORM = 'PRINT_HEADING'.
APPEND WA_EVENTS TO IT_EVENTS.

WA_EVENTS-NAME = 'USER_COMMAND'.
WA_EVENTS-FORM = 'USER_COMMAND'.
APPEND WA_EVENTS TO IT_EVENTS.

ENDFORM. " FILL_EVENTS_TABLE

*&---------------------------------------------------------------------*
*& Form PRINT_HEADING
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PRINT_HEADING.

DATA : LT_HEAD TYPE SLIS_T_LISTHEADER ,


LW_HEAD LIKE LINE OF LT_HEAD .

DATA: LS_LINE TYPE SLIS_LISTHEADER.


DATA : V_TEXT TYPE STRING,
V_AREA TYPE I.

************************************************************
V_TEXT = 'Cash Discount Report'.

CLEAR LS_LINE.
LW_HEAD-TYP = 'H'.
LW_HEAD-INFO = V_TEXT.
APPEND LW_HEAD TO LT_HEAD.
CLEAR V_TEXT.
************************************************************

CLEAR V_TEXT.

CONCATENATE SO_FKDAT-LOW+6(2) '.' SO_FKDAT-LOW+4(2) '.' SO_FKDAT-LOW+0(4) INTO


V_TEXT.
CONCATENATE V_TEXT 'TO' SO_FKDAT-HIGH+6(2) INTO V_TEXT SEPARATED BY SPACE.
CONCATENATE V_TEXT '.' SO_FKDAT-HIGH+4(2) '.' SO_FKDAT-HIGH+0(4) INTO V_TEXT.
CONCATENATE 'REPORT FOR THE PERIOD' V_TEXT INTO V_TEXT SEPARATED BY SPACE.
CONDENSE V_TEXT.

CLEAR LW_HEAD.
LW_HEAD-TYP = 'S'.
LW_HEAD-INFO = V_TEXT.
APPEND LW_HEAD TO LT_HEAD.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
IT_LIST_COMMENTARY = LT_HEAD
I_LOGO = 'SPL_LOGO' "ENJOYSAP_LOGO
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.

ENDFORM. "PRINT_HEADING

*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
DATA : LT_EXCLUDE TYPE TABLE OF SY-UCOMM.

*&---------------------------------------------------------------------*
** Display the 'Create Credit Memo' button only if it is not executed
*&---------------------------------------------------------------------*
* IF NOT GV_MEMO_CREATE IS INITIAL.
* APPEND 'CRMEMO' TO LT_EXCLUDE.
* ENDIF.

SET PF-STATUS 'ZSTANDARD' EXCLUDING LT_EXCLUDE.

ENDFORM. "SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT .

GS_LAYOUT-NO_INPUT = 'X'.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-INFO_FIELDNAME = 'PERCENT_COL'.

ENDFORM. " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
IT_FIELDCAT = GT_FCAT[]
IT_EVENTS = IT_EVENTS
IT_SORT = GT_SORT
IS_LAYOUT = GS_LAYOUT
I_SAVE = 'A'
TABLES
T_OUTTAB = LT_OUTPUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " DISPLAY_DATA

*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.

DATA LV_ANS(1) TYPE C.

IF R_UCOMM EQ '&IC1'.
*&---------------------------------------------------------------------*
** Display Billing Document
*&---------------------------------------------------------------------*
IF RS_SELFIELD-FIELDNAME = 'VBELN'.
SET PARAMETER ID 'VF' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
*&---------------------------------------------------------------------*
** Display Credit Note Request Document
*&---------------------------------------------------------------------*
ELSEIF RS_SELFIELD-FIELDNAME = 'VBELN_VA'.
SET PARAMETER ID 'AUN' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.

ELSEIF R_UCOMM EQ 'CRMEMO'.


IF P_CRDR NE 'X'.
*&---------------------------------------------------------------------*
** Credit memo creation should trigger only first time.
** Hence, a var. (LV_MEMO_CREATE) is maintained for the same.
*&---------------------------------------------------------------------*
* BREAK-POINT.
CHECK GV_MEMO_CREATE IS INITIAL.

*&---------------------------------------------------------------------*
** Maintain VAT % for all Customers
*&---------------------------------------------------------------------*
SORT GT_VAT_RT BY KUNNR.
DELETE ADJACENT DUPLICATES FROM GT_VAT_RT COMPARING KUNNR.

*&---------------------------------------------------------------------*
** Credit memo creation should trigger if there are Eligible Invoices
*&---------------------------------------------------------------------*
READ TABLE LT_OUTPUT INTO LW_OUTPUT WITH KEY PERCENT_COL = ''.
IF SY-SUBRC <> 0.
MESSAGE 'Eligible Invoices Are Not Available ' TYPE 'S'.
EXIT.
ENDIF.
* BREAK SPLABAP.
*&---------------------------------------------------------------------*
** Take user confirmation to Automatic credit note creation
*&---------------------------------------------------------------------*
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Credit/Debit Memo Request Generation'
TEXT_QUESTION = 'Do you want to generate Credit/Debit Memo
Request?'
TEXT_BUTTON_1 = 'Yes'(003)
TEXT_BUTTON_2 = 'No'(004)
DEFAULT_BUTTON = '2'
DISPLAY_CANCEL_BUTTON = ''
IMPORTING
ANSWER = LV_ANS
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

IF LV_ANS = '1'.
*&---------------------------------------------------------------------*
** Write code to generate Automatic Credit Memo Request
*&---------------------------------------------------------------------*
GV_MEMO_CREATE = '1'.
GT_CRMEMO_DATA = LT_OUTPUT.

DELETE GT_CRMEMO_DATA WHERE NOT PERCENT_COL IS INITIAL.

DELETE GT_CRMEMO_DATA WHERE DISC_AMT_DIFF = 0.

DELETE GT_CRMEMO_DATA WHERE FKART = 'ZF2C' AND DISC_AMT_DIFF LE '0.00'.


"No credit note for ZF2C Shubhanshu

LOOP AT GT_CRMEMO_DATA INTO LW_OUTPUT WHERE FLAG IS INITIAL.


CLEAR : LW_OUTPUT-FKART, LW_OUTPUT-NAME1,
LW_OUTPUT-ZFBDT, LW_OUTPUT-REBZG, LW_OUTPUT-KAWRT,
LW_OUTPUT-KAWRT_SAVE, LW_OUTPUT-INV_AMT, LW_OUTPUT-INV_AMT_SAVE,
LW_OUTPUT-INV_DISC_PER, LW_OUTPUT-INV_DISC_PER_SAVE,
LW_OUTPUT-AUGBL,LW_OUTPUT-AUGBL_NEW, LW_OUTPUT-BUDAT,
LW_OUTPUT-PAY_AMT,LW_OUTPUT-PAY_AMT_NEW,
LW_OUTPUT-DIS_APPL_PER, LW_OUTPUT-DIS_APPL_PER_SAVE,
LW_OUTPUT-DISC_APPL_AMT, LW_OUTPUT-DISC_APPL_AMT_SAVE,
LW_OUTPUT-DAYS, LW_OUTPUT-DAYS_SAVE,
LW_OUTPUT-BUKRS, LW_OUTPUT-AUGGJ,
LW_OUTPUT-GJAHR, LW_OUTPUT-REBZJ, LW_OUTPUT-BLART,
LW_OUTPUT-DISC_AMT_INV, LW_OUTPUT-DISC_AMT_INV_SAVE,
LW_OUTPUT-PERCENT_COL,
* LW_OUTPUT-VAT_RATE,
LW_OUTPUT-VAT_RATE_SAVE,
LW_OUTPUT-VAT_AMT, LW_OUTPUT-VAT_AMT_SAVE,
LW_OUTPUT-FLAG_CR_MEMO.

*GS_OUTPUT-VBELN,

LW_OUTPUT-DISC_AMT_DIFF = LW_OUTPUT-DISC_AMT_DIFF * -1.


CLEAR LW_OUTPUT-DISC_AMT_DIFF_SAVE.

LW_OUTPUT-FLAG = 'X'.

COLLECT LW_OUTPUT INTO GT_CRMEMO_DATA.


ENDLOOP.

DELETE GT_CRMEMO_DATA WHERE FLAG IS INITIAL.

PERFORM GET_KUN_SALES_AREA.

PERFORM PROCESS_AUTO_CR.

PERFORM DISPLAY_LOG_DATA.

ENDIF.
ENDIF.
ENDIF. " FOR MAIN
ENDFORM. "User_command
*&---------------------------------------------------------------------*
*& Form GET_KUN_SALES_AREA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_KUN_SALES_AREA .
IF NOT GT_CRMEMO_DATA IS INITIAL.
SELECT KUNNR VKORG VTWEG SPART VKBUR
FROM KNVV
INTO TABLE GT_KNVV
FOR ALL ENTRIES IN GT_CRMEMO_DATA
WHERE KUNNR = GT_CRMEMO_DATA-KUNNR AND
VKORG = 'SPL' AND
(
( VTWEG = 'DS' AND SPART = 'D' ) OR
( VTWEG = 'IS' AND SPART = 'D' )
).
ENDIF.

ENDFORM. " GET_KUN_SALES_AREA


*&---------------------------------------------------------------------*
*& Form PROCESS_AUTO_CR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESS_AUTO_CR .
PERFORM SET_CALL_TXN_PARAMS.

CONCATENATE P_RUN_DT+6(2) '.' P_RUN_DT+4(2) '.' P_RUN_DT+0(6) INTO GV_RUN_DT.


CONDENSE GV_RUN_DT.

*Shubhanshu
LOOP AT GT_CRMEMO_DATA INTO LW_OUTPUT WHERE DISC_AMT_DIFF LT '0.00' .
APPEND LW_OUTPUT TO GT_DBMEMO_DATA.
DELETE GT_CRMEMO_DATA INDEX SY-INDEX.
CLEAR:LW_OUTPUT.
ENDLOOP.
*Shubhanshu

IF P_DEBIT IS NOT INITIAL.


PERFORM DEBIT_NOTE.
ELSEIF P_CREDIT IS NOT INITIAL.
PERFORM CREDIT_NOTE.
ENDIF.

ENDFORM. " PROCESS_AUTO_CR


*&---------------------------------------------------------------------*
*& Form SET_CALL_TXN_PARAMS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_CALL_TXN_PARAMS .

GS_CTU_MODE-DISMODE = 'N'.
GS_CTU_MODE-UPDMODE = 'S'.
GS_CTU_MODE-DEFSIZE = 'X'.

ENDFORM. " SET_CALL_TXN_PARAMS


*&---------------------------------------------------------------------*
*& Form SET_VA_LNITM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_LNITM .

DATA : TEMP TYPE WERKS.


CLEAR : GS_BAPISDITEM, GT_BAPISDITEM,
GS_BAPISDITEMX, GT_BAPISDITEMX.
REFRESH:GT_BAPISDITEM,GT_BAPISDITEMX. "shubhanshu

GS_BAPISDITEM-ITM_NUMBER = '10'.
GS_BAPISDITEMX-ITM_NUMBER = '10'.

GS_BAPISDITEM-MATERIAL = 'M100'.
GS_BAPISDITEMX-MATERIAL = 'X'.

GS_BAPISDITEM-TARGET_QTY = '1'.
GS_BAPISDITEMX-TARGET_QTY = 'X'.

READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.

IF SY-SUBRC = 0 .

READ TABLE LT_GSBER INTO LW_GSBER WITH KEY GSBER = GS_KNVV-VKBUR .

IF SY-SUBRC <> 0 .

GS_BAPISDITEM-TAX_CLASS1 = '0' .
GS_BAPISDITEMX-TAX_CLASS1 = 'X'.

GS_BAPISDITEM-TAX_CLASS2 = '0' .
GS_BAPISDITEMX-TAX_CLASS2 = 'X'.

GS_BAPISDITEM-TAX_CLASS3 = '0' .
GS_BAPISDITEMX-TAX_CLASS3 = 'X'.

GS_BAPISDITEM-TAX_CLASS4 = '0' .
GS_BAPISDITEMX-TAX_CLASS4 = 'X'.

GS_BAPISDITEM-TAX_CLASS5 = '0' .
GS_BAPISDITEMX-TAX_CLASS5 = 'X'.

GS_BAPISDITEM-TAX_CLASS6 = '0' .
GS_BAPISDITEMX-TAX_CLASS6 = 'X'.

GS_BAPISDITEM-TAX_CLASS7 = '0' .
GS_BAPISDITEMX-TAX_CLASS7 = 'X'.

GS_BAPISDITEM-TAX_CLASS8 = '0' .
GS_BAPISDITEMX-TAX_CLASS8 = 'X'.

GS_BAPISDITEM-TAX_CLASS9 = '0' .
GS_BAPISDITEMX-TAX_CLASS9 = 'X'.

ENDIF.

ENDIF .
* GS_BAPISDITEM-ORDERID
*BREAK-POINT.
CLEAR GS_KNVV.
CLEAR TEMP.

READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.


* TEMP = GS_KNVV-KUNNR+1(3).
TEMP = GS_KNVV-VKBUR. " ADDED BY ANUP
CONCATENATE 'R' GS_KNVV-SPART TEMP 'Z08' INTO GS_BAPISDITEM-ORDERID.
CONDENSE GS_BAPISDITEM-ORDERID.
GS_BAPISDITEMX-ORDERID = 'X'.

APPEND GS_BAPISDITEM TO GT_BAPISDITEM.


APPEND GS_BAPISDITEMX TO GT_BAPISDITEMX.

ENDFORM. " SET_VA_LNITM


*&---------------------------------------------------------------------*
*& Form RUN_VK11_ZAVT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM RUN_VK11_ZAVT .

DATA LV_VAT_RATE TYPE STRING.


CLEAR GV_VK11_ERR.

REFRESH : GT_BDCDATA, GT_MESSTAB.


CLEAR : GT_BDCDATA, GS_MESSTAB.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ANTA'.
PERFORM BDC_FIELD USING 'RV13A-KSCHL'
'ZVAT'.

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV130-SELKZ(04)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=WEIT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
'X'.
* PERFORM BDC_FIELD USING 'RV130-SELKZ(04)'
* 'X'.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1999'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KONP-MWSK1(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KOMG-AUART_SD'
'ZCD'.
PERFORM BDC_FIELD USING 'KOMG-KUNNR'
LW_OUTPUT-KUNNR.
PERFORM BDC_FIELD USING 'KOMG-MATNR(01)'
'RDS'.

CLEAR GS_VAT_RT.
* READ TABLE GT_VAT_RT INTO GS_VAT_RT WITH KEY KUNNR = LW_OUTPUT-KUNNR.
* IF SY-SUBRC = 0.
* IF P_VAT = 'X'.
* LV_VAT_RATE = GS_VAT_RT-VAT_RATE.
* ELSE.
* LV_VAT_RATE = 0.
* ENDIF.
* ENDIF.

IF C_TAX = 'X' .

READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.

READ TABLE LT_GSBER INTO LW_GSBER WITH KEY GSBER = GS_KNVV-VKBUR .

IF SY-SUBRC = 0 .

LV_VAT_RATE = LW_OUTPUT-VAT_RATE .

ENDIF.

ENDIF.

PERFORM BDC_FIELD USING 'KONP-KBETR(01)'


LV_VAT_RATE.

PERFORM BDC_FIELD USING 'RV13A-DATAB(01)'


GV_RUN_DT.
PERFORM BDC_FIELD USING 'RV13A-DATBI(01)'
GV_RUN_DT.

PERFORM BDC_FIELD USING 'KONP-MWSK1(01)'


'A0'.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1999'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-MATNR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SICH'.

REFRESH GT_MESSTAB.

CALL TRANSACTION 'VK11' USING GT_BDCDATA


MODE 'N'
UPDATE GS_CTU_MODE
MESSAGES INTO GT_MESSTAB.

** Write Error Log for VK11


READ TABLE GT_MESSTAB INTO GS_MESSTAB
WITH KEY MSGTYP = 'S'
MSGID = 'VK'
MSGNR = '023'.
IF SY-SUBRC <> 0.
GV_VK11_ERR = 'X'.

LOOP AT GT_MESSTAB INTO GS_MESSTAB.


GT_MSG_LOG-MSGTY = GS_MESSTAB-MSGTYP.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = GS_MESSTAB-MSGID
LANG = '-D'
NO = GS_MESSTAB-MSGNR
V1 = GS_MESSTAB-MSGV1
V2 = GS_MESSTAB-MSGV2
V3 = GS_MESSTAB-MSGV3
V4 = GS_MESSTAB-MSGV4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* MOVE-CORRESPONDING GS_MESSTAB TO GT_MSG_LOG.


MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.
APPEND GT_MSG_LOG.
ENDLOOP.
ELSE.
CLEAR GV_VK11_ERR.
COMMIT WORK AND WAIT.
ENDIF.

ENDFORM. " RUN_VK11_ZAVT


*&---------------------------------------------------------------------*
*& Form SET_VA_HD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_HD .

CLEAR : GS_BAPISDHEAD1, GS_BAPISDHEAD1X.

GS_BAPISDHEAD1-DOC_TYPE = 'ZCD'.
GS_BAPISDHEAD1X-DOC_TYPE = 'X'.

** Order Reason
GS_BAPISDHEAD1-ORD_REASON = 'Z08'.
GS_BAPISDHEAD1X-ORD_REASON = 'X'.

READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.


IF SY-SUBRC = 0.
GS_BAPISDHEAD1-SALES_ORG = GS_KNVV-VKORG.
GS_BAPISDHEAD1-DISTR_CHAN = GS_KNVV-VTWEG.
GS_BAPISDHEAD1-DIVISION = GS_KNVV-SPART.
GS_BAPISDHEAD1-SALES_OFF = GS_KNVV-VKBUR.

GS_BAPISDHEAD1X-SALES_ORG = 'X'.
GS_BAPISDHEAD1X-DISTR_CHAN = 'X'.
GS_BAPISDHEAD1X-DIVISION = 'X'.
GS_BAPISDHEAD1X-SALES_OFF = 'X'.
ENDIF.

GS_BAPISDHEAD1-PRICE_DATE = P_RUN_DT.
GS_BAPISDHEAD1-DOC_DATE = P_RUN_DT.

GS_BAPISDHEAD1X-PRICE_DATE = 'X'.
GS_BAPISDHEAD1X-DOC_DATE = 'X'.

GS_BAPISDHEAD1-PURCH_NO_C = LW_OUTPUT-VBELN.
GS_BAPISDHEAD1X-PURCH_NO_C = 'X'.

GS_BAPISDHEAD1-VERSION = 'CASH001'.
GS_BAPISDHEAD1X-VERSION = 'X'.

ENDFORM. " SET_VA_HD


*&---------------------------------------------------------------------*
*& Form SET_VA_PARTNER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_PARTNER .

CLEAR : GS_BAPIPARTNR, GT_BAPIPARTNR.


REFRESH:GT_BAPIPARTNR.

GS_BAPIPARTNR-PARTN_ROLE = 'AG'.
GS_BAPIPARTNR-PARTN_NUMB = LW_OUTPUT-KUNNR.
* GS_BAPIPARTNR-ITM_NUMBER = '10'.
APPEND GS_BAPIPARTNR TO GT_BAPIPARTNR.

ENDFORM. " SET_VA_PARTNER


*&---------------------------------------------------------------------*
*& Form SET_VA_CND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_CND .

CLEAR : GS_BAPICONDITION, GT_BAPICONDITION.

GS_BAPICONDITION-ITM_NUMBER = '10'.
GS_BAPICONDITION-COND_TYPE = GV_CDCND.
GS_BAPICONDITION-COND_VALUE = LW_OUTPUT-DISC_AMT_DIFF / 10.
APPEND GS_BAPICONDITION TO GT_BAPICONDITION.

ENDFORM. " SET_VA_CND


*&---------------------------------------------------------------------*
*& Form INSERT_TO_ZFI_CD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LW_OUTPUT text
* -->P_LV_CR_MEMO_NO text
*----------------------------------------------------------------------*
FORM INSERT_TO_ZFI_CD USING P_GT_CRMEMO_DATA TYPE TY_OUTPUT
P_LV_CR_MEMO_NO TYPE BAPIVBELN-VBELN.

DATA : LT_ZFI_CD TYPE SORTED TABLE OF ZFI_CD


WITH UNIQUE KEY KUNNR VBELN PAY_DOC PAY_DOC_BUDAT,
LS_ZFI_CD TYPE ZFI_CD.

DATA LS_OUTPUT_ORG TYPE TY_OUTPUT.

LOOP AT LT_OUTPUT INTO LS_OUTPUT_ORG


WHERE KUNNR = P_GT_CRMEMO_DATA-KUNNR AND
PERCENT_COL IS INITIAL.

CLEAR LS_ZFI_CD.

LS_ZFI_CD-KUNNR = LS_OUTPUT_ORG-KUNNR.
LS_ZFI_CD-VBELN = LS_OUTPUT_ORG-VBELN.
LS_ZFI_CD-PAY_DOC = LS_OUTPUT_ORG-AUGBL.
LS_ZFI_CD-PAY_DOC_BUDAT = LS_OUTPUT_ORG-BUDAT.
LS_ZFI_CD-FKART = LS_OUTPUT_ORG-FKART.
LS_ZFI_CD-ACC_DOCNR = LS_OUTPUT_ORG-REBZG.
LS_ZFI_CD-ACC_DOCYR = LS_OUTPUT_ORG-REBZJ.
LS_ZFI_CD-ZFBDT = LS_OUTPUT_ORG-ZFBDT.
LS_ZFI_CD-BASE_AMT = LS_OUTPUT_ORG-KAWRT_SAVE.
LS_ZFI_CD-INV_AMT = LS_OUTPUT_ORG-INV_AMT_SAVE.
LS_ZFI_CD-INV_DISC_PER = LS_OUTPUT_ORG-INV_DISC_PER_SAVE.
LS_ZFI_CD-DOC_TYP = LS_OUTPUT_ORG-BLART.
LS_ZFI_CD-PAY_AMT = LS_OUTPUT_ORG-PAY_AMT.
LS_ZFI_CD-DISC_APPL_PER = LS_OUTPUT_ORG-DIS_APPL_PER_SAVE.
LS_ZFI_CD-DISC_APPL_AMT = LS_OUTPUT_ORG-DISC_APPL_AMT_SAVE.
LS_ZFI_CD-DAYS_DIFF = LS_OUTPUT_ORG-DAYS_SAVE.
LS_ZFI_CD-BUKRS = LS_OUTPUT_ORG-BUKRS.
LS_ZFI_CD-DISC_AMT_INV = LS_OUTPUT_ORG-DISC_AMT_INV_SAVE.
LS_ZFI_CD-DISC_AMT_DIFF = LS_OUTPUT_ORG-DISC_AMT_DIFF_SAVE.

LS_ZFI_CD-VAT_PERCENT = LS_OUTPUT_ORG-VAT_RATE_SAVE.

LS_ZFI_CD-VAT_AMT = LS_OUTPUT_ORG-VAT_AMT_SAVE.

CLEAR VALUE.
* READ TABLE VALUES INTO VALUE WITH KEY KEY = NAME.
* IF SY-SUBRC = 0.
* LS_ZFI_CD-LOCATION = VALUE-TEXT.
* ENDIF.

LS_ZFI_CD-RUN_DATE = SY-DATUM.
LS_ZFI_CD-RUN_TIME = SY-UZEIT.
LS_ZFI_CD-CREATED_BY = SY-UNAME.
LS_ZFI_CD-CR_NOTE_DOC = P_LV_CR_MEMO_NO.
LS_ZFI_CD-CR_NOTE_AMT = P_GT_CRMEMO_DATA-DISC_AMT_DIFF.

CATCH SYSTEM-EXCEPTIONS OTHERS = 8.


INSERT INTO ZFI_CD VALUES LS_ZFI_CD.
* DELETE FROM ZFI_CD_SAVE WHERE VBELN = LS_OUTPUT_ORG-VBELN
* AND AUGBL_NEW = LS_OUTPUT_ORG-AUGBL .

ENDCATCH.

ENDLOOP.

ENDFORM. " INSERT_TO_ZFI_CD


*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2212 text
* -->P_2213 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO .

CLEAR GT_BDCDATA.
GT_BDCDATA-PROGRAM = PROGRAM.
GT_BDCDATA-DYNPRO = DYNPRO.
GT_BDCDATA-DYNBEGIN = 'X'.
APPEND GT_BDCDATA.

ENDFORM. " BDC_DYNPRO


*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_2217 text
* -->P_2218 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.

IF FVAL <> ''.


CLEAR GT_BDCDATA.
GT_BDCDATA-FNAM = FNAM.
GT_BDCDATA-FVAL = FVAL.
APPEND GT_BDCDATA.
ENDIF.
ENDFORM. " BDC_FIELD
*&---------------------------------------------------------------------*
*& Form DISPLAY_LOG_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_LOG_DATA .
CLEAR GS_FCAT.
REFRESH GT_FCAT.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT-ZEBRA = 'X'.

GS_FCAT-FIELDNAME = 'KUNNR'.
GS_FCAT-SELTEXT_S = 'Customer'.
GS_FCAT-SELTEXT_L = 'Customer Name'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'VBELN_VA'.
GS_FCAT-SELTEXT_S = 'Credit Memo Request'.
GS_FCAT-SELTEXT_L = 'Credit Memo Request'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'MSGV1'.
GS_FCAT-SELTEXT_S = 'Text'.
GS_FCAT-SELTEXT_L = 'Text'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'BILL'.
GS_FCAT-SELTEXT_S = 'Credit Memo'.
GS_FCAT-SELTEXT_L = 'Credit Memo'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'MESG'.
GS_FCAT-SELTEXT_S = 'Text'.
GS_FCAT-SELTEXT_L = 'Text'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

GS_FCAT-FIELDNAME = 'RELEASE'.
GS_FCAT-SELTEXT_S = 'Relese Status'.
GS_FCAT-SELTEXT_L = 'Relese Status'.
APPEND GS_FCAT TO GT_FCAT.
CLEAR GS_FCAT.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
* IT_FIELDCAT = GT_FCAT_MSG_LOG[]
IT_FIELDCAT = GT_FCAT[]
* IT_SORT = GT_SORT
IS_LAYOUT = GS_LAYOUT
* IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = GT_MSG_LOG
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " DISPLAY_LOG_DATA


*&---------------------------------------------------------------------*
*& Form DEBIT_NOTE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DEBIT_NOTE .
LOOP AT GT_DBMEMO_DATA INTO LW_OUTPUT.
CLEAR LV_CR_MEMO_NO.
REFRESH:GT_BAPIRET2. "SHUBHANSHU
** Set line item details
PERFORM SET_VA_LNITM.

** Run BDC for VK11 to create Condition Record


PERFORM RUN_VK11_ZAVT1.

** If there was n error while creating VK11 for ZVAT then goto
** next cr. memo. req.*********
IF GV_VK11_ERR = 'X'.
CONTINUE.
CLEAR GV_VK11_ERR.
ENDIF.

** Set header data


PERFORM SET_VA_HD1.

** Set partners
PERFORM SET_VA_PARTNER.

** Set condition recs


PERFORM SET_VA_CND.

** Call FM to create Credit Memo Request


CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'
EXPORTING
* SALESDOCUMENT =
SALES_HEADER_IN = GS_BAPISDHEAD1
SALES_HEADER_INX = GS_BAPISDHEAD1X
IMPORTING
SALESDOCUMENT_EX = LV_CR_MEMO_NO
TABLES
RETURN = GT_BAPIRET2
SALES_ITEMS_IN = GT_BAPISDITEM
SALES_ITEMS_INX = GT_BAPISDITEMX
SALES_PARTNERS = GT_BAPIPARTNR
SALES_CONDITIONS_IN = GT_BAPICONDITION.

IF NOT LV_CR_MEMO_NO IS INITIAL.


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = LS_BAPIRET2_COMMIT.
*&---------------------------------------------------------------------*
** Generate Error Log in case of Error while commiting Credit Memo
** Request
*&---------------------------------------------------------------------*
IF NOT LS_BAPIRET2_COMMIT IS INITIAL.
CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

GT_MSG_LOG-MSGTY = LS_BAPIRET2_COMMIT-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = LS_BAPIRET2_COMMIT-ID
LANG = '-D'
NO = LS_BAPIRET2_COMMIT-NUMBER
V1 = LS_BAPIRET2_COMMIT-MESSAGE_V1
V2 = LS_BAPIRET2_COMMIT-MESSAGE_V2
V3 = LS_BAPIRET2_COMMIT-MESSAGE_V3
V4 = LS_BAPIRET2_COMMIT-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND GT_MSG_LOG.

CONTINUE.

ELSE.

*&---------------------------------------------------------------------*
** Create Output Log (Success)
*&---------------------------------------------------------------------*
SORT GT_BAPIRET2 BY TYPE ID NUMBER.
DELETE ADJACENT DUPLICATES FROM GT_BAPIRET2
COMPARING TYPE ID NUMBER.

** Display message which mentions document saved.


DELETE GT_BAPIRET2 WHERE NOT ( TYPE = 'S' AND
ID = 'V1' AND
NUMBER = '311' ).

LOOP AT GT_BAPIRET2 INTO GS_BAPIRET2.


CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

MOVE LV_CR_MEMO_NO TO GT_MSG_LOG-VBELN_VA.

GT_MSG_LOG-MSGTY = GS_BAPIRET2-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = GS_BAPIRET2-ID
LANG = '-D'
NO = GS_BAPIRET2-NUMBER
V1 = GS_BAPIRET2-MESSAGE_V1
V2 = GS_BAPIRET2-MESSAGE_V2
V3 = GS_BAPIRET2-MESSAGE_V3
V4 = GS_BAPIRET2-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

WA_BILLING-REF_DOC = LV_CR_MEMO_NO .
WA_BILLING-REF_DOC_CA = 'C'.
APPEND WA_BILLING TO IT_BILLING.

CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'


TABLES
BILLINGDATAIN = IT_BILLING
RETURN = IT_RET
SUCCESS = IT_SUCCESS.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
WAIT = 'X'.

IF IT_SUCCESS IS NOT INITIAL.

CLEAR GT_BDCDATA[] .

REFRESH GT_BDCDATA .

READ TABLE IT_SUCCESS INTO WA_SUCCESS INDEX 1.

GT_MSG_LOG-BILL = WA_SUCCESS-BILL_DOC .

PERFORM BDC_DYNPRO USING 'SAPMV60A' '0101'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'VBRK-VBELN'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FKFR'.
PERFORM BDC_FIELD USING 'VBRK-VBELN'
WA_SUCCESS-BILL_DOC.
OPTIONS-DISMODE = 'N'.
OPTIONS-UPDMODE = 'N'.
OPTIONS-DEFSIZE = 'X'.
CALL TRANSACTION 'VF02' USING GT_BDCDATA
OPTIONS FROM OPTIONS
MESSAGES INTO IT_MESSAGES.

IF IT_MESSAGES[] IS NOT INITIAL.


SORT IT_MESSAGES[] BY MSGTYP.
DELETE IT_MESSAGES[] WHERE MSGTYP NE 'E'.

IF IT_MESSAGES[] IS NOT INITIAL.


READ TABLE IT_MESSAGES INDEX 1.
CONCATENATE 'Error in' IT_MESSAGES-MSGV1
INTO GT_MSG_LOG-RELEASE SEPARATED BY ' '.

ELSE .

GT_MSG_LOG-RELEASE = 'Document Release' .

ENDIF.

ENDIF.

CLEAR:WA_SUCCESS.

ENDIF.

IF IT_RET IS NOT INITIAL.


SORT IT_RET BY TYPE.
DELETE IT_RET WHERE TYPE NE 'E'.
IF IT_RET IS NOT INITIAL.
READ TABLE IT_RET INTO WA_RET INDEX 1.
CONCATENATE 'Error in Creidt / Debit Note ' LV_CR_MEMO_NO INTO
GT_MSG_LOG-MESG SEPARATED BY ' '.
CLEAR:WA_ERR,WA_RET.
ENDIF.
ENDIF.

APPEND GT_MSG_LOG.

CLEAR:WA_BILLING.

REFRESH:IT_BILLING,IT_RET,IT_SUCCESS.
REFRESH: IT_BDCDATA, IT_MESSAGES.

ENDLOOP.

PERFORM INSERT_TO_ZFI_CD USING LW_OUTPUT LV_CR_MEMO_NO.

ENDIF.

ELSE.
*&---------------------------------------------------------------------*
** Generate Error Log in case of Error while creating Credit Memo
** Request
*&---------------------------------------------------------------------*
LOOP AT GT_BAPIRET2 INTO GS_BAPIRET2.

CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

GT_MSG_LOG-MSGTY = GS_BAPIRET2-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = GS_BAPIRET2-ID
LANG = '-D'
NO = GS_BAPIRET2-NUMBER
V1 = GS_BAPIRET2-MESSAGE_V1
V2 = GS_BAPIRET2-MESSAGE_V2
V3 = GS_BAPIRET2-MESSAGE_V3
V4 = GS_BAPIRET2-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND GT_MSG_LOG.
ENDLOOP.

ENDIF.

ENDLOOP.

ENDFORM. " DEBIT_NOTE


*&---------------------------------------------------------------------*
*& Form CREDIT_NOTE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREDIT_NOTE .

REFRESH:GT_BAPISDITEM,GT_BAPISDITEMX,GT_BDCDATA,GT_MESSTAB,GT_BDCDATA,GT_BAPIPARTNR
,GT_BAPICONDITION,GT_BAPIRET2,
IT_BILLING,IT_RET,IT_SUCCESS,IT_MESSAGES[].

CLEAR:GS_KNVV,LW_GSBER,GS_MESSTAB,GV_RUN_DT,GS_BAPISDHEAD1,GS_BAPISDHEAD1X,GS_BAPIP
ARTNR,GS_BAPICONDITION,
LV_CR_MEMO_NO,LS_BAPIRET2_COMMIT,WA_BILLING,LW_OUTPUT.

LOOP AT GT_CRMEMO_DATA INTO LW_OUTPUT.


CLEAR LV_CR_MEMO_NO.
REFRESH:GT_BAPIRET2. "SHUBHANSHU
** Set line item details
PERFORM SET_VA_LNITM.

** Run BDC for VK11 to create Condition Record


PERFORM RUN_VK11_ZAVT.

** If there was n error while creating VK11 for ZVAT then goto
** next cr. memo. req.*********
IF GV_VK11_ERR = 'X'.
CONTINUE.
CLEAR GV_VK11_ERR.
ENDIF.

** Set header data


PERFORM SET_VA_HD.

** Set partners
PERFORM SET_VA_PARTNER.

** Set condition recs


PERFORM SET_VA_CND1.

** Call FM to create Credit Memo Request


CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'
EXPORTING
* SALESDOCUMENT =
SALES_HEADER_IN = GS_BAPISDHEAD1
SALES_HEADER_INX = GS_BAPISDHEAD1X
IMPORTING
SALESDOCUMENT_EX = LV_CR_MEMO_NO
TABLES
RETURN = GT_BAPIRET2
SALES_ITEMS_IN = GT_BAPISDITEM
SALES_ITEMS_INX = GT_BAPISDITEMX
SALES_PARTNERS = GT_BAPIPARTNR
SALES_CONDITIONS_IN = GT_BAPICONDITION.

IF NOT LV_CR_MEMO_NO IS INITIAL.


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = LS_BAPIRET2_COMMIT.

*&---------------------------------------------------------------------*
** Generate Error Log in case of Error while commiting Credit Memo
** Request
*&---------------------------------------------------------------------*
IF NOT LS_BAPIRET2_COMMIT IS INITIAL.
CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

GT_MSG_LOG-MSGTY = LS_BAPIRET2_COMMIT-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = LS_BAPIRET2_COMMIT-ID
LANG = '-D'
NO = LS_BAPIRET2_COMMIT-NUMBER
V1 = LS_BAPIRET2_COMMIT-MESSAGE_V1
V2 = LS_BAPIRET2_COMMIT-MESSAGE_V2
V3 = LS_BAPIRET2_COMMIT-MESSAGE_V3
V4 = LS_BAPIRET2_COMMIT-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND GT_MSG_LOG.

CONTINUE.

ELSE.

*&---------------------------------------------------------------------*
** Create Output Log (Success)
*&---------------------------------------------------------------------*
SORT GT_BAPIRET2 BY TYPE ID NUMBER.
DELETE ADJACENT DUPLICATES FROM GT_BAPIRET2
COMPARING TYPE ID NUMBER.

** Display message which mentions document saved.


DELETE GT_BAPIRET2 WHERE NOT ( TYPE = 'S' AND
ID = 'V1' AND
NUMBER = '311' ).

LOOP AT GT_BAPIRET2 INTO GS_BAPIRET2.


CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

MOVE LV_CR_MEMO_NO TO GT_MSG_LOG-VBELN_VA.

GT_MSG_LOG-MSGTY = GS_BAPIRET2-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = GS_BAPIRET2-ID
LANG = '-D'
NO = GS_BAPIRET2-NUMBER
V1 = GS_BAPIRET2-MESSAGE_V1
V2 = GS_BAPIRET2-MESSAGE_V2
V3 = GS_BAPIRET2-MESSAGE_V3
V4 = GS_BAPIRET2-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

WA_BILLING-REF_DOC = LV_CR_MEMO_NO .
WA_BILLING-REF_DOC_CA = 'C'.
APPEND WA_BILLING TO IT_BILLING.

CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'


TABLES
BILLINGDATAIN = IT_BILLING
RETURN = IT_RET
SUCCESS = IT_SUCCESS.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
WAIT = 'X'.

IF IT_SUCCESS IS NOT INITIAL.

CLEAR GT_BDCDATA[] .

REFRESH GT_BDCDATA .

READ TABLE IT_SUCCESS INTO WA_SUCCESS INDEX 1.

GT_MSG_LOG-BILL = WA_SUCCESS-BILL_DOC .

PERFORM BDC_DYNPRO USING 'SAPMV60A' '0101'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'VBRK-VBELN'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=FKFR'.
PERFORM BDC_FIELD USING 'VBRK-VBELN'
WA_SUCCESS-BILL_DOC.
OPTIONS-DISMODE = 'N'.
OPTIONS-UPDMODE = 'N'.
OPTIONS-DEFSIZE = 'X'.
CALL TRANSACTION 'VF02' USING GT_BDCDATA
OPTIONS FROM OPTIONS
MESSAGES INTO IT_MESSAGES.

IF IT_MESSAGES[] IS NOT INITIAL.

SORT IT_MESSAGES[] BY MSGTYP.


DELETE IT_MESSAGES[] WHERE MSGTYP NE 'E'.

IF IT_MESSAGES[] IS NOT INITIAL.


READ TABLE IT_MESSAGES INDEX 1.
CONCATENATE 'Error in' IT_MESSAGES-MSGV1
INTO GT_MSG_LOG-RELEASE SEPARATED BY ' '.

ELSE .

GT_MSG_LOG-RELEASE = 'Document Release' .

ENDIF.

ENDIF.

CLEAR:WA_SUCCESS.

ENDIF.

IF IT_RET IS NOT INITIAL.


SORT IT_RET BY TYPE.
DELETE IT_RET WHERE TYPE NE 'E'.
IF IT_RET IS NOT INITIAL.
READ TABLE IT_RET INTO WA_RET INDEX 1.
CONCATENATE 'Error in Creidt / Debit Note ' LV_CR_MEMO_NO INTO
GT_MSG_LOG-MESG SEPARATED BY ' '.
CLEAR:WA_ERR,WA_RET.
ENDIF.
ENDIF.

APPEND GT_MSG_LOG.

CLEAR:WA_BILLING.

REFRESH:IT_BILLING,IT_RET,IT_SUCCESS.
REFRESH: IT_BDCDATA, IT_MESSAGES.

ENDLOOP.

PERFORM INSERT_TO_ZFI_CD USING LW_OUTPUT LV_CR_MEMO_NO.

ENDIF.

ELSE.
*&---------------------------------------------------------------------*
** Generate Error Log in case of Error while creating Credit Memo
** Request
*&---------------------------------------------------------------------*
LOOP AT GT_BAPIRET2 INTO GS_BAPIRET2.

CLEAR GT_MSG_LOG.

MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.

GT_MSG_LOG-MSGTY = GS_BAPIRET2-TYPE.

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
ID = GS_BAPIRET2-ID
LANG = '-D'
NO = GS_BAPIRET2-NUMBER
V1 = GS_BAPIRET2-MESSAGE_V1
V2 = GS_BAPIRET2-MESSAGE_V2
V3 = GS_BAPIRET2-MESSAGE_V3
V4 = GS_BAPIRET2-MESSAGE_V4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

APPEND GT_MSG_LOG.
ENDLOOP.

ENDIF.

ENDLOOP.
ENDFORM. " CREDIT_NOTE
*&---------------------------------------------------------------------*
*& Form RUN_VK11_ZAVT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM RUN_VK11_ZAVT1 .

DATA LV_VAT_RATE TYPE STRING.


CLEAR GV_VK11_ERR.

REFRESH : GT_BDCDATA, GT_MESSTAB.


CLEAR : GT_BDCDATA, GS_MESSTAB.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ANTA'.
PERFORM BDC_FIELD USING 'RV13A-KSCHL'
'ZVAT'.

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RV130-SELKZ(04)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=WEIT'.
PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'
'X'.
* PERFORM BDC_FIELD USING 'RV130-SELKZ(04)'
* 'X'.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1999'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KONP-MWSK1(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KOMG-AUART_SD'
'ZCD1'. "Shubhanshu
PERFORM BDC_FIELD USING 'KOMG-KUNNR'
LW_OUTPUT-KUNNR.
PERFORM BDC_FIELD USING 'KOMG-MATNR(01)'
'RDS'.

CLEAR GS_VAT_RT.
* READ TABLE GT_VAT_RT INTO GS_VAT_RT WITH KEY KUNNR = LW_OUTPUT-KUNNR.
* IF SY-SUBRC = 0.
* IF P_VAT = 'X'.
* LV_VAT_RATE = GS_VAT_RT-VAT_RATE.
* ELSE.
* LV_VAT_RATE = 0.
* ENDIF.
* ENDIF.

IF C_TAX = 'X' .
READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.

READ TABLE LT_GSBER INTO LW_GSBER WITH KEY GSBER = GS_KNVV-VKBUR .

IF SY-SUBRC = 0 .

LV_VAT_RATE = LW_OUTPUT-VAT_RATE .

ENDIF.

ENDIF.

PERFORM BDC_FIELD USING 'KONP-KBETR(01)'


LV_VAT_RATE.

PERFORM BDC_FIELD USING 'RV13A-DATAB(01)'


GV_RUN_DT.
PERFORM BDC_FIELD USING 'RV13A-DATBI(01)'
GV_RUN_DT.

PERFORM BDC_FIELD USING 'KONP-MWSK1(01)'


'A0'.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1999'.


PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KOMG-MATNR(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SICH'.

REFRESH GT_MESSTAB.

CALL TRANSACTION 'VK11' USING GT_BDCDATA


MODE 'N'
UPDATE GS_CTU_MODE
MESSAGES INTO GT_MESSTAB.

** Write Error Log for VK11


READ TABLE GT_MESSTAB INTO GS_MESSTAB
WITH KEY MSGTYP = 'S'
MSGID = 'VK'
MSGNR = '023'.
IF SY-SUBRC <> 0.
GV_VK11_ERR = 'X'.

LOOP AT GT_MESSTAB INTO GS_MESSTAB.


GT_MSG_LOG-MSGTY = GS_MESSTAB-MSGTYP.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = GS_MESSTAB-MSGID
LANG = '-D'
NO = GS_MESSTAB-MSGNR
V1 = GS_MESSTAB-MSGV1
V2 = GS_MESSTAB-MSGV2
V3 = GS_MESSTAB-MSGV3
V4 = GS_MESSTAB-MSGV4
IMPORTING
MSG = GT_MSG_LOG-MSGV1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

* MOVE-CORRESPONDING GS_MESSTAB TO GT_MSG_LOG.


MOVE LW_OUTPUT-KUNNR TO GT_MSG_LOG-KUNNR.
APPEND GT_MSG_LOG.
ENDLOOP.
ELSE.
CLEAR GV_VK11_ERR.
COMMIT WORK AND WAIT.
ENDIF.

ENDFORM. " RUN_VK11_ZAVT1


*&---------------------------------------------------------------------*
*& Form SET_VA_HD1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_HD1 .

CLEAR : GS_BAPISDHEAD1, GS_BAPISDHEAD1X.

GS_BAPISDHEAD1-DOC_TYPE = 'ZCD1'. "Shubhanshu


GS_BAPISDHEAD1X-DOC_TYPE = 'X'.

** Order Reason
GS_BAPISDHEAD1-ORD_REASON = 'Z08'.
GS_BAPISDHEAD1X-ORD_REASON = 'X'.

READ TABLE GT_KNVV INTO GS_KNVV WITH KEY KUNNR = LW_OUTPUT-KUNNR.


IF SY-SUBRC = 0.
GS_BAPISDHEAD1-SALES_ORG = GS_KNVV-VKORG.
GS_BAPISDHEAD1-DISTR_CHAN = GS_KNVV-VTWEG.
GS_BAPISDHEAD1-DIVISION = GS_KNVV-SPART.
GS_BAPISDHEAD1-SALES_OFF = GS_KNVV-VKBUR.

GS_BAPISDHEAD1X-SALES_ORG = 'X'.
GS_BAPISDHEAD1X-DISTR_CHAN = 'X'.
GS_BAPISDHEAD1X-DIVISION = 'X'.
GS_BAPISDHEAD1X-SALES_OFF = 'X'.
ENDIF.

GS_BAPISDHEAD1-PRICE_DATE = P_RUN_DT.
GS_BAPISDHEAD1-DOC_DATE = P_RUN_DT.

GS_BAPISDHEAD1X-PRICE_DATE = 'X'.
GS_BAPISDHEAD1X-DOC_DATE = 'X'.

GS_BAPISDHEAD1-PURCH_NO_C = LW_OUTPUT-VBELN.
GS_BAPISDHEAD1X-PURCH_NO_C = 'X'.
GS_BAPISDHEAD1-VERSION = 'CASH001'.
GS_BAPISDHEAD1X-VERSION = 'X'.

ENDFORM. " SET_VA_HD1


*&---------------------------------------------------------------------*
*& Form SET_VA_CND1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SET_VA_CND1 .
CLEAR : GS_BAPICONDITION, GT_BAPICONDITION.
REFRESH:GT_BAPICONDITION.
GS_BAPICONDITION-ITM_NUMBER = '10'.
GS_BAPICONDITION-COND_TYPE = GV_CDCND.
GS_BAPICONDITION-COND_VALUE = ( LW_OUTPUT-DISC_AMT_DIFF / 10 ) .
APPEND GS_BAPICONDITION TO GT_BAPICONDITION.
ENDFORM. " SET_VA_CND1

Вам также может понравиться