Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&------------------------------------------------------------*
- *& Change History -
- *& Note 807160 - This note includes changes for resolution
- *& 1751 specifying changes in list and magnetic
- *& output.
- *&------------------------------------------------------------*
- REPORT J_1AF026 NO STANDARD PAGE HEADING
- LINE-SIZE 150 "changes
- LINE-COUNT 65
- MESSAGE-ID 8A.
- ************************************************************************
- * Report J_1AF026
- * Short description of the program:Social security withholding
- * Changed Function/flow of the program
- * Report Output Converted To ALV using Standard SAP Function
- * Module 'REUSE_ALV_LIST_DISPLAY'.
- * Used LIST_APPEND parameter of LAYOUT structure and handled *
- * END_OF_LIST event to display multiple lists.
- *---------------------------------------------------------------------*
- TYPE-POOLS: slis. "ALV Addition
- *----------------------------------------------------------------------
- * Tables
- *----------------------------------------------------------------------
- TABLES:
- ADDR1_SEL, " address selection parameter
- BHDGD, " output header
- BKPF, " document header
- BSEC, " one-time data
- BSEG, " document lines
- LFA1, " vendor master
- WITH_ITEM, " withholding segment
- T059O, " off. withhld. code
- T059Z, " withholding codes
- SADR, " company address
- T001, " company code
- T001Z, " company code /add. data
- J_1AFRID. " foreign person id
- *----------------------------------------------------------------------
- * Selection screen
- *----------------------------------------------------------------------
- SELECTION-SCREEN SKIP.
- SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-S01.
- SELECT-OPTIONS: S_WITHT FOR WITH_ITEM-WITHT.
- SELECTION-SCREEN ULINE.
- PARAMETERS: S_NEWDAT LIKE J_1AFPDO-NEWDAT,
- S_FILE LIKE RFPDO1-ALLGUNIX.
- SELECTION-SCREEN END OF BLOCK 1.
- *----------------------------------------------------------------------
- * Fields & int. tables
- *----------------------------------------------------------------------
- DATA:
- HEADER,
- XLINES TYPE P,
- XDMBTR LIKE BSEG-DMBTR,
- XTEXT(80),
- PDATE(10),
- CHAR21(21),
- XSTCD1 LIKE LFA1-STCD1. " Tax Number
- * withholding codes
- DATA: BEGIN OF XT059Z OCCURS 10.
- INCLUDE STRUCTURE T059Z.
- DATA: END OF XT059Z.
- * vendor master data
- DATA: BEGIN OF XLFA1 OCCURS 40.
- INCLUDE STRUCTURE LFA1.
- DATA END OF XLFA1.
- DATA:
- * data for printing
- BEGIN OF DETAIL OCCURS 100,
- BUDAT LIKE BKPF-BUDAT,
- * QSCOD(3),
- BLDAT LIKE BKPF-BLDAT, "2148881
- QSCOD(3),
- LIFNR LIKE LFA1-LIFNR,
- NAME1 LIKE LFA1-NAME1,
- STCDT LIKE LFA1-STCDT,
- STCD1 LIKE LFA1-STCD1,
- * WTH_AMNT LIKE BSEG-DMBTR,
- * WTH_AMNT_N LIKE BSEG-DMBTR,
- * WTH_AMNT_E LIKE BSEG-DMBTR,
- WTH_BASE LIKE BSEG-DMBTR,
- WTH_AMNT LIKE BSEG-DMBTR,
- * WTH_AMNT_B LIKE BSEG-DMBTR, "2148881
- * WTH_AMNT_T LIKE BSEG-DMBTR, "2148881
- GJAHR LIKE BKPF-GJAHR,
- BELNR LIKE BSEG-BELNR,
- CTNUM LIKE WITH_ITEM-CTNUMBER, "Note 807160
- CANCEL, "Note 1014319
- END OF DETAIL,
- * data collected for dataset
- BEGIN OF DETAIL2 OCCURS 100,
- * STCD1(11),
- * BUDAT LIKE BKPF-BUDAT,
- * QSCOD(3),
- * WTH_AMNT_N LIKE BSEG-DMBTR,
- * WTH_AMNT_E LIKE BSEG-DMBTR,
- FORMCD(4) TYPE C, "2148881
- VERSN(4) TYPE N, "2148881
- FILL1(10) TYPE C, "2148881
- TAXPAYR_ID(11) TYPE C, "2148881
- NTAXCD(3) TYPE N, "2148881
- QSCOD(3), "2148881
- STCD1(11),
- BUDAT LIKE BKPF-BUDAT,
- DOCTYP(2) TYPE C, "2148881
- BLDAT LIKE BKPF-BLDAT, "2148881
- BELNR(16) TYPE C, "2148881
- * WTH_AMNT_B LIKE BSEG-DMBTR, "2148881
- * WTH_AMNT_T LIKE BSEG-DMBTR, "2148881
- WTH_BASE LIKE BSEG-DMBTR, "N2171941
- WTH_AMNT LIKE BSEG-DMBTR, "N2171941
- CTNUM LIKE WITH_ITEM-CTNUMBER, "Note 807160
- CANCEL, "Note 1014319
- END OF DETAIL2,
- * data for dataset
- BEGIN OF DETAIL_DS,
- ** stcd1(13), " Note 211392 "Note 807160
- * stcd1(11), " Note 807160
- * budat(10), " Note 211392
- * qscod(3),
- * wth_amnt_n(11) type c, " Note 211392
- * wth_amnt_e(11) type c, " Note 211392
- * zero4(4) type c value '0000',
- * CTNUM LIKE WITH_ITEM-CTNUMBER, "Note 807160
- FORMCD(4) TYPE C, "2148881
- VERSN(4) TYPE N, "2148881
- FILL1(10) TYPE C, "2148881
- TAXPAYR_ID(11) TYPE C, "2148881
- NTAXCD(3) TYPE N, "2148881
- qscod(3),
- stcd1(11), " Note 807160
- budat(10), " Note 211392
- DOCTYP(2) TYPE N, "2148881
- BLDAT(10) TYPE C, "2148881
- BELNR(16) TYPE C, "2148881
- WTH_AMNT_B(14) TYPE C, "2148881
- WTH_AMNT_T(14) TYPE C, "2148881
- FILL2(25) TYPE C, "2148881
- FILL3(10) TYPE C, "2148881
- FILL4(14) TYPE C, "2148881
- FILL5(30) TYPE C, "2148881
- END OF DETAIL_DS,
- * totals per code
- BEGIN OF TOTAL_CODE OCCURS 10,
- QSCOD(3),
- * WTH_AMNT LIKE BSEG-DMBTR,
- WTH_BASE LIKE BSEG-DMBTR,
- WTH_AMNT LIKE BSEG-DMBTR,
- END OF TOTAL_CODE,
- * company code data
- BEGIN OF XT001,
- STCDT LIKE LFA1-STCDT,
- STCD1 LIKE LFA1-STCD1,
- END OF XT001.
- * foreign persons id.
- DATA: BEGIN OF XFRID OCCURS 10.
- INCLUDE STRUCTURE J_1AFRID.
- DATA: END OF XFRID.
- DATA: FLAG_CANCEL TYPE C. "Note 1014319
- DATA: LT_BKPF TYPE TABLE OF bkpf.
- DATA: hlp_msg(150) TYPE C. "2148881
- * ALV Changes starts
- *Header Data
- DATA:
- gr_header TYPE REF TO cl_salv_form_layout_grid,
- gr_header1 TYPE REF TO cl_salv_form_layout_grid,
- gr_label TYPE REF TO cl_salv_form_label,
- gr_text TYPE REF TO cl_salv_form_text.
- *Internal tables
- *Output Lists
- DATA: gt_detail TYPE TABLE OF gss_j_1af026_alv_list1,
- gt_total_code TYPE TABLE OF gss_j_1af026_alv_list2,
- *Internal table for ALV events
- gt_events TYPE slis_t_event.
- *report name
- DATA gv_repid LIKE sy-repid.
- *Constants
- CONSTANTS gc_itab_name TYPE dd02l-tabname VALUE 'GT_DETAIL'.
- CONSTANTS gc_layout TYPE c VALUE 'X'.
- CONSTANTS gc_ddic_txt TYPE c VALUE 'L'.
- CONSTANTS gc_pf_status_formname TYPE slis_formname VALUE
- 'PF_STATUS_ALV'.
- CONSTANTS gc_pf_status_name TYPE gui_status VALUE 'STANDARD_ALV'.
- CONSTANTS:
- gc_structure_name1 TYPE dd02l-tabname VALUE 'GSS_J_1AF026_ALV_LIST1',
- gc_structure_name2 TYPE dd02l-tabname VALUE 'GSS_J_1AF026_ALV_LIST2',
- gc_internal_tabname TYPE dd02l-tabname VALUE 'GT_DETAIL'.
- CONSTANTS gc_filename TYPE fileintern VALUE 'FI_J1AF026_FILE'.
- *---------------------------------------------------------------------*
- INITIALIZATION.
- gv_repid = sy-repid.
- *Build Events, and subroutines for the events
- PERFORM eventtab_build CHANGING gt_events.
- * ALV Changes ends
- *----------------------------------------------------------------------*
- * Checking the parameters
- *----------------------------------------------------------------------*
- AT SELECTION-SCREEN.
- PERFORM CHECK_SELECTION_SCREEN.
- *----------------------------------------------------------------------*
- * START-OF-SELECTION
- *----------------------------------------------------------------------*
- START-OF-SELECTION.
- * Output header
- IF NOT s_newdat IS INITIAL.
- CALL FUNCTION 'FILE_VALIDATE_NAME'
- EXPORTING
- logical_filename = gc_filename
- changing
- physical_filename = s_file
- EXCEPTIONS
- LOGICAL_FILENAME_NOT_FOUND = 1
- VALIDATION_FAILED = 2
- OTHERS = 3.
- IF sy-subrc <> 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- * OPEN DATASET s_file FOR OUTPUT IN TEXT MODE
- * ENCODING NON-UNICODE IGNORING CONVERSION ERRORS.
- OPEN DATASET S_FILE FOR OUTPUT IN BINARY MODE.
- ENDIF.
- CLEAR bhdgd.
- BHDGD-INIFL = 0.
- BHDGD-LINES = 117.
- BHDGD-UNAME = SY-UNAME.
- BHDGD-REPID = SY-REPID.
- BHDGD-LINE1 = TEXT-H01.
- BHDGD-BUKRS = BR_BUKRS-LOW.
- IF BR_BUDAT-LOW IS INITIAL AND
- BR_BUDAT-HIGH IS INITIAL.
- XTEXT = TEXT-H01.
- ELSE.
- XTEXT = TEXT-H02.
- PDATE = BR_BUDAT-LOW+6(2).
- PDATE+2 = '/'.
- PDATE+3 = BR_BUDAT-LOW+4(2).
- PDATE+5 = '/'.
- PDATE+6 = BR_BUDAT-LOW(4).
- REPLACE '&1' WITH PDATE INTO XTEXT.
- IF NOT BR_BUDAT-HIGH IS INITIAL.
- PDATE = BR_BUDAT-HIGH+6(2).
- PDATE+2 = '/'.
- PDATE+3 = BR_BUDAT-HIGH+4(2).
- PDATE+5 = '/'.
- PDATE+6 = BR_BUDAT-HIGH(4).
- ENDIF.
- REPLACE '&2' WITH PDATE INTO XTEXT.
- ENDIF.
- BHDGD-LINE2 = XTEXT.
- *----------------------------------------------------------------------*
- * SELECTION
- *----------------------------------------------------------------------*
- GET BKPF.
- * check: bkpf-stblg is initial,
- ON CHANGE OF BKPF-BUKRS.
- PERFORM READ_COMPANY_DATA.
- ENDON.
- **Note 1014319 Begins
- IF NOT BKPF-STBLG IS INITIAL.
- * FLAG_CANCEL = 'X'.
- SELECT * FROM BKPF INTO TABLE LT_BKPF WHERE
- bukrs = bkpf-bukrs AND
- belnr = bkpf-stblg AND
- gjahr = bkpf-stjah AND
- budat IN br_budat.
- IF sy-subrc = 0.
- FLAG_CANCEL = 'X'.
- ENDIF.
- ELSE.
- FLAG_CANCEL = ' '.
- ENDIF.
- **Note 1014319 Ends
- GET BSEG.
- CHECK: BSEG-KOART EQ 'K',
- NOT BSEG-QSSKZ IS INITIAL,
- BSEG-XZAHL NE SPACE,
- BSEG-REBZT NE 'U'.
- PERFORM READ_WITHHLD_DATA.
- *----------------------------------------------------------------------*
- * END-OF-SELECTION
- *----------------------------------------------------------------------*
- END-OF-SELECTION.
- FORMAT INTENSIFIED OFF.
- PERFORM PRINT_DATA.
- * ALV Changes starts
- * Display ALV
- header = 0.
- PERFORM display_alv.
- * ALV Changes ends
- *----------------------------------------------------------------------*
- * LINE-SELECTION
- *----------------------------------------------------------------------*
- AT LINE-SELECTION.
- TYPE-POOLS sp01r.
- DATA up_list TYPE sp01r_id_list WITH HEADER LINE. "#EC *
- CHECK hlp_msg NE space.
- SET PARAMETER ID 'GLX' FIELD S_FILE.
- SUBMIT rfasldpc VIA SELECTION-SCREEN AND RETURN.
- CHECK DETAIL-BELNR NE SPACE.
- SET PARAMETER ID 'BLN' FIELD DETAIL-BELNR.
- SET PARAMETER ID 'BUK' FIELD T001-BUKRS.
- SET PARAMETER ID 'GJR' FIELD DETAIL-GJAHR.
- CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
- CLEAR DETAIL.
- * ALV Comment starts
- *----------------------------------------------------------------------*
- * TOP-OF-PAGE
- *----------------------------------------------------------------------*
- *TOP-OF-PAGE.
- *
- ** Output header
- * PERFORM BATCH-HEADING(RSBTCHH0).
- *
- * ULINE.
- *
- * IF HEADER = 0.
- * PERFORM PRINT_HEADER_0.
- * ELSE.
- * PERFORM PRINT_HEADER_1.
- * ENDIF.
- *
- * ULINE.
- * SKIP.
- * ALV Comment ends
- *&---------------------------------------------------------------------*
- *& Form CHECK_SELECTION_SCREEN
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM CHECK_SELECTION_SCREEN.
- * check that only one company code entered
- DESCRIBE TABLE BR_BUKRS LINES XLINES.
- IF XLINES NE 1 OR
- BR_BUKRS-LOW IS INITIAL OR
- ( BR_BUKRS-LOW NE BR_BUKRS-HIGH AND
- NOT BR_BUKRS-HIGH IS INITIAL ).
- MESSAGE E821.
- ENDIF.
- IF NOT S_NEWDAT IS INITIAL. " create dataset ?
- IF S_FILE IS INITIAL. " dataset entered ?
- MESSAGE E811.
- ELSE.
- PERFORM file_validate.
- ENDIF.
- * OPEN DATASET S_FILE FOR OUTPUT IN TEXT MODE
- * ENCODING NON-UNICODE IGNORING CONVERSION ERRORS.
- *
- * IF SY-SUBRC NE 0.
- * MESSAGE E812 WITH S_FILE.
- * ENDIF.
- ENDIF.
- ENDFORM. " CHECK_SELECTION_SCREEN
- *&---------------------------------------------------------------------*
- *& Form READ_COMPANY_DATA
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM READ_COMPANY_DATA.
- SELECT SINGLE * FROM T001 WHERE BUKRS = BKPF-BUKRS.
- CLEAR: ADDR1_SEL, SADR.
- ADDR1_SEL-ADDRNUMBER = T001-ADRNR. "SADR40A
- CALL FUNCTION 'ADDR_GET'
- EXPORTING
- ADDRESS_SELECTION = ADDR1_SEL
- ADDRESS_GROUP = 'CA01'
- * read_sadr_only = 'X'
- IMPORTING
- SADR = SADR.
- * select single * from sadr where adrnr eq t001-adrnr
- * and natio eq space.
- SELECT SINGLE * FROM T001Z WHERE BUKRS = T001-BUKRS
- AND PARTY = 'J1ATID'.
- XT001-STCDT = T001Z-PAVAL.
- CLEAR T001Z.
- SELECT SINGLE * FROM T001Z WHERE BUKRS = T001-BUKRS
- AND PARTY = 'J1AIDN'.
- XT001-STCD1 = T001Z-PAVAL.
- ENDFORM. " READ_COMPANY_DATA
- *&---------------------------------------------------------------------*
- *& Form READ_MASTER_DATA
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM READ_MASTER_DATA USING F_CPD.
- IF F_CPD NE SPACE.
- SELECT SINGLE * FROM BSEC WHERE BUKRS = BSEG-BUKRS
- AND BELNR = BSEG-BELNR
- AND GJAHR = BSEG-GJAHR
- AND BUZEI = BSEG-BUZEI.
- MOVE-CORRESPONDING BSEC TO XLFA1.
- XLFA1-LIFNR = BSEG-LIFNR.
- IF BSEC-NAME1 IS INITIAL.
- XLFA1-NAME1 = BSEC-NAME2.
- ENDIF.
- XSTCD1 = XLFA1-STCD1.
- IF XLFA1-LAND1 NE T001-LAND1.
- PERFORM READ_FOREIGN_ID
- USING XLFA1-LAND1 XLFA1-STKZN
- CHANGING XSTCD1.
- ENDIF.
- XLFA1-STCD1 = XSTCD1.
- CHECK 1 = 2.
- ENDIF.
- CHECK BSEG-LIFNR NE XLFA1-LIFNR.
- CLEAR: LFA1, XLFA1.
- READ TABLE XLFA1 WITH KEY MANDT = SY-MANDT
- LIFNR = BSEG-LIFNR.
- CHECK SY-SUBRC NE 0.
- SELECT SINGLE * FROM LFA1 WHERE LIFNR = BSEG-LIFNR.
- IF NOT LFA1-FISKN IS INITIAL.
- SELECT SINGLE * FROM LFA1 WHERE LIFNR = LFA1-FISKN.
- ENDIF.
- MOVE-CORRESPONDING LFA1 TO XLFA1.
- IF LFA1-NAME1 IS INITIAL.
- XLFA1-NAME1 = LFA1-NAME2.
- ENDIF.
- XSTCD1 = LFA1-STCD1.
- IF LFA1-LAND1 NE T001-LAND1.
- PERFORM READ_FOREIGN_ID
- USING LFA1-LAND1 LFA1-STKZN
- CHANGING XSTCD1.
- ENDIF.
- XLFA1-STCD1 = XSTCD1.
- APPEND XLFA1.
- ENDFORM. " READ_MASTER_DATA
- *&---------------------------------------------------------------------*
- *& Form READ_WITHHLD_DATA
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM READ_WITHHLD_DATA.
- * read the withholding data segment
- SELECT * FROM WITH_ITEM WHERE BUKRS EQ BKPF-BUKRS
- AND BELNR EQ BSEG-BELNR
- AND GJAHR EQ BSEG-GJAHR
- AND BUZEI EQ BSEG-BUZEI
- AND WITHT IN S_WITHT
- AND WT_WITHCD NE SPACE
- AND WT_STAT EQ SPACE
- AND WT_GRUWTPD EQ SPACE
- AND WT_DOWNC EQ SPACE "Note 637932
- AND WT_QBSHH NE 0.
- IF SY-SUBRC NE 0. "Note 637932
- REJECT.
- ENDIF.
- ON CHANGE OF BSEG-LIFNR.
- PERFORM READ_MASTER_DATA USING ' '.
- ENDON.
- ON CHANGE OF BSEG-BUKRS OR BSEG-BELNR OR BSEG-GJAHR OR BSEG-BUZEI.
- IF BSEG-XCPDD NE SPACE AND
- XLFA1-XCPDK NE SPACE.
- PERFORM READ_MASTER_DATA USING 'X'.
- ENDIF.
- ENDON.
- PERFORM READ_WITHHLD_CODE.
- PERFORM FILL_DETAIL.
- ENDSELECT.
- ENDFORM. " READ_WITHHLD_DATA
- *&---------------------------------------------------------------------*
- *& Form READ_WITHHLD_CODE
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM READ_WITHHLD_CODE.
- CLEAR: XT059Z, T059Z.
- READ TABLE XT059Z WITH KEY MANDT = SY-MANDT
- LAND1 = T001-LAND1
- WITHT = WITH_ITEM-WITHT
- WT_WITHCD = WITH_ITEM-WT_WITHCD.
- CHECK SY-SUBRC NE 0.
- SELECT SINGLE * FROM T059Z WHERE LAND1 = T001-LAND1
- AND WITHT = WITH_ITEM-WITHT
- AND WT_WITHCD = WITH_ITEM-WT_WITHCD.
- MOVE-CORRESPONDING T059Z TO XT059Z.
- APPEND XT059Z.
- ENDFORM. " READ_WITHHLD_CODE
- *&---------------------------------------------------------------------*
- *& Form FILL_DETAIL
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM FILL_DETAIL.
- CLEAR DETAIL.
- MOVE-CORRESPONDING XLFA1 TO DETAIL.
- DETAIL-BLDAT = BKPF-BLDAT. "2148881
- DETAIL-BUDAT = BKPF-BUDAT.
- DETAIL-GJAHR = BKPF-GJAHR.
- DETAIL-BELNR = BKPF-BELNR.
- DETAIL-QSCOD = XT059Z-QSCOD.
- * DETAIL-WTH_AMNT = WITH_ITEM-WT_QBSHH.
- * DETAIL-WTH_BASE = WITH_ITEM-J_1AF_WT_REPBS.
- DETAIL-WTH_BASE = WITH_ITEM-WT_QSSHH.
- DETAIL-WTH_AMNT = WITH_ITEM-WT_QBSHH.
- DETAIL-CTNUM = WITH_ITEM-CTNUMBER. "Note 807160
- **Note 1014319 Begins
- IF FLAG_CANCEL EQ 'X'.
- MOVE '1' TO DETAIL-CANCEL.
- ENDIF.
- **Note 1014319 Ends
- * IF WITH_ITEM-WT_QBSHH > 0. "N2171941
- * DETAIL-WTH_AMNT_T = WITH_ITEM-WT_QBSHH.
- * ELSE.
- * DETAIL-WTH_AMNT_T = WITH_ITEM-WT_QBSHH * -1.
- * ENDIF.
- *
- ** IF WITH_ITEM-J_1AF_WT_REPBS > 0.
- ** DETAIL-WTH_AMNT_B = WITH_ITEM-J_1AF_WT_REPBS.
- ** ELSE.
- ** DETAIL-WTH_AMNT_B = WITH_ITEM-J_1AF_WT_REPBS * -1.
- ** DETAIL-WTH_BASE = DETAIL-WTH_BASE * -1.
- ** ENDIF.
- *
- * IF WITH_ITEM-WT_QSSHH > 0.
- * DETAIL-WTH_AMNT_B = WITH_ITEM-WT_QSSHH.
- * ELSE.
- * DETAIL-WTH_AMNT_B = WITH_ITEM-WT_QSSHH * -1.
- ** DETAIL-WTH_BASE = DETAIL-WTH_BASE * -1.
- * ENDIF. "N2171941
- MOVE-CORRESPONDING DETAIL TO TOTAL_CODE.
- COLLECT: DETAIL, TOTAL_CODE.
- ENDFORM. " FILL_DETAIL
- *&---------------------------------------------------------------------*
- *& Form PRINT_DATA
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM PRINT_DATA.
- DATA: ls_total_code TYPE gss_j_1af026_alv_list2. "ALV Addition
- DATA: lt_formcode TYPE TABLE OF FIWTARC_FORMCOD. "2148881
- DATA: ls_formcode type FIWTARC_FORMCOD. "2148881
- DATA: ls_t001z TYPE t001z, "2148881
- help_bukrs(5) TYPE C,
- help_file(50) TYPE C,
- temp1 TYPE STRING,
- temp2 TYPE STRING,
- crlf(2) TYPE C.
- crlf = cl_abap_char_utilities=>cr_lf.
- SELECT SINGLE * FROM t001z INTO ls_t001z "2148881
- WHERE bukrs EQ br_bukrs-low "2148881
- AND party EQ 'JAR026'. "2148881
- IF ls_t001z-paval IS INITIAL.
- SELECT SINGLE * FROM t001z INTO ls_t001z "2148881
- WHERE bukrs EQ br_bukrs-low "2148881
- AND party EQ 'J1AIDN'. "2148881
- ENDIF.
- SELECT * from FIWTARC_FORMCOD "2148881
- INTO TABLE lt_formcode "2148881
- WHERE LAND1 = 'AR'. "2148881
- SORT: DETAIL, TOTAL_CODE.
- LOOP AT DETAIL.
- PERFORM PRINT_DETAIL.
- AT LAST.
- * ALV Comment starts
- * FORMAT INTENSIFIED ON.
- *
- * ULINE.
- * ALV Comment ends
- SUM.
- * ALV Comment starts
- * WRITE:/ TEXT-T01,
- * DETAIL-WTH_AMNT CURRENCY T001-WAERS
- * UNDER DETAIL-WTH_AMNT_N.
- * ALV Comment ends
- ENDAT.
- ENDLOOP.
- IF S_NEWDAT NE SPACE.
- SORT DETAIL2.
- **Note 1014319 Begins
- * LOOP AT DETAIL2.
- * LOOP AT DETAIL2 WHERE CANCEL IS INITIAL.
- DATA: AFIP_BELNR(11) TYPE N. "2148881
- LOOP AT DETAIL2 WHERE CANCEL IS INITIAL.
- **Note 1014319 Ends
- * " Begin Note 211392
- * MOVE-CORRESPONDING DETAIL2 TO DETAIL_DS.
- * write detail2-stcd1 to detail_ds-stcd1 "Note 807160 changes
- * using edit mask '__-________-_'.
- concatenate detail2-budat+6(2) '/' detail2-budat+4(2) '/'
- detail2-budat(4) into detail_ds-budat.
- * move : detail2-qscod to detail_ds-qscod,
- * detail2-wth_amnt_n to detail_ds-wth_amnt_n,
- * detail2-wth_amnt_e to detail_ds-wth_amnt_e,
- * detail2-stcd1 to detail_ds-stcd1, "Note 807160
- * detail2-ctnum to detail_ds-ctnum. "Note 807160
- ** " End Note 211392
- * SHIFT DETAIL_DS-WTH_AMNT_E RIGHT.
- * SHIFT DETAIL_DS-WTH_AMNT_N RIGHT.
- *
- * TRANSFER DETAIL_DS TO S_FILE.
- "2148881
- concatenate detail2-bldat+6(2) '/' detail2-bldat+4(2) '/'
- detail2-bldat(4) into detail_ds-bldat.
- "2148881
- move : detail2-qscod to detail_ds-qscod,
- detail2-wth_base to detail_ds-wth_amnt_b, "N2171941
- detail2-wth_amnt to detail_ds-wth_amnt_t, "N2171941
- detail2-stcd1 to detail_ds-stcd1. "Note 807160
- READ TABLE lt_formcode INTO ls_formcode "2148881
- with key land1 = 'AR' "2148881
- WT_QSCOD = detail2-qscod. "2148881
- IF SY-SUBRC = 0. "2148881
- detail_ds-FORMCD = ls_formcode-FORM_CODE. "2148881
- ELSE. "2148881
- detail_ds-FORMCD = '2004'. "2148881
- ENDIF. "2148881
- detail_ds-VERSN = '0100'. "2148881
- detail_ds-TAXPAYR_ID = ls_t001z-paval. "2148881
- detail_ds-NTAXCD = '353'. "2148881
- detail_ds-DOCTYP = 6. "2148881
- AFIP_BELNR = detail2-BELNR. "2148881
- concatenate 'X' AFIP_BELNR ' ' into
- detail_ds-belnr.
- SHIFT DETAIL_DS-WTH_AMNT_B RIGHT. "N2171941
- SHIFT DETAIL_DS-WTH_AMNT_T RIGHT. "N2171941
- TRANSFER DETAIL_DS TO S_FILE.
- TRANSFER crlf TO S_FILE.
- CLEAR: AFIP_BELNR. "2148881
- ENDLOOP.
- CLOSE DATASET S_FILE.
- ENDIF.
- HEADER = 1.
- NEW-PAGE.
- FORMAT INTENSIFIED OFF.
- DELETE TOTAL_CODE WHERE WTH_AMNT = 0.
- LOOP AT TOTAL_CODE.
- CLEAR T059O.
- SELECT SINGLE * FROM T059O WHERE LAND1 = T001-LAND1
- AND WT_QSCOD = TOTAL_CODE-QSCOD.
- ADD TOTAL_CODE-WTH_AMNT TO XDMBTR.
- * ALV Comment starts
- * WRITE:/ TOTAL_CODE-QSCOD,
- * 9 T059O-TEXT40,
- * TOTAL_CODE-WTH_AMNT CURRENCY T001-WAERS.
- * ALV Comment ends
- * ALV Changes starts
- MOVE total_code-qscod TO ls_total_code-qscod.
- MOVE t059o-text40 TO ls_total_code-text40.
- * MOVE total_code-wth_amnt TO ls_total_code-wth_amnt.
- MOVE total_code-wth_base TO ls_total_code-wth_base.
- MOVE total_code-wth_amnt TO ls_total_code-wth_amnt.
- APPEND ls_total_code TO gt_total_code.
- * ALV Changes ends
- AT LAST.
- * FORMAT INTENSIFIED ON.
- * ULINE.
- *
- * WRITE:/ TEXT-T01,
- * XDMBTR CURRENCY T001-WAERS UNDER TOTAL_CODE-WTH_AMNT.
- ENDAT.
- ENDLOOP.
- CLEAR DETAIL.
- *ENDFORM. " PRINT_DATA
- WRITE sy-uline.
- FORMAT COLOR 2 INTENSIFIED OFF.
- help_bukrs = br_bukrs-low.
- help_file = S_FILE.
- hlp_msg = Text-605. "'File & Created for Company code &'
- SPLIT hlp_msg AT '&' INTO temp1 hlp_msg.
- CONCATENATE temp1 help_file INTO temp2
- SEPARATED BY SPACE.
- CONCATENATE temp2 hlp_msg INTO hlp_msg
- SEPARATED BY SPACE.
- REPLACE '&' WITH help_bukrs INTO hlp_msg.
- CONDENSE hlp_msg.
- SHIFT hlp_msg RIGHT.
- hlp_msg(1) = hlp_msg+149(1) = sy-vline.
- WRITE hlp_msg.
- WRITE sy-uline.
- ENDFORM. " PRINT_DATA
- *---------------------------------------------------------------------*
- * AT LINE-SELECTION *
- *---------------------------------------------------------------------*
- * Call for report RFASLDPC To Download file to local PC *
- *---------------------------------------------------------------------*
- *&---------------------------------------------------------------------*
- *& Form PRINT_DETAIL
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM PRINT_DETAIL.
- DATA ls_detail TYPE gss_j_1af026_alv_list1. "ALV Addition
- FORMAT COLOR OFF.
- * ALV Comment starts
- * WRITE:/ DETAIL-BUDAT,
- * 14 DETAIL-QSCOD,
- * 22 DETAIL-LIFNR,
- * DETAIL-NAME1(25),
- * DETAIL-STCDT.
- * ALV Comment ends
- * ALV Changes starts
- MOVE detail-budat TO ls_detail-budat.
- MOVE detail-qscod TO ls_detail-qscod.
- MOVE detail-lifnr TO ls_detail-lifnr.
- MOVE detail-name1 TO ls_detail-name1.
- MOVE detail-stcdt TO ls_detail-stcdt.
- MOVE detail-ctnum TO ls_detail-ctnum.
- * ALV Changes ends
- IF DETAIL-STCDT = '80'.
- * WRITE: DETAIL-STCD1 USING EDIT MASK '__-________-_'. "ALV Comment
- write DETAIL-STCD1 USING EDIT MASK '__-________-_' to
- ls_detail-stcd1. "ALV Addition
- ELSE.
- * WRITE: DETAIL-STCD1. "ALV Comment
- MOVE detail-stcd1 TO ls_detail-stcd1. "ALV Addition
- ENDIF.
- *** Note # 975848 Begin
- * IF DETAIL-WTH_AMNT_N NE 0.
- ** WRITE: DETAIL-WTH_AMNT_N CURRENCY T001-WAERS COLOR 3. "ALV
- *Comment
- * MOVE detail-wth_amnt_n TO ls_detail-wth_amnt. "ALV
- *Addition
- * ELSE.
- ** WRITE: DETAIL-WTH_AMNT_E CURRENCY T001-WAERS COLOR 6. "ALV
- *Comment
- * MOVE detail-wth_amnt_e TO ls_detail-wth_amnt. "ALV
- *Addition
- * ENDIF.
- * MOVE detail-wth_amnt TO ls_detail-wth_amnt.
- MOVE detail-wth_base TO ls_detail-wth_base.
- MOVE detail-wth_amnt TO ls_detail-wth_amnt.
- *** Note # 975848 End
- * ALV Comment starts
- * FORMAT COLOR OFF.
- *
- * WRITE: DETAIL-GJAHR, ' ' NO-GAP,
- * DETAIL-BELNR.
- * ALV Comment ends
- * ALV Changes starts
- MOVE detail-gjahr TO ls_detail-gjahr.
- MOVE detail-belnr TO ls_detail-belnr.
- APPEND ls_detail TO gt_detail.
- * ALV Changes ends
- HIDE: DETAIL-GJAHR, DETAIL-BELNR.
- IF S_NEWDAT NE SPACE.
- CLEAR DETAIL2.
- MOVE-CORRESPONDING DETAIL TO DETAIL2.
- COLLECT DETAIL2.
- ENDIF.
- ENDFORM. " PRINT_DETAIL
- *&---------------------------------------------------------------------*
- *& Form PRINT_HEADER_0
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM PRINT_HEADER_0.
- * WRITE:/ TEXT-H21, T001-BUKRS,
- * / TEXT-H22. "ALV Comment
- * ALV Changes starts
- CREATE OBJECT gr_header.
- gr_label = gr_header->create_label(
- row = 1
- column = 1
- text = text-h21 ).
- gr_text = gr_header->create_text(
- row = 1
- column = 2
- text = t001-bukrs ).
- gr_label = gr_header->create_label(
- row = 2
- column = 1
- text = text-h22 ).
- * ALV Changes ends
- IF XT001-STCDT = '80'.
- * WRITE: XT001-STCD1 USING EDIT MASK '__-________-_'. "ALV Comment
- gr_text = gr_header->create_text(
- row = 2
- column = 2
- text = xt001-stcd1 ). "ALV Addition
- ELSE.
- * WRITE: XT001-STCD1. "ALV Comment
- gr_text = gr_header->create_text(
- row = 2
- column = 2
- text = xt001-stcd1 ). "ALV Addition
- ENDIF.
- IF S_NEWDAT NE SPACE.
- * WRITE:/ TEXT-H23, S_FILE. "ALV Comment
- * ALV Changes starts
- gr_label = gr_header->create_label(
- row = 3
- column = 1
- text = text-h23 ).
- gr_text = gr_header->create_text(
- row = 3
- column = 2
- text = s_file ).
- * ALV Changes ends
- ENDIF.
- *ALV Comment starts
- * ULINE.
- * WRITE:/12 TEXT-U01,
- * / TEXT-U10,
- * 12 TEXT-U02,
- * 22 TEXT-U04,
- * 59 TEXT-U11,
- * 80 TEXT-U12 RIGHT-JUSTIFIED,
- * 96 TEXT-U16,
- * 102 TEXT-U13.
- * ALV Comment ends
- CALL METHOD cl_salv_form_content=>set
- EXPORTING
- value = gr_header. "ALV Addition
- ENDFORM. " PRINT_HEADER_0
- *&---------------------------------------------------------------------*
- *& Form PRINT_HEADER_1
- *&---------------------------------------------------------------------*
- * text *
- *----------------------------------------------------------------------*
- FORM PRINT_HEADER_1.
- * WRITE:/ TEXT-H21, T001-BUKRS,
- * 43 TEXT-H11 CENTERED,
- * / TEXT-H22. "ALV Comment
- * ALV Changes starts
- CREATE OBJECT gr_header1.
- gr_label = gr_header1->create_label(
- row = 2
- column = 1
- text = text-h21 ).
- gr_text = gr_header1->create_text(
- row = 2
- column = 2
- text = t001-bukrs ).
- gr_label = gr_header1->create_label(
- row = 1
- column = 2
- text = text-h11 ).
- gr_label = gr_header1->create_label(
- row = 3
- column = 1
- text = text-h22 ).
- * ALV Changes ends
- IF XT001-STCDT = '80'.
- * WRITE: XT001-STCD1 USING EDIT MASK '__-________-_'. "ALV Comment
- gr_text = gr_header1->create_text(
- row = 3
- column = 2
- text = xt001-stcd1 ). "ALV Addition
- ELSE.
- * WRITE: XT001-STCD1. "ALV Comment
- gr_text = gr_header1->create_text(
- row = 3
- column = 2
- text = xt001-stcd1 ). "ALV Addition
- ENDIF.
- IF S_NEWDAT NE SPACE.
- * WRITE:/ TEXT-H23, S_FILE. "ALV Comment
- * ALV Changes starts
- gr_label = gr_header1->create_label(
- row = 3
- column = 1
- text = text-h23 ).
- gr_text = gr_header1->create_text(
- row = 3
- column = 2
- text = s_file ).
- * ALV Changes ends
- ENDIF.
- *ALV Comment starts
- * ULINE.
- *
- * WRITE:/ TEXT-U14,
- * 9 TEXT-U15,
- * 50 TEXT-U12 RIGHT-JUSTIFIED.
- * ALV Comment ends
- CALL METHOD cl_salv_form_content=>set
- EXPORTING
- value = gr_header1. "ALV Addition
- ENDFORM. " PRINT_HEADER_1
- *&---------------------------------------------------------------------*
- *& Form READ_FOREIGN_ID
- *&---------------------------------------------------------------------*
- * Retrive code for foreign persons
- *----------------------------------------------------------------------*
- FORM READ_FOREIGN_ID USING XLAND1
- XSTKZN
- CHANGING XXSTCD1 .
- CLEAR: XFRID, J_1AFRID.
- READ TABLE XFRID WITH KEY MANDT = SY-MANDT
- LAND1 = XLAND1
- STKZN = XSTKZN.
- * entry exists?
- IF SY-SUBRC NE 0.
- SELECT SINGLE * FROM J_1AFRID
- WHERE LAND1 = XLAND1
- AND STKZN = XSTKZN.
- IF SY-SUBRC EQ 0.
- MOVE-CORRESPONDING J_1AFRID TO XFRID.
- APPEND XFRID.
- ENDIF.
- ENDIF.
- IF SY-SUBRC EQ 0.
- XXSTCD1 = XFRID-J_1AFPID.
- ENDIF.
- ENDFORM. " READ_FOREIGN_ID
- * ALV Changes starts
- *&---------------------------------------------------------------------*
- *& Form EVENTTAB_BUILD
- *&---------------------------------------------------------------------*
- * Build Events
- *----------------------------------------------------------------------*
- * <-->XT_EVENTS text
- *----------------------------------------------------------------------*
- FORM eventtab_build CHANGING xt_events TYPE slis_t_event.
- DATA: ls_event TYPE slis_alv_event.
- *Top of Page
- MOVE slis_ev_top_of_page TO ls_event-name.
- MOVE slis_ev_top_of_page TO ls_event-form.
- APPEND ls_event TO xt_events.
- *End of List
- CLEAR ls_event.
- MOVE slis_ev_end_of_list TO ls_event-name.
- MOVE slis_ev_end_of_list TO ls_event-form.
- APPEND ls_event TO xt_events.
- *User Command
- CLEAR ls_event.
- MOVE slis_ev_user_command TO ls_event-name.
- MOVE slis_ev_user_command TO ls_event-form.
- APPEND ls_event TO xt_events.
- ENDFORM. " EVENTTAB_BUILD
- *&---------------------------------------------------------------------*
- *& Form Display_ALV
- *&---------------------------------------------------------------------*
- * Display List
- *----------------------------------------------------------------------*
- FORM display_alv .
- FIELD-SYMBOLS : <gfs_outtab> TYPE STANDARD TABLE.
- DATA:
- * Internal table for ALV Field Catalog
- lt_fieldcat TYPE slis_t_fieldcat_alv,
- * Structure for ALV Layout
- ls_layout TYPE slis_layout_alv.
- *Build Field catalog for output structure
- PERFORM fieldcat_build CHANGING lt_fieldcat.
- *Build the layout for ALV
- PERFORM layout_build CHANGING ls_layout.
- IF header = 0.
- ls_layout-list_append = 'Y'.
- ELSE.
- ls_layout-list_append = 'X'.
- ENDIF.
- IF header = 0.
- ASSIGN gt_detail TO <gfs_outtab>.
- ELSE.
- ASSIGN gt_total_code TO <gfs_outtab>.
- ENDIF.
- *Display ALV
- CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
- EXPORTING
- i_callback_program = gv_repid
- i_callback_pf_status_set = gc_pf_status_formname
- is_layout = ls_layout
- it_fieldcat = lt_fieldcat
- it_events = gt_events
- TABLES
- t_outtab = <gfs_outtab>
- 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_ALV
- *&---------------------------------------------------------------------*
- *& Form FIELDCAT_BUILD
- *&---------------------------------------------------------------------*
- * Build Field Catalog
- *----------------------------------------------------------------------*
- * <-->XT_FIELDCAT Field catalog
- *----------------------------------------------------------------------*
- FORM fieldcat_build CHANGING xt_fieldcat TYPE slis_t_fieldcat_alv.
- DATA lv_structure_name TYPE dd02l-tabname.
- FIELD-SYMBOLS <fs> TYPE slis_fieldcat_alv.
- IF header = 0.
- MOVE gc_structure_name1 TO lv_structure_name.
- ELSE.
- MOVE gc_structure_name2 TO lv_structure_name.
- ENDIF.
- CLEAR xt_fieldcat.
- CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
- EXPORTING
- i_program_name = gv_repid
- * I_INTERNAL_TABNAME = G_TABNAME
- i_structure_name = lv_structure_name
- * I_CLIENT_NEVER_DISPLAY = 'X'
- CHANGING
- ct_fieldcat = xt_fieldcat.
- IF header = 0.
- *SUM
- READ TABLE xt_fieldcat ASSIGNING <fs> WITH KEY
- fieldname = 'WTH_AMNT'.
- IF sy-subrc = 0.
- <fs>-do_sum = 'X'.
- ENDIF.
- *SUM
- READ TABLE xt_fieldcat ASSIGNING <fs> WITH KEY
- fieldname = 'WTH_BASE'.
- IF sy-subrc = 0.
- <fs>-do_sum = 'X'.
- ENDIF.
- *Set internal table name
- LOOP AT xt_fieldcat ASSIGNING <fs>.
- <fs>-tabname = gc_internal_tabname.
- ENDLOOP.
- ELSE.
- *Set Field Description
- LOOP AT xt_fieldcat ASSIGNING <fs>.
- CASE sy-tabix.
- WHEN 1.
- <fs>-seltext_l = text-u14.
- WHEN 2.
- <fs>-seltext_l = text-u15.
- WHEN 3.
- <fs>-seltext_l = text-u12.
- *SUM
- **Checkman
- * READ TABLE xt_fieldcat ASSIGNING <fs> WITH KEY
- * fieldname = 'WTH_AMNT'.
- * IF sy-subrc = 0.
- * <fs>-do_sum = 'X'.
- * ENDIF.
- ENDCASE.
- <fs>-ddictxt = gc_ddic_txt.
- **Checkman
- IF <fs>-fieldname = 'WTH_AMNT'.
- <fs>-do_sum = 'X'.
- ENDIF.
- IF <fs>-fieldname = 'WTH_BASE'.
- <fs>-do_sum = 'X'.
- ENDIF.
- **Checkman
- ENDLOOP.
- ENDIF.
- ENDFORM. " FIELDCAT_BUILD
- *&---------------------------------------------------------------------*
- *& Form LAYOUT_BUILD
- *&---------------------------------------------------------------------*
- * Set layout
- *----------------------------------------------------------------------*
- * <-->XS_LAYOUT Layout Structure
- *----------------------------------------------------------------------*
- FORM layout_build CHANGING xs_layout TYPE slis_layout_alv.
- xs_layout-colwidth_optimize = gc_layout.
- xs_layout-allow_switch_to_list = gc_layout.
- xs_layout-min_linesize = '120'.
- ENDFORM. " LAYOUT_BUILD
- *&--------------------------------------------------------------------*
- *& Form PF_STATUS_ALV
- *&--------------------------------------------------------------------*
- * Set PF Status
- *---------------------------------------------------------------------*
- * -->IV_EXTAB PF Status
- *---------------------------------------------------------------------*
- FORM pf_status_alv USING iv_extab TYPE slis_t_extab.
- SET PF-STATUS 'J_1AF026_ALV'.
- * SET PF-STATUS gc_pf_status_name.
- ENDFORM. "PF_STATUS_ALV
- *----------------------------------------------------------------------*
- * TOP-OF-PAGE
- *----------------------------------------------------------------------*
- FORM top_of_page.
- CALL FUNCTION 'FAGL_BATCH_HEADING_PERFORM'
- EXPORTING
- is_bhdgd = bhdgd.
- IF header = 0.
- PERFORM print_header_0.
- ELSE.
- PERFORM print_header_1.
- ENDIF.
- ENDFORM. "TOP_OF_PAGE
- *----------------------------------------------------------------------*
- * END-OF-list
- *----------------------------------------------------------------------*
- FORM end_of_list.
- IF header = 0.
- header = 1.
- *Display Second List
- PERFORM display_alv.
- ENDIF.
- ENDFORM. "END_OF_PAGE
- *&--------------------------------------------------------------------*
- *& Form user_command
- *&--------------------------------------------------------------------*
- * Handle At Line-Selection
- *---------------------------------------------------------------------*
- * -->IV_UCOMM Function Code
- * -->IS_SELFIELD Information of cursor position in ALV
- *---------------------------------------------------------------------*
- FORM user_command USING iv_ucomm TYPE sy-ucomm
- is_selfield TYPE slis_selfield.
- DATA ls_detail LIKE LINE OF detail.
- IF is_selfield-tabname = gc_itab_name.
- CASE iv_ucomm.
- *At Line-Selection
- WHEN '&IC1'.
- READ TABLE detail INTO ls_detail INDEX is_selfield-tabindex.
- IF sy-subrc = 0.
- CHECK ls_detail-belnr NE space.
- SET PARAMETER ID 'BLN' FIELD ls_detail-belnr.
- SET PARAMETER ID 'BUK' FIELD t001-bukrs.
- SET PARAMETER ID 'GJR' FIELD ls_detail-gjahr.
- CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
- ENDIF.
- ENDCASE.
- ENDIF.
- ENDFORM. "user_command
- * ALV Changes ends
- *&---------------------------------------------------------------------*
- *& Form FILE_VALIDATE
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM file_validate .
- CALL FUNCTION 'FILE_VALIDATE_NAME'
- EXPORTING
- logical_filename = gc_filename
- changing
- physical_filename = s_file
- EXCEPTIONS
- LOGICAL_FILENAME_NOT_FOUND = 1
- VALIDATION_FAILED = 2
- OTHERS = 3.
- 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. " FILE_VALIDATE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement