2008 Jun 13 2:16 PM
hi all,
I want to update record in VK12.
I want to do it using BDC.
How to do it.
Regards
Amruta
Hi ,
I am sending the FV11 BDC ..This Transaction is same as VK12 . For your reference see the cod .
-
************************************************************************
Program Name : ZFV11_NEW
Program Description : To Upload Condition Records-FV11
Author : J
Start Date : 11/06/2007
***********************************************************************
REPORT zfv11
NO STANDARD PAGE HEADING LINE-SIZE 255.
DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
If it is nessesary to change the data section use the rules:
1.) Each definition of a field exists of two lines
2.) The first line shows exactly the comment
'* data element: ' followed with the data element
which describes the field.
If you don't have a data element use the
comment without a data element name
3.) The second line shows the fieldname of the
structure, the fieldname must consist of
a fieldname and optional the character '_' and
three numbers and the field length in brackets
4.) Each field must be type C.
*
Generated data section with specific formatting - DO NOT CHANGE ***
TABLES : t100.
DATA: BEGIN OF record OCCURS 0,
data element: KSCHA
kschl(004), "Condition Type
data element: SELKZ_LIST
selkz(001),
data element: WERKS_D
werks(004), "Plant
data element: ELIFN
lifnr(010), "Vendor
data element: MATNR
matnr(018), "Material No.
data element: KBETR_KOND
kbetr(016), "Amount
data element: KODATAB
datab(010), "Condition Validity Date from
data element: KODATBI
datbi(010), "Condition Validity To
data element: MWSKZ
mwsk1(002),
END OF record.
DATA : BEGIN OF it_new OCCURS 0, " Internal Table for Header Data
kschl(004),
werks(004),
lifnr(010),
END OF it_new.
DATA : BEGIN OF it_item OCCURS 0, " Internal table for Item Data
werks(004),
lifnr(010),
matnr(018),
kbetr(016),
datab(010),
datbi(010),
mwsk1(002),
END OF it_item.
DATA : cnt(2) TYPE n,
fld(25) TYPE c.
TYPE-POOLS: truxs.
DATA: it_raw TYPE truxs_t_text_data.
DATA : n TYPE n.
DATA:
BEGIN OF t_data OCCURS 0,
data TYPE string,
END OF t_data.
DATA:BEGIN OF it_mess OCCURS 0,
msgtyp(5),
lms(200),
msgv1(50),
END OF it_mess.
DATA : p_mode TYPE c.
DATA:it_msgtab TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE,
it_msgtab1 TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.
DATA : l_mstring(150).
DATA : BEGIN OF bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
PARAMETERS : p_file1 LIKE rlgrap-filename.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
PERFORM file_selection.
PERFORM data_upload.
PERFORM table_control.
LOOP AT it_new.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RV13A-KSCHL'
it_new-kschl.
PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV130-SELKZ(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=WEIT'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KONP-KBETR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KOMG-WERKS'
it_new-werks.
PERFORM bdc_field USING 'KOMG-LIFNR'
it_new-lifnr.
************************
"""""""""""""
DATA: "X(5) TYPE N,
N(5) TYPE N.
N = 0.
LOOP AT it_item.
N = N + 1.
ENDLOOP.
"X = 1.
CNT = 1.
DO N TIMES.
IF CNT > 19.
*
perform bdc_field using 'BDC_OKCODE' 'KOMG-MATNR(01)'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
CNT = 1.
ENDIF.
***********************
cnt = 1.
LOOP AT it_item WHERE werks EQ it_new-werks AND lifnr EQ it_new-lifnr . "FROM x TO x.
CONCATENATE 'KOMG-MATNR(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-matnr.
CONCATENATE 'KONP-KBETR(' cnt')' INTO fld.
PERFORM bdc_field USING fld it_item-kbetr.
CONCATENATE 'RV13A-DATAB(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-datab.
CONCATENATE 'RV13A-DATBI(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-datbi.
CONCATENATE 'KONP-MWSK1(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-mwsk1.
cnt = cnt + 1.
if cnt = 20.
perform bdc_field using 'BDC_OKCODE' 'KOMG-MATNR(19)'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
CNT = 1.
endif.
CLEAR it_item.
ENDLOOP.
ENDDO.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KONP-MWSK1(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION 'FV11' USING bdcdata MODE 'A'
UPDATE 'S'
MESSAGES INTO it_msgtab.
CLEAR bdcdata[].
PERFORM error.
ENDLOOP.
----
Start new screen -Subroutine for screen s *
----
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field -Subroutine for field s *
----
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
&----
*& Form file_selection
----
FORM file_selection .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE1'
IMPORTING
file_name = p_file1.
ENDFORM. " file_selection
&----
*& Form data_upload
----
FORM data_upload .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file1
TABLES
i_tab_converted_data = record
EXCEPTIONS
conversion_failed = 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. " data_upload
&----
*& Form error
----
FORM error .
LOOP AT it_msgtab.
IF it_msgtab-msgtyp = 'E'.
SELECT SINGLE * FROM t100 WHERE sprsl = it_msgtab-msgspra
AND arbgb = it_msgtab-msgid
AND msgnr = it_msgtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH it_msgtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH it_msgtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH it_msgtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH it_msgtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH it_msgtab-msgv1 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv2 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv3 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
it_mess-msgtyp = it_msgtab-msgtyp.
it_mess-lms = l_mstring.
it_mess-msgv1 = it_msgtab-msgv1.
APPEND it_mess.
WRITE: / it_msgtab-msgtyp, l_mstring(150).
ELSE.
WRITE: / it_msgtab.
it_mess-msgtyp = it_msgtab-msgtyp.
it_mess-lms = l_mstring.
it_mess-msgv1 = it_msgtab-msgv1.
APPEND it_mess.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " error
&----
*& Form table_Control
----
FORM table_control .
SORT record BY lifnr matnr.
LOOP AT record.
ON CHANGE OF record-lifnr.
MOVE-CORRESPONDING record TO it_new.
APPEND it_new.
ENDON.
MOVE-CORRESPONDING record TO it_item.
APPEND it_item.
ENDLOOP.
ENDFORM. " table_Control
-
Reward If useful
Thanks
Jagadeesh.G
2008 Jun 13 2:44 PM
2008 Jun 13 3:41 PM
Hi ,
I am sending the FV11 BDC ..This Transaction is same as VK12 . For your reference see the cod .
-
************************************************************************
Program Name : ZFV11_NEW
Program Description : To Upload Condition Records-FV11
Author : J
Start Date : 11/06/2007
***********************************************************************
REPORT zfv11
NO STANDARD PAGE HEADING LINE-SIZE 255.
DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
If it is nessesary to change the data section use the rules:
1.) Each definition of a field exists of two lines
2.) The first line shows exactly the comment
'* data element: ' followed with the data element
which describes the field.
If you don't have a data element use the
comment without a data element name
3.) The second line shows the fieldname of the
structure, the fieldname must consist of
a fieldname and optional the character '_' and
three numbers and the field length in brackets
4.) Each field must be type C.
*
Generated data section with specific formatting - DO NOT CHANGE ***
TABLES : t100.
DATA: BEGIN OF record OCCURS 0,
data element: KSCHA
kschl(004), "Condition Type
data element: SELKZ_LIST
selkz(001),
data element: WERKS_D
werks(004), "Plant
data element: ELIFN
lifnr(010), "Vendor
data element: MATNR
matnr(018), "Material No.
data element: KBETR_KOND
kbetr(016), "Amount
data element: KODATAB
datab(010), "Condition Validity Date from
data element: KODATBI
datbi(010), "Condition Validity To
data element: MWSKZ
mwsk1(002),
END OF record.
DATA : BEGIN OF it_new OCCURS 0, " Internal Table for Header Data
kschl(004),
werks(004),
lifnr(010),
END OF it_new.
DATA : BEGIN OF it_item OCCURS 0, " Internal table for Item Data
werks(004),
lifnr(010),
matnr(018),
kbetr(016),
datab(010),
datbi(010),
mwsk1(002),
END OF it_item.
DATA : cnt(2) TYPE n,
fld(25) TYPE c.
TYPE-POOLS: truxs.
DATA: it_raw TYPE truxs_t_text_data.
DATA : n TYPE n.
DATA:
BEGIN OF t_data OCCURS 0,
data TYPE string,
END OF t_data.
DATA:BEGIN OF it_mess OCCURS 0,
msgtyp(5),
lms(200),
msgv1(50),
END OF it_mess.
DATA : p_mode TYPE c.
DATA:it_msgtab TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE,
it_msgtab1 TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE.
DATA : l_mstring(150).
DATA : BEGIN OF bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
PARAMETERS : p_file1 LIKE rlgrap-filename.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
PERFORM file_selection.
PERFORM data_upload.
PERFORM table_control.
LOOP AT it_new.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV13A-KSCHL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RV13A-KSCHL'
it_new-kschl.
PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV130-SELKZ(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=WEIT'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KONP-KBETR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KOMG-WERKS'
it_new-werks.
PERFORM bdc_field USING 'KOMG-LIFNR'
it_new-lifnr.
************************
"""""""""""""
DATA: "X(5) TYPE N,
N(5) TYPE N.
N = 0.
LOOP AT it_item.
N = N + 1.
ENDLOOP.
"X = 1.
CNT = 1.
DO N TIMES.
IF CNT > 19.
*
perform bdc_field using 'BDC_OKCODE' 'KOMG-MATNR(01)'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
CNT = 1.
ENDIF.
***********************
cnt = 1.
LOOP AT it_item WHERE werks EQ it_new-werks AND lifnr EQ it_new-lifnr . "FROM x TO x.
CONCATENATE 'KOMG-MATNR(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-matnr.
CONCATENATE 'KONP-KBETR(' cnt')' INTO fld.
PERFORM bdc_field USING fld it_item-kbetr.
CONCATENATE 'RV13A-DATAB(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-datab.
CONCATENATE 'RV13A-DATBI(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-datbi.
CONCATENATE 'KONP-MWSK1(' cnt ')' INTO fld.
PERFORM bdc_field USING fld it_item-mwsk1.
cnt = cnt + 1.
if cnt = 20.
perform bdc_field using 'BDC_OKCODE' 'KOMG-MATNR(19)'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
CNT = 1.
endif.
CLEAR it_item.
ENDLOOP.
ENDDO.
PERFORM bdc_dynpro USING 'SAPMV13A' '1363'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KONP-MWSK1(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
CALL TRANSACTION 'FV11' USING bdcdata MODE 'A'
UPDATE 'S'
MESSAGES INTO it_msgtab.
CLEAR bdcdata[].
PERFORM error.
ENDLOOP.
----
Start new screen -Subroutine for screen s *
----
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field -Subroutine for field s *
----
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
&----
*& Form file_selection
----
FORM file_selection .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE1'
IMPORTING
file_name = p_file1.
ENDFORM. " file_selection
&----
*& Form data_upload
----
FORM data_upload .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file1
TABLES
i_tab_converted_data = record
EXCEPTIONS
conversion_failed = 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. " data_upload
&----
*& Form error
----
FORM error .
LOOP AT it_msgtab.
IF it_msgtab-msgtyp = 'E'.
SELECT SINGLE * FROM t100 WHERE sprsl = it_msgtab-msgspra
AND arbgb = it_msgtab-msgid
AND msgnr = it_msgtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH it_msgtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH it_msgtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH it_msgtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH it_msgtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH it_msgtab-msgv1 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv2 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv3 INTO l_mstring.
REPLACE '&' WITH it_msgtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
it_mess-msgtyp = it_msgtab-msgtyp.
it_mess-lms = l_mstring.
it_mess-msgv1 = it_msgtab-msgv1.
APPEND it_mess.
WRITE: / it_msgtab-msgtyp, l_mstring(150).
ELSE.
WRITE: / it_msgtab.
it_mess-msgtyp = it_msgtab-msgtyp.
it_mess-lms = l_mstring.
it_mess-msgv1 = it_msgtab-msgv1.
APPEND it_mess.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " error
&----
*& Form table_Control
----
FORM table_control .
SORT record BY lifnr matnr.
LOOP AT record.
ON CHANGE OF record-lifnr.
MOVE-CORRESPONDING record TO it_new.
APPEND it_new.
ENDON.
MOVE-CORRESPONDING record TO it_item.
APPEND it_item.
ENDLOOP.
ENDFORM. " table_Control
-
Reward If useful
Thanks
Jagadeesh.G
2008 Jun 13 3:59 PM
Hi amrutha,
here a program of mine for concition creation/modification - may it help you...
REPORT z_zta_preis
NO STANDARD PAGE HEADING
MESSAGE-ID 0h.
INCLUDE:
<icon>.
TYPE-POOLS:
sydes,
slis.
CONSTANTS:
con_true TYPE flag VALUE 'X'.
TYPES:
* work and display table
BEGIN OF typ_preisdaten,
icon TYPE icon_d,
matnr TYPE artnr,
lifnr TYPE lifnr,
ekorg TYPE ekorg,
knumh TYPE knumh,
datab TYPE kodatab,
datbi TYPE kodatbi,
kbetr TYPE kbetr_cond,
konwa TYPE konwa,
kpein TYPE kpein,
kmein TYPE kmein,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
knumh_vk TYPE knumh,
datab_vk TYPE kodatab,
datbi_vk TYPE kodatbi,
kbetr_vk TYPE kbetr_cond,
konwa_vk TYPE konwa,
kpein_vk TYPE kpein,
kmein_vk TYPE kmein,
END OF typ_preisdaten,
typ_t_preisdaten TYPE TABLE OF typ_preisdaten,
* Data A018 purchasing conditions
BEGIN OF typ_a018_dta,
knumh TYPE knumh,
matnr TYPE matnr,
ekorg TYPE ekorg,
lifnr TYPE lifnr,
datab TYPE datab,
datbi TYPE datbi,
END OF typ_a018_dta,
typ_t_a018_dta TYPE TABLE OF typ_a018_dta,
* Data A004 Sales conditiona
BEGIN OF typ_a004_dta,
matnr TYPE a004-matnr,
datbi TYPE a004-datbi,
datab TYPE a004-datab,
knumh TYPE a004-knumh,
END OF typ_a004_dta,
typ_t_a004_dta TYPE TABLE OF typ_a004_dta,
* condition details KONP
BEGIN OF typ_konp_dta,
knumh TYPE konp-knumh,
kopos TYPE konp-kopos,
kbetr TYPE konp-kbetr,
kpein TYPE konp-kpein,
kmein TYPE konp-kmein,
konwa TYPE konp-konwa,
END OF typ_konp_dta.
* Global data
DATA:
v_commit_count TYPE border,
vg_dynnr TYPE dynpronr,
vsel_matnr TYPE mara-matnr,
vsel_vmsta TYPE mvke-vmsta, "CLI20041130
gt_preisdaten TYPE typ_t_preisdaten,
* BTCI Data
bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE.
*----------------------------------------------------------------------*
* Selection screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK sel WITH FRAME TITLE text-sel.
SELECT-OPTIONS:
s_matnr FOR vsel_matnr,
s_vmsta FOR vsel_vmsta. "CLI20041130
PARAMETERS:
p_datab TYPE datab,
p_ekorg TYPE ekorg,
p_vkorg TYPE vkorg,
p_vtweg TYPE vtweg,
p_ekappl TYPE kappl,
p_ekschl TYPE kschl,
p_vkappl TYPE kappl,
p_vkschl TYPE kschl.
SELECTION-SCREEN END OF BLOCK sel.
SELECTION-SCREEN BEGIN OF BLOCK lop WITH FRAME TITLE text-lop.
PARAMETERS:
p_ekdays TYPE tfmatage,
p_layout TYPE slis_vari NO-DISPLAY,
p_btmode TYPE ctu_mode,
p_echt TYPE allgecht,
p_detail TYPE flag.
SELECTION-SCREEN END OF BLOCK lop.
AT SELECTION-SCREEN OUTPUT.
* display only fields not to be changed
PERFORM pbo.
AT SELECTION-SCREEN ON p_datab.
IF p_datab < sy-datum.
MESSAGE e000 WITH 'Please enter'
'valid-from-date' 'from' sy-datum.
* & & & &
ENDIF." P_DATAB < sy-datum.
INITIALIZATION.
PERFORM initialize.
START-OF-SELECTION.
vg_dynnr = sy-dynnr.
* determine purchase prices
PERFORM get_ek_preisdaten CHANGING gt_preisdaten.
* add existing sales prices
PERFORM get_vk_preisdaten CHANGING gt_preisdaten.
* Individually Set new sales prices
PERFORM set_preis_vk CHANGING gt_preisdaten.
* Protokoll
PERFORM alv_display USING gt_preisdaten.
*&---------------------------------------------------------------------*
*& Form INITIALIZE
*&---------------------------------------------------------------------*
* Selection screen init
*----------------------------------------------------------------------*
FORM initialize.
s_vmsta = 'INE'. "CLI20041130
s_vmsta-low = '98'. "CLI20041130
APPEND s_vmsta. "CLI20041130
p_datab = sy-datum + 1.
p_ekorg = '7000'.
p_vkorg = '7000'.
p_vtweg = '03'.
p_ekappl = 'M'.
p_vkappl = 'V'.
p_ekschl = 'ZBP0'.
p_vkschl = 'ZBP0'.
p_ekdays = 14.
p_btmode = 'N'.
ENDFORM. " INITIALIZE
*&---------------------------------------------------------------------*
*& Form GET_EK_PREISDATEN
*&---------------------------------------------------------------------*
* determine purchse price conditions; append valid
*----------------------------------------------------------------------*
* <--PT_PREISDATEN
*----------------------------------------------------------------------*
FORM get_ek_preisdaten CHANGING pt_preisdaten TYPE typ_t_preisdaten.
DATA:
l_tabix TYPE sytabix,
l_a018_lines TYPE sytfill,
l_txt TYPE text80,
lt_matnr TYPE TABLE OF matnr,
lt_a018_dta TYPE typ_t_a018_dta,
lt_a018_mat TYPE typ_t_a018_dta.
FIELD-SYMBOLS:
<matnr> TYPE matnr,
<a018_dta> TYPE LINE OF typ_t_a018_dta.
* Base QTYof article in sales area
* without deteion mark LOEKZ in MARA
* sales block according selection
SELECT mara~matnr INTO TABLE lt_matnr
FROM mvke
JOIN mara ON mara~matnr = mvke~matnr
WHERE mvke~matnr IN s_matnr
AND vkorg = p_vkorg
AND vtweg = p_vtweg
AND pmatn = space
AND mara~lvorm = space
AND mvke~lvorm = space
AND ( vmsta = space or
VMSTD > P_datab or
vmsta IN s_vmsta ).
IF sy-subrc <> 0.
MESSAGE s228.
* No valid entry found
EXIT.
ENDIF." sy-subrc <> 0.
PERFORM statistics
USING 'S' sy-dbcnt '* Articles of VKORG selected
* read existing Purch.conditions
SELECT knumh matnr ekorg lifnr datab datbi
INTO CORRESPONDING FIELDS OF TABLE lt_a018_dta
FROM a018
FOR ALL ENTRIES IN lt_matnr
WHERE matnr = lt_matnr-table_line
AND kappl = p_ekappl
AND kschl = p_ekschl
AND ekorg = p_ekorg
AND datab <= p_datab
AND datbi >= p_datab
AND esokz = '0'.
SORT lt_a018_dta BY matnr.
DESCRIBE TABLE lt_a018_dta LINES l_a018_lines.
* Missing conditions for statistics
* Preise für die existierenden
LOOP AT lt_matnr ASSIGNING <matnr>.
READ TABLE lt_a018_dta ASSIGNING <a018_dta>
WITH KEY matnr = <matnr> BINARY SEARCH.
IF sy-subrc = 0.
* collect conditions records for Article
CLEAR: lt_a018_mat.
l_tabix = sy-tabix.
WHILE <a018_dta>-matnr = <matnr>
AND l_tabix <= l_a018_lines.
APPEND <a018_dta> TO lt_a018_mat.
ADD 1 TO l_tabix.
CHECK l_tabix <= l_a018_lines.
READ TABLE lt_a018_dta ASSIGNING <a018_dta>
INDEX l_tabix.
ENDWHILE." <a018_dta>-matnr = <matnr>.
PERFORM append_ek_preis_zur_condition
CHANGING lt_a018_mat pt_preisdaten.
ELSE.
CONCATENATE
'Article' <matnr>
': Missing purch condition' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
ENDIF." sy-subrc = 0.
ENDLOOP." at lt_matnr assigning <matnr>.
SORT pt_preisdaten BY matnr.
ENDFORM. " GET_EK_PREISDATEN
*&---------------------------------------------------------------------*
*& Form SET_PREIS_VK
*&---------------------------------------------------------------------*
* set sales condtion (in update run)
*----------------------------------------------------------------------*
* <--PT_PREISDATEN
*----------------------------------------------------------------------*
FORM set_preis_vk CHANGING pt_preisdaten TYPE typ_t_preisdaten.
FIELD-SYMBOLS:
<pre><code> TYPE LINE OF typ_t_preisdaten.
LOOP AT pt_preisdaten ASSIGNING <pre><code>.
CASE <pre><code>-icon.
WHEN icon_create.
PERFORM price_create CHANGING <pre><code>.
WHEN icon_change.
PERFORM price_change CHANGING <pre><code>.
WHEN icon_date.
PERFORM price_date CHANGING <pre><code>.
WHEN OTHERS.
ENDCASE." <pre><code>-icon.
ENDLOOP." at pt_preisdaten assigning <pre><code>.
ENDFORM. " SET_PREIS_VK
*&---------------------------------------------------------------------*
*& Form ALV_DISPLAY
*&---------------------------------------------------------------------*
* issue protocol
*----------------------------------------------------------------------*
* -->PT_PREISDATEN text
*----------------------------------------------------------------------*
FORM alv_display USING pt_preisdaten TYPE typ_t_preisdaten.
* cleanup depending on detail option
PERFORM alv_list USING pt_preisdaten.
ENDFORM. " ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form PBO
*&---------------------------------------------------------------------*
* darken fixed fields
*----------------------------------------------------------------------*
FORM pbo.
LOOP AT SCREEN.
CASE screen-name.
WHEN 'P_EKAPPL' OR
'P_VKAPPL' OR
'P_EKSCHL' OR
'P_VKSCHL' OR
'P_EKORG' OR
'P_VKORG' OR
'P_VTWEG'.
screen-input = 0.
ENDCASE." screen-name.
MODIFY SCREEN.
ENDLOOP." at screen.
ENDFORM. " PBO
*&---------------------------------------------------------------------*
*& Form APPEND_EK_PREIS_ZUR_condITION
*&---------------------------------------------------------------------*
* determine purch price of default supplier
* from conditions for material
*----------------------------------------------------------------------*
* -->PT_A018_MAT
* <--PT_PREISDATEN
*----------------------------------------------------------------------*
FORM append_ek_preis_zur_condition
CHANGING pt_a018_mat TYPE typ_t_a018_dta
pt_preisdaten TYPE typ_t_preisdaten.
DATA:
l_preisdaten TYPE typ_preisdaten,
l_txt TYPE text80,
l_tfill TYPE sytfill,
l_n_lif TYPE sytfill,
lt_konp_dta TYPE TABLE OF typ_konp_dta,
lt_lifnr TYPE TABLE OF lifnr,
l_ekvaldays TYPE tfmatage.
FIELD-SYMBOLS:
<a018_dta> TYPE typ_a018_dta,
<lifnr> TYPE lifnr,
<konp_dta> TYPE typ_konp_dta.
* 1. consistency check: numer conditions records = number suppliers
DESCRIBE TABLE pt_a018_mat LINES l_tfill.
IF l_tfill > 1.
LOOP AT pt_a018_mat ASSIGNING <a018_dta>.
APPEND <a018_dta>-lifnr TO lt_lifnr.
ENDLOOP." at pt_a018_mat assigning <a018_dta>.
PERFORM normalize_table CHANGING lt_lifnr.
DESCRIBE TABLE lt_lifnr LINES l_n_lif.
IF l_tfill <> l_n_lif.
* Inconsistent - report and skip
CONCATENATE
'Artikel' <a018_dta>-matnr
': Inconsistent purchase condition' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ENDIF." l_tfill <> l_n_lif.
* default supplier from EINA
SELECT lifnr
INTO TABLE lt_lifnr
FROM eina
WHERE matnr = <a018_dta>-matnr
AND relif = con_true.
* 2. consistency check: default supplier found and unique
DESCRIBE TABLE lt_lifnr LINES l_tfill.
IF l_tfill = 1.
* OK - keep records for default supplier
READ TABLE lt_lifnr ASSIGNING <lifnr> INDEX 1.
DELETE pt_a018_mat WHERE NOT lifnr = <lifnr>.
ELSE.
* report error and skip
CONCATENATE
'Articl' <a018_dta>-matnr
': Inconsistent default supplier' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ENDIF." l_tfill = 1.
ENDIF." l_tfill > 1.
* sjoulkd be one condition record left
DESCRIBE TABLE pt_a018_mat LINES l_tfill.
IF l_tfill <> 1.
* report and skip
CONCATENATE
'Articlel' <a018_dta>-matnr
': Inconsistent price condition' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ENDIF.
READ TABLE pt_a018_mat ASSIGNING <a018_dta> INDEX 1.
* conditionen aus KONP
SELECT knumh kopos kbetr kpein kmein konwa
INTO CORRESPONDING FIELDS OF TABLE lt_konp_dta
FROM konp
WHERE knumh = <a018_dta>-knumh
AND loevm_ko = space " not deleted
AND krech = 'C' " calc rule qty
AND kzbzg = space. " no scale conditions
IF sy-subrc <> 0.
* repprt and skip
CONCATENATE
'Article' <a018_dta>-matnr
': Inconsistent Price condition' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ELSE."if sy-subrc <> 0.
* shuld be one record
IF sy-dbcnt <> 1.
* report and skip
CONCATENATE
'Articlel' <a018_dta>-matnr
': Inconsistent Price condition' p_ekschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ELSE.
READ TABLE lt_konp_dta ASSIGNING <konp_dta> INDEX 1.
l_preisdaten-ekorg = p_vkorg.
l_preisdaten-icon = icon_okay.
MOVE-CORRESPONDING:
<a018_dta> TO l_preisdaten,
<konp_dta> TO l_preisdaten.
APPEND l_preisdaten TO pt_preisdaten.
PERFORM statistics
USING 'S' 1 '* purchase price determinded for article'.
l_ekvaldays = l_preisdaten-datbi - l_preisdaten-datab.
IF l_ekvaldays <= p_ekdays.
WRITE l_ekvaldays TO l_txt LEFT-JUSTIFIED.
CONCATENATE
'Warning article' <a018_dta>-matnr
': Purchase-Price valid only' l_txt 'days'
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
ENDIF." l_ekvaldays <= P_EKDAYS.
ENDIF." sy-dbcnt <> 1.
ENDIF." sy-subrc <> 0.
ENDFORM. " APPEND_EK_PREIS_ZUR_condITION
*&---------------------------------------------------------------------*
*& Form statistics
*&---------------------------------------------------------------------*
* Statistics-Handler
*----------------------------------------------------------------------*
* -->P_FUNC S - Store, L - List
* -->P_TEXT
*----------------------------------------------------------------------*
FORM statistics USING p_func TYPE char01
p_count TYPE sy-dbcnt
p_text TYPE text80.
DATA:
* Fehlerstruktur
BEGIN OF l_gp_error,
txt TYPE text80,
count TYPE sydbcnt VALUE 1,
END OF l_gp_error,
* output length
l_outlen TYPE sy-tleng.
* Static table
STATICS:
lt_gp_error LIKE TABLE OF l_gp_error.
CASE p_func.
WHEN 'S'. "Store Message
* collect and count message
l_gp_error-txt = p_text.
l_gp_error-count = p_count.
COLLECT l_gp_error INTO lt_gp_error.
WHEN 'L'. "List Messages
* issue messages
SORT lt_gp_error.
LOOP AT lt_gp_error INTO l_gp_error.
AT FIRST.
FORMAT COLOR COL_HEADING INTENSIFIED.
DESCRIBE FIELD l_gp_error-count OUTPUT-LENGTH l_outlen.
WRITE:
sy-vline,
p_text,
sy-vline,
AT (l_outlen) 'Count',
sy-vline,
AT sy-linsz sy-vline.
FORMAT COLOR COL_NORMAL INTENSIFIED.
ENDAT." first.
WRITE:
sy-vline,
l_gp_error-txt,
sy-vline,
l_gp_error-count NO-ZERO,
sy-vline,
AT sy-linsz sy-vline.
ENDLOOP." at lt_gp_error into l_gp_error.
ENDCASE." p_func.
ENDFORM. " statistics
*&---------------------------------------------------------------------*
*& Form alv_LIST
*&---------------------------------------------------------------------*
* ALV display Detail protocol
*----------------------------------------------------------------------*
* -->PT_LIST
*----------------------------------------------------------------------*
FORM alv_list USING pt_list TYPE table.
DATA:
l_variant TYPE disvariant,
l_repid TYPE sy-repid,
l_alv_layout TYPE slis_layout_alv,
l_is_print TYPE slis_print_alv,
lt_alv_fieldcat TYPE slis_t_fieldcat_alv,
lt_events TYPE slis_t_event.
IF p_detail IS INITIAL.
CLEAR: pt_list.
APPEND INITIAL LINE TO pt_list.
ENDIF." p_detail IS INITIAL.
l_repid = sy-repid.
l_variant-variant = p_layout.
l_variant-report = l_repid.
l_variant-username = sy-uname.
l_variant-variant = p_layout.
PERFORM alv_events CHANGING lt_events.
PERFORM alv_layout CHANGING l_alv_layout.
PERFORM alv_fieldcat_for_itab TABLES pt_list
CHANGING lt_alv_fieldcat.
PERFORM alv_fieldcat_enhance CHANGING lt_alv_fieldcat.
l_is_print-no_print_selinfos = con_true.
l_is_print-no_print_listinfos = con_true.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE = ' '
i_callback_program = l_repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_STRUCTURE_NAME =
is_layout = l_alv_layout
it_fieldcat = lt_alv_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = con_true
i_save = 'A'
is_variant = l_variant
it_events = lt_events
* IT_EVENT_EXIT =
is_print = l_is_print
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = pt_list
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. " alv_LIST
*&---------------------------------------------------------------------*
*& Form alv_events
*&---------------------------------------------------------------------*
* Events assigned
*----------------------------------------------------------------------*
* <--P_I_EVENTS
*----------------------------------------------------------------------*
FORM alv_events CHANGING p_i_events TYPE slis_t_event.
FIELD-SYMBOLS:
<event> TYPE LINE OF slis_t_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
* I_LIST_TYPE = 0
IMPORTING
et_events = p_i_events
EXCEPTIONS
list_type_wrong = 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.
LOOP AT p_i_events ASSIGNING <event>.
CASE <event>-name.
WHEN 'TOP_OF_PAGE'.
<event>-form = 'ALV_TOP_OF_PAGE'.
WHEN 'END_OF_LIST'.
<event>-form = 'ALV_END_OF_LIST'.
WHEN OTHERS.
DELETE p_i_events.
ENDCASE." <event>-name.
ENDLOOP." at p_i_events assigning <event>.
ENDFORM. " alv_events
*&---------------------------------------------------------------------*
*& Form alv_fieldcat_enhance
*&---------------------------------------------------------------------*
* Individual enhancement of field catalogue
*----------------------------------------------------------------------*
* <--PT_ALV_FIELDCAT
*----------------------------------------------------------------------*
FORM alv_fieldcat_enhance
CHANGING pt_alv_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS:
<alv_fieldcat> TYPE slis_fieldcat_alv.
LOOP AT pt_alv_fieldcat ASSIGNING <alv_fieldcat>.
CASE <alv_fieldcat>-fieldname.
WHEN 'ICON'.
<alv_fieldcat>-icon = con_true.
<alv_fieldcat>-seltext_s =
<alv_fieldcat>-seltext_m =
<alv_fieldcat>-seltext_l =
<alv_fieldcat>-reptext_ddic =
'Status'.
WHEN 'KBETR'.
<alv_fieldcat>-cfieldname = 'KONWA'.
<alv_fieldcat>-seltext_s =
<alv_fieldcat>-seltext_m =
<alv_fieldcat>-seltext_l =
<alv_fieldcat>-reptext_ddic =
'Price PO'.
WHEN 'KBETR_VK'.
<alv_fieldcat>-cfieldname = 'KONWA_VK'.
<alv_fieldcat>-seltext_s =
<alv_fieldcat>-seltext_m =
<alv_fieldcat>-seltext_l =
<alv_fieldcat>-reptext_ddic =
'Price Sale'.
WHEN 'KNUMH' OR 'KNUMH_VK'.
<alv_fieldcat>-tech = con_true.
WHEN 'LIFNR'.
<alv_fieldcat>-seltext_s =
<alv_fieldcat>-seltext_m =
<alv_fieldcat>-seltext_l =
<alv_fieldcat>-reptext_ddic =
'Supplier'.
WHEN 'DATAB' OR 'DATAB_VK' .
<alv_fieldcat>-seltext_s =
<alv_fieldcat>-seltext_m =
<alv_fieldcat>-seltext_l =
<alv_fieldcat>-reptext_ddic =
'Valid from'.
ENDCASE." <alv_fieldcat>-fieldname.
ENDLOOP." at pt_alv_fieldcat assigning <fieldcat_alv>.
ENDFORM. " alv_fieldcat_enhance
*&---------------------------------------------------------------------*
*& Form SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* -->P_TEXT
* -->P_SHARE
* -->P_TOTAL
*----------------------------------------------------------------------*
FORM sapgui_progress_indicator "#EC CALLED
USING
p_text TYPE c
p_share TYPE sytfill
p_total TYPE sytfill.
STATICS:
l_time LIKE sy-uzeit,
l_txt TYPE text80.
DATA:
l_seconds_since_lastcall TYPE sytfill,
l_share TYPE p,
l_pct TYPE sytfill,
l_txt1 LIKE tline-tdline,
l_txt2 LIKE tline-tdline.
GET TIME.
l_seconds_since_lastcall = sy-uzeit - l_time.
CHECK l_seconds_since_lastcall >= 1 OR l_txt <> p_text.
l_txt = p_text.
l_time = sy-uzeit.
IF p_total > 0.
l_share = p_share.
l_share = p_share.
l_pct = l_share * 100 / p_total.
WRITE p_share TO l_txt1 LEFT-JUSTIFIED.
WRITE p_total TO l_txt2 LEFT-JUSTIFIED.
CONCATENATE
p_text l_txt1 '/' l_txt2 INTO l_txt1 SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = l_pct
text = l_txt1.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* percentage = l_pct
text = p_text.
ENDIF. " p_total > 0.
ENDFORM. " SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
*& Form ALV_FIELDCAT_FOR_ITAB
*&---------------------------------------------------------------------*
* field catalog for any internal Table (c) Clemens Li
* * build field catalog from type description
*----------------------------------------------------------------------*
* -->pt_outtab
* <--PT_alv_fieldcat
*----------------------------------------------------------------------*
FORM alv_fieldcat_for_itab "#EC *
TABLES pt_outtab TYPE table "#EC *
CHANGING pt_alv_fieldcat TYPE slis_t_fieldcat_alv. "#EC *
DATA:
l_desc TYPE sydes_desc,
l_alv_fieldcat TYPE slis_fieldcat_alv,
l_longfield TYPE fname.
FIELD-SYMBOLS:
<typeinfo> TYPE sydes_typeinfo,
<nameinfo> TYPE sydes_nameinfo.
DESCRIBE FIELD pt_outtab INTO l_desc. "#EC *
LOOP AT l_desc-types
ASSIGNING <typeinfo>
WHERE NOT idx_name IS INITIAL
AND table_kind IS INITIAL "no entries for deep table like color
AND back = 1. "top-level-entries only
READ TABLE l_desc-names INDEX <typeinfo>-idx_name
ASSIGNING <nameinfo>.
l_alv_fieldcat-fieldname = <nameinfo>-name.
WHILE NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_name.
READ TABLE l_desc-names INDEX <typeinfo>-idx_name
ASSIGNING <nameinfo>.
CONCATENATE
l_alv_fieldcat-fieldname
<nameinfo>-name
INTO l_alv_fieldcat-fieldname.
ENDWHILE." not <nameinfo>-continue IS INITIAL.
READ TABLE l_desc-names INDEX <typeinfo>-idx_help_id
ASSIGNING <nameinfo>.
IF sy-subrc = 0.
* Caution: Help-ID may be Tablename-Fieldname and thus longer
* than 30 Chars; l_alv_fieldcat-rollname is 30 Chars only
l_alv_fieldcat-rollname = <nameinfo>-name.
l_longfield = <nameinfo>-name.
WHILE NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_help_id.
READ TABLE l_desc-names INDEX <typeinfo>-idx_help_id
ASSIGNING <nameinfo>.
CONCATENATE
l_longfield
<nameinfo>-name
INTO l_longfield.
ENDWHILE." not l_desc-continue is initial.
* help id may be data element or <table>-<field>
IF l_longfield CA '-'.
* get data type for table field
PERFORM get_rollname_4_tabfield
USING l_longfield CHANGING l_alv_fieldcat.
ENDIF." l_longfield ca '-'.
ELSE.
* No Help-ID: Use Fieldname as text
l_alv_fieldcat-seltext_s =
l_alv_fieldcat-seltext_m =
l_alv_fieldcat-seltext_l =
l_alv_fieldcat-reptext_ddic =
<nameinfo>-name.
ENDIF." sy-subrc = 0.
* Starting 4.7: get edit mask
IF NOT <typeinfo>-idx_edit_mask IS INITIAL.
READ TABLE l_desc-names INDEX <typeinfo>-idx_edit_mask
ASSIGNING <nameinfo>.
l_alv_fieldcat-edit_mask = <nameinfo>-name.
IF NOT <nameinfo>-continue IS INITIAL.
ADD 1 TO <typeinfo>-idx_edit_mask.
READ TABLE l_desc-names INDEX <typeinfo>-idx_edit_mask
ASSIGNING <nameinfo>.
CONCATENATE
l_alv_fieldcat-edit_mask
<nameinfo>-name
INTO l_alv_fieldcat-edit_mask.
ENDIF." not <nameinfo>-continue IS INITIAL.
ENDIF." not <typeinfo>-IDX_EDIT_MASK is initial.
* assign length, output length and decimals
l_alv_fieldcat-intlen = <typeinfo>-length.
l_alv_fieldcat-outputlen = <typeinfo>-output_length.
l_alv_fieldcat-decimals_out = <typeinfo>-decimals.
l_alv_fieldcat-inttype = <typeinfo>-type.
APPEND l_alv_fieldcat TO pt_alv_fieldcat.
CLEAR: "prevent anything 2 B taken for subsequent fields
l_alv_fieldcat.
ENDLOOP." at l_desc-types where not IDX_NAME is in initial.
ENDFORM. " ALV_FIELDCAT_FOR_ITAB
*&---------------------------------------------------------------------
*& Form get_rollname_4_tabfield
*&---------------------------------------------------------------------
*
*----------------------------------------------------------------------
* -->P_FNAME
* <--P_ALV_FIELDCAT
*----------------------------------------------------------------------
FORM get_rollname_4_tabfield
USING p_fname TYPE fname
CHANGING p_alv_fieldcat TYPE slis_fieldcat_alv.
FIELD-SYMBOLS:
<dfies> TYPE dfies.
DATA:
l_tabname TYPE ddobjname,
lt_dfies TYPE TABLE OF dfies,
l_fieldname TYPE fieldname.
SPLIT p_fname AT '-'
INTO l_tabname l_fieldname.
CLEAR p_alv_fieldcat-rollname.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = l_tabname
fieldname = l_fieldname
* LANGU = SY-LANGU
* LFIELDNAME = ' '
* ALL_TYPES = ' '
* IMPORTING
* X030L_WA =
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
TABLES
dfies_tab = lt_dfies
* FIXED_VALUES =
EXCEPTIONS
not_found = 1
internal_error = 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.
ELSE.
READ TABLE lt_dfies ASSIGNING <dfies> INDEX 1.
p_alv_fieldcat-rollname = <dfies>-rollname.
* if no texts maintained?
IF <dfies>-reptext IS INITIAL AND
<dfies>-scrtext_s IS INITIAL AND
<dfies>-scrtext_m IS INITIAL AND
<dfies>-scrtext_l IS INITIAL.
* No Text: Use Fieldname as text
p_alv_fieldcat-seltext_s =
p_alv_fieldcat-seltext_m =
p_alv_fieldcat-seltext_l =
p_alv_fieldcat-reptext_ddic =
p_alv_fieldcat-fieldname.
ENDIF." <dfies>-reptext IS INITIAL AND
ENDIF.
ENDFORM. " get_rollname_4_tabfield
*&---------------------------------------------------------------------*
*& Form F4_ALV_LAYOUT *
*&---------------------------------------------------------------------*
* F4-help for ALV Layouts
*----------------------------------------------------------------------*
FORM f4_alv_layout CHANGING lvari LIKE disvariant-variant. "#EC CALLED
DATA:
l_alv_layout TYPE disvariant.
* F4-Help layouts
CLEAR l_alv_layout.
l_alv_layout-report = sy-repid.
l_alv_layout-variant = lvari.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = l_alv_layout
i_save = 'A'
IMPORTING
es_variant = l_alv_layout
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
lvari = l_alv_layout-variant.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " F4_ALV_LAYOU
*&---------------------------------------------------------------------*
*& Form ALV_END_OF_LIST
*&---------------------------------------------------------------------*
* Here anything desired
*----------------------------------------------------------------------*
FORM alv_end_of_list . "#EC CALLED
PERFORM statistics USING 'L' 0 'Meldungsübersicht'.
PERFORM list_selectoptions.
ENDFORM. " ALV_END_OF_LIST
*&---------------------------------------------------------------------*
*& Form ALV_LAYOUT
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* <--P_ALV_layout text
*----------------------------------------------------------------------*
FORM alv_layout CHANGING p_alv_layout TYPE slis_layout_alv.
p_alv_layout-colwidth_optimize = con_true.
p_alv_layout-detail_initial_lines = con_true.
p_alv_layout-zebra = con_true.
ENDFORM. " ALV_LAYOUT
*&---------------------------------------------------------------------*
*& Form list_selectoptions
*&---------------------------------------------------------------------*
* List Selections
*----------------------------------------------------------------------*
FORM list_selectoptions. "#EC CALLED
FIELD-SYMBOLS:
<textpool> TYPE textpool,
<rsparams> TYPE rsparams.
DATA:
l_i_textpool TYPE TABLE OF textpool,
l_i_rsparams TYPE TABLE OF rsparams,
l_printline TYPE text1000,
l_repid TYPE raldb_repo.
l_repid = sy-repid.
* get Select-Options values
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
curr_report = l_repid
* IMPORTING
* SP =
TABLES
selection_table = l_i_rsparams
EXCEPTIONS
not_found = 1
no_report = 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.
* Texts from Textpool
READ TEXTPOOL l_repid INTO l_i_textpool LANGUAGE sy-langu.
DELETE l_i_textpool WHERE NOT id = 'S'. "Nur Selektionsbild
* display
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
ULINE.
* header
WRITE: / sy-vline,'Selektionen für Programm', l_repid,
'Run:',sy-datum, sy-uzeit,AT sy-linsz sy-vline.
ULINE.
* Parameter table sorted by Screen order
* don't report initial fields
DELETE l_i_rsparams WHERE ( low IS initial AND high IS initial ).
PERFORM sort_screen_params TABLES l_i_rsparams.
LOOP AT l_i_rsparams ASSIGNING <rsparams>.
READ TABLE l_i_textpool
WITH KEY key = <rsparams>-selname BINARY SEARCH
ASSIGNING <textpool> .
l_printline(1) = sy-vline.
l_printline+2(40) = <textpool>-entry+8(40).
l_printline+44(1) = sy-vline.
l_printline+46(1) = <rsparams>-kind.
l_printline+48(1) = sy-vline.
l_printline+50(1) = <rsparams>-sign.
l_printline+52(1) = sy-vline.
l_printline+54(2) = <rsparams>-option.
l_printline+57(1) = sy-vline.
IF <rsparams>-kind = 'P'.
l_printline+59(71) = <rsparams>-low.
ELSE.
l_printline+59(35) = <rsparams>-low.
l_printline+97(1) = sy-vline.
l_printline+99(35) = <rsparams>-high.
ENDIF." <rsparams>-kind <> 'P'.
l_printline+136(1) = sy-vline.
l_printline+138(8) = <rsparams>-selname.
WRITE: / l_printline(sy-linsz), AT sy-linsz sy-vline.
ENDLOOP." at l_i_rsparams assigning <rsparams>.
ULINE.
SKIP.
ENDFORM. " list_selectoptions
*&---------------------------------------------------------------------*
*& Form sort_screen_params
*&---------------------------------------------------------------------*
* Sort Parameter table by order on Screen
*----------------------------------------------------------------------*
* -->P_I_RSPARAMS
*----------------------------------------------------------------------*
FORM sort_screen_params TABLES p_i_rsparams STRUCTURE rsparams.
*DYNPRO_FIELD_GET
DATA:
l_repid TYPE program_id,
l_i_dynp_fields TYPE TABLE OF rsdcf,
l_i_lines TYPE TABLE OF tline,
l_i_rsparams TYPE TABLE OF rsparams.
FIELD-SYMBOLS:
<rsdcf> TYPE rsdcf.
l_repid = sy-repid.
CALL FUNCTION 'DYNPRO_FIELD_GET'
EXPORTING
dynpro = vg_dynnr
* FLG_CHECK = '1'
* FLG_CONTROL = '0'
* LANGU = SY-LANGU
program = l_repid
TABLES
dynp_fields = l_i_dynp_fields
lines = l_i_lines
* lines =
EXCEPTIONS
dynpro_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.
LOOP AT l_i_dynp_fields ASSIGNING <rsdcf>.
IF <rsdcf>-dynpro_fld CA '-'.
<rsdcf>-dynpro_fld = <rsdcf>-dynpro_fld(sy-fdpos).
ENDIF." <rsdcf>-dynpro_fld ca '-'.
READ TABLE p_i_rsparams WITH KEY selname = <rsdcf>-dynpro_fld."#EC *
CHECK sy-subrc = 0.
LOOP AT p_i_rsparams FROM sy-index
WHERE selname = <rsdcf>-dynpro_fld.
APPEND p_i_rsparams TO l_i_rsparams.
DELETE p_i_rsparams.
ENDLOOP." at p_i_rsparams from sy-index
ENDLOOP." at l_i_dynp_fields assigning <rsdcf>.
p_i_rsparams[] = l_i_rsparams.
ENDFORM. " sort_screen_params
*&---------------------------------------------------------------------*
*& Form ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* output header
---------------------------------------------------------------------*
FORM alv_top_of_page. "#EC CALLED
DATA:
l_len TYPE syfdpos,
l_txt TYPE sylisel,
l_datxt TYPE sylisel,
l_uztxt TYPE sylisel,
l_pagno_pos TYPE syfdpos.
l_pagno_pos = sy-linsz - 6.
WRITE: sy-datum TO l_datxt, sy-uzeit TO l_uztxt.
FORMAT COLOR COL_HEADING.
ULINE.
CONCATENATE
sy-sysid sy-mandt sy-repid sy-uname l_datxt l_uztxt
INTO l_txt SEPARATED BY space.
l_len = strlen( l_txt ).
WRITE: / sy-vline,
'System-Mandant-Programm-User-Datum-Zeit:',
AT (l_len) l_txt,
AT l_pagno_pos(6) sy-pagno NO-SIGN,
AT sy-linsz sy-vline,
AT sy-linsz sy-vline.
ULINE AT (sy-linsz).
FORMAT COLOR COL_NORMAL.
ENDFORM." alv_top_of_page
*&---------------------------------------------------------------------*
*& Form NORMALIZE_TABLE
*&---------------------------------------------------------------------*
* Table normalized: Sorted, duplicates deleted
*----------------------------------------------------------------------*
* <--P_TABLE
*----------------------------------------------------------------------*
FORM normalize_table CHANGING p_table TYPE table.
SORT p_table.
DELETE ADJACENT DUPLICATES FROM p_table.
ENDFORM. " NORMALIZE_TABLE
*&---------------------------------------------------------------------*
*& Form GET_VK_PREISDATEN
*&---------------------------------------------------------------------*
* determine vaild sales prices if exist
*----------------------------------------------------------------------*
* <--P_PREISDATEN
*----------------------------------------------------------------------*
FORM get_vk_preisdaten CHANGING pt_preisdaten TYPE typ_t_preisdaten.
DATA:
l_tabix TYPE sytabix,
l_a004_lines TYPE sytfill,
lt_a004_dta TYPE typ_t_a004_dta,
lt_a004_mat TYPE typ_t_a004_dta.
FIELD-SYMBOLS:
<a004_dta> TYPE LINE OF typ_t_a004_dta,
<pre><code> TYPE LINE OF typ_t_preisdaten.
* only if something to be done
CHECK NOT pt_preisdaten IS INITIAL.
* read existzing conditions
SELECT knumh matnr datab datbi
INTO CORRESPONDING FIELDS OF TABLE lt_a004_dta
FROM a004
FOR ALL ENTRIES IN pt_preisdaten
WHERE matnr = pt_preisdaten-matnr
AND kappl = p_vkappl
AND kschl = p_vkschl
AND vkorg = p_vkorg
AND datab <= p_datab
AND datbi >= p_datab.
SORT lt_a004_dta BY matnr.
DESCRIBE TABLE lt_a004_dta LINES l_a004_lines.
* Fehlende conditionen für die Statistik,
* Preise für die existierenden
LOOP AT pt_preisdaten ASSIGNING <pre><code>.
READ TABLE lt_a004_dta ASSIGNING <a004_dta>
WITH KEY matnr = <pre><code>-matnr BINARY SEARCH.
IF sy-subrc = 0.
* conditionssätze zu einem Artikel sammeln
CLEAR: lt_a004_mat.
l_tabix = sy-tabix.
WHILE <a004_dta>-matnr = <pre><code>-matnr
AND l_tabix <= l_a004_lines.
APPEND <a004_dta> TO lt_a004_mat.
ADD 1 TO l_tabix.
CHECK l_tabix <= l_a004_lines.
READ TABLE lt_a004_dta ASSIGNING <a004_dta>
INDEX l_tabix.
ENDWHILE." <a004_dta>-matnr = <pre><code>-matnr
PERFORM select_vk_preis_zur_condition
CHANGING lt_a004_mat <pre><code>.
ELSE.
* PERFORM statistics USING 'S' 1 '* Kein Verkaufspreis'.
ENDIF." sy-subrc = 0.
* Ikonen-Vergabe
IF <pre><code>-knumh_vk IS INITIAL.
* No condition - create new
<pre><code>-icon = icon_create.
PERFORM statistics USING 'S' 1 '* Verkaufspreis ist anzulegen'.
ELSEIF <pre><code>-kbetr = <pre><code>-kbetr_vk
AND <pre><code>-konwa = <pre><code>-konwa_vk
AND <pre><code>-kpein = <pre><code>-kpein_vk
AND <pre><code>-kmein = <pre><code>-kmein_vk.
* condition identical - no change needed
<pre><code>-icon = icon_equal.
PERFORM statistics USING 'S' 1 '* Verkaufspreis ist aktuell'.
ELSEIF <pre><code>-datab_vk = p_datab.
* condition to date - change
<pre><code>-icon = icon_change.
PERFORM statistics USING 'S' 1 '* Verkaufspreis ist zu ändern'.
ELSEIF <pre><code>-datab_vk < p_datab.
* condition old - new time slice - create with referende
<pre><code>-icon = icon_date.
PERFORM statistics
USING 'S' 1 '* sales pricve to be maintained with new validity'.
ENDIF." <pre><code>-knumh_vk is initial.
ENDLOOP." at pt_preisdaten assigning <pre><code>.
ENDFORM. " GET_VK_PREISDATEN
*&---------------------------------------------------------------------*
*& Form SELECT_VK_PREIS_ZUR_condITION
*&---------------------------------------------------------------------*
* PO-Price of default supplier
* from material conditions
*----------------------------------------------------------------------*
* -->PT_A004_MAT
* <--PT_PREISDATEN
*----------------------------------------------------------------------*
FORM select_vk_preis_zur_condition
CHANGING pt_a004_mat TYPE typ_t_a004_dta
p_preisdaten TYPE typ_preisdaten.
DATA:
l_txt TYPE text80,
l_tfill TYPE sytfill,
lt_konp_dta TYPE TABLE OF typ_konp_dta.
FIELD-SYMBOLS:
<a004_dta> TYPE typ_a004_dta,
<konp_dta> TYPE typ_konp_dta.
* 1. consistency check: numer cond records = number suppliers
DESCRIBE TABLE pt_a004_mat LINES l_tfill.
IF l_tfill <> 1.
* Inconsistent - report and skip
CONCATENATE
'Articlel' <a004_dta>-matnr
': Inconsistent sales price condition' p_vkschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ENDIF." l_tfill <> l_n_lif.
* should be one left
DESCRIBE TABLE pt_a004_mat LINES l_tfill.
IF l_tfill <> 1.
* report error and skip
CONCATENATE
'Articlel' <a004_dta>-matnr
': Inconsistent sales price condition' p_vkschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ENDIF.
READ TABLE pt_a004_mat ASSIGNING <a004_dta> INDEX 1.
* conditions KONP
SELECT knumh kopos kbetr kpein kmein konwa
INTO CORRESPONDING FIELDS OF TABLE lt_konp_dta
FROM konp
WHERE knumh = <a004_dta>-knumh
AND loevm_ko = space " not deleted
AND krech = 'C' " calculation rule amount
AND kzbzg = space. " No scale price
IF sy-subrc <> 0.
* report error and skip
CONCATENATE
'Article' <a004_dta>-matnr
': Inconsistent sales price condition' p_vkschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ELSE."if sy-subrc <> 0.
* should be one record left
IF sy-dbcnt <> 1.
* report and skip
CONCATENATE
'Article' <a004_dta>-matnr
': Inconsistent sales price condition' p_vkschl
INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
EXIT.
ELSE.
READ TABLE lt_konp_dta ASSIGNING <konp_dta> INDEX 1.
p_preisdaten-vkorg = p_vkorg.
p_preisdaten-vtweg = p_vtweg.
p_preisdaten-datbi_vk = <a004_dta>-datbi.
p_preisdaten-datab_vk = <a004_dta>-datab.
p_preisdaten-knumh_vk = <a004_dta>-knumh.
p_preisdaten-kbetr_vk = <konp_dta>-kbetr.
p_preisdaten-konwa_vk = <konp_dta>-konwa.
p_preisdaten-kpein_vk = <konp_dta>-kpein.
p_preisdaten-kmein_vk = <konp_dta>-kmein.
PERFORM statistics
USING 'S' 1 '* Sales price determined for article'.
ENDIF." sy-dbcnt <> 1.
ENDIF." sy-subrc <> 0.
ENDFORM. " SELECT_VK_PREIS_ZUR_condITION
*&---------------------------------------------------------------------*
*& Form PRICE_CREATE
*&---------------------------------------------------------------------*
* New price condition
*----------------------------------------------------------------------*
* <--P_PREISDATEN
*----------------------------------------------------------------------*
FORM price_create CHANGING p_preisdaten TYPE typ_preisdaten.
DATA:
l_txt TYPE text80,
l_subrc TYPE sysubrc.
* BTCI aufbauen
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_write_field USING 'RV13A-KSCHL' p_vkschl.
PERFORM bdc_write_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1004'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '=SICH'.
PERFORM bdc_write_field USING 'KOMG-VKORG'
p_vkorg.
PERFORM bdc_write_field USING 'KOMG-VTWEG'
p_vtweg.
PERFORM bdc_write_field USING 'KOMG-MATNR(01)'
p_preisdaten-matnr.
PERFORM bdc_write_curr USING 'KONP-KBETR(01)'
p_preisdaten-kbetr
p_preisdaten-konwa.
PERFORM bdc_write_field USING 'KONP-KONWA(01)'
p_preisdaten-konwa.
PERFORM bdc_write_quan USING 'KONP-KPEIN(01)'
p_preisdaten-kpein
p_preisdaten-kmein.
PERFORM bdc_write_field USING 'KONP-KMEIN(01)'
p_preisdaten-kmein.
PERFORM bdc_write_field USING 'RV13A-DATAB(01)'
p_datab.
PERFORM bdc_write_field USING 'RV13A-DATBI(01)'
'31.12.9999'.
* Ausführen im Echlauf
CHECK p_echt = con_true.
SET PARAMETER ID 'VKS' FIELD p_vkschl.
SET PARAMETER ID 'KON' FIELD '004'.
PERFORM bdc_transaction USING 'VK11' CHANGING l_subrc.
IF l_subrc = 0.
p_preisdaten-icon = icon_okay.
PERFORM statistics USING 'S' 1 'VK-Preis angelegt'.
p_preisdaten-icon = icon_green_light.
p_preisdaten-datab_vk = p_datab. "CLI20041119
p_preisdaten-datbi_vk = '99991231'.
p_preisdaten-kbetr_vk = p_preisdaten-kbetr.
p_preisdaten-konwa_vk = p_preisdaten-konwa.
p_preisdaten-kpein_vk = p_preisdaten-kpein.
p_preisdaten-kmein_vk = p_preisdaten-kmein.
p_preisdaten-vkorg = p_vkorg.
p_preisdaten-vtweg = p_vtweg.
ADD 1 TO v_commit_count.
ELSE.
p_preisdaten-icon = icon_red_light.
CONCATENATE
'(Lock-) error creating price for article'
p_preisdaten-matnr INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
ENDIF." l_subrc = 0.
ENDFORM. " PRICE_CREATE
*&---------------------------------------------------------------------*
*& Form PRICE_CHANGE
*&---------------------------------------------------------------------*
* <--P_PREISDATEN
*----------------------------------------------------------------------*
FORM price_change CHANGING p_preisdaten TYPE typ_preisdaten.
DATA:
l_txt TYPE text80,
l_subrc TYPE sysubrc.
* BTCI aufbauen
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_write_field USING 'RV13A-KSCHL' p_vkschl.
PERFORM bdc_dynpro USING 'RV13A004' '1000'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_write_field USING 'F001'
p_vkorg.
PERFORM bdc_write_field USING 'F002'
p_vtweg.
PERFORM bdc_write_field USING 'F003-LOW'
p_preisdaten-matnr.
PERFORM bdc_write_field USING 'SEL_DATE'
p_datab.
PERFORM bdc_dynpro USING 'SAPMV13A' '1004'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '=SICH'.
.
PERFORM bdc_write_curr USING 'KONP-KBETR(01)'
p_preisdaten-kbetr
p_preisdaten-konwa.
PERFORM bdc_write_field USING 'RV13A-DATAB(01)'
p_datab.
PERFORM bdc_write_field USING 'RV13A-DATBI(01)'
'31.12.9999'.
* Ausführen im Echlauf
CHECK p_echt = con_true.
SET PARAMETER ID 'VKS' FIELD p_vkschl.
SET PARAMETER ID 'KON' FIELD '004'.
PERFORM bdc_transaction USING 'VK12' CHANGING l_subrc.
IF l_subrc = 0.
p_preisdaten-icon = icon_okay.
PERFORM statistics
USING 'S' 1 'VK-Preis geändert'.
p_preisdaten-icon = icon_green_light.
p_preisdaten-datab_vk = p_datab.
p_preisdaten-datbi_vk = p_preisdaten-datbi.
p_preisdaten-kbetr_vk = p_preisdaten-kbetr.
p_preisdaten-konwa_vk = p_preisdaten-konwa.
p_preisdaten-kpein_vk = p_preisdaten-kpein.
p_preisdaten-kmein_vk = p_preisdaten-kmein.
ADD 1 TO v_commit_count.
ELSE.
p_preisdaten-icon = icon_red_light.
CONCATENATE
'(lock-) error Price change for Article'
p_preisdaten-matnr INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
ENDIF." l_subrc = 0.
ENDFORM. " PRICE_CHANGE
*&---------------------------------------------------------------------*
*& Form PRICE_DATE
*&---------------------------------------------------------------------*
* New Price wit new validity period
*----------------------------------------------------------------------*
* <--P_PREISDATEN
*----------------------------------------------------------------------*
FORM price_date CHANGING p_preisdaten TYPE typ_preisdaten.
DATA:
l_txt TYPE text80,
l_subrc TYPE sysubrc.
* BTCI aufbauen
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_write_field USING 'RV13A-KSCHL' p_vkschl.
PERFORM bdc_dynpro USING 'RV13A004' '1000'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_write_field USING 'F003-LOW'
p_preisdaten-matnr.
PERFORM bdc_write_field USING 'F001'
p_vkorg.
PERFORM bdc_write_field USING 'F002'
p_vtweg.
PERFORM bdc_write_field USING 'SEL_DATE'
p_datab.
PERFORM bdc_write_field USING 'DATE_AS'
con_true.
PERFORM bdc_dynpro USING 'SAPMV13A' '1004'.
PERFORM bdc_write_field USING 'BDC_OKCODE' '=SICH'.
PERFORM bdc_write_curr USING 'KONP-KBETR(01)'
p_preisdaten-kbetr
p_preisdaten-konwa.
PERFORM bdc_write_field USING 'KONP-KONWA(01)'
p_preisdaten-konwa.
PERFORM bdc_write_quan USING 'KONP-KPEIN(01)'
p_preisdaten-kpein
p_preisdaten-kmein.
PERFORM bdc_write_field USING 'KONP-KMEIN(01)'
p_preisdaten-kmein.
PERFORM bdc_write_field USING 'RV13A-DATAB(01)'
p_datab.
PERFORM bdc_write_field USING 'RV13A-DATBI(01)'
'31.12.9999'.
* Ausführen im Echlauf
CHECK p_echt = con_true.
SET PARAMETER ID 'VKS' FIELD p_vkschl.
SET PARAMETER ID 'KON' FIELD '004'.
PERFORM bdc_transaction USING 'VK14' CHANGING l_subrc.
IF l_subrc = 0.
p_preisdaten-icon = icon_okay.
PERFORM statistics
USING 'S' 1 'VK-Preis aus EK mit Gültig-ab-Preis angelegt'.
p_preisdaten-icon = icon_green_light.
p_preisdaten-datab_vk = p_datab.
p_preisdaten-datab_vk = p_preisdaten-datab.
p_preisdaten-datbi_vk = '99991231'.
p_preisdaten-kbetr_vk = p_preisdaten-kbetr.
p_preisdaten-konwa_vk = p_preisdaten-konwa.
p_preisdaten-kpein_vk = p_preisdaten-kpein.
p_preisdaten-kmein_vk = p_preisdaten-kmein.
ADD 1 TO v_commit_count.
ELSE.
p_preisdaten-icon = icon_red_light.
CONCATENATE
'(Lock-) Error crating valid-from-price for Article'
p_preisdaten-matnr INTO l_txt SEPARATED BY space.
PERFORM statistics USING 'S' 0 l_txt.
ENDIF." l_subrc = 0.
ENDFORM. " PRICE_DATE
*&---------------------------------------------------------------------*
*& Form BDC_WRITE_FIELD
*&---------------------------------------------------------------------*
* enhanced SAP BDC_FIELD
*----------------------------------------------------------------------*
* -->FNAM
* -->FVAL
*----------------------------------------------------------------------*
FORM bdc_write_field USING fnam
fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
WRITE fval TO bdcdata-fval LEFT-JUSTIFIED.
APPEND bdcdata.
ENDFORM. " BDC_WRITE_FIELD
*&---------------------------------------------------------------------*
*& Form BDC_WRITE_QUAN
*&---------------------------------------------------------------------*
* enhanced SAP BDC_FIELD
*----------------------------------------------------------------------*
* -->FNAM
* -->FVAL
* -->QUAN
*----------------------------------------------------------------------*
FORM bdc_write_quan USING fnam
fval
quan TYPE unit.
CLEAR bdcdata.
bdcdata-fnam = fnam.
WRITE fval TO bdcdata-fval LEFT-JUSTIFIED UNIT quan.
APPEND bdcdata.
ENDFORM. " BDC_WRITE_QUAN
*&---------------------------------------------------------------------*
*& Form BDC_WRITE_CURR
*&---------------------------------------------------------------------*
* enhanced SAP BDC_FIELD
*----------------------------------------------------------------------*
* -->FNAM
* -->FVAL
* -->CURR
*----------------------------------------------------------------------*
FORM bdc_write_curr USING fnam
fval
curr TYPE currency.
CLEAR bdcdata.
bdcdata-fnam = fnam.
WRITE fval TO bdcdata-fval LEFT-JUSTIFIED CURRENCY curr.
APPEND bdcdata.
ENDFORM. " BDC_WRITE_CURR
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction USING tcode CHANGING p_subrc TYPE sysubrc.
DATA:
messtab TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
l_subrc LIKE sy-subrc.
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
* complete conditions table locked, synchronous update
UPDATE 'S'
MODE p_btmode "A E N
MESSAGES INTO messtab.
l_subrc = sy-subrc.
REFRESH bdcdata.
LOOP AT messtab
TRANSPORTING NO FIELDS WHERE msgtyp ='E' OR msgtyp ='A'.
ENDLOOP.
IF sy-subrc = 0 OR l_subrc <> 0.
p_subrc = 8.
ENDIF." sy-subrc = 0 or l_subrc <> 0.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
Regards,
Clemens
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |