Create and Change Infor record Condition Price
First Process :
Second Process :
Complete Code :
*----------------------------------------------------------------------*
* Transaction Code :
* Program Name : Z_CS_INFO_RECORD
* SAP Tcode :
* Devlopment class :
* Message class :
* Date of Completion :
*----------------------------------------------------------------------*
* Change Request Number :
* Program Description : Upload and Change Inforecrd
*
************************************************************************
* Change History
************************************************************************
REPORT Z_CS_INFO_RECORD.
TABLES : EINA,ZTB_MM_INF_LOG,LFA1,MARA,A017,EINE,KONP,MARD.
TYPE-POOLS : slis,icon,vimty,abap.
INCLUDE <icon>.
INCLUDE <symbol>.
*----------------------------------------------------------------------*
* data definition
*----------------------------------------------------------------------*
* Batchinputdata of single transaction
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: BEGIN OF IT_MESSTAB OCCURS 0 .
INCLUDE STRUCTURE BDCMSGCOLL.
DATA: L_MSTRING(480) TYPE C.
DATA: END OF IT_MESSTAB.
DATA: E_GROUP_OPENED.
* message texts
TABLES: T100,ZTB_CS_INF_LOG.
TYPES : BEGIN OF TY_PRCO,
LIFNR(10),
MATNR(18),
WERKS(4),
URZLA(3),
APLFZ(3),
EKGRP(3),
NETPR(15),
WAERS(5),
DATAB(10),
DATBI(10),
NAME1(055),
AMT TYPE P DECIMALS 2,
INFNR(10),
KNUMH TYPE KNUMH,
PICK(2),
DATABC(8),
DATBIC(8),
MEINS TYPE MEINS,
MSGV1(15),
ERROR(100),
MSGE(480),
TRF_LIGHT(1),
STATUS(1),
END OF TY_PRCO.
TYPES : BEGIN OF TY_INFO,
INFNR type EINA-INFNR,
LIFNR type EINA-LIFNR,
NAME1 TYPE NAME1,
MATNR type EINA-MATNR,
URZLA type EINA-URZLA,
WERKS type EINE-WERKS,
APLFZ type EINE-APLFZ,
EKGRP type EINE-EKGRP,
NETPR type P DECIMALS 2," NETPR,
WAERS type EINE-WAERS,
DATAB type DATAB,
DATBI type DATBI,
PEINH type EINE-PEINH,
BPRME type EINE-BPRME,
BPUMZ type EINE-BPUMZ,
BPUMN type EINE-BPUMN,
MSGE(480),
TRF_LIGHT(1),
STATUS(1),
END OF TY_INFO.
TYPES: BEGIN OF TY_A017,
KSCHL TYPE A017-KSCHL,
LIFNR TYPE A017-LIFNR,
MATNR TYPE A017-MATNR,
EKORG TYPE A017-EKORG,
WERKS TYPE A017-WERKS,
ESOKZ TYPE A017-ESOKZ,
DATBI TYPE A017-DATBI,
DATAB TYPE A017-DATAB,
KNUMH TYPE A017-KNUMH,
PICKNO(4) TYPE C, "(2)
END OF TY_A017.
TYPES : BEGIN OF ty_data,
KSCHL TYPE KSCHL,
MATNR TYPE MATNR,
LIFNR TYPE KUNNR,
KBETR TYPE P DECIMALS 2, "KBETR,
* KBETR TYPE P DECIMALS 3, "KBETR,
DATAB TYPE SY-DATUM,
DATBI TYPE SY-DATUM,
DATABC(10),
DATBIC(40),
KNUMH TYPE KNUMH,
KBETRN TYPE STRING,
END OF ty_data.
DATA : IT_A017 TYPE TABLE OF TY_A017,
WA_A017 TYPE TY_A017.
DATA :IT_DAT TYPE TABLE OF TY_DATA,
WA_DAT TYPE TY_DATA.
* New PRCOor
DATA : IT_PRCO TYPE TABLE OF TY_PRCO,
WA_PRCO TYPE TY_PRCO.
* Change PRCOor
DATA : IT_INFO TYPE TABLE OF TY_INFO,
WA_INFO TYPE TY_INFO.
DATA : IT_PRCX TYPE TABLE OF TY_INFO,
WA_PRCX TYPE TY_INFO.
DATA : LV_FNAME TYPE STRING,
TABLE_N TYPE I.
DATA: t_fldcat TYPE slis_t_fieldcat_alv,
s_fldcat TYPE slis_fieldcat_alv,
t_sort TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
t_fldcat2 TYPE slis_t_fieldcat_alv,
s_fldcat2 TYPE slis_fieldcat_alv,
t_sort2 TYPE slis_t_sortinfo_alv," WITH HEADER LINE,
wa_sortinfo TYPE slis_sortinfo_alv,
x_layout TYPE slis_layout_alv,
Y_layout TYPE slis_layout_alv,
gd_layout TYPE lvc_s_layo,
x_print TYPE slis_print_alv,
x_variant TYPE disvariant,
d_repid TYPE sy-repid,
ct_type(2) ,
g_layout type slis_layout_alv,
gs_fieldcatalog TYPE lvc_s_fcat OCCURS 0,
gv_fcat LIKE LINE OF gs_fieldcatalog,
gus_fieldcatalog TYPE lvc_s_fcat OCCURS 0.
DATA : vf_start_col TYPE i, "start column
vf_start_row TYPE i, "start row
vf_end_col TYPE i, "maximum column
vf_end_row TYPE i, "maximum row
p_text(20).
DATA: itabb TYPE STANDARD TABLE OF kcde_cells WITH HEADER LINE,
vf_index TYPE i.
FIELD-SYMBOLS: <fs>.
DATA: tab type table of itab,
wa_tab like itab.
DATA : cnt type i.
DATA: p_file TYPE rlgrap-filename.
DATA: var type string,
len type i,
var1 type i,
LST_CHAR(1),
MSG_TEXT(300).
DATA : CNTR_NO(4) TYPE N,
LINE_NO(4) TYPE N,
G_DATAB(10),G_DATBI(10).
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-003.
PARAMETERS : RB_UP RADIOBUTTON GROUP RB_1 DEFAULT 'X' USER-COMMAND ucom.
PARAMETERS : P_FNAME TYPE IBIPPARMS-PATH .
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_TMP RADIOBUTTON GROUP RB_1.
PARAMETER : pdirp TYPE pfeflnamel DEFAULT 'D:\',
p_psavep TYPE string DEFAULT 'Vendor Info Record.XLS'.
SELECTION-SCREEN SKIP 1.
PARAMETERS : RB_DWN RADIOBUTTON GROUP RB_1.
SELECTION-SCREEN END OF BLOCK SEL1.
AT SELECTION-SCREEN OUTPUT.
PERFORM MODIFY_SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
DATA: PATH LIKE RLGRAP-FILENAME.
PATH = 'D:\'.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = SPACE
DEF_PATH = PATH
* MASK = ',.xls , .xlsx.'
* MASK = ', .txt , .txt.'
MODE = 'O'
TITLE = 'PC-File-Selection'
IMPORTING
FILENAME = p_fname
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pdirp.
DATA: fname TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Select Directory'
CHANGING
selected_folder = fname
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
pdirp = fname.
INITIALIZATION.
PERFORM BINT.
START-OF-SELECTION.
IF RB_TMP = 'X'.
SUBMIT Z_MM_FOB_TMP WITH p_pdirp EQ pdirp
WITH psavep EQ p_psavep
AND RETURN.
STOP.
ENDIF.
*
IF RB_DWN = 'X'.
SUBMIT Z_MM_DWN_FOB via SELECTION-SCREEN
AND RETURN.
STOP.
ENDIF.
* SPLIT data Form Excel
vf_start_col = '1'.
vf_start_row = '2'.
vf_end_col = '60'.
vf_end_row = '10000'.
CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT' " Function to download data
" from excel
EXPORTING
filename = p_fname
i_begin_col = vf_start_col
i_begin_row = vf_start_row
i_end_col = vf_end_col
i_end_row = vf_end_row
TABLES
intern = itabb "B09
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE i454(0) WITH 'File not found'.
ENDIF.
CLEAR: itabb .
SORT itabb BY row col.
LOOP AT itabb.
MOVE : itabb-col TO vf_index.
ASSIGN COMPONENT vf_index OF STRUCTURE WA_PRCO TO <fs>.
MOVE : itabb-value TO <fs>.
AT END OF row.
APPEND WA_PRCO to IT_PRCO.
CLEAR WA_PRCO.
ENDAT.
ENDLOOP.
table_n = 0.
DESCRIBE TABLE IT_PRCO LINES table_n.
IF table_n EQ 0.
CALL FUNCTION 'C14A_POPUP_NO_HITS'.
STOP.
ENDIF.
SORT IT_PRCO BY WERKS LIFNR MATNR.
* Get Vendor Name
LOOP AT IT_PRCO INTO WA_PRCO.
TRANSLATE WA_PRCO-MATNR TO UPPER CASE.
REPLACE ALL OCCURENCES OF ',' IN WA_PRCO-NETPR WITH ``.
WA_PRCO-AMT = WA_PRCO-NETPR.
CLEAR LEN.
LEN = STRLEN( WA_PRCO-LIFNR ).
IF LEN LT 10.
IF LEN = 1.
CONCATENATE '00000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 2.
CONCATENATE '00000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 3.
CONCATENATE '0000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 4.
CONCATENATE '000000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 5.
CONCATENATE '00000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 6.
CONCATENATE '0000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 7.
CONCATENATE '000' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 8.
CONCATENATE '00' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ELSEIF LEN = 9.
CONCATENATE '0' WA_PRCO-LIFNR INTO WA_PRCO-LIFNR.
ENDIF.
ENDIF.
SELECT SINGLE NAME1 FROM LFA1 INTO WA_PRCO-NAME1
WHERE LIFNR EQ WA_PRCO-LIFNR.
SELECT SINGLE MEINS FROM MARA INTO WA_PRCO-MEINS " sINI
WHERE MATNR EQ WA_PRCO-MATNR.
MODIFY IT_PRCO FROM WA_PRCO .
ENDLOOP.
**Check for New or exist Material
LOOP AT IT_PRCO INTO WA_PRCO.
SELECT SINGLE INFNR
FROM EINA INTO EINA-INFNR
WHERE LIFNR EQ WA_PRCO-LIFNR
AND MATNR EQ WA_PRCO-MATNR.
IF SY-SUBRC EQ 0.
WA_PRCO-MSGE = 'Change Info Record'.
WA_PRCO-STATUS = 'C'.
WA_PRCO-INFNR = EINA-INFNR.
ELSE.
WA_PRCO-MSGE = 'Create New Info Record'.
WA_PRCO-STATUS = 'N'.
ENDIF.
** Plant
* CLEAR MARD.
* SELECT SINGLE WERKS FROM MARD INTO MARD-WERKS
* WHERE MATNR EQ WA_PRCO-MATNR
* AND WERKS EQ WA_PRCO-WERKS.
*
* IF SY-SUBRC NE 0.
* CLEAR WA_PRCO-MSGE .
* WA_PRCO-TRF_LIGHT = '1'.
* WA_PRCO-MSGE = 'Plant Does Not Exist'.
* ENDIF.
* Currency and Amount
IF WA_PRCO-WAERS EQ 'IDR'.
WA_PRCO-AMT = WA_PRCO-AMT / 100.
ENDIF.
DATA : AMT TYPE P DECIMALS 2.
AMT = 0.
IF WA_PRCO-AMT <= AMT.
IF WA_PRCO-TRF_LIGHT EQ '1'.
WA_PRCO-TRF_LIGHT = '1'.
CONCATENATE WA_PRCO-MSGE 'Amount Can Not less han Zero' INTO WA_PRCO-MSGE SEPARATED BY ','.
ELSE.
CLEAR WA_PRCO-MSGE .
WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-MSGE = 'Amount Can Not less han Zero'.
ENDIF.
ENDIF.
* Check Vendor
CLEAR LFA1.
SELECT SINGLE LIFNR SPERQ INTO (LFA1-LIFNR,LFA1-SPERQ)
FROM LFA1
WHERE LIFNR EQ WA_PRCO-LIFNR.
IF SY-SUBRC NE 0.
WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-MSGE = 'Vendor Does not Exist'.
ELSE.
IF LFA1-SPERQ IS NOT INITIAL.
WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-MSGE = 'Vendor Block'.
ENDIF.
ENDIF.
* Check Material
SELECT SINGLE MATNR INTO MARA-MATNR
FROM MARA
WHERE MATNR EQ WA_PRCO-MATNR.
IF SY-SUBRC NE 0.
IF WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-TRF_LIGHT = '1'.
CONCATENATE WA_PRCO-MSGE 'Material Does not Exist' INTO WA_PRCO-MSGE SEPARATED BY ','.
ELSE.
WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-MSGE = 'Material Does not Exist'.
ENDIF.
ELSE.
IF WA_PRCO-TRF_LIGHT = '1'.
WA_PRCO-TRF_LIGHT = '1'.
ELSE.
WA_PRCO-TRF_LIGHT = '2'.
ENDIF.
ENDIF.
*
* Change Currency amt and Value
IF WA_PRCO-STATUS = 'C'.
CLEAR: G_DATAB,G_DATBI.
CONCATENATE WA_PRCO-DATAB+6(4) WA_PRCO-DATAB+3(2) WA_PRCO-DATAB(2) INTO G_DATAB.
REPLACE ALL OCCURENCES OF '.' IN G_DATAB WITH ``.
CONDENSE G_DATAB.
wa_prco-databc = G_DATAB.
CONCATENATE WA_PRCO-DATBI+6(4) WA_PRCO-DATBI+3(2) WA_PRCO-DATBI(2) INTO G_DATBI.
REPLACE ALL OCCURENCES OF '.' IN G_DATBI WITH ``.
CONDENSE G_DATBI.
wa_prco-datbic = G_DATBI.
SELECT SINGLE DATAB INTO A017-DATAB
FROM A017
WHERE LIFNR EQ WA_PRCO-LIFNR
AND MATNR EQ WA_PRCO-MATNR
AND DATAB EQ G_DATAB AND DATBI EQ G_DATBI.
*
IF SY-SUBRC EQ 0.
SELECT SINGLE WAERS INTO EINE-WAERS
FROM EINE
WHERE INFNR EQ WA_PRCO-INFNR.
IF SY-SUBRC EQ 0.
WA_PRCO-STATUS = 'W'.
ENDIF.
ELSE.
* WA_PRCO-STATUS = 'W'.
* WA_PRCO-TRF_LIGHT = '1'.
* WA_PRCO-MSGE = 'Can Not Change Amount'.
ENDIF.
ENDIF.
MODIFY IT_PRCO FROM WA_PRCO.
ENDLOOP.
* Price Condition
REFRESH IT_A017.
SORT IT_PRCO BY LIFNR MATNR.
SELECT * FROM a017
INTO CORRESPONDING FIELDS OF TABLE it_a017
FOR ALL ENTRIES IN it_prco
WHERE matnr EQ it_prco-matnr
AND lifnr EQ it_prco-lifnr
AND KSCHL = 'PB00'.
* Add Line Number.
DATA : l_no(4) TYPE C,
d_matnr type matnr.
.
SORT it_prco BY lifnr matnr datab.
l_no = 1.
LOOP AT it_a017 INTO wa_a017.
if wa_a017-matnr ne d_matnr.
l_no = 1.
wa_a017-PICKNO = l_no.
else.
l_no = l_no + 1.
wa_a017-PICKNO = l_no.
endif.
d_matnr = wa_a017-matnr.
MODIFY IT_A017 FROM WA_A017.
ENDLOOP.
* Update Pick Line
SORT it_prco BY status lifnr matnr datab.
LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS NE 'N'.
READ TABLE it_a017 into wa_a017 WITH KEY lifnr = wa_prco-lifnr
matnr = wa_prco-matnr
datab = wa_prco-databc BINARY SEARCH.
IF SY-SUBRC EQ 0.
wa_prco-pick = wa_a017-pickno.
ENDIF.
MODIFY IT_PRCO FROM WA_PRCO.
ENDLOOP.
*Processing data
PERFORM FIRST_VIEW_DATA.
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE 'N' " 'N' 'A' 'E' "CTUMODE
UPDATE 'L' "'S' "CUPDATE
MESSAGES INTO MESSTAB.
LOOP AT MESSTAB.
MESSAGE ID MESSTAB-MSGID
TYPE MESSTAB-MSGTYP
NUMBER MESSTAB-MSGNR
INTO L_MSTRING
WITH MESSTAB-MSGV1
MESSTAB-MSGV2
MESSTAB-MSGV3
MESSTAB-MSGV4.
IT_MESSTAB-MSGTYP = MESSTAB-MSGTYP.
IT_MESSTAB-MSGV1 = MESSTAB-MSGV1.
IT_MESSTAB-MSGV2 = MESSTAB-MSGV2.
IF MESSTAB-MSGV2 IS NOT INITIAL.
IT_MESSTAB-MSGV1 = MESSTAB-MSGV2.
ENDIF.
IT_MESSTAB-MSGV3 = MESSTAB-MSGV3.
IT_MESSTAB-MSGV4 = MESSTAB-MSGV4.
IT_MESSTAB-L_MSTRING = L_MSTRING.
APPEND IT_MESSTAB .
ENDLOOP.
REFRESH BDCDATA.
ENDFORM. "BDC_TRANSACTION
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE. "NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form BINT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BINT.
DEFINE f_fldcat.
clear s_fldcat.
s_fldcat-fieldname = &1.
s_fldcat-decimals_out = &2.
s_fldcat-seltext_l = &3.
s_fldcat-outputlen = &4.
s_fldcat-just = &5.
s_fldcat-no_out = &6.
s_fldcat-datatype = &7.
s_fldcat-cfieldname = &8.
s_fldcat-no_zero = &9.
append s_fldcat to t_fldcat.
END-OF-DEFINITION.
DEFINE f_fldcat2.
clear s_fldcat2.
s_fldcat2-fieldname = &1.
s_fldcat2-decimals_out = &2.
s_fldcat2-seltext_l = &3.
s_fldcat2-outputlen = &4.
s_fldcat2-just = &5.
s_fldcat2-no_out = &6.
s_fldcat2-datatype = &7.
s_fldcat2-cfieldname = &8.
s_fldcat2-no_zero = &9.
append s_fldcat2 to t_fldcat2.
END-OF-DEFINITION.
ENDFORM. " BINT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
* * * * * * 1 2 3 4 5 6 7 8 9
f_fldcat2 'LIFNR' '' 'Vendor' '' 'L' '' 'CHAR' '' '' .
f_fldcat2 'NAME1' '' 'Vendor Name' '' 'L' '' 'CHAR' '' '' .
f_fldcat2 'MATNR' '' 'Material Number' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'WERKS' '' 'Plant ' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'URZLA' '' 'Country of Origin' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'APLFZ' '' 'Planned Deliv. Time' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'EKGRP' '' 'Purchasing Group' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'NETPR' '' 'Net price Currency Key' '' 'R' '' '' 'WAERS' '' .
* f_fldcat2 'NETPR' '' 'Net price Currency Key' '' 'R' '' 'DEC' 'WAERS' ''.
f_fldcat2 'WAERS' '' 'Currency' '' 'L' '' 'CHAR' '' ''.
f_fldcat2 'DATAB' '' 'Valid From Date' '' 'L' '' 'DATS' '' ''.
f_fldcat2 'DATBI' '' 'Valid To Date' '' 'L' '' 'DATS' '' ''.
f_fldcat2 'MSGE' '' 'Status' '' 'L' '' 'CHAR' '' ''.
CLEAR s_fldcat2.
ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT .
y_layout-colwidth_optimize = 'X'.
y_layout-info_fieldname = 'LINE_COLOR'.
y_layout-def_status = 'X'.
y_layout-lights_fieldname = 'TRF_LIGHT'.
y_layout-lights_tabname = 'I_LIGHTS'.
ENDFORM. " L_BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY .
d_repid = sy-repid.
Call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = d_repid
i_callback_pf_status_set = 'STATUS_SET'
i_callback_user_command = 'USR_CMD'
it_fieldcat = t_fldcat2[]
it_sort = t_sort[]
is_layout = y_layout
* i_default = 'X'
i_save = 'A'
* is_variant = x_variant
* it_event_exit = t_event_exit[]
* is_print = x_print
TABLES
t_outtab = IT_PRCX[] "IT_VENX[]
EXCEPTIONS
program_error = 1
others = 2.
IF sy-subrc eq 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DISPLAY
*&---------------------------------------------------------------------*
*& Form f_status_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZALV'.
ENDFORM. "f_status_set
*&---------------------------------------------------------------------*
*& Form MODIFY_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN .
LOOP AT SCREEN.
IF RB_UP = 'X' .
IF screen-name = 'PDIRP' OR screen-name = 'P_PSAVEP'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
CLEAR : PDIRP,P_PSAVEP.
ELSEIF RB_TMP = 'X' .
IF screen-name = 'P_FNAME'.
screen-input = '0'.
P_PSAVEP = 'FOB Price.xls'.
MODIFY SCREEN.
ENDIF.
CLEAR: P_FNAME.
ELSEIF RB_DWN = 'X'.
IF screen-name = 'P_FNAME' OR screen-name = 'PDIRP' OR screen-name = 'P_PSAVEP'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
CLEAR: PDIRP,P_PSAVEP.
ELSE.
IF screen-name = 'PDIRP' OR screen-name = 'P_PSAVEP'.
screen-input = '0'.
MODIFY SCREEN.
ENDIF.
CLEAR: PDIRP,P_PSAVEP.
CLEAR: P_FNAME.
ENDIF.
ENDLOOP.
ENDFORM. " MODIFY_SCREEN
*&---------------------------------------------------------------------*
*& Form FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FIRST_VIEW_DATA .
PERFORM build_fieldcat_ist.
PERFORM l_build_layout_ist.
PERFORM display_ist.
ENDFORM. " FIRST_VIEW_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT_IST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT_IST .
f_fldcat 'LIFNR' '' 'Vendor' '' 'L' '' 'CHAR' '' '' .
f_fldcat 'NAME1' '' 'Vendor Name' '' 'L' '' 'CHAR' '' '' .
f_fldcat 'MATNR' '' 'Material Number' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'WERKS' '' 'Plant ' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'URZLA' '' 'Country of Origin' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'APLFZ' '' 'Planned Deliv. Time' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'EKGRP' '' 'Purchasing Group' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'AMT' '' 'Net price Currency Key' '' 'R' '' 'CURR' 'WAERS' '' .
f_fldcat 'WAERS' '' 'Currency' '' 'L' '' 'CHAR' '' ''.
f_fldcat 'DATAB' '' 'Valid From Date' '' 'L' '' 'DATS' '' ''.
f_fldcat 'DATBI' '' 'Valid To Date' '' 'L' '' 'DATS' '' ''.
f_fldcat 'MSGE' '' 'Status' '' 'L' '' 'CHAR' '' ''.
CLEAR S_FLDCAT.
ENDFORM. " BUILD_FIELDCAT_IST
*&---------------------------------------------------------------------*
*& Form L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM L_BUILD_LAYOUT_IST .
x_layout-colwidth_optimize = 'X'.
x_layout-info_fieldname = 'LINE_COLOR'.
X_layout-def_status = 'X'.
X_layout-lights_fieldname = 'TRF_LIGHT'.
X_layout-lights_tabname = 'I_LIGHTS'.
ENDFORM. " L_BUILD_LAYOUT_IST
*&---------------------------------------------------------------------*
*& Form DISPLAY_IST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_IST .
d_repid = sy-repid.
Call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = d_repid
i_callback_pf_status_set = 'STAT_SET'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = t_fldcat[]
it_sort = t_sort[]
is_layout = x_layout
* i_default = ''
i_save = 'A'
TABLES
t_outtab = IT_PRCO[]
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_IST
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING p_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&PRO'.
PERFORM PROS_DATA.
PERFORM END_VIEW_DATA.
WHEN '&BACK'.
LEAVE TO SCREEN 0.
WHEN '&EXIT'.
LEAVE TO SCREEN 0.
WHEN '&CNCL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "USER_COMMAND
*&---------------------------------------------------------------------*
*& Form f_status_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM STAT_SET USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZALV2'.
ENDFORM. "stat_set
*&---------------------------------------------------------------------*
*& Form END_VIEW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM END_VIEW_DATA.
PERFORM build_fieldcat.
PERFORM L_build_layout.
PERFORM Display.
ENDFORM. " END_VIEW_DATA
*&---------------------------------------------------------------------*
*& Form PROS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROS_DATA.
CLEAR WA_PRCO.
SORT IT_PRCO BY STATUS LIFNR MATNR.
* Create New Vendor
LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'N' " New Vendor
AND TRF_LIGHT NE '1'.
perform bdc_dynpro using 'SAPMM06I' '0100'.
perform bdc_field using 'BDC_CURSOR'
'EINE-WERKS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'EINA-LIFNR'
WA_PRCO-LIFNR.
perform bdc_field using 'EINA-MATNR'
WA_PRCO-MATNR.
perform bdc_field using 'EINE-EKORG'
'1000'.
perform bdc_field using 'EINE-WERKS'
WA_PRCO-WERKS.
perform bdc_field using 'RM06I-NORMB'
'X'.
perform bdc_dynpro using 'SAPMM06I' '0101'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MAHN1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
* perform bdc_field using 'EINA-URZLA'
* WA_PRCO-URZLA.
* perform bdc_field using 'EINA-MEINS'
* 'UNT'.
* perform bdc_field using 'EINA-UMREZ'
* '1'.
* perform bdc_field using 'EINA-UMREN'
* '1'.
perform bdc_dynpro using 'SAPMM06I' '0102'.
perform bdc_field using 'BDC_CURSOR'
'EINE-NETPR'.
perform bdc_field using 'BDC_OKCODE'
'=KO'.
perform bdc_field using 'EINE-APLFZ'
WA_PRCO-APLFZ.
perform bdc_field using 'EINE-EKGRP'
WA_PRCO-EKGRP.
perform bdc_field using 'EINE-NORBM'
'1'.
* perform bdc_field using 'EINE-BSTAE'
* '0004'.
perform bdc_field using 'EINE-IPRKZ'
'D'.
perform bdc_field using 'EINE-NETPR'
WA_PRCO-NETPR.
perform bdc_field using 'EINE-WAERS'
WA_PRCO-WAERS.
perform bdc_field using 'EINE-PEINH'
'1'.
* perform bdc_field using 'EINE-BPRME'
* 'PC'.
perform bdc_field using 'EINE-BPRME'
EINE-BPRME. "'AU'. "WA_PRCO-MEINS.
perform bdc_field using 'EINE-BPUMZ'
'1'.
perform bdc_field using 'EINE-BPUMN'
'1'.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'RV13A-DATAB'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RV13A-DATAB'
WA_PRCO-DATAB.
perform bdc_field using 'RV13A-DATBI'
WA_PRCO-DATBI.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'RV13A-DATAB'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_transaction using 'ME11'.
ENDLOOP.
** ********************************************
** Change Vendor Info Record
LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'C'
AND TRF_LIGHT NE '1'.
perform bdc_dynpro using 'SAPMM06I' '0100'.
perform bdc_field using 'BDC_CURSOR'
'EINA-LIFNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'EINA-LIFNR'
WA_PRCO-LIFNR.
perform bdc_field using 'EINA-MATNR'
WA_PRCO-MATNR.
perform bdc_field using 'EINE-EKORG'
'1000'.
perform bdc_field using 'EINE-WERKS'
WA_PRCO-WERKS.
perform bdc_field using 'RM06I-NORMB'
'X'.
perform bdc_dynpro using 'SAPMM06I' '0101'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MAHN1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPMM06I' '0102'.
perform bdc_field using 'BDC_CURSOR'
'EINE-APLFZ'.
perform bdc_field using 'BDC_OKCODE'
'=KO'.
* perform bdc_field using 'EINE-APLFZ'
* WA_PRCO-APLFZ.
perform bdc_field using 'EINE-EKGRP'
WA_PRCO-EKGRP.
perform bdc_field using 'EINE-NORBM'
'1'.
* perform bdc_field using 'EINE-BSTAE'
* '0004'.
perform bdc_field using 'EINE-IPRKZ'
'D'.
perform bdc_dynpro using 'SAPLV14A' '0102'.
perform bdc_field using 'BDC_CURSOR'
'VAKE-DATAB(01)'.
perform bdc_field using 'BDC_OKCODE'
'=NEWD'.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'KONP-KBETR(01)'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RV13A-DATAB'
WA_PRCO-DATAB.
perform bdc_field using 'RV13A-DATBI'
WA_PRCO-DATBI.
perform bdc_field using 'KONP-KBETR(01)'
* WA_PRCO-AMT.
WA_PRCO-NETPR.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'KONP-KBETR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'RV13A-DATAB'
WA_PRCO-DATAB.
perform bdc_field using 'RV13A-DATBI'
WA_PRCO-DATBI.
perform bdc_field using 'KONP-KBETR(01)'
* WA_PRCO-AMT.
WA_PRCO-NETPR.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_transaction using 'ME12'.
ENDLOOP.
DATA: lv_tabix type c length 2,
lv_postion type string.
* Change Vendor Info Record
LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS EQ 'W'
AND TRF_LIGHT NE '1'.
perform bdc_dynpro using 'SAPMM06I' '0100'.
perform bdc_field using 'BDC_CURSOR'
'EINE-WERKS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'EINA-LIFNR'
WA_PRCO-LIFNR.
perform bdc_field using 'EINA-MATNR'
WA_PRCO-MATNR.
perform bdc_field using 'EINE-EKORG'
'1000'.
perform bdc_field using 'EINE-WERKS'
WA_PRCO-WERKS.
perform bdc_field using 'RM06I-NORMB'
'X'.
perform bdc_dynpro using 'SAPMM06I' '0101'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MAHN1'.
perform bdc_field using 'BDC_OKCODE'
'=KO'.
lv_tabix = wa_prco-pick.
perform bdc_dynpro using 'SAPLV14A' '0102'.
CONCATENATE 'VAKE-DATAB(' lv_tabix ')' into lv_postion.
perform bdc_field using 'BDC_CURSOR'
lv_postion.
perform bdc_field using 'BDC_OKCODE'
'=PICK'.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'KONP-KBETR(01)'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RV13A-DATAB'
WA_PRCO-DATAB.
perform bdc_field using 'RV13A-DATBI'
WA_PRCO-DATBI.
perform bdc_field using 'KONP-KBETR(01)'
WA_PRCO-NETPR.
perform bdc_dynpro using 'SAPMV13A' '0201'.
perform bdc_field using 'BDC_CURSOR'
'KONP-KBETR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'RV13A-DATAB'
WA_PRCO-DATAB.
perform bdc_field using 'RV13A-DATBI'
WA_PRCO-DATBI.
perform bdc_transaction using 'ME12'.
ENDLOOP.
MESSAGE ' ' TYPE 'S'.
* Process Data
IF IT_PRCO[] IS NOT INITIAL.
PERFORM Modify_data.
PERFORM SAVE_TABLE_LOG.
ENDIF.
ENDFORM. " PROS_DATA
*&---------------------------------------------------------------------*
*& Form MODIFY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MODIFY_DATA .
SELECT EINA~INFNR EINA~LIFNR EINA~MATNR EINA~URZLA EINA~REGIO
EINA~TELF1 EINA~MEINS EINA~UMREZ EINA~UMREN
EINE~EKORG EINE~WERKS EINE~APLFZ EINE~EKGRP
EINE~NORBM EINE~IPRKZ EINE~NETPR EINE~WAERS
EINE~PEINH EINE~BPRME EINE~BPUMZ EINE~BPUMN
INTO CORRESPONDING FIELDS OF TABLE IT_INFO
FROM EINA
INNER JOIN EINE AS EINE ON EINE~INFNR = EINA~INFNR
FOR ALL ENTRIES IN IT_PRCO
WHERE EINA~LIFNR EQ IT_PRCO-LIFNR
AND EINA~MATNR EQ IT_PRCO-MATNR.
SORT IT_PRCO BY WERKS LIFNR MATNR.
SORT IT_INFO BY WERKS LIFNR MATNR.
LOOP AT IT_PRCO INTO WA_PRCO.
READ TABLE IT_INFO INTO WA_INFO WITH KEY LIFNR = WA_PRCO-LIFNR
MATNR = WA_PRCO-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0 AND WA_PRCO-TRF_LIGHT NE '1'.
IF WA_PRCO-STATUS = 'N' .
PERFORM UPD_AMT.
WA_PRCO-MSGE = 'Info Record Created'.
WA_PRCO-TRF_LIGHT = 3.
WA_PRCO-STATUS = 'N'.
* MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
ELSEIF WA_PRCO-STATUS = 'C'.
PERFORM UPD_AMT.
WA_PRCO-MSGE = 'Info Record Changed'.
WA_PRCO-TRF_LIGHT = 3.
WA_INFO-STATUS = 'C'.
* MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
ELSEIF WA_PRCO-STATUS = 'W'.
* PERFORM UPD_AMT.
WA_PRCO-MSGE = 'Info Record Changed'.
WA_PRCO-TRF_LIGHT = 3.
WA_INFO-STATUS = 'C'.
* MOVE-CORRESPONDING WA_INFO TO WA_PRCX.
MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
ENDIF.
ELSE.
WA_PRCO-MSGE = 'Info Record Not Create'.
WA_PRCO-TRF_LIGHT = 1.
MODIFY IT_PRCO FROM WA_PRCO.
MOVE-CORRESPONDING WA_PRCO TO WA_PRCX.
ENDIF.
REPLACE ALL OCCURRENCES OF '.' IN WA_PRCO-DATAB WITH space.
CONCATENATE WA_PRCO-DATAB+4(4) WA_PRCO-DATAB+2(2) WA_PRCO-DATAB(2) INTO WA_PRCO-DATAB.
WA_PRCX-DATAB = WA_PRCO-DATAB.
REPLACE ALL OCCURRENCES OF '.' IN WA_PRCO-DATBI WITH space.
CONCATENATE WA_PRCO-DATBI+4(4) WA_PRCO-DATBI+2(2) WA_PRCO-DATBI(2) INTO WA_PRCO-DATBI.
WA_PRCX-DATBI = WA_PRCO-DATBI.
WA_PRCX-NAME1 = WA_PRCO-NAME1.
* WA_PRCX-NETPR = WA_PRCX-NETPR / 100.
APPEND WA_PRCX TO IT_PRCX.
ENDLOOP.
ENDFORM. " MODIFY_DATA
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_UCOMM text
* -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USR_CMD USING p_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&BACK'.
SUBMIT Z_CS_INFO_RECORD via SELECTION-SCREEN.
ENDCASE.
ENDFORM. "USR_CMD
*&---------------------------------------------------------------------*
*& Form SAVE_TABLE_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_TABLE_LOG .
ENDFORM. " SAVE_TABLE_LOG
*&---------------------------------------------------------------------*
*& Form UPD_AMT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPD_AMT .
LOOP AT IT_PRCO INTO WA_PRCO WHERE STATUS = 'W'
AND TRF_LIGHT NE '1'.
CLEAR: G_DATAB,G_DATBI.
CONCATENATE WA_PRCO-DATAB+6(4) WA_PRCO-DATAB+3(2) WA_PRCO-DATAB(2) INTO G_DATAB.
REPLACE ALL OCCURENCES OF '.' IN G_DATAB WITH ``.
CONDENSE G_DATAB.
CONCATENATE WA_PRCO-DATBI+6(4) WA_PRCO-DATBI+3(2) WA_PRCO-DATBI(2) INTO G_DATBI.
REPLACE ALL OCCURENCES OF '.' IN G_DATBI WITH ``.
CONDENSE G_DATBI.
SELECT SINGLE KNUMH INTO A017-KNUMH
FROM A017
WHERE KSCHL EQ 'PB00'
AND LIFNR EQ WA_PRCO-LIFNR
AND MATNR EQ WA_PRCO-MATNR
AND DATAB EQ WA_PRCO-DATABC. "G_DATAB AND DATBI EQ G_DATBI.
IF SY-SUBRC EQ 0.
SELECT SINGLE KBETR FROM KONP INTO KONP-KBETR
WHERE KNUMH EQ A017-KNUMH
AND KSCHL EQ 'PB00' .
WA_PRCO-NETPR = KONP-KBETR.
WA_PRCO-TRF_LIGHT = '3'.
ENDIF.
MODIFY IT_PRCO FROM WA_PRCO.
ENDLOOP.
.
ENDFORM.
Subscribe to:
Post Comments (Atom)
Visitor
Code Syntax Try...Endtry
Code : Report Try. Parameters NUMBER type I . data RESULT type P decimals 2 . data OREF type ref to CX_ROOT . data TEXT typ...
-
refresh it_pr . select ebkn ~ banfn ebkn ~ bnfpo ebkn ~ sakto ebkn ~ aufnr * AFVC~LTXA1 * ...
-
data : it_status type table of jstat , wa_status type jstat . *Teco Complete refresh lt_methods . clear ls_methods ...
-
Sample Code Report ZTEST. tables : mseg . type-pools : slis , icon , vimty , abap , truxs . data : begin of it_mseg occurs...
No comments:
Post a Comment