Sales Order Characterisitc update
Step 1: Create a Class.
* Run the T-code SE24.
* Give the class name and click on create. Give description and click on save.
Step 2: Create a Structure with following fields .
* Run the T-code SE11.
* Select data type and give structure name.
* Click on create and select structure.
* Give the description and fields.
Step 3: Create a table type.
* Run the T-code SE11.
* Select data type and give table type name.
* Click on create and select table type.
* Give short text and line type as structure.
Step 4: Create a class.
* Write the code in method.
METHOD update_characteristics.
DATA: lt_config TYPE ibco2_instance_tab2,
ls_config_rec TYPE ibco2_instance_rec2,
ls_root_object TYPE cuib_business_object,
lt_char_val TYPE z575tt_sd_so_char,
lv_vbeln TYPE vbeln_va,
lv_posnr TYPE posnr_va,
lw_return TYPE bapiret2,
lt_value TYPE STANDARD TABLE OF ibvalue0,
lw_value TYPE ibvalue0.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_vbeln
IMPORTING
output = lv_vbeln.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_posnr
IMPORTING
output = lv_posnr.
SELECT SINGLE vbeln,
posnr,
cuobj
FROM vbap
INTO @DATA(ls_vbap)
WHERE vbeln EQ @lv_vbeln AND
posnr EQ @lv_posnr.
IF sy-subrc EQ 0 AND ls_vbap-cuobj IS NOT INITIAL.
IF it_char_val IS NOT INITIAL.
* Get Internal characteristic numbers for characteristics
SELECT atinn,
atnam
FROM cabn
INTO TABLE @DATA(lt_cabn)
FOR ALL ENTRIES IN @it_char_val
WHERE atnam EQ @it_char_val-atnam.
IF sy-subrc EQ 0.
SORT lt_cabn BY atnam.
LOOP AT it_char_val INTO DATA(lw_char_val).
READ TABLE lt_cabn INTO DATA(lw_cabn) WITH KEY atnam = lw_char_val-atnam
BINARY SEARCH.
IF sy-subrc EQ 0.
lw_char_val-atinn = lw_cabn-atinn.
ENDIF.
APPEND lw_char_val TO lt_char_val.
ENDLOOP.
* Get current configuration for the order item
CALL FUNCTION 'CUCB_GET_CONFIGURATION'
EXPORTING
instance = ls_vbap-cuobj
IMPORTING
configuration = lt_config
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
READ TABLE lt_config ASSIGNING FIELD-SYMBOL(<fs_config_rec>) INDEX 1.
IF <fs_config_rec> IS ASSIGNED.
* Get object key and type
ls_root_object-object_key = <fs_config_rec>-owner-object_key.
ls_root_object-object_type = <fs_config_rec>-owner-object_type.
UNASSIGN <fs_config_rec>.
ENDIF.
ENDIF.
READ TABLE lt_config ASSIGNING <fs_config_rec> INDEX 1.
LOOP AT lt_char_val INTO lw_char_val.
IF <fs_config_rec> IS ASSIGNED.
READ TABLE <fs_config_rec>-values ASSIGNING FIELD-SYMBOL(<fs_value>)
WITH KEY atinn = lw_char_val-atinn.
IF sy-subrc EQ 0 AND <fs_value> IS ASSIGNED.
<fs_value>-atwrt = lw_char_val-atwrt.
ELSE.
lw_value-atinn = lw_char_val-atinn.
lw_value-atwrt = lw_char_val-atwrt.
lw_value-atcod = 1.
APPEND lw_value TO lt_value."<fs_config_rec>-values.
ENDIF.
ENDIF.
ENDLOOP.
IF lt_value IS NOT INITIAL.
APPEND LINES OF lt_value TO <fs_config_rec>-values.
ENDIF.
IF <fs_config_rec> IS ASSIGNED.
<fs_config_rec>-ind-indcha = 'X'.
ENDIF.
" 4. Update configuration in memory
CALL FUNCTION 'CUCB_SET_CONFIGURATION'
EXPORTING
root_instance = ls_vbap-cuobj
* IS_CBASE_HEADER =
CHANGING
configuration = lt_config
EXCEPTIONS
invalid_input = 1
invalid_instance = 2
instance_is_a_classification = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL FUNCTION 'CUCB_CONFIGURATION_TO_DB'
EXPORTING
root_instance = ls_vbap-cuobj
root_object = ls_root_object " 'VBAP'
* FORCE_NEW_INSTANCE =
* IV_WITHOUT_COMMIT_UPDATE = ' '
* IV_MATERIAL =
* IV_LOCATION =
* IV_TECHS =
* IMPORTING
* NEW_INSTANCE =
* TABLES
* EXP_NEW_NESTED_CUOBJS =
EXCEPTIONS
invalid_instance = 1
invalid_root_instance = 2
no_changes = 3
already_registered_for_update = 4
instance_is_a_classification = 5
OTHERS = 6.
IF sy-subrc = 0.
COMMIT WORK. " 6. Commit changes
lw_return-type = 'S'.
lw_return-message = 'Characteristics Update Completed'.
APPEND lw_return TO et_return.
ELSE.
lw_return-type = 'E'.
lw_return-message = 'Characteristics Update Failed'.
APPEND lw_return TO et_return.
ENDIF.
ENDIF.
ELSE.
lw_return-type = 'E'.
lw_return-message = 'No Valid charateristics in Input'.
APPEND lw_return TO et_return.
ENDIF.
ELSE.
lw_return-type = 'E'.
lw_return-message = 'No charateristics in Input'.
APPEND lw_return TO et_return.
ENDIF.
ELSE.
lw_return-type = 'E'.
lw_return-message = 'Sales Order not found'.
APPEND lw_return TO et_return.
ENDIF.
ENDMETHOD.
Step 5: Create an executable program.
* Run the T-code SE38.
* Give program name and click on create .
* Give description and select type as executable program.
* Write the Code.
REPORT z575r_sd_is_giso_mass_upd.
** Global Declarations
INCLUDE z575n_sd_is_giso_mass_upd_top.
** Selection screen
INCLUDE z575n_sd_is_giso_mass_upd_sel.
** subroutines
INCLUDE z575n_sd_is_giso_mass_upd_form.
START-OF-SELECTION.
PERFORM fetch_data.
IF g_t_final IS NOT INITIAL.
PERFORM field_catlog.
PERFORM display_data.
ELSE.
MESSAGE TEXT-009 TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
*& Include Z575N_SD_IS_GISO_MASS_UPD_TOP
*&---------------------------------------------------------------------*
TABLES: vbak, vbap, vbkd.
TYPES: BEGIN OF g_s_final,
auart TYPE auart, " Order Type
kunnr TYPE kunnr, " Sold to Party
vbeln TYPE vbeln_va, " Sale Order Number
bstkd TYPE bstkd, " MD Order Number
matnr TYPE matnr, " Product
posnr TYPE posnr, " Item
atwrt TYPE atwrt, " GISO Code
END OF g_s_final.
TYPES: BEGIN OF g_s_output,
vbeln TYPE vbeln_va, " Sale Order Number
bstkd TYPE bstkd, " MD Order Number
posnr TYPE posnr, " Item
atwrt TYPE atwrt, " GISO Code
status TYPE char4, "Status
remarks(200) TYPE c, "Remarks
uname TYPE sy-uname, "Updated By
udate TYPE sy-datum, "Updated On
utime TYPE sy-uzeit, "Updated At
END OF g_s_output.
DATA: g_t_final TYPE TABLE OF g_s_final,
g_r_final TYPE g_s_final,
g_t_output TYPE TABLE OF g_s_output,
g_r_output TYPE g_s_output.
DATA: g_t_char_val TYPE z575tt_sd_so_char,
g_r_char_val TYPE z575s_sd_so_char,
g_t_return TYPE TABLE OF bapiret2.
DATA: go_container TYPE REF TO cl_gui_custom_container,
go_container1 TYPE REF TO cl_gui_custom_container,
go_grid TYPE REF TO cl_gui_alv_grid,
go_grid1 TYPE REF TO cl_gui_alv_grid,
gt_fieldcat TYPE lvc_t_fcat,
gt_fieldcat1 TYPE lvc_t_fcat,
gr_fieldcat TYPE lvc_s_fcat,
gr_fieldcat1 TYPE lvc_s_fcat,
gr_layout TYPE lvc_s_layo,
gr_layout1 TYPE lvc_s_layo.
*&---------------------------------------------------------------------*
*& Include Z575N_SD_IS_GISO_MASS_UPD_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_auart FOR vbak-auart DEFAULT 'ZMBU',
s_bstkd FOR vbkd-bstkd,
s_erdat FOR vbak-erdat,
s_vbeln FOR vbak-vbeln.
SELECTION-SCREEN END OF BLOCK b1.
*&---------------------------------------------------------------------*
*& Include Z575N_SD_IS_GISO_MASS_UPD_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fetch_data .
IF s_auart IS NOT INITIAL OR s_bstkd IS NOT INITIAL
OR s_erdat IS NOT INITIAL OR s_vbeln IS NOT INITIAL.
SELECT a~auart,
a~kunnr,
a~vbeln,
b~bstkd,
c~matnr,
c~posnr,
c~cuobj
FROM vbak AS a
LEFT OUTER JOIN vbap AS c
ON a~vbeln = c~vbeln
INNER JOIN vbkd AS b
ON a~vbeln EQ b~vbeln
AND c~posnr EQ b~posnr
INTO TABLE @DATA(l_t_data)
WHERE a~vbeln IN @s_vbeln AND
a~auart IN @s_auart AND
a~erdat IN @s_erdat AND
b~bstkd IN @s_bstkd AND
b~bzirk EQ 'A'.
IF sy-subrc = 0.
MOVE-CORRESPONDING l_t_data TO g_t_final.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FIELD_CATLOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM field_catlog .
CLEAR: gr_fieldcat. REFRESH: gt_fieldcat.
gr_fieldcat-fieldname = 'AUART'.
gr_fieldcat-coltext = TEXT-002.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'KUNNR'.
gr_fieldcat-coltext = TEXT-003.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'VBELN'.
gr_fieldcat-coltext = TEXT-004.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'BSTKD'.
gr_fieldcat-coltext = TEXT-005.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'MATNR'.
gr_fieldcat-coltext = TEXT-006.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'POSNR'.
gr_fieldcat-coltext = TEXT-007.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_fieldcat-fieldname = 'ATWRT'.
gr_fieldcat-coltext = TEXT-008.
gr_fieldcat-edit = abap_true.
APPEND gr_fieldcat TO gt_fieldcat.
CLEAR gr_fieldcat.
gr_layout-zebra = abap_true.
gr_layout-col_opt = abap_true.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_data .
CREATE OBJECT go_container
EXPORTING
container_name = 'ZCONT'.
CREATE OBJECT go_grid
EXPORTING
i_parent = go_container.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
* i_structure_name = 'G_S_FINAL' " Internal Output Table Structure Name
is_layout = gr_layout
CHANGING
it_outtab = g_t_final " Output Table
it_fieldcatalog = gt_fieldcat " Field Catalog
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL SCREEN '1234'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_1234 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1234 OUTPUT.
SET PF-STATUS 'ZPF_STATUS'.
SET TITLEBAR 'ZTITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1234 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1234 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'SAVE'.
DATA: gv_valid TYPE abap_bool.
DATA: gv_valid1 TYPE abap_bool.
IF go_grid IS BOUND.
CALL METHOD go_grid->check_changed_data
IMPORTING
e_valid = gv_valid.
ENDIF.
IF gv_valid IS NOT INITIAL.
LOOP AT g_t_final INTO g_r_final.
CLEAR: g_r_char_val.
REFRESH : g_t_char_val,g_t_return.
g_r_char_val-atnam = 'ZSD_OPT'.
g_r_char_val-atwrt = g_r_final-atwrt.
APPEND g_r_char_val TO g_t_char_val.
CALL METHOD zcl_575_sd_so_char_update=>update_characteristics
EXPORTING
i_vbeln = g_r_final-vbeln " Sales order no
i_posnr = g_r_final-posnr " Sales Document Item
it_char_val = g_t_char_val " Sales Order Characteristics
* overwrite = " Checkbox
IMPORTING
et_return = g_t_return. " Return Parameter
" Preparing final internal table.
g_r_output-vbeln = g_r_final-vbeln.
g_r_output-bstkd = g_r_final-bstkd.
g_r_output-posnr = g_r_final-posnr.
g_r_output-atwrt = g_r_final-atwrt.
g_r_output-uname = sy-uname.
g_r_output-udate = sy-datum.
g_r_output-utime = sy-uzeit.
READ TABLE g_t_return INTO DATA(l_r_return) WITH KEY type = 'E'.
IF sy-subrc = 0.
g_r_output-status = icon_red_light.
g_r_output-remarks = l_r_return-message."TEXT-011.
ELSE.
g_r_output-status = icon_green_light.
g_r_output-remarks = TEXT-010.
ENDIF.
APPEND g_r_output TO g_t_output.
CLEAR: g_r_output, l_r_return.
ENDLOOP.
IF g_t_output IS NOT INITIAL.
PERFORM output_fieldcat1.
ENDIF.
CREATE OBJECT go_container1
EXPORTING
container_name = 'ZCONT1'.
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_container1.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
is_layout = gr_layout
CHANGING
it_outtab = g_t_output " Output Table
it_fieldcatalog = gt_fieldcat1 " Field Catalog
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL SCREEN '1235'.
ENDIF.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_1235 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1235 OUTPUT.
SET PF-STATUS 'ZPF1_STATUS'.
SET TITLEBAR 'ZTITLE1'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1235 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1235 INPUT.
CASE sy-ucomm.
WHEN 'BACK1'.
LEAVE TO SCREEN 0.
WHEN 'EXIT1'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form OUTPUT_FIELDCAT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_fieldcat1 .
CLEAR: gr_fieldcat1. REFRESH: gt_fieldcat1.
gr_fieldcat1-fieldname = 'VBELN'.
gr_fieldcat1-coltext = TEXT-004.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'BSTKD'.
gr_fieldcat1-coltext = TEXT-005.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'POSNR'.
gr_fieldcat1-coltext = TEXT-007.
APPEND gr_fieldcat1 TO gt_fieldcat.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'ATWRT'.
gr_fieldcat1-coltext = TEXT-008.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'STATUS'.
gr_fieldcat1-coltext = TEXT-012.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'REMARKS'.
gr_fieldcat1-coltext = TEXT-013.
gr_fieldcat1-outputlen = 30.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'UNAME'.
gr_fieldcat1-coltext = TEXT-018.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'UDATE'.
gr_fieldcat1-coltext = TEXT-019.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_fieldcat1-fieldname = 'UTIME'.
gr_fieldcat1-coltext = TEXT-020.
APPEND gr_fieldcat1 TO gt_fieldcat1.
CLEAR gr_fieldcat1.
gr_layout-zebra = abap_true.
gr_layout-col_opt = abap_true.
ENDFORM.
* Double click on screen number and click on layout.
* Select container and give name as ZCONT.
* Check and activate. Same like Second screen also containere name as ZCONT1.
001 Selection Screen
002 Order Type
003 Sold To Party
004 Sale Order Number
005 MD Order Number
006 Model
007 Item No
008 New GISO
009 No data found for given selection
010 GISO code is updated
011 GISO Code is not updated
012 Status
013 Remarks
018 Changed By
019 Changed On
020 Changed At
Testing:
* Execute the report.
* Give sale order number.
* Check in VA03(Item configuration).
* Execute the report after giving input. Given Input as B20 for that SO.
* Click on Save.
* Check in VA03.
******************************Thank you*******************************
Comments
Post a Comment