cancel
Showing results for 
Search instead for 
Did you mean: 

my2

Former Member
0 Kudos

prg2;;

*&----


*

*& Report ZX_SD_POS_MANL_MASS_MOV_01

*&

*&----


*

*& DEVELOPED BY : DEEPAK KUMAR.

*& DESCRIPTION OF REPORT :-Postings manual mass movement TYPE-02

*&----


*

REPORT zx_sd_pos_manl_mass_mov_02.

TABLES: ausp,sscrfields,lips, mska, *lips.

***********************************************************************

***********************************************************************

                                      • LOCAL DATA *********************

***********************************************************************

***********************************************************************

TYPES : BEGIN OF t_mska,

matnr TYPE matnr,

werks TYPE werks_d,

lgort TYPE lgort_d,

charg TYPE charg_d,

kalab TYPE labst,

vbeln TYPE vbeln,

posnr TYPE posnr,

atwrt TYPE atwrt,

meins TYPE meins,

vbtyp TYPE vbtyp,

auart TYPE auart,

netwr TYPE netwr,

vkorg TYPE vkorg,

vtweg TYPE vtweg,

spart TYPE spart,

vkgrp TYPE vkgrp,

vkbur TYPE vkbur,

kunnr TYPE kunag,

err TYPE string,

packings TYPE text15,

dia_mm TYPE wmeng,

width_mm TYPE wmeng,

core TYPE char2,

END OF t_mska,

BEGIN OF t_vbak,

vbeln TYPE vbeln,

vbtyp TYPE vbtyp,

auart TYPE auart,

netwr TYPE netwr,

vkorg TYPE vkorg,

vtweg TYPE vtweg,

spart TYPE spart,

vkgrp TYPE vkgrp,

vkbur TYPE vkbur,

kunnr TYPE kunag,

END OF t_vbak,

BEGIN OF t_vbap,

posnr TYPE posnr,

vbelv TYPE vbelv,

netwr TYPE netwr_ap,

kwmeng TYPE kwmeng,

END OF t_vbap.

DATA : wa_mska TYPE t_mska,

it_mska TYPE TABLE OF t_mska,

wa_mska0 TYPE t_mska,

it_mska0 TYPE TABLE OF t_mska,

wa_mskat TYPE t_mska,

wa_mskat1 TYPE t_mska,

wa_mskat2 TYPE t_mska,

it_mskat TYPE TABLE OF t_mska,

it_mskat1 TYPE TABLE OF t_mska,

wa_mskaifra TYPE t_mska,

it_mskaifra TYPE TABLE OF t_mska,

it_mskat2 TYPE TABLE OF t_mska,

it_vbak TYPE TABLE OF t_vbak,

wa_vbak TYPE t_vbak,

it_vbap TYPE TABLE OF t_vbap,

wa_vbap TYPE t_vbap.

DATA : it_conf TYPE TABLE OF conf_out ,

wa_conf TYPE conf_out.

DATA : auto_fill .

DATA : lipslgort TYPE lgort_d,

lipswerks TYPE werks_d,

lipsvbeln TYPE vbeln,

lipskdauf TYPE lips-kdauf,

lipskdpos TYPE lips-kdpos.

TYPES : BEGIN OF t_mara,

matnr TYPE matnr,

meins TYPE meins,

END OF t_mara.

DATA : wa_mara TYPE t_mara,

it_mara TYPE TABLE OF t_mara.

  • 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.

DATA : ctumode LIKE ctu_params-dismode VALUE 'N'.

"A: show all dynpros

"E: show dynpro on error only

"N: do not display dynpro

DATA: cupdate LIKE ctu_params-updmode VALUE 'L'.

"S: synchronously

"A: asynchronously

"L: local

DATA : qty(15),

qty1(12),

qty3(3),

posnr(6) VALUE '900001'.

TYPES : BEGIN OF t_ausp,

objek TYPE ausp-objek,

atinn TYPE ausp-atinn,

atwrt TYPE ausp-atwrt,

cuobj TYPE inob-cuobj,

END OF t_ausp.

DATA : wa_ausp TYPE t_ausp,

it_ausp TYPE TABLE OF t_ausp.

TYPES : BEGIN OF t_inob,

cuobj TYPE inob-cuobj,

klart TYPE inob-klart,

objek TYPE inob-objek,

atwrt TYPE ausp-atwrt,

matnr TYPE matnr,

charg TYPE charg_d,

END OF t_inob.

DATA : wa_inob TYPE t_inob,

it_inob TYPE TABLE OF t_inob.

DATA : tabix LIKE sy-tabix.

TYPES : BEGIN OF t_lips,

vbeln TYPE vbeln_vl,

posnr TYPE posnr_vl,

pstyv TYPE pstyv_vl,

matnr TYPE matnr,

werks TYPE werks_d,

lgort TYPE lgort_d,

charg TYPE charg_d,

lfimg TYPE lfimg,

kdauf TYPE kdauf,

kdpos TYPE kdpos,

END OF t_lips.

DATA : wa_lips TYPE t_lips,

it_lips TYPE TABLE OF t_lips,

it_lips1 TYPE TABLE OF t_lips,

wa_lips1 TYPE t_lips.

DATA : wa_bapisdhead TYPE bapisdhead,

it_bapiitemin TYPE TABLE OF bapiitemin WITH HEADER LINE,

wa_bapiitemin TYPE bapiitemin,

it_bapipartnr TYPE TABLE OF bapipartnr WITH HEADER LINE,

wa_bapipartnr TYPE bapipartnr,

wa_check(1) TYPE c VALUE 'X',

salesdocument TYPE bapivbeln-vbeln,

sales_doc TYPE vbak-vbeln,

return TYPE bapireturn1.

TYPES : BEGIN OF ty_sale_doc,

vbeln TYPE vbak-vbeln,

vbeln_co TYPE bapivbeln-vbeln,

END OF ty_sale_doc.

DATA : it_sale_doc TYPE TABLE OF ty_sale_doc,

it_sale_doc1 TYPE TABLE OF ty_sale_doc,

wa_sale_doc TYPE ty_sale_doc.

DATA : it_delivery TYPE TABLE OF bapidlvreftosalesorder,

wa_delivery TYPE bapidlvreftosalesorder,

it_return TYPE TABLE OF bapiret2.

TYPES : BEGIN OF ty_vbep,

vbeln TYPE vbeln_va,

edatu TYPE edatu,

END OF ty_vbep.

DATA : it_vbep TYPE TABLE OF ty_vbep,

it_vbep1 TYPE TABLE OF ty_vbep,

wa_vbep TYPE ty_vbep,

wa_vbep1 TYPE ty_vbep.

DATA : due_date TYPE bapidlvcreateheader-due_date.

DATA : t_lines TYPE i,

t_lines1 TYPE i,

value TYPE i.

DATA : covt TYPE p DECIMALS 4,

covt1 TYPE atflv.

DATA : packings TYPE text15,

dia_mm TYPE wmeng,

width_mm TYPE wmeng,

core TYPE char2,

idx1 TYPE sy-tabix,

idx3 TYPE sy-tabix,

idx2 TYPE sy-tabix.

***********************************************************************

***********************************************************************

                              • ALV VARIABLES ********************

***********************************************************************

***********************************************************************

INCLUDE .

CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: ok_code LIKE sy-ucomm,

g_repid LIKE sy-repid,

g_max TYPE i VALUE 100,

gs_layout TYPE lvc_s_layo,

fcat TYPE lvc_t_fcat,

wa_fcat TYPE LINE OF lvc_t_fcat,

cont_on_main TYPE scrfname VALUE 'BCALVC_TOOLBAR_D100_C1',

grid1 TYPE REF TO cl_gui_alv_grid,

custom_container1 TYPE REF TO cl_gui_custom_container,

event_receiver TYPE REF TO lcl_event_receiver.

  • ****************************************************************

  • LOCAL CLASSES: Definition

****************************************************************

*===============================================================

  • class lcl_event_receiver: local class to

  • define and handle own functions.

*

  • Definition:

  • ~~~~~~~~~~~

CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

METHODS:

handle_toolbar

FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING e_object e_interactive,

handle_user_command

FOR EVENT user_command OF cl_gui_alv_grid

IMPORTING e_ucomm.

PRIVATE SECTION.

ENDCLASS. "lcl_event_receiver DEFINITION

****************************************************************

  • LOCAL CLASSES: Implementation

****************************************************************

*===============================================================

  • class lcl_event_receiver (Implementation)

*

*

CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_toolbar.

  • § 2.In event handler method for event TOOLBAR: Append own functions

  • by using event parameter E_OBJECT.

DATA: ls_toolbar TYPE stb_button.

  • append a separator to normal toolbar

CLEAR ls_toolbar.

MOVE 3 TO ls_toolbar-butn_type.

APPEND ls_toolbar TO e_object->mt_toolbar.

  • append an icon to show booking table

CLEAR ls_toolbar.

MOVE 'CREAT' TO ls_toolbar-function.

MOVE icon_execute_object TO ls_toolbar-icon.

MOVE 'Creat Batch Split'(114) TO ls_toolbar-quickinfo.

MOVE 'Creat Batch Split'(115) TO ls_toolbar-text.

MOVE ' ' TO ls_toolbar-disabled.

APPEND ls_toolbar TO e_object->mt_toolbar.

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&CUT' .

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&COPY'.

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&PASTE' .

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&UNDO' .

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&APPEND' .

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&INSERT_ROW'.

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&DELETE_ROW'.

DELETE e_object->mt_toolbar WHERE function = '&LOCAL&COPY_ROW'.

ENDMETHOD. "handle_toolbar

METHOD handle_user_command.

DATA: lt_rows TYPE lvc_t_row.

REFRESH lt_rows.

CASE e_ucomm.

WHEN 'CREAT'.

CALL METHOD grid1->get_selected_rows

IMPORTING

et_index_rows = lt_rows.

CALL METHOD cl_gui_cfw=>flush.

IF sy-subrc NE 0.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = g_repid

txt2 = sy-subrc

txt1 = 'Error in Flush'(500).

ELSE.

PERFORM creat_batchsplit TABLES lt_rows.

ENDIF.

ENDCASE.

ENDMETHOD. "handle_user_command

*----

-


ENDCLASS. "lcl_event_receiver IMPLEMENTATION

***********************************************************************

***********************************************************************

                                      • SELECTION SCREEN *********************

***********************************************************************

***********************************************************************

SELECTION-SCREEN: FUNCTION KEY 1.

SELECTION-SCREEN : BEGIN OF BLOCK a1 WITH FRAME TITLE text-001.

PARAMETERS : p_kunnr TYPE kunnr OBLIGATORY,

p_werks TYPE werks_d OBLIGATORY,

p_lgort TYPE lgort_d OBLIGATORY,

p_deldat TYPE sy-datum DEFAULT sy-datum.

SELECTION-SCREEN : BEGIN OF LINE.

PARAMETERS : r1 RADIOBUTTON GROUP g1.

SELECTION-SCREEN : COMMENT 3(26) text-005.

SELECT-OPTIONS : s_ifra FOR ausp-atwrt NO INTERVALS,

s_objek FOR ausp-objek NO-DISPLAY.

SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN : BEGIN OF LINE.

PARAMETERS : r2 RADIOBUTTON GROUP g1 .

SELECTION-SCREEN : COMMENT 3(29) text-006.

PARAMETERS : p_vbeln TYPE likp-vbeln.

SELECTION-SCREEN: END OF LINE.

SELECTION-SCREEN : END OF BLOCK a1.

***********************************************************************

***********************************************************************

                                      • INITIALIZATION *********************

***********************************************************************

***********************************************************************

INITIALIZATION.

sscrfields-functxt_01 = 'AUTO FILL'.

***********************************************************************

***********************************************************************

                                      • at selection-screen *********************

***********************************************************************

***********************************************************************

AT SELECTION-SCREEN.

IF auto_fill = '' AND sy-ucomm = 'FC01'.

CLEAR : s_ifra-low.

REFRESH : s_ifra.

ENDIF.

CASE sscrfields-ucomm.

WHEN 'FC01'.

IF auto_fill = ''.

MESSAGE text-003 TYPE 'I'.

auto_fill = 'X'.

ELSE.

MESSAGE text-004 TYPE 'I'.

auto_fill = ''.

ENDIF.

ENDCASE.

AT SELECTION-SCREEN ON s_ifra.

IF r1 <> '' AND s_ifra-low = '' AND sy-ucomm <> 'FC01' AND

auto_fill <> 'X'.

MESSAGE text-007 TYPE 'E'.

ENDIF.

***********************************************************************

***********************************************************************

                                      • START OF SELECTION *********************

***********************************************************************

***********************************************************************

START-OF-SELECTION.

IF auto_fill = 'X'.

PERFORM auto_fill.

ENDIF.

PERFORM ifra_code.

PERFORM ref_del.

*END-OF-SELECTION.

END-OF-SELECTION.

CALL SCREEN 100.

*&----


*

*& Form AUTO_FILL

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM auto_fill .

DATA : charg(10), dn1 TYPE mska-vbeln VALUE '0000100072'.

  • Get all material with stock based on plant and storage location.

SELECT matnr werks lgort charg kalab vbeln posnr

FROM mska

INTO TABLE it_mska

  • FOR ALL ENTRIES IN it_lips1

WHERE werks EQ p_werks

AND lgort EQ p_lgort AND vbeln EQ dn1.

  • AND vbeln EQ it_lips1-kdauf

  • AND posnr EQ it_lips1-kdpos.

IF sy-subrc <> 0.

MESSAGE text-010 TYPE 'I'.

LEAVE LIST-PROCESSING.

ENDIF.

it_mska0[] = it_mska[].

  • Remove lines where stock is not positive.

DELETE it_mska WHERE kalab IS INITIAL.

DELETE it_mska WHERE charg IS INITIAL.

IF it_mska[] IS NOT INITIAL.

SELECT matnr meins

FROM mara

INTO TABLE it_mara

FOR ALL ENTRIES IN it_mska

WHERE matnr = it_mska-matnr.

ENDIF.

  • Get Sales org. Distribution channel and Division .

SELECT vbeln vbtyp auart netwr vkorg vtweg spart vkgrp vkbur

FROM vbak

INTO TABLE it_vbak

FOR ALL ENTRIES IN it_mska

WHERE vbeln EQ it_mska-vbeln.

IF NOT it_vbak[] IS INITIAL.

SELECT posnr vbelv netwr kwmeng

FROM vbap

INTO CORRESPONDING FIELDS OF TABLE it_vbap

FOR ALL ENTRIES IN it_vbak

WHERE vbelv EQ it_vbak-vbeln.

ENDIF.

LOOP AT it_mska INTO wa_mska.

CALL FUNCTION 'VB_BATCH_VALUES_FOR_OUTPUT'

EXPORTING

material = wa_mska-matnr

plant = wa_mska-werks

batch = wa_mska-charg

language = sy-langu

TABLES

classification = it_conf

EXCEPTIONS

no_classification_data = 1.

IF sy-subrc = 0.

READ TABLE it_conf INTO wa_conf WITH KEY

atnam = 'BA_PACK_PRIM_ID '.

IF sy-subrc = 0.

wa_mska-atwrt = wa_conf-atwrt.

MODIFY it_mska FROM wa_mska TRANSPORTING atwrt.

ENDIF.

ENDIF.

IF wa_mska-kalab <= 0.

wa_mska-err = text-011.

MODIFY it_mska FROM wa_mska TRANSPORTING err.

ENDIF.

READ TABLE it_mara INTO wa_mara WITH KEY matnr = wa_mska-matnr.

IF sy-subrc = 0.

wa_mska-meins = wa_mara-meins .

MODIFY it_mska FROM wa_mska TRANSPORTING meins.

ENDIF.

READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_mska-vbeln.

IF sy-subrc = 0.

wa_mska-vbtyp = wa_vbak-vbtyp.

wa_mska-auart = wa_vbak-auart.

wa_mska-vkorg = wa_vbak-vkorg.

wa_mska-vtweg = wa_vbak-vtweg.

wa_mska-spart = wa_vbak-spart.

wa_mska-vkbur = wa_vbak-vkbur.

wa_mska-vkgrp = wa_vbak-vkgrp.

  • READ TABLE it_vbap INTO wa_vbap WITH KEY vbelv = wa_mska-vbeln

  • posnr = wa_mska-posnr.

  • IF sy-subrc = 0.

    • wa_mska-kalab = wa_vbap-kwmeng.

    • wa_mska-netwr = wa_vbap-netwr.

  • ENDIF.

*

MODIFY it_mska FROM wa_mska TRANSPORTING vbtyp auart netwr vkorg vtweg spart vkgrp

vkbur kalab.

ENDIF.

ENDLOOP.

SORT it_mska BY charg.

CLEAR : charg.

ENDFORM. " AUTO_FILL

*&----


*

*& Module STATUS_0100 OUTPUT

*&----


*

  • text

*----


*

MODULE status_0100 OUTPUT.

SET PF-STATUS 'R098'.

SET TITLEBAR 'R098'.

IF custom_container1 IS INITIAL.

  • create a custom container control for our ALV Control

CREATE OBJECT custom_container1

EXPORTING

container_name = cont_on_main

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5.

IF sy-subrc NE 0.

  • add your handling, for example

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = g_repid

txt2 = sy-subrc

txt1 = 'The control could not be created'(510).

ENDIF.

  • create an instance of alv control

CREATE OBJECT grid1

EXPORTING

i_parent = custom_container1.

  • Set a titlebar for the grid control

*

gs_layout-grid_title = 'Creat batch Split'(900).

  • allow to select multiple lines

gs_layout-sel_mode = 'A'.

gs_layout-cwidth_opt = 'X'.

gs_layout-zebra = 'X'.

CALL METHOD grid1->set_table_for_first_display

EXPORTING

i_structure_name = 'ZXSD_S2_R_098_2'

is_layout = gs_layout

CHANGING

it_outtab = it_mska

it_fieldcatalog = fcat.

********

  • ->Create Object to receive events and link them to handler methods.

  • When the ALV Control raises the event for the specified instance

  • the corresponding method is automatically called.

*

CREATE OBJECT event_receiver.

SET HANDLER event_receiver->handle_user_command FOR grid1.

SET HANDLER event_receiver->handle_toolbar FOR grid1.

*

********

  • § 4.Call method 'set_toolbar_interactive' to raise event TOOLBAR.

CALL METHOD grid1->set_toolbar_interactive.

ENDIF.

CALL METHOD cl_gui_control=>set_focus

EXPORTING

control = grid1.

ENDMODULE. " STATUS_0100 OUTPUT

*&----


*

*& Module USER_COMMAND_0100 INPUT

*&----


*

  • text

*----


*

MODULE user_command_0100 INPUT.

CASE ok_code.

WHEN 'EXIT'.

PERFORM exit_program.

WHEN 'BACK '.

PERFORM exit_program.

WHEN 'CANCEL'.

PERFORM exit_program.

ENDCASE.

CLEAR ok_code.

ENDMODULE. " USER_COMMAND_0100 INPUT

*----


*

  • FORM EXIT_PROGRAM *

*----


*

FORM exit_program.

CALL METHOD custom_container1->free.

CALL METHOD cl_gui_cfw=>flush.

IF sy-subrc NE 0.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = g_repid

txt2 = sy-subrc

txt1 = 'Error in Flush'(500).

ENDIF.

LEAVE TO SCREEN 0.

ENDFORM. "exit_program

*&----


*

*& Form CREAT_BATCHSPLIT

*&----


*

  • text

*----


*

  • -->P_LT_ROWS text

*----


*

FORM creat_batchsplit TABLES p_lt_rows STRUCTURE lvc_s_row.

DATA: ls_selected_line LIKE lvc_s_row,

lf_row_index TYPE lvc_index,

flag.

CLEAR : t_lines.

CLEAR : it_mskat1.

LOOP AT p_lt_rows INTO ls_selected_line.

lf_row_index = ls_selected_line-index.

READ TABLE it_mska INTO wa_mska INDEX lf_row_index.

IF sy-subrc = 0.

APPEND wa_mska TO it_mskat1.

ENDIF.

ENDLOOP.

IF it_mskat1[] IS INITIAL.

MESSAGE text-012 TYPE 'I'.

EXIT.

ENDIF.

LOOP AT it_mskat1 INTO wa_mskat WHERE err <> ''.

MESSAGE text-014 TYPE 'I'.

flag = 'X'.

ENDLOOP.

it_mskat2[] = it_mskat1[].

DELETE ADJACENT DUPLICATES FROM it_mskat2 COMPARING vbeln.

DESCRIBE TABLE it_mskat2 LINES t_lines.

IF t_lines NE 1.

MESSAGE text-024 TYPE 'I'.

flag = 'X'.

ENDIF.

CHECK flag = ''.

  • Get batch characteristic of the material ie width(mm), dia(mm), core and packing.

LOOP AT it_mskat1 INTO wa_mskat.

CLEAR : it_conf.

CALL FUNCTION 'VB_BATCH_VALUES_FOR_OUTPUT'

EXPORTING

material = wa_mskat-matnr

plant = wa_mskat-werks

batch = wa_mskat-charg

language = 'E'

TABLES

classification = it_conf

EXCEPTIONS

no_classification_data = 1.

LOOP AT it_conf INTO wa_conf.

CASE wa_conf-atinn.

  • BA_PACK_NO_OF_REELS

WHEN '0000000614'.

value = wa_conf-atwrt.

CASE value.

WHEN '1'.

wa_mskat-packings = 'Single Reel'.

WHEN '2'.

wa_mskat-packings = 'Double Reel'.

WHEN '3'.

wa_mskat-packings = 'Triple Reel'.

ENDCASE.

  • BA_PACK_ORD_DIAMETER

WHEN '0000000618'.

covt1 = wa_conf-atwtb.

covt = covt1.

wa_mskat-dia_mm = covt.

CLEAR covt.

  • BA_PACK_ORD_WIDTH

WHEN '0000000619'.

covt1 = wa_conf-atwtb.

covt = covt1.

wa_mskat-width_mm = covt.

CLEAR covt.

  • BA_PACK_CORE_CODE

WHEN '0000000623'.

covt1 = wa_conf-atwtb.

covt = covt1.

wa_mskat-core = covt.

CLEAR covt.

ENDCASE.

ENDLOOP.

MODIFY it_mskat1 FROM wa_mskat TRANSPORTING packings dia_mm width_mm core.

ENDLOOP.

SORT it_mskat1 BY matnr packings dia_mm width_mm core.

CLEAR : it_mskat.

it_mskat2[] = it_mskat1[].

  • Combining all the material on the basis of their batch characteristics

LOOP AT it_mskat1 INTO wa_mskat1.

idx1 = sy-tabix.

MOVE-CORRESPONDING wa_mskat1 TO wa_mskat.

AT NEW matnr.

DELETE it_mskat2 INDEX idx1.

LOOP AT it_mskat2 INTO wa_mskat2 WHERE matnr = wa_mskat-matnr.

IF wa_mskat2-packings = wa_mskat-packings

AND wa_mskat2-width_mm = wa_mskat-width_mm

AND wa_mskat2-dia_mm = wa_mskat-dia_mm

AND wa_mskat2-core = wa_mskat-core.

  • Add the quantity if all batch characteristics are same.

wa_mskat-kalab = wa_mskat-kalab + wa_mskat2-kalab.

ENDIF.

ENDLOOP.

APPEND wa_mskat TO it_mskat.

ENDAT.

ENDLOOP.

  • Creating Call Off Order against the selected sales order.

SORT it_mskat BY vbeln.

LOOP AT it_mskat INTO wa_mskat1.

MOVE-CORRESPONDING wa_mskat1 TO wa_mskat.

  • Fill table bapipartnr.

it_bapipartnr-partn_role = 'AG'. " Sold-to-Party

it_bapipartnr-partn_numb = p_kunnr. " From Selection-screen

APPEND it_bapipartnr.

  • Fill table bapipitemin.

it_bapiitemin-itm_number = wa_mskat-posnr.

it_bapiitemin-material = wa_mskat-matnr.

it_bapiitemin-plant = wa_mskat-vkorg.

it_bapiitemin-store_loc = wa_mskat-lgort.

it_bapiitemin-target_qty = wa_mskat-kalab.

it_bapiitemin-target_qu = wa_mskat-meins.

it_bapiitemin-cond_value = '10'. " putting a non-zero value as it will be corrected internally by bapi.

it_bapiitemin-req_qty = wa_mskat-kalab.

it_bapiitemin-sales_unit = wa_mskat-meins.

it_bapiitemin-ref_doc = wa_mskat-vbeln.

it_bapiitemin-ref_doc_it = wa_mskat-posnr.

it_bapiitemin-ref_doc_ca = wa_mskat-vbtyp.

APPEND it_bapiitemin.

  • Fill table bapisdhead.

wa_bapisdhead-doc_type = 'ZCAL'.

wa_bapisdhead-sales_org = wa_mskat-vkorg.

wa_bapisdhead-distr_chan = wa_mskat-vtweg.

wa_bapisdhead-division = wa_mskat-spart.

wa_bapisdhead-ref_doc = wa_mskat-vbeln.

wa_bapisdhead-ref_doc_ca = wa_mskat-vbtyp.

wa_bapisdhead-sales_grp = wa_mskat-vkgrp.

wa_bapisdhead-sales_off = wa_mskat-vkbur.

ENDLOOP.

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT1'

EXPORTING

order_header_in = wa_bapisdhead

  • WITHOUT_COMMIT = ' '

convert_parvw_auart = 'X'

IMPORTING

salesdocument = salesdocument

  • SOLD_TO_PARTY =

  • SHIP_TO_PARTY =

  • BILLING_PARTY =

return = return

TABLES

order_items_in = it_bapiitemin

order_partners = it_bapipartnr

  • ORDER_ITEMS_OUT =

  • ORDER_CFGS_REF =

  • order_cfgs_inst =

  • ORDER_CFGS_PART_OF =

  • ORDER_CFGS_VALUE =

  • ORDER_CCARD =

  • ORDER_CFGS_BLOB =

  • ORDER_SCHEDULE_EX =

.

IF return IS INITIAL .

sales_doc = wa_mskat-vbeln.

APPEND wa_sale_doc TO it_sale_doc.

ENDIF.

CLEAR : it_bapiitemin, it_bapipartnr, wa_bapisdhead.

  • Selecting the delivery date for a call off order from Schedule Line Data.

IF NOT salesdocument IS INITIAL.

SELECT vbeln edatu

FROM vbep

INTO TABLE it_vbep1

WHERE vbeln EQ sales_doc

AND bmeng IS NOT NULL.

  • Selecting the maximum delivery date for a call off order.

SORT it_vbep1 BY vbeln ASCENDING

edatu DESCENDING.

LOOP AT it_vbep1 INTO wa_vbep1.

MOVE-CORRESPONDING wa_vbep1 TO wa_vbep.

AT NEW vbeln.

AT NEW edatu.

APPEND wa_vbep TO it_vbep.

ENDAT.

ENDAT.

ENDLOOP.

  • Determine Shipping date.

READ TABLE it_vbep INTO wa_vbep WITH KEY vbeln = wa_sale_doc-vbeln.

IF sy-subrc EQ 0.

IF p_deldat GE wa_vbep-edatu.

due_date = p_deldat.

ELSE.

due_date = wa_vbep-edatu.

ENDIF.

ENDIF.

  • Creating Outbound Delivery with Order Reference.

LOOP AT it_mskat INTO wa_mskat.

wa_delivery-ref_doc = salesdocument.

wa_delivery-ref_item = wa_mskat-posnr.

wa_delivery-dlv_qty = wa_mskat-kalab.

wa_delivery-sales_unit = wa_mskat-meins.

APPEND wa_delivery TO it_delivery.

ENDLOOP.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'

EXPORTING

  • SHIP_POINT =

due_date = due_date

  • DEBUG_FLG =

  • IMPORTING

  • DELIVERY =

  • NUM_DELIVERIES =

TABLES

sales_order_items = it_delivery

  • SERIAL_NUMBERS =

  • EXTENSION_IN =

  • DELIVERIES =

  • CREATED_ITEMS =

  • EXTENSION_OUT =

return = it_return

.

IF it_return[] IS INITIAL.

  • Creating batch split and picking on delivery.

CLEAR it_return[].

PERFORM bdc.

ENDIF.

ENDIF.

ENDFORM. " CREAT_BATCHSPLIT

*&----


*

*& Form BDC

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM bdc .

PERFORM bdc_dynpro USING 'SAPMV50A' '4004'.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIKP-VBELN'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'LIKP-VBELN'

salesdocument.

  • '80000191'.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POPO_T'.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIPS-MATNR(02)'.

PERFORM bdc_dynpro USING 'SAPMV50A' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV50A-POSNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'.

PERFORM bdc_field USING 'RV50A-POSNR'

'000001'.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=CHSP_T'.

LOOP AT it_mskat INTO wa_mskat WHERE vbeln EQ sales_doc.

CLEAR :qty,

qty1,

qty3.

IF sy-tabix = 1.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIPS-POSNR(01)'.

PERFORM bdc_dynpro USING 'SAPMV50A' '3000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POAN_T'.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIPS-LFIMG(01)'.

PERFORM bdc_field USING 'LIPS-CHARG(01)'

wa_mskat-charg.

  • '1-1'.

PERFORM bdc_field USING 'LIPS-LGORT(01)'

wa_mskat-lgort.

  • '0001'.

qty = wa_mskat-kalab.

SPLIT qty AT '.' INTO qty1 qty3.

CONCATENATE qty1 qty3 INTO qty SEPARATED BY ','.

PERFORM bdc_field USING 'LIPS-LFIMG(01)'

qty.

  • '1,000'.

ELSE.

PERFORM bdc_dynpro USING 'SAPMV50A' '3000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POAN_T'.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIPS-LFIMG(02)'.

PERFORM bdc_field USING 'LIPS-CHARG(02)'

wa_mskat-charg.

  • '1-2'.

PERFORM bdc_field USING 'LIPS-LGORT(02)'

wa_mskat-lgort.

  • '0001'.

qty = wa_mskat-kalab.

SPLIT qty AT '.' INTO qty1 qty3.

CONCATENATE qty1 qty3 INTO qty SEPARATED BY ','.

PERFORM bdc_field USING 'LIPS-LFIMG(02)'

qty.

  • '1,000'.

ENDIF.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPMV50A' '3000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BACK_T'.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POPO_T'.

PERFORM bdc_dynpro USING 'SAPMV50A' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV50A-POSNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'.

PERFORM bdc_field USING 'RV50A-POSNR'

'1'.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=CHPL_T01'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV50A-CHMULT(01)'.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POPO_T'.

LOOP AT it_mskat INTO wa_mskat WHERE vbeln = sales_doc.

CLEAR :qty,

qty1,

qty3.

IF sy-tabix = 1.

PERFORM bdc_dynpro USING 'SAPMV50A' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV50A-POSNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'.

posnr = '900001'.

PERFORM bdc_field USING 'RV50A-POSNR'

'900001'.

ELSE.

PERFORM bdc_dynpro USING 'SAPMV50A' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RV50A-POSNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=WEIT'.

posnr = posnr + 1.

PERFORM bdc_field USING 'RV50A-POSNR'

posnr.

ENDIF.

PERFORM bdc_dynpro USING 'SAPMV50A' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=POPO_T'.

PERFORM bdc_field USING 'BDC_CURSOR'

'LIPSD-PIKMG(01)'.

qty = wa_mskat-kalab.

SPLIT qty AT '.' INTO qty1 qty3.

CONCATENATE qty1 qty3 INTO qty SEPARATED BY ','.

PERFORM bdc_field USING 'LIPSD-PIKMG(01)'

qty.

ENDLOOP.

PERFORM bdc_field USING 'BDC_OKCODE'

'=SICH_T'.

PERFORM bdc_transaction USING 'VL02N'.

ENDFORM. " BDC

*----


*

  • 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.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM. "bdc_field

*----


*

  • Start new transaction according to parameters *

*----


*

FORM bdc_transaction USING tcode.

REFRESH messtab.

CALL TRANSACTION tcode USING bdcdata

MODE ctumode

UPDATE cupdate

MESSAGES INTO messtab.

REFRESH bdcdata.

ENDFORM. "bdc_transaction

*&----


*

*& Form IFRA_CODE

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM ifra_code .

CHECK r1 = 'X' AND s_ifra[] IS NOT INITIAL.

IF s_ifra[] IS NOT INITIAL.

SELECT objek atinn atwrt

FROM ausp

INTO TABLE it_ausp

WHERE objek IN s_objek AND

atinn = '0000000599' AND

atwrt IN s_ifra.

ELSE.

MESSAGE text-015 TYPE 'I'.

LEAVE LIST-PROCESSING.

ENDIF.

SORT it_ausp BY atinn atwrt.

DELETE ADJACENT DUPLICATES FROM it_ausp COMPARING atinn atwrt.

LOOP AT it_ausp INTO wa_ausp.

wa_ausp-cuobj = wa_ausp-objek.

MODIFY it_ausp FROM wa_ausp TRANSPORTING cuobj.

ENDLOOP.

IF it_ausp[] IS NOT INITIAL .

SELECT cuobj klart objek

FROM inob

INTO TABLE it_inob

FOR ALL ENTRIES IN it_ausp

WHERE cuobj = it_ausp-cuobj.

ENDIF.

LOOP AT it_inob INTO wa_inob .

READ TABLE it_ausp INTO wa_ausp WITH KEY cuobj = wa_inob-cuobj.

IF sy-subrc = 0.

wa_inob-atwrt = wa_ausp-atwrt.

MODIFY it_inob FROM wa_inob TRANSPORTING atwrt.

ENDIF.

wa_inob-matnr = wa_inob-objek+0(18).

wa_inob-charg = wa_inob-objek+18(10).

MODIFY it_inob FROM wa_inob TRANSPORTING matnr charg.

ENDLOOP.

PERFORM auto_fill .

it_mskaifra[] = it_mska[].

REFRESH it_mska.

CLEAR wa_mska.

LOOP AT it_inob INTO wa_inob.

CLEAR wa_mska.

READ TABLE it_mskaifra INTO wa_mskaifra WITH KEY

charg = wa_inob-charg.

IF sy-subrc = 0.

MOVE-CORRESPONDING wa_mskaifra TO wa_mska.

APPEND wa_mska TO it_mska.

ELSE.

SELECT SINGLE * FROM mska

WHERE charg = wa_inob-charg.

IF sy-subrc = 0.

MOVE-CORRESPONDING mska TO wa_mska.

MOVE-CORRESPONDING wa_inob TO wa_mska.

SELECT SINGLE meins

FROM mara

INTO wa_mska-meins

WHERE matnr = wa_mska-matnr.

MOVE text-018 TO wa_mska-err.

APPEND wa_mska TO it_mska.

ELSE.

MOVE-CORRESPONDING wa_inob TO wa_mska.

MOVE text-017 TO wa_mska-err.

APPEND wa_mska TO it_mska.

ENDIF.

ENDIF.

ENDLOOP.

ENDFORM. " IFRA_CODE

*&----


*

*& Form REF_DEL

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM ref_del .

CHECK r2 = 'X' AND p_vbeln IS NOT INITIAL.

CALL FUNCTION 'CONVERSION_EXIT_ALFAN_INPUT'

EXPORTING

input = p_vbeln

IMPORTING

output = p_vbeln.

  • Select on the basis of reference delivery, plant and storage location .

  • get the reference deliveries for the entered plant and storage location.

SELECT vbeln posnr pstyv matnr werks lgort charg lfimg kdauf kdpos

FROM lips

INTO TABLE it_lips1

WHERE vbeln EQ p_vbeln

AND pstyv EQ 'ZCHS'

AND werks EQ p_werks

AND lgort EQ p_lgort.

IF sy-subrc <> 0.

MESSAGE text-022 TYPE 'I'.

LEAVE LIST-PROCESSING.

ENDIF.

PERFORM auto_fill.

it_lips[] = it_lips1[].

  • CLEAR: it_mska, wa_mska.

  • LOOP AT it_lips INTO wa_lips.

  • CLEAR wa_mska.

  • READ TABLE it_mskarefdel INTO wa_mskarefdel WITH KEY

  • charg = wa_lips-charg.

  • IF sy-subrc = 0.

  • MOVE-CORRESPONDING wa_mskarefdel TO wa_mska.

  • APPEND wa_mska TO it_mska.

  • ELSE.

  • SELECT SINGLE * FROM mska

  • WHERE charg = wa_lips-charg.

*

  • IF sy-subrc = 0.

  • MOVE-CORRESPONDING mska TO wa_mska.

  • MOVE wa_lips-charg TO wa_mska-charg.

*

  • SELECT SINGLE meins

  • FROM mara

  • INTO wa_mska-meins

  • WHERE matnr = wa_mska-matnr.

  • MOVE text-018 TO wa_mska-err.

  • CLEAR wa_mska-atwrt.

  • REFRESH it_conf.

  • CALL FUNCTION 'VB_BATCH_VALUES_FOR_OUTPUT'

  • EXPORTING

  • material = wa_lips-matnr

  • plant = wa_lips-werks

  • batch = wa_lips-charg

  • language = sy-langu

  • TABLES

  • classification = it_conf

  • EXCEPTIONS

  • no_classification_data = 1.

  • IF sy-subrc = 0.

  • READ TABLE it_conf INTO wa_conf WITH KEY

  • atnam = 'BA_PACK_PRIM_ID '.

  • IF sy-subrc = 0.

  • wa_mska-atwrt = wa_conf-atwrt.

  • ENDIF.

  • ENDIF.

*

*

  • APPEND wa_mska TO it_mska.

  • ELSE.

  • MOVE wa_lips-charg TO wa_mska-charg.

  • MOVE text-017 TO wa_mska-err.

  • APPEND wa_mska TO it_mska.

  • ENDIF.

  • ENDIF.

  • ENDLOOP.

LOOP AT it_mska INTO wa_mska WHERE kalab = 0.

READ TABLE it_lips INTO wa_lips WITH KEY vbeln = wa_lips1-kdauf

posnr = wa_lips1-kdpos.

IF sy-subrc EQ 0.

wa_mska-err = text-011.

MODIFY it_mska FROM wa_mska TRANSPORTING err.

ENDIF.

ENDLOOP.

ENDFORM. " REF_DEL

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi,

Why have you pasted Deepak Kumar's program into this forum?

Regards,

Nick