2007 Oct 24 5:53 AM
Hi All
This is the print program of my script, i am not getting the logic..can any body help me with this..
INCLUDE rvadtabl.
TABLES: vbuk, "Vertriebsbeleg (Kopf)-Status
vbco3, "Schlüsselfelder Vertriebsbeleg
vbpla, "Allgemeine Transportdaten
vbplk, "Versandelement Kopfdaten
vbplp, "Versandelement Positionsdaten
vbpls, "Verpackung Summendaten
vekp,
adrc,
vbfa. "DEVK937590
TABLES: vbkd. "DEVK942078
*DEVK9A0EB4 - Add define
TYPES:
ty_itcsy TYPE STANDARD TABLE OF itcsy.
start of change for DEVK937590
DATA: BEGIN OF t_deliveryflow OCCURS 0, "VBFA delivery flow
vbeln LIKE vbfa-vbeln, "Subsequent sales and distribu
END OF t_deliveryflow.
DATA: v_lin TYPE i.
CONSTANTS: c_x(1) TYPE c VALUE 'X'.
end of change for DEVK937590
DATA: BEGIN OF xvbplk OCCURS 10.
INCLUDE STRUCTURE vbplk.
DATA: END OF xvbplk.
DATA : BEGIN OF vbdkl OCCURS 10.
INCLUDE STRUCTURE vbdkl.
DATA : END OF vbdkl.
DATA: BEGIN OF tvbdpl OCCURS 0. "Internal table for items
INCLUDE STRUCTURE vbdpl.
DATA: END OF tvbdpl.
DATA: BEGIN OF xvbplp OCCURS 50.
INCLUDE STRUCTURE vbplp.
DATA: END OF xvbplp.
DATA: BEGIN OF xvbpls OCCURS 10.
INCLUDE STRUCTURE vbpls.
DATA: END OF xvbpls.
DATA: retcode LIKE sy-subrc.
DATA: xscreen(1) TYPE c. "Ausgabe auf Drucker oder Bildschirm
DATA: t_vepo LIKE vepo OCCURS 0 WITH HEADER LINE, "VEPO internal table
BEGIN OF t_cartons OCCURS 0, "Internal table for cartons
venum LIKE vepo-venum, "Shipping unit # for carton
END OF t_cartons,
BEGIN OF t_boxes OCCURS 0, "Internal table for BOXES
venum LIKE vepo-venum, "Shipping unit # for BOXES
laeng LIKE vekp-laeng,
breit LIKE vekp-breit,
hoehe LIKE vekp-hoehe,
meabm LIKE vekp-meabm,
END OF t_boxes,
BEGIN OF t_pack_dim OCCURS 0,
laeng LIKE vekp-laeng,
breit LIKE vekp-breit,
hoehe LIKE vekp-hoehe,
meabm LIKE vekp-meabm,
box_qty TYPE i,
END OF t_pack_dim,
v_venum LIKE vepo-venum, "Shipping unit number
i_cartons TYPE i, "# of cartons (Integer type)
i_boxes TYPE i, "# of boxes (Integer type)
i_box_count TYPE i, "# of boxes/carton "DEVK926768
c_cartons(4) TYPE c, "# of cartons (Character type)
c_boxes(4) TYPE c, "# of boxes (Character type)
c_bolnr(35) TYPE c,
v_tel_number LIKE adrc-tel_number,
v_adrnr LIKE adrc-addrnumber,
v_kdmat LIKE lips-kdmat,
v_btgew LIKE likp-btgew,
v_gewei LIKE likp-gewei,
v_arktx LIKE lips-arktx.
******DEVK9A0IK7 Addition by RAMARAJG Starts here
types : BEGIN OF t_item ,
posnr1 type vbplp-posnr,
material1 TYPE mara-matnr,
brgew1 type vbplp-brgew,
vemeh1 type vbplp-vemeh,
item_weight1 TYPE n,
arktx1 type vbplp-arktx,
vboxcnt type n,
end of t_item.
*types : BEGIN OF t_item1 ,
posnr1 type vbplp-posnr,
material1 TYPE mara-matnr,
vemng1 type vbplp-brgew,
vemeh1 type vbplp-vemeh,
item_weight1 TYPE n,
arktx1 type vbplp-arktx,
v_boxcnt type n,
end of t_item1.
DATA: it_item TYPE TABLE OF t_item,
wa_item TYPE t_item.
data: it_item1 type table of t_item,
wa_item1 type t_item.
*data: wa_itab1 like itab1.
data: v_grwt type lips-brgew, "Gross Weight in KG
v_gunit type likp-gewei, "Gross Weight Unit
v_netwt type lips-ntgew, "Net Weight
v_unit type likp-gewei. "Net Weight Unit
v_tboxes type i,
******DEVK9A0IK7 Addition by RAMARAJG ends here
*----
*
A. Nachricht (allgemein) *
*----
*
FORM entry USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDFORM. "entry
*----
*
FORM PROCESSING *
*----
*
........ *
*----
*
--> PROC_SCREEN *
*----
*
FORM processing USING proc_screen.
PERFORM get_data. " <-- speziell
PERFORM form_open USING proc_screen vbpla-land1.
CHECK retcode = 0.
PERFORM shipping_point_tel_no.
PERFORM boxes_and_cartons.
PERFORM gross_weight.
***********DEVK9A0IK7 starts here
*******Perform to get the Net weight
*******Perform to get Total weight for each line item
Perform net_weight. "DEVK9A0IK7
Perform Total_weight. "DEVK9A0IK7
***********DEVK9A0IK7 ends here
PERFORM bill_of_lading.
CHECK retcode = 0.
PERFORM check_repeat.
PERFORM text_print. " <-- speziell
begin shb
PERFORM get_end_customer_po.
*end shb
PERFORM packing_dimensions.
PERFORM remarks.
CHECK retcode = 0.
PERFORM form_close.
CHECK retcode = 0.
ENDFORM. "processing
*----
*
FORM FORM_OPEN *
*----
*
........ *
*----
*
--> US_SCREEN *
--> US_COUNTRY *
*----
*
FORM form_open USING us_screen us_country.
INCLUDE rvadopfo.
ENDFORM. "form_open
*----
*
FORM FORM_CLOSE *
*----
*
........ *
*----
*
FORM form_close.
CALL FUNCTION 'CLOSE_FORM' "...Ende Formulardruck
EXCEPTIONS OTHERS = 1.
IF sy-subrc NE 0.
retcode = 1.
PERFORM protocol_update.
ENDIF.
SET COUNTRY space.
ENDFORM. "form_close
*----
*
FORM CHECK_REPEAT *
*----
*
........ *
*----
*
FORM check_repeat.
SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
AND objky = nast-objky
AND kschl = nast-kschl
AND spras = nast-spras
AND parnr = nast-parnr
AND parvw = nast-parvw
AND nacha BETWEEN '1' AND '4'.
CHECK *nast-vstat = '1'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'REPEAT'
window = 'REPEAT'
EXCEPTIONS
element = 1
window = 2.
IF sy-subrc NE 0.
PERFORM protocol_update.
ENDIF.
EXIT.
ENDSELECT.
ENDFORM. "check_repeat
*----
*
FORM PROTOCOL_UPDATE *
*----
*
........ *
*----
*
FORM protocol_update.
CHECK xscreen = space.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
EXCEPTIONS
OTHERS = 1.
ENDFORM. "protocol_update
*----
*
B. Packliste (speziell) *
*----
*
Die Verpackung von Lieferungen wird durch Versandelemente (VSE)
realisiert. Technisch ist ein Versandelement ein Beleg mit Kopf-
und Positionsdaten (Strukturen VBPLK/XVBPLK und VBPLP/XVBPLP).
Eine Position in einem VSE ist entweder wieder ein VSE oder Teil
eine Lieferposition (also mit den zum VSE gehörenden Materialen/
Versandhilftsmitteln verpackt). Der Zusammenhang zur Lieferung
wird durch die beiden Felder VBELN (Lieferung) und POSNR (Position)
in der Struktur VBPLP realisiert. Es ist zu beachten, daß ein VSE
keine Positionsdaten enthalten muß: Die Lieferung wurde dann nicht
vollständig verpackt.
Mathematisch gesehen stellen die VSE einen Wald (aus Bäumen) dar.
An den Knoten können noch Lieferpositionsdaten hängen. Um zu
erkennen ob ein Knoten eine Wurzel oder (und) ein Blatt ist, gibt
es im VSE-Kopf Kennzeichen. Ist KZOBE gesetzt, so ist das VSE ein
oberes Element, also eine Wurzel. Ist KZUNT gesetzt, stellt das VSE
ein unteres Element dar, also ein Blatt. Ist keines der beiden
Kennzeichen gesetzt dann ist das VSE ein innerer Knoten. Es ist
zu beachten, daß beiden Kennzeichen gesetzt sein können: Der Baum
besteht aus einem Knoten. Die Tiefe eines Knotens durch das Feld
TIVEL gegeben.
Weiterhin ist der Baum doppelt verkettet. Es ist also möglich,
nicht nur einen Weg von der Wurzel (eines Teilbaums) zu einem
Blatt zu finden, sondern auch umgekehrt von einem Blatt zur Wurzel
zu gelangen. Dazu existiert (im VSE-Kopf) das Feld UEVEL, also
das übergeordnete VSE.
Um schließlich zu entscheiden, ob ein VSE-Position ein VSE oder
eine Lieferposition ist, wird das Feld POSNR ausgewertet. Ist
das Feld initial, stellt die Position ein VSE dar, im anderen Fall
enthält es die Lieferposition. Ist die Position ein VSE, steht im
Feld UNVEL das zugehörige untergeordnete VSE.
FORM get_data.
vbco3-vbeln = nast-objky.
vbco3-spras = nast-spras.
vbco3-kunde = nast-parnr.
vbco3-parvw = nast-parvw.
*mod+
CALL FUNCTION 'RV_DELIVERY_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkl
TABLES
pos = tvbdpl.
CALL FUNCTION 'SD_PACKING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
vbpla_wa = vbpla
TABLES
vbplk_tab = xvbplk
vbplp_tab = xvbplp
vbpls_tab = xvbpls
EXCEPTIONS
OTHERS = 01.
LOOP AT xvbplk WHERE kzobe = 'X'.
EXIT.
ENDLOOP.
IF sy-subrc > 0.
syst-msgid = 'VL'.
syst-msgno = '490'.
syst-msgty = 'E'.
PERFORM protocol_update.
retcode = 1.
ENDIF.
ENDFORM. "get_data
*----
*
FORM TEXT_PRINT *
*----
*
........ *
*----
*
FORM text_print.
Die Kopfdaten werden implizit ausgegeben, ...
... dann die Überschriften der Positionen ...
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'HEADER'
type = 'TOP'.
... und schließlich die Positionen ausgeben ...
LOOP AT xvbplk WHERE kzobe = 'X'.
PERFORM packing_tree USING xvbplk-venum.
ENDLOOP.
ENDFORM. "text_print
Rekursive Prozedur
FORM packing_tree USING value(shenr).
Daten des Versandelements shenr ausgeben, also Wurzel des Teilbaums
MOVE space TO xvbplk.
xvbplk-venum = shenr.
READ TABLE xvbplk.
vbplk = xvbplk.
READ TABLE t_cartons WITH KEY venum = vbplk-venum.
IF sy-subrc = 0.
IF vbplk-brgew <> 0.
PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
vbplk-brgew.
ELSE.
PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
' '.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SHELEM'.
ENDIF.
Nun die Positionen abarbeiten (Teilbäume durchlaufen).
Hier wäre eventuell ein Sortierung zwischen Lieferpositionen
und weiteren Versandelementen sinnvoll. Alle nachgeordneten
Positionen liegen eine Stufe tiefer.
LOOP AT xvbplp WHERE venum = shenr.
IF xvbplp-posnr IS INITIAL.
Versandelement
PERFORM packing_tree USING xvbplp-unvel.
ELSE.
Lieferposition (Anteil)
vbplp = xvbplp.
PERFORM customer_material.
***ramarajg starts.
perform item_list.
***ramarajg end.
IF vbplp-brgew <> 0.
PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
vbplp-brgew.
ELSE.
PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
' '.
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'DELPOS'.
ENDIF.
ENDLOOP.
***ramarajg starts.
perform TOTAL_WEIGHT.
loop at it_item into wa_item.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'ITEMPOS'.
endloop.
break ramarajg.
***ramarajg end.
ENDFORM. "packing_tree
*----
*
FORM SET_TEXTSYMBOL *
*----
*
........ *
*----
*
FORM set_textsymbol USING text_symbol
text_value.
CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
EXPORTING
name = text_symbol
value = text_value.
ENDFORM. "set_textsymbol
*&----
*
*& Form BOXES_AND_CARTONS
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM boxes_and_cartons.
CLEAR: t_cartons,
t_boxes,
i_cartons,
i_boxes.
REFRESH: t_cartons,
t_boxes.
start of change for DEVK937590
*
CLEAR t_deliveryflow[].
SELECT vbeln
FROM vbfa
INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
WHERE vbelv = vbpla-vbeln AND vbtyp_n = c_x.
Select data
DESCRIBE TABLE t_deliveryflow LINES v_lin.
CHECK v_lin GT 0.
SELECT venum vbeln
FROM vepo
INTO CORRESPONDING FIELDS OF TABLE t_vepo
FOR ALL ENTRIES IN t_deliveryflow
WHERE venum = t_deliveryflow-vbeln.
SELECT VENUM
VBELN
FROM VEPO
INTO CORRESPONDING FIELDS OF TABLE T_VEPO
WHERE VBELN = VBPLA-VBELN.
end of change for DEVK937590
SORT t_vepo BY venum.
DELETE ADJACENT DUPLICATES FROM t_vepo COMPARING venum.
Determine the number of cartons and boxes to be shipped.
To determine the number of cartons, shipping unit number (VENUM) is
checked if it a lower-level shipping unit. This is done by reading
table VEPO and checking if VENUM exist in UNVEL (Lower-level shipping
unit). If it does, this means that VENUM is contained within
another container. If it does not exist, it is considered the highest
level of packing for that specific delivery.
LOOP AT t_vepo.
check if VENUM is a lower level shipping unit.
SELECT SINGLE venum INTO v_venum
FROM vepo
WHERE unvel = t_vepo-venum.
If shipping unit number is found, count as carton.
IF sy-subrc = 0.
check if carton already exist for the carton.
READ TABLE t_cartons WITH KEY venum = v_venum.
if carton does not exist, append table
IF sy-subrc <> 0.
t_cartons-venum = v_venum.
APPEND t_cartons.
ENDIF.
ENDIF.
ENDLOOP.
count boxes and cartons
DESCRIBE TABLE t_vepo LINES i_boxes.
DESCRIBE TABLE t_cartons LINES i_cartons.
Convert cartons and boxes field values to CHARACTER type FORMAT.
In order to save the output values to the output fields, the
fields are converted to CHARACTER type formats.
MOVE: i_cartons TO c_cartons,
i_boxes TO c_boxes.
PERFORM set_textsymbol USING '&BOXES&'
c_boxes.
PERFORM set_textsymbol USING '&CARTONS&'
c_cartons.
ENDFORM. " BOXES_AND_CARTONS
*&----
*
*& Form BILL_OF_LADING
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM bill_of_lading.
SELECT SINGLE bolnr
FROM likp
INTO c_bolnr
WHERE vbeln = vbpla-vbeln.
PERFORM set_textsymbol USING '&BILL_OF_LADING&'
c_bolnr.
ENDFORM. " BILL_OF_LADING
*&----
*
*& Form PACKING_DIMENSIONS
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM packing_dimensions.
CLEAR: T_BOXES,
T_PACK_DIM.
REFRESH: T_BOXES,
T_PACK_DIM.
*
SELECT VENUM
LAENG
BREIT
HOEHE
MEABM
FROM VEKP
INTO CORRESPONDING FIELDS OF TABLE T_BOXES
FOR ALL ENTRIES IN T_VEPO
WHERE VENUM = T_VEPO-VENUM.
*
LOOP AT T_BOXES.
READ TABLE T_PACK_DIM WITH KEY LAENG = T_BOXES-LAENG
BREIT = T_BOXES-BREIT
HOEHE = T_BOXES-HOEHE
MEABM = T_BOXES-MEABM.
IF SY-SUBRC = 0.
T_PACK_DIM-BOX_QTY = T_PACK_DIM-BOX_QTY + 1.
MODIFY T_PACK_DIM INDEX SY-TABIX.
ELSE.
T_PACK_DIM-LAENG = T_BOXES-LAENG.
T_PACK_DIM-BREIT = T_BOXES-BREIT.
T_PACK_DIM-HOEHE = T_BOXES-HOEHE.
T_PACK_DIM-MEABM = T_BOXES-MEABM.
T_PACK_DIM-BOX_QTY = 1.
APPEND T_PACK_DIM.
ENDIF.
ENDLOOP.
LOOP AT T_PACK_DIM.
AT FIRST.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'PACKING_DIMENSIONS_HEADER'.
ENDAT.
*
CLEAR: VEKP,
C_BOXES.
VEKP-LAENG = T_PACK_DIM-LAENG.
VEKP-BREIT = T_PACK_DIM-BREIT.
VEKP-HOEHE = T_PACK_DIM-HOEHE.
VEKP-MEABM = T_PACK_DIM-MEABM.
MOVE: T_PACK_DIM-BOX_QTY TO C_BOXES.
*
PERFORM SET_TEXTSYMBOL USING '&BOX_QTY&'
C_BOXES.
IF VEKP-LAENG <> 0 AND
VEKP-BREIT <> 0 AND
VEKP-HOEHE <> 0.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'PACKING_DIMENSIONS'.
ENDIF.
ENDLOOP.
ENDFORM. " PACKING_DIMENSIONS
*&----
*
*& Form REMARKS
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM remarks.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'REMARKS'.
ENDFORM. " REMARKS
*&----
*
*& Form SHIPPING_POINT_TEL_NO
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM shipping_point_tel_no.
SELECT SINGLE adrnr
FROM tvst
INTO v_adrnr
WHERE vstel = vbpla-vstel.
SELECT SINGLE tel_number
FROM adrc
INTO adrc-tel_number
WHERE addrnumber = v_adrnr.
ENDFORM. " SHIPPING_POINT_TEL_NO
*&----
-
*& Form CUSTOMER_MATERIAL
*&----
-
text
*----
-
--> p1 text
<-- p2 text
*----
-
FORM customer_material.
CLEAR: v_kdmat.
begin of mod*
IF vbdkl-lfart = 'LO'.
SELECT SINGLE kdmat postx
INTO (v_kdmat , v_arktx)
FROM knmt
WHERE vkorg = vbdkl-vkorg
AND vtweg = '01'
AND kunnr = vbdkl-kunag
AND matnr = vbplp-matnr.
IF NOT v_kdmat IS INITIAL.
vbplp-matnr = v_kdmat.
vbplp-arktx = v_arktx.
ENDIF.
ELSE.
SELECT SINGLE kdmat
FROM lips
INTO v_kdmat
WHERE vbeln = vbplp-vbeln AND
posnr = vbplp-posnr AND
matnr = vbplp-matnr.
ENDIF.
**ramarajg
IF v_kdmat <> ' '.
PERFORM set_textsymbol USING '&MATERIAL&'
v_kdmat.
ELSE.
PERFORM set_textsymbol USING '&MATERIAL&'
vbplp-matnr.
ENDIF.
ENDFORM. " CUSTOMER_MATERIAL
*----
*
FORM ITEM_WEIGHTS *
*----
*
........ *
*----
*
--> IN_TAB4 *
--> OUT_TAB4 *
*----
*
FORM item_weights TABLES in_tab4 STRUCTURE itcsy
out_tab4 STRUCTURE itcsy.
DATA: n_vbeln(10) TYPE n,
v_btgew LIKE likp-btgew,
v_ntgew1 LIKE vekp-ntgew,
v_btgew1 LIKE likp-btgew,
v_ntgew2 LIKE likp-ntgew,
v_btgew2 LIKE likp-btgew,
BEGIN OF t_venum OCCURS 0,
venum LIKE vepo-venum,
END OF t_venum.
READ TABLE in_tab4 INDEX 1.
CHECK sy-subrc = 0.
MOVE in_tab4-value TO n_vbeln. "convert to numeric type.
start of change for DEVK937590
*
*break ramarajg.
CLEAR t_deliveryflow[].
SELECT vbeln
FROM vbfa
INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
WHERE vbelv = n_vbeln AND vbtyp_n = c_x.
Select data
DESCRIBE TABLE t_deliveryflow LINES v_lin.
CHECK v_lin GT 0.
SELECT venum
FROM vepo
INTO CORRESPONDING FIELDS OF TABLE t_venum
FOR ALL ENTRIES IN t_deliveryflow
WHERE venum = t_deliveryflow-vbeln.
SELECT VENUM
FROM VEPO
INTO CORRESPONDING FIELDS OF TABLE T_VENUM
WHERE VBELN = N_VBELN.
end of change for DEVK937590
CLEAR v_btgew.
DESCRIBE TABLE t_venum LINES v_lin. "DEVK937590
CHECK v_lin GT 0. "DEVK937590
SELECT ntgew
FROM vekp
INTO v_btgew
FOR ALL ENTRIES IN t_venum
WHERE venum = t_venum-venum.
v_btgew1 = v_btgew1 + v_btgew.
ENDSELECT.
SELECT SUM( ntgew )
FROM lips
INTO v_ntgew1
WHERE vbeln = n_vbeln.
SELECT SINGLE ntgew
btgew
FROM likp
INTO (v_ntgew2, v_btgew2)
WHERE vbeln = n_vbeln.
IF v_ntgew1 = v_ntgew2 AND
v_btgew1 = v_btgew2.
READ TABLE out_tab4 WITH KEY name = 'PRINT_WEIGHT'.
IF sy-subrc = 0 .
out_tab4-value = 'X'.
ELSE.
out_tab4-value = ' '.
ENDIF.
MODIFY out_tab4 INDEX sy-tabix.
ENDIF.
ENDFORM. "item_weights
*&----
*
*& Form GROSS_WEIGHT
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM gross_weight.
CLEAR: v_btgew.
SELECT SINGLE btgew
gewei
FROM likp
INTO (v_btgew, v_gewei)
WHERE vbeln = vbpla-vbeln.
PERFORM set_textsymbol USING '&GROSS_WEIGHT&'
v_btgew.
PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT&'
v_gewei.
changes added by RAMARAJG starts here
clear v_grwt.
clear v_gunit.
v_grwt = v_btgew.
v_gunit = v_gewei.
if v_gunit = 'G'.
v_grwt = v_grwt / 1000.
v_gunit = 'KG'.
endif.
PERFORM set_textsymbol USING '&GROSS_WEIGHT1&'
v_grwt.
PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT1&'
v_gunit.
changes added by RAMARAJG ends here
ENDFORM. " GROSS_WEIGHT
*&----
*
*& Form GET_END_CUSTOMER_PO
*&----
*
Retrieve End Customer PO#
*
*----
*
--> p1 text
<-- p2 text
*----
*
FORM get_end_customer_po.
DATA: v_zvgbel LIKE lips-vgbel.
DATA v_bstkd_e TYPE bstkd_e.
CLEAR: v_bstkd_e, v_zvgbel.
SELECT SINGLE vgbel INTO v_zvgbel
FROM lips
WHERE vbeln = vbpla-vbeln.
SELECT SINGLE bstkd_e INTO v_bstkd_e
FROM vbkd
WHERE vbeln = v_zvgbel
AND bstkd_e > ''.
PERFORM set_textsymbol USING '&V_BSTKD_E&'
v_bstkd_e.
ENDFORM. " GET_END_CUSTOMER_PO
*DEVK9A0EB4 - Add a form
*&----
*
*& Form shipper_acct
*&----
*
Get shipper account at customer
*----
*
FORM shipper_acct TABLES in_tab1 TYPE ty_itcsy
out_tab1 TYPE ty_itcsy.
DATA: v_kunag TYPE likp-kunag, " Sold to party
v_eikto TYPE knvv-eikto. "Shipper account number at customer
DATA v_strlen(10) TYPE c.
DATA wa_tab1 TYPE itcsy.
DATA n_vbeln(10) TYPE n.
Get kunnr from likp
CLEAR wa_tab1.
READ TABLE in_tab1 INTO wa_tab1 WITH KEY name = 'VBPLA-VBELN'.
IF sy-subrc = 0.
n_vbeln = vbpla-vbeln.
ENDIF.
CHECK sy-subrc = 0.
SELECT kunag
FROM likp
INTO v_kunag
WHERE vbeln = n_vbeln.
ENDSELECT.
IF sy-subrc = 0.
Get shipper account
SELECT eikto INTO v_eikto
FROM knvv
WHERE kunnr = v_kunag.
ENDSELECT.
IF sy-subrc = 0.
*append the field to the out_tab1 printing output
wa_tab1-name = 'VKNN-EIKTO'.
wa_tab1-value = v_eikto.
APPEND wa_tab1 TO out_tab1.
ENDIF.
ENDIF.
ENDFORM. "shipper_acct
***********DEVK9A0IK7 starts here
*&----
*
*& Form net_weight
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
form net_weight .
CLEAR: v_btgew.
SELECT SINGLE ntgew
gewei
FROM likp
INTO (v_netwt, v_unit)
WHERE vbeln = vbpla-vbeln.
if v_unit = 'G'.
v_netwt = v_netwt / 1000.
v_unit = 'KG'.
endif.
PERFORM set_textsymbol USING '&NET_WEIGHT&'
v_netwt.
PERFORM set_textsymbol USING '&NET_WEIGHT_UNIT&'
v_unit.
endform. " net_weight
***********DEVK9A0IK7 ends here
*&----
*
*& Form item_list
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
form item_list.
move vbplp-posnr to wa_item-posnr1.
*move material to wa_itab1-material1.
move vbplp-brgew to wa_item-brgew1.
move vbplp-vemeh to wa_item-vemeh1.
*move item_weight to wa_itab1-item_weight1.
*move gross_weight_unit to wa_itab1-gross_weight_unit1.
move v_arktx to wa_item-arktx1.
if v_kdmat <> ' '.
move v_kdmat to wa_item-material1.
else.
move vbplp-matnr to wa_item-material1.
endif.
wa_item-vboxcnt = 1.
append wa_item TO it_item.
CLEAR : wa_item1, wa_item.
it_item1[] = it_item[].
REFRESH it_item[].
break-point.
endform. " item_list
*&----
*
*& Form TOTAL_WEIGHT
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
form TOTAL_WEIGHT .
LOOP AT it_item1 into wa_item1.
READ TABLE it_item INTO wa_item WITH KEY material1 = wa_item1-material1 posnr1 = wa_item1-posnr1.
IF sy-subrc NE 0.
APPEND wa_item1 TO it_item.
ELSE.
wa_item1-brgew1 = wa_item1-brgew1 + wa_item-brgew1.
Wa_item1-vboxcnt = wa_item1-vboxcnt + wa_item-vboxcnt.
MODIFY it_item FROM wa_item1 TRANSPORTING brgew1 vboxcnt
WHERE material1 = wa_item1-material1
AND posnr1 = wa_item1-posnr1.
ENDIF.
ENDLOOP.
endform. " TOTAL_WEIGHT
2007 Oct 24 6:00 AM
the Logic to be added is this
b. Remove the carton ID & box ID from the print out, the line item should just print the total delivery quantity, do not split the printing by different box ID or carton ID.
i. Delivery Item= LIPS-POSNR
ii. Delivery Qty for Item = LIPSD-G_LFIMG= LIPSD-PIKMG
c. Add Total Boxes for each item, this should be a calculation field for each material HUMV4-MATNR, count how many handling unit VEKPVB-EXIDV has been used to pack the same material , output the total boxes for each delivery item.
d. Add Gross Weight for each item , retrieve data from LIPS-BRGEW
e. Add Net weight to the print out, below the gross weight retrieve data from LIKP-NTGEW