‎2007 Jun 08 3:21 AM
hi friends,
is it possible to generate a spool request with out pop-up box..
example : ihave one program which generate a spool request to another program and this program generates a spool request to another program.....
advance thanks ..... give answers for add the points
‎2007 Jun 08 3:25 AM
in the structure field name will ssfcompop-tdnoprev = 'X',
i am passing this one to smartofmr
‎2007 Jun 08 3:27 AM
hi seshu,
SUBMIT YHFDBI88 TO SAP-SPOOL
AND RETURN
WITH SELECTION-TABLE SELTAB
IMMEDIATELY ' '
SAP COVER PAGE ' '
this code was used for spool request.....
‎2007 Jun 08 3:35 AM
hi
use without spool dypro to avoid popup
SUBMIT YHFDBI88 TO SAP-SPOOL
AND RETURN
WITH SELECTION-TABLE SELTAB
IMMEDIATELY ' '
SAP COVER PAGE ' '
WITHOUT SPOOL DYNPRO.
read into this to know more about submit to sap spool command
http://www.s001.org/ABAP-Hlp/abapsubmit_to_sap_spool.htm
if helpful, reward
Sathish. R
‎2007 Jun 08 3:42 AM
Check this program and i am using spool request without popup
======================================================================
*
Program Name : ZSD_CUSTOMER_PACKING_SLIP *
REPORT zsd_customer_packing_slip LINE-SIZE 255
NO STANDARD PAGE HEADING
MESSAGE-ID zwave.
----
SAP Table definitions
----
TABLES: vbkd,
konv,
stxl,
tsp01.
----
FD Table definitions
----
TABLES: zwvbak.
----
Data declaration *
----
DATA: BEGIN OF t_header OCCURS 0.
INCLUDE STRUCTURE zsdinvhead.
DATA: END OF t_header.
DATA: BEGIN OF t_tline OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF t_tline.
DATA: BEGIN OF t_partner OCCURS 0,
vbeln LIKE vbak-vbeln,
parvw LIKE vbpa-parvw,
kunnr LIKE vbpa-kunnr,
adrnr LIKE vbpa-adrnr,
END OF t_partner.
DATA: BEGIN OF t_price OCCURS 0,
vbeln LIKE vbak-vbeln,
seq(2) TYPE n,
condition(132),
price LIKE konv-kwert,
END OF t_price.
DATA: BEGIN OF t_vbfa OCCURS 0,
vbelv LIKE vbfa-vbelv,
posnv LIKE vbfa-posnv,
vbeln LIKE vbfa-vbeln,
posnn LIKE vbfa-posnn,
vbtyp_n LIKE vbfa-vbtyp_n,
END OF t_vbfa.
DATA: BEGIN OF t_docflow OCCURS 0,
ovbeln LIKE vbap-vbeln,
oposnr LIKE vbap-posnr,
dvbeln LIKE lips-vbeln,
dposnr LIKE lips-posnr,
ivbeln LIKE vbrp-vbeln,
iposnr LIKE vbrp-posnr,
END OF t_docflow.
DATA: BEGIN OF t_inv OCCURS 0,
zztrkno LIKE t_header-zztrkno,
zzstopseq(5) TYPE n," like t_header-zzstopseq,
zlast_name(40) TYPE c,
vbelv LIKE vbfa-vbelv,
short_ship TYPE c,
END OF t_inv.
DATA: BEGIN OF t_inv1 OCCURS 0,
zztrkno LIKE t_header-zztrkno,
zzmodel LIKE zwvbak-zzmodel,
END OF t_inv1.
DATA: BEGIN OF t_credit OCCURS 0,
zzdesc LIKE zcustomercredits-zzdesc,
vbeln LIKE zcustomercredits-vbeln,
zzseq LIKE zcustomercredits-zzseq,
vbeln_vf LIKE zcustomercredits-vbeln_vf,
*--Changes by ponnu - FD Make Good order - packing Slip Bug
zzplan_alloc_amt LIKE zcustomercredits-zzplan_alloc_amt,
zzact_alloc_amt LIKE zcustomercredits-zzact_alloc_amt,
END OF t_credit.
DATA: BEGIN OF t_vbap OCCURS 0,
kdmat LIKE vbap-kdmat,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
kwmeng LIKE vbap-kwmeng,
vrkme LIKE vbap-vrkme,
matnr LIKE vbap-matnr,
netwr LIKE vbap-netwr,
pstyv LIKE vbap-pstyv,
arktx LIKE vbap-arktx,
END OF t_vbap.
*--- internal tables used for credit card data extraction
DATA: BEGIN OF t_vbak OCCURS 0,
vbeln LIKE vbak-vbeln,
bname LIKE vbak-bname, " Name on Credit Card
mahdt LIKE vbak-mahdt, " Credit Card Exp. Date
bstzd LIKE vbak-bstzd, " Credit Card Type
knumv LIKE vbak-knumv. " Condition
DATA: END OF t_vbak.
DATA: BEGIN OF t_vbkd OCCURS 0,
vbeln LIKE vbkd-vbeln,
bstkd_e LIKE vbkd-bstkd_e. " Credit Card Number
DATA: END OF t_vbkd.
DATA: BEGIN OF t_box OCCURS 0,
vbeln LIKE zsdcarton_item-vbeln,
posnr LIKE zsdcarton_item-posnr,
zzvbeln_vl LIKE zsdcarton_item-zzvbeln_vl,
zzposnr_vl LIKE zsdcarton_item-zzposnr_vl,
zzcarton LIKE zsdcarton_item-zzcarton,
zzserial LIKE zsdcarton_item-zzserial,
zzexpqty LIKE zsdcarton_item-zzexpqty,
zzpckqty LIKE zsdcarton_item-zzpckqty,
zzuom LIKE zsdcarton_item-zzuom,
ntgew LIKE zsdcarton_item-ntgew,
gewei LIKE zsdcarton_item-gewei,
END OF t_box.
DATA: BEGIN OF t_zrfltap OCCURS 0,
zzvbeln_va LIKE zrfltap-zzvbeln_va,
zzvbeln_vl LIKE zrfltap-zzvbeln_vl,
END OF t_zrfltap.
DATA: BEGIN OF t_wave OCCURS 0,
zzswaveno LIKE zwvbak-zzswaveno,
zztrkno LIKE zwvbak-zztrkno,
END OF t_wave.
DATA: t_item LIKE zsdinvtab OCCURS 0 WITH HEADER LINE.
DATA: t_beer_item LIKE zsdinvtab OCCURS 0 WITH HEADER LINE.
DATA: t_wine_item LIKE zsdinvtab OCCURS 0 WITH HEADER LINE.
DATA: t_adrc LIKE adrc OCCURS 0 WITH HEADER LINE,
t_mara LIKE mara OCCURS 0 WITH HEADER LINE,
t_konv LIKE konv OCCURS 0 WITH HEADER LINE,
t_lips LIKE lips OCCURS 0 WITH HEADER LINE,
t_ztruck LIKE ztruck OCCURS 0 WITH HEADER LINE,
t_lips_tmp LIKE t_lips OCCURS 0 WITH HEADER LINE,
t_vbap_dup LIKE t_vbap OCCURS 0 WITH HEADER LINE,
t_zwcspacks LIKE zwcspacks OCCURS 0 WITH HEADER LINE,
t_zmarketing LIKE zmarketing OCCURS 0 WITH HEADER LINE,
t_status LIKE zfdswstatus OCCURS 0 WITH HEADER LINE.
Variables
DATA: d_old_value LIKE plfh-mgvgw,
d_new_value LIKE plfh-mgvgw,
d_price LIKE konv-kwert,
d_name LIKE thead-tdname.
DATA: d_lines TYPE i,
d_num_inv(5) TYPE c,
d_unit(2) TYPE c.
DATA: d_email_subject(100) TYPE c,
d_char_text(20) TYPE c.
DATA: d_del_charge,
d_tax_del,
d_initial,
d_beer.
Constants
CONSTANTS: c_usd LIKE bsid-waers VALUE 'USD'.
Ranges
RANGES: r_text FOR soli-line.
----
Selection Screen *
----
SELECTION-SCREEN BEGIN OF BLOCK b00 WITH FRAME TITLE text-b00.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
PARAMETERS: p_werks LIKE zwvbak-werks DEFAULT '1000' OBLIGATORY,
p_vdatu LIKE zwvbak-vdatu OBLIGATORY DEFAULT sy-datum,
p_form(30) DEFAULT 'ZSD_CUSTOMER_PACKING_SLIP'.
SELECTION-SCREEN END OF BLOCK b01.
SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-b02.
SELECT-OPTIONS: s_wave FOR zwvbak-zzswaveno,
s_trkno FOR zwvbak-zztrkno OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b02.
SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE text-b03.
SELECT-OPTIONS: s_vbeln FOR zwvbak-vbeln.
SELECT-OPTIONS: s_bstnk FOR zwvbak-bstnk.
SELECT-OPTIONS: s_dlvry FOR zwvbak-vbeln.
PARAMETERS : p_toler LIKE lips-lfimg DEFAULT '0.01'
VISIBLE LENGTH 5 NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b03.
SELECTION-SCREEN BEGIN OF BLOCK b09 WITH FRAME TITLE text-b09.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_sship AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(40) text-006.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b09.
SELECTION-SCREEN BEGIN OF BLOCK b10 WITH FRAME TITLE text-b10.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_stop AS CHECKBOX DEFAULT ' '.
SELECTION-SCREEN COMMENT 3(40) text-008.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b10.
SELECTION-SCREEN BEGIN OF BLOCK b08 WITH FRAME TITLE text-b08.
SELECTION-SCREEN BEGIN OF BLOCK b05 WITH FRAME TITLE text-b05.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_stdmdl AS CHECKBOX DEFAULT 'X' .
SELECTION-SCREEN: COMMENT 3(40) text-010.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 46(40) text-011.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN: COMMENT 46(40) text-012.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b05.
SELECTION-SCREEN BEGIN OF BLOCK b06 WITH FRAME TITLE text-b06.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_depot AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(40) text-013.
SELECTION-SCREEN POSITION 43.
*parameters: p_md3 radiobutton group g2.
*selection-screen: comment 46(40) text-011.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 43.
*arameters: p_md4 radiobutton group g2 default 'X' .
*selection-screen: comment 46(40) text-012.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b06.
SELECTION-SCREEN BEGIN OF BLOCK b07 WITH FRAME TITLE text-b07.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_othmod AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(40) text-014.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md5 RADIOBUTTON GROUP g3.
SELECTION-SCREEN: COMMENT 46(40) text-011.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md6 RADIOBUTTON GROUP g3 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 46(40) text-012.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b07.
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE text-b07.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_cos AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 3(40) text-015.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md7 RADIOBUTTON GROUP g4.
SELECTION-SCREEN: COMMENT 46(40) text-011.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 43.
PARAMETERS: p_md8 RADIOBUTTON GROUP g4 DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 46(40) text-012.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b11.
SELECTION-SCREEN END OF BLOCK b08.
SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE text-b04.
PARAMETERS: p_dest LIKE ssfcompop-tddest OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK b04.
SELECTION-SCREEN END OF BLOCK b00.
SELECT-OPTIONS: s_obj FOR stxl-tdname NO-DISPLAY,
s_dis FOR konv-kschl NO-DISPLAY.
----
INITIALIZATION *
----
INITIALIZATION.
SELECT SINGLE spld INTO p_dest
FROM usr01
WHERE bname EQ sy-uname.
----
Validate Selection Screen
----
AT SELECTION-SCREEN.
IF sy-batch EQ space.
User "SHIPPING" cannot run this program in foreground
IF sy-ucomm = 'ONLI' AND
sy-uname = 'SHIPPING'.
MESSAGE e000(zwave) WITH
'Program can O N L Y be run in Background mode!'.
STOP.
ENDIF.
ENDIF.
----
Main Program *
----
START-OF-SELECTION.
*--- Extract data from tables.
PERFORM extract_data.
DESCRIBE TABLE t_inv LINES sy-tfill.
IF sy-tfill LE 0.
MESSAGE e000(zwave) WITH 'Error --> No Orders Found!!!'.
ENDIF.
*--- Validate Deliveries..check if delivery quantity matches with
*--- carton item table
PERFORM validate_deliveries.
IF NOT r_text[] IS INITIAL AND
p_stop = 'X'.
LOOP AT r_text.
WRITE:/ r_text-low.
ENDLOOP.
PERFORM send_email.
PERFORM udate_truck_table.
REFRESH r_text.
CLEAR r_text.
stop.
ENDIF.
*--- Process Internal Tables.
PERFORM process_itabs.
*--- Check for invoices with -ve value
PERFORM check_negatives.
IF NOT r_text[] IS INITIAL AND
p_stop = 'X'.
LOOP AT r_text.
WRITE:/ r_text-low.
ENDLOOP.
PERFORM send_email.
PERFORM udate_truck_table.
REFRESH r_text.
CLEAR r_text.
stop.
ENDIF.
*--- Generate Invoices.
PERFORM generate_invoice.
DESCRIBE TABLE t_inv LINES d_num_inv.
WRITE:/ d_num_inv,
' Invoice(s) Printed...'.
PERFORM udate_truck_table.
PERFORM send_email.
----
End of selection *
----
END-OF-SELECTION.
************************************************************************
S U B R O U T I N E S *
************************************************************************
&----
*& Form extract_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM extract_data.
DATA: t_konv_tmp LIKE konv OCCURS 0 WITH HEADER LINE.
CLEAR : t_wave, t_status, t_vbap_dup, t_lips_tmp.
REFRESH: t_wave, t_status, t_vbap_dup, t_lips_tmp.
<< Start insert >> RajS-02/17/2006
Pack complete validation must be done here at truck/wave level. This
is done to make to make sure trasportation department do not print
invoices before packing is complete for the truck/wave
Today, invoices for a truck - 3130 - were printed before carton item
table was populated
IF s_wave[] IS INITIAL.
SELECT DISTINCT zzswaveno zztrkno
INTO CORRESPONDING FIELDS OF TABLE t_wave
FROM zwvbak
WHERE werks = p_werks AND
vdatu = p_vdatu AND
zztrkno IN s_trkno.
SORT t_wave.
LOOP AT t_wave.
s_wave-sign = 'I'.
s_wave-option = 'EQ'.
s_wave-low = t_wave-zzswaveno.
APPEND s_wave.
CLEAR s_wave-low.
ENDLOOP.
ENDIF.
SELECT * FROM zfdswstatus
INTO TABLE t_status
WHERE werks = p_werks AND
vdatu = p_vdatu AND
zzswaveno IN s_wave.
LOOP AT t_status WHERE pack_complete <> 'X'.
READ TABLE t_wave WITH KEY zzswaveno = t_status-zzswaveno.
IF sy-subrc = 0.
SHIFT t_wave-zztrkno LEFT DELETING LEADING '0'.
MESSAGE e000 WITH 'Packing NOT complete for Truck'
t_wave-zztrkno.
ELSE.
SHIFT t_status-zzswaveno LEFT DELETING LEADING '0'.
MESSAGE e000 WITH 'Packing NOT complete for Wave'
t_status-zzswaveno.
ENDIF.
ENDLOOP.
<< End insert >> RajS-02/17/2006
get orders for the given selection
SELECT vbeln bstnk vdatu zzdstime zzdetime zztrkno zzstopseq zzmodel
INTO CORRESPONDING FIELDS OF TABLE t_header
FROM zwvbak WHERE werks EQ p_werks AND
vdatu EQ p_vdatu AND
vbeln IN s_vbeln AND
zzswaveno IN s_wave AND
zztrkno IN s_trkno AND
bstnk IN s_bstnk
ORDER BY VBELN.
IF sy-subrc NE 0.
MESSAGE e000(zwave) WITH 'No Orders in Wave Tables for Selection!'.
ENDIF.
filter the delivery models as per selection screen
IF p_cos NE 'X'.
DELETE t_header WHERE zzmodel = '004'.
ELSEIF p_stdmdl NE 'X'.
DELETE t_header WHERE zzmodel = '003'.
ENDIF.
IF p_depot NE 'X'.
DELETE t_header WHERE zzmodel = '002'.
ENDIF.
IF p_othmod NE 'X'.
DELETE t_header WHERE zzmodel = '001'.
ENDIF.
IF NOT s_dlvry IS INITIAL.
SELECT DISTINCT zzvbeln_va zzvbeln_vl INTO TABLE t_zrfltap
FROM zrfltap
WHERE werks EQ p_werks AND
vdatu EQ p_vdatu AND
zzswaveno IN s_wave AND
zztrkno IN s_trkno AND
zzvbeln_vl IN s_dlvry AND
zzvbeln_va IN s_vbeln.
CHECK sy-subrc EQ 0.
REFRESH s_vbeln.
LOOP AT t_zrfltap.
s_vbeln-sign = 'I'.
s_vbeln-option = 'EQ'.
s_vbeln-low = t_zrfltap-zzvbeln_va.
APPEND s_vbeln.
CLEAR s_vbeln.
ENDLOOP.
SORT s_vbeln.
DELETE ADJACENT DUPLICATES FROM s_vbeln.
REFRESH t_header.
SELECT vbeln bstnk vdatu zzdstime zzdetime zztrkno zzstopseq
INTO TABLE t_header
FROM zwvbak WHERE vbeln IN s_vbeln AND
zzswaveno IN s_wave AND
zztrkno IN s_trkno AND
vdatu EQ p_vdatu AND
werks EQ p_werks AND
bstnk IN s_bstnk
ORDER BY VBELN.
CHECK sy-subrc EQ 0.
ENDIF.
IF s_trkno IS INITIAL.
LOOP AT t_header.
READ TABLE s_trkno WITH KEY low = t_header-zztrkno.
IF sy-subrc NE 0.
s_trkno-sign = 'I'.
s_trkno-option = 'EQ'.
s_trkno-low = t_header-zztrkno.
APPEND s_trkno.
CLEAR s_trkno.
ENDIF.
ENDLOOP.
ENDIF.
*--- Get Credit Card Information (Not stored in SAP standard fields)
REFRESH: t_vbak, t_vbkd.
SELECT vbeln bname mahdt bstzd knumv
INTO TABLE t_vbak
FROM vbak FOR ALL ENTRIES IN t_header
WHERE vbeln = t_header-vbeln.
*
SELECT vbeln bstkd_e INTO TABLE t_vbkd
FROM vbkd FOR ALL ENTRIES IN t_header
WHERE vbeln = t_header-vbeln
AND posnr = '0000'.
SORT: t_vbak, t_vbkd.
LOOP AT t_header.
READ TABLE t_vbak WITH KEY vbeln = t_header-vbeln.
IF sy-subrc = 0.
t_header-zccard_name = t_vbak-bname.
t_header-zccard_type = t_vbak-bstzd.
t_header-zccard_exp_date = t_vbak-mahdt.
ENDIF.
READ TABLE t_vbkd WITH KEY vbeln = t_header-vbeln.
IF sy-subrc = 0.
t_header-zccard_num = t_vbkd-bstkd_e.
ENDIF.
get truckno & stop seq # from zwvbak
SELECT SINGLE * FROM zwvbak
WHERE vbeln = t_header-vbeln.
IF sy-subrc EQ 0.
t_header-zztrkno = zwvbak-zztrkno.
t_header-zzstopseq = zwvbak-zzstopseq.
ENDIF.
MODIFY t_header.
CLEAR t_header.
ENDLOOP.
*--- Get Sales Order Line Items.
SELECT kdmat vbeln posnr kwmeng vrkme matnr netwr pstyv arktx
INTO TABLE t_vbap
FROM vbap
FOR ALL ENTRIES IN t_header
WHERE vbeln EQ t_header-vbeln.
t_vbap_dup[] = t_vbap[].
SORT : t_vbap,
t_vbap_dup.
*--- Get Carton Details.
SELECT DISTINCT vbeln posnr zzvbeln_vl zzposnr_vl zzcarton zzserial
zzexpqty zzpckqty zzuom ntgew gewei
INTO TABLE t_box
FROM zsdcarton_item FOR ALL ENTRIES IN t_header
WHERE werks EQ p_werks AND
vdatu EQ p_vdatu AND
zztrkno EQ t_header-zztrkno AND
vbeln EQ t_header-vbeln.
SORT: t_box.
*--- Document Flow
SELECT vbelv posnv vbeln posnn vbtyp_n INTO TABLE t_vbfa
FROM vbfa
FOR ALL ENTRIES IN t_header
WHERE vbelv EQ t_header-vbeln.
*--- List of Orders.
LOOP AT t_header.
t_inv-zztrkno = t_header-zztrkno.
t_inv-zzstopseq = t_header-zzstopseq.
t_inv-vbelv = t_header-vbeln.
APPEND t_inv.
CLEAR t_inv.
READ TABLE t_inv1 WITH KEY zztrkno = t_header-zztrkno.
IF sy-subrc NE 0.
t_inv1-zztrkno = t_header-zztrkno.
t_inv1-zzmodel = t_header-zzmodel.
APPEND t_inv1.
CLEAR t_inv1.
ENDIF.
ENDLOOP.
CLEAR d_lines.
DESCRIBE TABLE t_inv LINES d_lines.
IF d_lines LE 0.
MESSAGE e000(zwave) WITH 'Error --> No Invoices Found!!!'.
ENDIF.
*--- Build Document Flow Table.
CLEAR: t_docflow.
REFRESH: t_docflow.
SORT t_vbap.
LOOP AT t_vbap.
CLEAR t_docflow.
t_docflow-ovbeln = t_vbap-vbeln.
t_docflow-oposnr = t_vbap-posnr.
*--- Delivery
READ TABLE t_vbfa WITH KEY vbelv = t_vbap-vbeln
posnv = t_vbap-posnr
vbtyp_n = 'J'.
IF sy-subrc EQ 0.
t_docflow-dvbeln = t_vbfa-vbeln.
t_docflow-dposnr = t_vbfa-posnn.
ENDIF.
APPEND t_docflow.
ENDLOOP.
*--- Partner Functions.... from sales order
SELECT vbeln parvw kunnr adrnr
INTO TABLE t_partner
FROM vbpa
FOR ALL ENTRIES IN t_inv
WHERE vbeln EQ t_inv-vbelv AND
posnr EQ '000000'.
IF sy-subrc EQ 0.
SELECT * FROM adrc INTO TABLE t_adrc
FOR ALL ENTRIES IN t_partner
WHERE addrnumber = t_partner-adrnr.
LOOP AT t_inv.
READ TABLE t_partner WITH KEY vbeln = t_inv-vbelv
parvw = 'WE'.
IF sy-subrc EQ 0.
READ TABLE t_adrc WITH KEY addrnumber = t_partner-adrnr.
IF sy-subrc EQ 0.
t_inv-zlast_name = t_adrc-name1.
REPLACE '' WITH '@@' INTO t_inv-zlast_name.
SEARCH t_inv-zlast_name FOR '@@'.
IF sy-subrc EQ 0.
ADD 2 TO sy-fdpos.
t_inv-zlast_name = t_inv-zlast_name+sy-fdpos.
CONDENSE t_inv-zlast_name.
TRANSLATE t_inv-zlast_name(1) TO UPPER CASE.
ENDIF.
MODIFY t_inv.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
*--- Get Condition records.
SELECT * INTO TABLE t_konv
FROM konv
FOR ALL ENTRIES IN t_vbak
WHERE knumv EQ t_vbak-knumv.
*--- get the web overwritten PR00 price from conditions table.
LOOP AT t_konv.
IF t_konv-kschl = 'PR00'.
MOVE-CORRESPONDING t_konv TO t_konv_tmp.
APPEND t_konv_tmp.
CLEAR t_konv_tmp.
ENDIF.
AT END OF kposn.
DESCRIBE TABLE t_konv_tmp LINES sy-tfill.
IF sy-tfill GT 1.
SORT t_konv_tmp BY zaehk DESCENDING.
LOOP AT t_konv_tmp.
IF sy-tabix NE 1.
READ TABLE t_konv WITH KEY knumv = t_konv_tmp-knumv
kposn = t_konv_tmp-kposn
stunr = t_konv_tmp-stunr
zaehk = t_konv_tmp-zaehk.
IF sy-subrc EQ 0.
DELETE t_konv INDEX sy-tabix.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
REFRESH t_konv_tmp.
CLEAR t_konv_tmp.
ENDAT.
ENDLOOP.
*--- Get Customer Credits.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE t_credit
FROM zcustomercredits
FOR ALL ENTRIES IN t_header
WHERE vbeln EQ t_header-vbeln.
*--- Get Delivery Line Item information.
SELECT * FROM lips
INTO TABLE t_lips
FOR ALL ENTRIES IN t_docflow
WHERE vbeln EQ t_docflow-dvbeln
AND posnr EQ t_docflow-dposnr.
t_lips_tmp[] = t_lips[].
SORT t_lips_tmp.
*--- Get pack messages received from WCS.
SELECT * FROM zwcspacks
INTO TABLE t_zwcspacks
FOR ALL ENTRIES IN t_docflow
WHERE dorder EQ t_docflow-dvbeln AND
dline EQ t_docflow-dposnr.
*-- Fetch Active Marketing materials.
SELECT * FROM zmarketing
INTO TABLE t_zmarketing
WHERE werks = p_werks
AND zzactive = 'X'.
SORT t_vbap BY matnr.
SELECT * FROM mara
APPENDING TABLE t_mara
FOR ALL ENTRIES IN t_vbap
WHERE matnr = t_vbap-matnr
AND ( matkl LIKE 'A%'
OR matkl LIKE 'B%'
OR matkl LIKE 'W%' ).
ENDFORM. " extract_data
&----
*& Form process_items
&----
text
----
-->P_T_INV_VBELN text
----
FORM process_items USING p_ord.
DATA: tmp_vbap LIKE t_vbap OCCURS 0 WITH HEADER LINE.
DATA: tmp_thickness LIKE t006a-mseht.
DATA: BEGIN OF tmp_vbkd OCCURS 0,
vbeln LIKE vbkd-vbeln,
posnr LIKE vbkd-posnr,
END OF tmp_vbkd.
DATA: w_ord_ratio TYPE p DECIMALS 2.
DATA: wa_mtart LIKE mara-mtart.
DATA: wa_matnr LIKE mara-matnr.
CLEAR : tmp_vbap, tmp_vbkd, t_inv-short_ship.
REFRESH: tmp_vbap, tmp_vbkd.
LOOP AT t_vbap WHERE vbeln EQ p_ord.
tmp_vbap = t_vbap.
APPEND tmp_vbap.
ENDLOOP.
SORT : tmp_vbap.
LOOP AT tmp_vbap.
CLEAR : tmp_vbkd,
t_vbap_dup,
t_lips_tmp,
vbkd,
w_ord_ratio.
REFRESH: tmp_vbkd.
Get ship-to-party PO item number for the material
SELECT SINGLE posex_e INTO vbkd-posex_e
FROM vbkd
WHERE vbeln = tmp_vbap-vbeln AND
posnr = tmp_vbap-posnr.
Ignore header discount/delivery charges as they will be shown
at the header level with subtotals.
IF tmp_vbap-matnr = '000000000000009999' OR
tmp_vbap-matnr = '000000000000008888' OR
tmp_vbap-matnr = '000000000000008889' OR
tmp_vbap-matnr = '000000000000001111' OR
tmp_vbap-matnr = '000000000000002222' OR
tmp_vbap-matnr = '000000000000003333' OR
tmp_vbap-matnr = '000000000000004444' OR
tmp_vbap-matnr = '000000000000005555' OR
tmp_vbap-pstyv = 'ZPP1' OR "Ignore PP sub-items
( tmp_vbap-pstyv <> 'Z000' AND NOT vbkd-posex_e IS INITIAL ).
CONTINUE.
ENDIF.
t_vbap = tmp_vbap.
READ TABLE t_vbak WITH KEY vbeln = tmp_vbap-vbeln.
CHECK sy-subrc EQ 0.
ignore marketing materials.
READ TABLE t_zmarketing WITH KEY matnr = tmp_vbap-matnr.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.
*--- ignore Beer items
CLEAR: t_mara.
READ TABLE t_mara WITH KEY matnr = tmp_vbap-matnr.
IF sy-subrc EQ 0. CONTINUE. ENDIF.
CLEAR t_item.
t_item-kdmat = tmp_vbap-kdmat.
t_item-vbeln = tmp_vbap-vbeln.
t_item-posnr = tmp_vbap-posnr.
t_item-o_qty = tmp_vbap-kwmeng.
t_item-o_uom = tmp_vbap-vrkme.
*--- Material Desc.
CLEAR: t_item-material, d_name.
CONCATENATE tmp_vbap-vbeln
tmp_vbap-posnr
INTO d_name.
Get Web SKU Description from the Sales Order.
PERFORM get_descripion USING 'ZL01'.
LOOP AT t_tline.
IF t_item-material EQ space.
MOVE t_tline-tdline TO t_item-material.
ELSE.
CONCATENATE t_item-material t_tline-tdline
INTO t_item-material SEPARATED BY space.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
SELECT SINGLE maktx INTO t_item-material FROM makt
WHERE matnr EQ tmp_vbap-matnr AND
spras EQ 'E'.
ELSE.
SEARCH t_item-material FOR '|'.
IF sy-subrc EQ 0.
t_item-material = t_item-material+0(sy-fdpos).
ENDIF.
ENDIF.
*--- Options
PERFORM get_descripion USING 'ZL02'.
IF sy-subrc EQ 0.
CLEAR tmp_thickness.
IF t_item-o_uom NE 'EA'.
SELECT SINGLE mseht INTO tmp_thickness FROM t006a
WHERE spras = 'E' AND
msehi = t_item-o_uom.
ENDIF.
IF tmp_thickness IS INITIAL.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_item-material ' (' t_tline-tdline
INTO t_item-material.
ELSE.
CONCATENATE t_item-material t_tline-tdline
INTO t_item-material.
ENDIF.
AT LAST.
CONCATENATE t_item-material ')'
INTO t_item-material.
ENDAT.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_item-material ' (' tmp_thickness ', '
t_tline-tdline INTO t_item-material.
ELSE.
CONCATENATE t_item-material t_tline-tdline
INTO t_item-material.
ENDIF.
ELSE.
IF sy-tabix EQ 1.
CONCATENATE t_item-material ' (' tmp_thickness
t_tline-tdline INTO t_item-material.
ELSE.
CONCATENATE t_item-material t_tline-tdline
INTO t_item-material.
ENDIF.
ENDIF.
AT LAST.
CONCATENATE t_item-material ')'
INTO t_item-material.
ENDAT.
ENDLOOP.
ENDIF.
ENDIF.
*--- Final Weight.
CLEAR: t_docflow, t_lips.
READ TABLE t_docflow WITH KEY ovbeln = t_item-vbeln
oposnr = t_item-posnr.
IF sy-subrc EQ 0.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
*--- Determine if Base Unit is MASS...
CALL FUNCTION 'Z_FD_CHECK_UOM_IS_MASS'
EXPORTING
in_uom = t_lips-meins
EXCEPTIONS
not_mass = 1
other = 2
invalid_uom = 3
OTHERS = 4.
IF sy-subrc EQ 0.
t_item-weight = t_lips-lgmng.
t_item-w_uom = t_lips-meins.
ENDIF.
ENDIF.
ENDIF.
*--- Delivered Qty.
CLEAR: t_item-d_qty, sy-subrc.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
CLEAR d_unit.
IF t_lips-meins = t_lips-vrkme.
IF t_lips-meins = 'LB'.
d_unit = 'lb'.
ENDIF.
ENDIF.
<< Start insert >> Rajs-10/23/03
This part is developed specially for Thanks-Giving promotion package.
The dummy header material has 'Z000' as item category and the main
item of the package has 'ZTMI' as its item category. All the materials
contained in this package has ship-to-party PO item field populated.
The invoice will have only the header material displayed and not other
materials. But the actual delivery quantity is derived from the main
item of the package. Pricing for this package is derived from dummy
header material
IF tmp_vbap-pstyv = 'Z000'.
Get all the items that are in the same package
SELECT vbeln posnr INTO CORRESPONDING FIELDS OF TABLE tmp_vbkd
FROM vbkd
WHERE vbeln = tmp_vbap-vbeln AND
posex_e = vbkd-posex_e.
LOOP AT tmp_vbkd.
Get the main item with in the package
READ TABLE t_vbap_dup WITH KEY vbeln = tmp_vbkd-vbeln
posnr = tmp_vbkd-posnr
pstyv = 'ZTMI'.
IF sy-subrc = 0.
Get the ratio of header material to main item quantity. We need this
to adjust the header material delivery quantity and price based on
the actual qty delivered. Header material qty in delivery will always
be the same as the order qty!! Need to get the actual delivered qty
from main item of the package!!
w_ord_ratio = ( tmp_vbap-kwmeng / t_vbap_dup-kwmeng ).
EXIT.
ENDIF.
CLEAR: tmp_vbkd.
ENDLOOP.
IF sy-subrc = 0.
Get delivery item number of the main item
READ TABLE t_docflow WITH KEY ovbeln = t_vbap_dup-vbeln
oposnr = t_vbap_dup-posnr.
IF sy-subrc = 0.
Fetch details of main item in the delivery
READ TABLE t_lips_tmp WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
IF t_lips_tmp-lfimg = t_vbap_dup-kwmeng.
t_item-d_qty = t_item-d_qty + t_lips-lfimg.
If delivery qty of main item (ZTMI) is zero
ELSEIF t_lips_tmp-lfimg IS INITIAL.
CLEAR t_lips-lfimg.
t_item-d_qty = t_item-d_qty + t_lips-lfimg.
If the order qty and delivery qty of the main item is not the same...
ELSE.
t_lips-lfimg = t_lips_tmp-lfimg * w_ord_ratio.
t_item-d_qty = t_item-d_qty + t_lips-lfimg.
ENDIF.
t_item-d_uom = t_lips-vrkme.
ENDIF.
ENDIF.
ENDIF.
<< Start insert >> Rajs-11/29/2004
Packing slip is always printed after executing the pack program in SAP
Actual delivery quantity of header item is updated by this time
We can get rid of the above Thanx Giving logic and replace it with the
below Part Platter logic!!
ELSEIF tmp_vbap-pstyv = 'ZPP0'.
t_item-d_qty = t_lips-lfimg.
<< End insert >>
ELSE.
LOOP AT t_box WHERE vbeln = tmp_vbap-vbeln AND
posnr = tmp_vbap-posnr.
if t_box-ntgew ne space.
IF d_unit = 'lb'.
t_item-d_qty = t_item-d_qty + t_box-ntgew.
t_item-d_uom = t_box-gewei.
ELSE.
t_item-d_qty = t_item-d_qty + t_box-zzpckqty.
t_item-d_uom = t_box-zzuom.
ENDIF.
ENDLOOP.
ENDIF.
*--- Ignore the delivery pass materials (material Type - ZMKT)
*--- Remember Delivery Pass is not a pickable item so the t_box-zzpckqty
*--- will always be zero so we need to populate incase of Delivery pass
*--- Check the material first.
CLEAR wa_matnr.
SELECT SINGLE matnr INTO wa_matnr FROM vbap
WHERE vbeln = t_item-vbeln AND
posnr = t_item-posnr.
*--- Get the material type
CLEAR wa_mtart.
SELECT SINGLE mtart INTO wa_mtart FROM mara
WHERE matnr = wa_matnr.
IF wa_mtart = 'ZMKT'.
t_item-d_qty = t_lips-lfimg.
t_item-d_uom = t_lips-vrkme.
ENDIF.
*-- end of changs for delivery pass
ENDIF. " sy-subrc EQ 0.
*--- Check if the SKU is a Free sample item
CLEAR: t_konv.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = tmp_vbap-posnr
kschl = 'ZF11'.
IF sy-subrc EQ 0.
IF t_item-d_qty IS INITIAL.
CONTINUE.
ELSE.
t_item-kdmat = 'Free Samples'.
ENDIF.
ELSE.
*--- Unit Price.
PERFORM get_unit_price USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_item-unit_price
t_item-u_uom.
*--- Calculate Customization Price.
PERFORM calc_cust_price USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_item-cust_price.
*--- Calculate Item Net Price.
PERFORM calc_net_price USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_item-net_price.
*--- Determine if item is taxable.
PERFORM check_item_tax USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_item-tax_flag
t_item-disc_flag "031902
t_item-dep_flag.
*--- If Item is unavailable, overwrite department name.
*--- Ignore the delivery pass materials (material Type - ZMKT)
*--- Remember Delivery Pass is not a pickable item so the d_qty will
*--- always be zero
IF t_item-d_qty IS INITIAL.
**--- Check the material first.
CLEAR wa_matnr.
SELECT SINGLE matnr INTO wa_matnr FROM vbap
WHERE vbeln = t_item-vbeln AND
posnr = t_item-posnr.
**--- Get the material type
CLEAR wa_mtart.
SELECT SINGLE mtart INTO wa_mtart FROM mara
WHERE matnr = wa_matnr.
*
IF wa_mtart <> 'ZMKT'.
t_item-kdmat = 'Unavailable Items'.
t_inv-short_ship = 'X'.
ENDIF.
ENDIF.
ENDIF.
CLEAR: t_box.
READ TABLE t_box WITH KEY vbeln = t_item-vbeln
posnr = t_item-posnr.
IF sy-subrc EQ 0.
t_item-box = t_box-zzcarton.
ENDIF.
APPEND t_item.
ENDLOOP.
IF NOT t_inv-short_ship IS INITIAL.
MODIFY t_inv.
ENDIF.
ENDFORM. " process_items
&----
*& Form get_unit_price
&----
text
----
-->P_T_DOCFLOW_IVBELN text
-->P_T_DOCFLOW_IPOSNR text
<--P_T_ITEM_UNITPRICE text
----
FORM get_unit_price USING p_vbeln
p_posnr
CHANGING p_unitprice
p_uom.
CLEAR: p_unitprice, p_uom, t_konv.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'PR00'.
IF sy-subrc EQ 0.
p_unitprice = ( t_konv-kbetr / t_konv-kpein ).
p_uom = t_konv-kmein.
ENDIF.
ENDFORM. " get_unit_price
&----
*& Form calc_cust_price
&----
text
----
-->P_T_DOCFLOW_IVBELN text
-->P_T_DOCFLOW_IPOSNR text
<--P_T_ITEM_CUST_PRICE text
----
FORM calc_cust_price USING p_vbeln
p_posnr
CHANGING p_cust_price.
DATA: d_cust_price LIKE t_item-cust_price.
DATA: d_count LIKE t_item-cust_price.
CLEAR: p_cust_price, t_konv, d_cust_price,
d_count, d_old_value, d_new_value.
Condition type VA00 - Non Packaged (like Marinades) - Qty based
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'VA00'. " Non Pkgd item surcharge
d_cust_price = d_cust_price + t_konv-kbetr.
ENDLOOP.
IF sy-subrc EQ 0.
IF NOT t_item-weight IS INITIAL.
d_old_value = t_lips-lfimg.
d_new_value = ( t_lips-umvkz / t_lips-umvkn ) * d_old_value.
p_cust_price = ( d_new_value * d_cust_price ) + p_cust_price.
ELSE.
p_cust_price = p_cust_price + ( d_cust_price * t_item-d_qty ).
ENDIF.
ENDIF.
CLEAR: d_cust_price.
Condition type VA01 - Non Packaged (like Marinades) - % based
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'VA01'. " % based variants surcharge
p_cust_price = p_cust_price + t_konv-kbetr.
ENDLOOP.
IF sy-subrc EQ 0.
IF NOT t_item-weight IS INITIAL.
p_cust_price = p_cust_price + ( d_cust_price * t_item-weight ).
ELSE.
p_cust_price = p_cust_price + ( d_cust_price * t_item-d_qty ).
ENDIF.
ENDIF.
CLEAR: d_cust_price.
Condition type ZP00 - Packaged Price
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'ZP00'. " Pkgd item surcharge
p_cust_price = p_cust_price + t_konv-kwert.
ADD t_konv-kbetr TO d_cust_price .
ENDLOOP.
IF d_cust_price GT 0.
CLEAR d_count.
READ TABLE t_vbfa WITH KEY vbelv = p_vbeln
posnv = p_posnr.
IF sy-subrc EQ 0.
LOOP AT t_zwcspacks WHERE dorder = t_vbfa-vbeln AND
dline = t_vbfa-posnn.
IF t_zwcspacks-cartonid(2) <> 'SP'.
ADD t_zwcspacks-ppqty TO d_count.
ENDIF.
ENDLOOP.
IF d_count GT 0.
p_cust_price = p_cust_price + ( d_cust_price * d_count ).
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " calc_cust_price
&----
*& Form calc_net_price
&----
text
----
-->P_T_DOCFLOW_IVBELN text
-->P_T_DOCFLOW_IPOSNR text
<--P_T_ITEM_NET_PRICE text
----
FORM calc_net_price USING p_vbeln
p_posnr
CHANGING p_net_price.
CLEAR: t_konv, p_net_price, d_old_value, d_new_value.
*--- calculate the net price based on the actual weight or
*--- quantity as the case may be, times the unit price.
IF t_item-weight IS INITIAL OR
t_item-w_uom NE t_item-u_uom.
p_net_price = ( t_item-d_qty * t_item-unit_price ) +
t_item-cust_price.
ELSE.
d_old_value = t_lips-lfimg.
d_new_value = ( t_lips-umvkz / t_lips-umvkn ) * d_old_value.
p_net_price = ( d_new_value * t_item-unit_price ) +
t_item-cust_price.
ENDIF.
ENDFORM. " calc_net_price
&----
*& Form process_header
&----
text
----
-->P_T_INV_VBELN text
-->P_T_INV_VBELV text
----
FORM process_header USING p_ord.
DATA: tmp_credit LIKE t_credit OCCURS 0 WITH HEADER LINE,
tmp_konv LIKE t_konv OCCURS 0 WITH HEADER LINE,
tmp_seq(2) TYPE n,
d_credits LIKE tmp_credit-zzact_alloc_amt,
d_credits1 LIKE tmp_credit-zzact_alloc_amt,
d_credits LIKE tmp_credit-zzplan_alloc_amt,
d_credits1 LIKE tmp_credit-zzplan_alloc_amt,
tmp_total LIKE konv-kwert,
d_total LIKE konv-kwert,
d_skip TYPE c.
CLEAR: t_item, t_price, tmp_seq, d_beer.
*--- check if the invoice has beer.
LOOP AT t_vbap WHERE vbeln = p_ord.
READ TABLE t_mara WITH KEY matnr = t_vbap-matnr.
IF sy-subrc EQ 0.
d_beer = 'X'.
EXIT.
ENDIF.
ENDLOOP.
*--- SubTotal. (Non-Alcoholic)
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'SUBTOTAL(FreshDirect)'.
LOOP AT t_item WHERE vbeln EQ p_ord.
t_price-price = t_price-price + t_item-net_price.
ENDLOOP.
IF t_price-price GT 0.
APPEND t_price.
ENDIF.
*-- Build Internal table
CLEAR: t_price, tmp_konv, t_vbak.
REFRESH: tmp_konv.
READ TABLE t_vbak WITH KEY vbeln = p_ord.
IF sy-subrc EQ 0.
CLEAR: tmp_konv, t_konv.
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv.
tmp_konv = t_konv.
APPEND tmp_konv.
ENDLOOP.
ENDIF.
*--- Delivery Charges
CLEAR: t_price, tmp_konv, t_vbap, d_del_charge.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Delivery Charges ( + )'.
LOOP AT t_vbap WHERE matnr = '000000000000008888'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
IF sy-subrc EQ 0.
d_del_charge = 'X'.
APPEND t_price.
ENDIF.
ENDLOOP.
IF NOT d_del_charge IS INITIAL.
<< Start insert >> Rajs-02/11/2005
If at least one item in the order is taxable, tax on delivery charge
is applied
CLEAR d_tax_del.
LOOP AT t_item WHERE vbeln = p_ord AND
d_qty > '0.000' AND
tax_flag = 'T'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
d_tax_del = 'X'.
ELSE.
LOOP AT t_beer_item WHERE vbeln = p_ord AND
d_qty > '0.000' AND
tax_flag = 'T'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
d_tax_del = 'X'.
ELSE.
LOOP AT t_wine_item WHERE vbeln = p_ord AND
d_qty > '0.000' AND
tax_flag = 'T'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
d_tax_del = 'X'.
ENDIF.
ENDIF.
ENDIF.
<< Start change >> Rajs-10/04/2005
Because of raising fuel price, FD wants a fuel surcharge added to all
orders
CLEAR: t_price, tmp_konv, t_vbap.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Fuel surcharge ( + )'.
LOOP AT t_vbap WHERE matnr = '000000000000004444'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
CONDENSE t_vbap-arktx.
CONCATENATE t_vbap-arktx '( + )'
INTO t_price-condition SEPARATED BY space.
t_price-condition = t_vbap-arktx.
APPEND t_price.
ENDIF.
Calculate tax on Delivery and Surcharge
IF NOT d_tax_del IS INITIAL.
CLEAR: t_price, tmp_konv, t_vbap.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Tax on Delivery ( + )'.
LOOP AT t_vbap WHERE matnr = '000000000000008888' AND
vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'ZT01' AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND t_price.
ENDIF.
ENDLOOP.
Tax on fuel surcharge is accumulated to "Tax on delivery" here if
atleast one item in the order is taxable
CLEAR: tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000004444' AND
vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'ZT01' AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
IF sy-subrc EQ 0.
*-- Bug fix - Delivery tax missing in Packing slip - Ponnu 10/18/06
MODIFY t_price TRANSPORTING price WHERE seq = tmp_seq.
MODIFY t_price TRANSPORTING price WHERE vbeln = p_ord and
seq = tmp_seq.
ENDIF.
ENDLOOP.
<< End change >> Rajs-10/04/2005
ENDIF.
ENDIF.
<< End insert >>
Delivery Charges (Depot) (+)-- Raj 06/08/2002
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000008889'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Delivery charges - Depot ( + )'.
APPEND t_price.
ENDIF.
*--- Telephone charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000001111'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Telephone charges ( + )'.
APPEND t_price.
ENDIF.
*--- Credit Card declined fee
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000002222'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Credit card declined fee ( + )'.
APPEND t_price.
ENDIF.
<< Start delete >> Rajs-10/04/2005
For now, this SKU is going to be used for fuel surcharge and it has
already been handled along with delivery fee logic. You may uncomment
it when surcharge is done away with - PLEASE DO NOT DELETE THIS PART
**--- Miscellaneous Charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000004444'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Miscellaneous Charges ( + )'.
APPEND t_price.
ENDIF.
<< End delete >>
*--- Tsunami Relief Contribution
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000005555'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PR00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
CONDENSE t_vbap-arktx.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = t_vbap-arktx. "Rajs-08/31/2005
APPEND t_price.
ENDIF.
Re-Delivery Charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000003333'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE kschl EQ 'PB00'
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Re-delivery charges ( + )'.
APPEND t_price.
ENDIF.
LOOP AT tmp_konv WHERE kschl EQ 'ZF00'.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
*--- Delivery Charges
LOOP AT t_vbap WHERE matnr = '000000000000008888'
AND vbeln = p_ord.
CLEAR: t_price, tmp_konv, t_vbak.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Delivery charges ( - )'.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' )
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND t_price.
ENDIF.
ENDLOOP.
*--- Delivery Charges (Depot)
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000008889'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ) AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Delivery charges - Depot ( - )'.
APPEND t_price.
ENDIF.
<< Start insert >> Rajs-12/01/2003
*--- Telephone charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000001111'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ) AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Telephone charges ( - )'.
APPEND t_price.
ENDIF.
*--- Credit card decline fee
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000002222'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ) AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Credit card declined fee ( - )'.
APPEND t_price.
ENDIF.
*--- Miscellaneous charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000004444'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ) AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
<< Start change >> Rajs-10/04/2005
t_price-condition = 'Miscellaneous charges ( - )'.
CONDENSE t_vbap-arktx.
CONCATENATE t_vbap-arktx '( - )'
INTO t_price-condition SEPARATED BY space.
<< End change >>
APPEND t_price.
ENDIF.
*-- Re-Delivery Charges
CLEAR: t_price, tmp_konv, t_vbap.
LOOP AT t_vbap WHERE matnr = '000000000000003333'
AND vbeln = p_ord.
LOOP AT tmp_konv WHERE ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ) AND
kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Re-Delivery charges ( - )'.
APPEND t_price.
ENDIF.
*--- Discounts (amt).
CLEAR: t_price, tmp_konv, t_vbak, s_dis.
REFRESH: s_dis.
s_dis-sign = 'I'.
s_dis-option = 'BT'.
s_dis-low = 'ZD00'.
s_dis-high = 'ZD11'.
APPEND s_dis.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Discounts ( - )'.
LOOP AT t_vbap WHERE matnr = '000000000000009999'
AND vbeln = p_ord.
get the net price of the line item instead of PB00 price, since
a condition type ZADJ was added to knock off any negative values
t_price-price = t_vbap-netwr.
APPEND t_price.
CLEAR t_price.
ENDLOOP.
LOOP AT t_vbap WHERE vbeln = p_ord.
IF t_vbap-matnr = '000000000000009999'
OR t_vbap-matnr = '000000000000008888'
OR t_vbap-matnr = '000000000000008889'
OR t_vbap-matnr = '000000000000001111'
OR t_vbap-matnr = '000000000000002222'
OR t_vbap-matnr = '000000000000003333'
OR t_vbap-matnr = '000000000000004444'
OR t_vbap-matnr = '000000000000005555'.
CONTINUE.
ENDIF.
LOOP AT tmp_konv WHERE kschl IN s_dis
AND kposn EQ t_vbap-posnr.
t_price-price = t_price-price + tmp_konv-kwert.
ENDLOOP.
ENDLOOP.
IF sy-subrc EQ 0. " and t_price-price ne '0.00'.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
t_price-condition = 'Discounts ( + )'.
APPEND t_price.
ENDIF.
*--- Credits.
CLEAR: t_price, t_credit, tmp_credit.
REFRESH: tmp_credit.
LOOP AT t_credit WHERE vbeln EQ p_ord AND
"vbeln_vf eq p_inv and
NOT zzplan_alloc_amt IS initial.
LOOP AT t_credit WHERE vbeln EQ p_ord AND
"vbeln_vf eq p_inv and
NOT zzact_alloc_amt IS initial.
tmp_credit = t_credit.
APPEND tmp_credit.
ENDLOOP.
*--- SubTotal. (Alcohol-Beer)
t_price-vbeln = p_ord.
t_price-seq = '94'.
t_price-condition = 'SUBTOTAL(FD Beer)'.
LOOP AT t_beer_item WHERE vbeln EQ p_ord.
t_price-price = t_price-price + t_beer_item-net_price.
ENDLOOP.
IF t_price-price GT 0.
APPEND t_price.
ENDIF.
CLEAR t_price.
*--- SubTotal. (Alcohol-Wine)
t_price-vbeln = p_ord.
t_price-seq = '97'.
t_price-condition = 'SUBTOTAL(BC Wine)'.
LOOP AT t_wine_item WHERE vbeln EQ p_ord.
t_price-price = t_price-price + t_wine_item-net_price.
ENDLOOP.
IF t_price-price GT 0.
APPEND t_price.
ENDIF.
CLEAR t_price.
*--- Tax - condition type ZT01 (Non-Alcohol)
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '90'.
t_price-condition = 'Tax(FreshDirect)'.
LOOP AT t_item WHERE vbeln EQ p_ord.
READ TABLE t_vbap WITH KEY vbeln = t_item-vbeln
posnr = t_item-posnr.
IF sy-subrc EQ 0.
CLEAR: t_mara.
READ TABLE t_mara WITH KEY matnr = t_vbap-matnr.
IF sy-subrc EQ 0. CONTINUE. ENDIF.
LOOP AT tmp_konv WHERE
kposn EQ t_item-posnr AND
kschl EQ 'ZT01'.
t_price-price = t_price-price +
( ( tmp_konv-kbetr * t_item-net_price ) / 1000 ) .
ENDLOOP.
ENDIF.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE
vbeln = p_ord AND
condition = 'SUBTOTAL(FreshDirect)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
ENDIF.
Tax - condition type ZT02 (Alcohol-Beer)
FD acquired beer license mid Sep 2005 and starting october all beer
products started carrying FD tax condition ZT01 - Rajs
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '92'.
t_price-condition = 'Tax(FD Beer)'.
LOOP AT t_beer_item WHERE vbeln EQ p_ord.
READ TABLE t_vbap WITH KEY vbeln = t_beer_item-vbeln
posnr = t_beer_item-posnr.
IF sy-subrc EQ 0.
CLEAR: t_mara.
READ TABLE t_mara WITH KEY matnr = t_vbap-matnr.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
LOOP AT tmp_konv WHERE kposn EQ t_beer_item-posnr AND
( kschl EQ 'ZT02' OR
kschl EQ 'ZT01' ). "Rajs-11/03/05
t_price-price = t_price-price +
( ( tmp_konv-kbetr * t_beer_item-net_price ) / 1000 ).
ENDLOOP.
ENDIF.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE vbeln = p_ord AND
condition = 'SUBTOTAL(FD Beer)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
ENDIF.
<< Start insert >> Rajs-11/10/2003
Best Cellar project
*--- Tax - condition type ZT03 (Alcohol-Wine)
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '95'.
t_price-condition = 'Tax(BC Wine)'.
LOOP AT t_wine_item WHERE vbeln EQ p_ord.
LOOP AT tmp_konv WHERE kposn EQ t_wine_item-posnr AND
kschl EQ 'ZT03'.
t_price-price = t_price-price +
( ( tmp_konv-kbetr * t_wine_item-net_price ) / 1000 ).
ENDLOOP.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE vbeln = p_ord AND
condition = 'SUBTOTAL(BC Wine)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
ENDIF.
<< End insert >>
*--- Bottle Deposits (Non-Alcoholic)
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '91'.
t_price-condition = 'Bottle Deposits'.
LOOP AT t_item WHERE vbeln EQ p_ord.
LOOP AT tmp_konv WHERE
kposn EQ t_item-posnr AND
kschl EQ 'ZBD1'.
t_price-price = t_price-price +
( ( tmp_konv-kbetr * t_item-d_qty ) / tmp_konv-kpein ) .
ENDLOOP.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE
vbeln = p_ord AND
condition = 'SUBTOTAL(FreshDirect)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
ENDIF.
*--- Bottle Deposits (Alcoholic-Beer)
FD acquired beer license mid Sep 2005 and starting october all beer
products started carrying FD bottle deposit condition ZBD1 - Rajs
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '93'.
t_price-condition = 'Bottle Deposits'.
LOOP AT t_beer_item WHERE vbeln EQ p_ord.
LOOP AT tmp_konv WHERE kposn EQ t_beer_item-posnr AND
( kschl EQ 'ZBD2' OR
kschl EQ 'ZBD1' ). "Rajs-11/03/05
t_price-price = t_price-price + ( ( tmp_konv-kbetr *
t_beer_item-d_qty ) / tmp_konv-kpein ).
ENDLOOP.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE vbeln = p_ord AND
condition = 'SUBTOTAL(FD Beer)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
CLEAR d_price.
ENDIF.
Best Cellar project
*--- Bottle Deposits (Alcohol-Wine)
CLEAR: t_price.
t_price-vbeln = p_ord.
t_price-seq = '96'.
t_price-condition = 'Bottle Deposits'.
LOOP AT t_wine_item WHERE vbeln EQ p_ord.
LOOP AT tmp_konv WHERE kposn EQ t_wine_item-posnr AND
kschl EQ 'ZBD3'.
t_price-price = t_price-price + ( ( tmp_konv-kbetr *
t_wine_item-d_qty ) / tmp_konv-kpein ).
ENDLOOP.
ENDLOOP.
IF t_price-price > 0.
APPEND t_price.
CLEAR d_price.
d_price = t_price-price.
LOOP AT t_price WHERE vbeln = p_ord AND
condition = 'SUBTOTAL(BC Wine)'.
t_price-price = t_price-price + d_price.
MODIFY t_price.
CLEAR t_price.
EXIT.
ENDLOOP.
CLEAR d_price.
ENDIF.
*--- Grand Total
DELETE t_price WHERE price EQ '0.00' AND
condition <> 'TOTAL'.
CLEAR: tmp_total, t_price, d_credits, d_credits1.
LOOP AT t_price WHERE vbeln EQ p_ord AND
( seq NE '90' AND seq NE '91' AND
seq NE '92' AND seq NE '93' AND
seq NE '95' AND seq NE '96' ). "Rajs-11/10/2003
tmp_total = t_price-price + tmp_total.
ENDLOOP.
LOOP AT tmp_credit WHERE vbeln EQ p_ord.
ADD tmp_credit-zzact_alloc_amt TO d_credits.
ENDLOOP.
IF d_credits EQ tmp_total.
CLEAR:d_credits, tmp_total.
ELSEIF d_credits GT tmp_total.
d_total = tmp_total.
LOOP AT tmp_credit WHERE vbeln EQ p_ord.
IF d_skip = 'Y'.
DELETE tmp_credit.
CONTINUE.
ENDIF.
ADD tmp_credit-zzplan_alloc_amt TO d_credits1.
ADD tmp_credit-zzact_alloc_amt TO d_credits1.
IF d_credits1 GT d_total.
SUBTRACT tmp_credit-zzplan_alloc_amt FROM d_credits1.
SUBTRACT tmp_credit-zzact_alloc_amt FROM d_credits1.
tmp_total = ( ( d_total - d_credits1 ) * -1 )
+ tmp_total.
tmp_credit-zzplan_alloc_amt = d_total - d_credits1.
tmp_credit-zzact_alloc_amt = d_total - d_credits1.
MODIFY tmp_credit.
d_skip = 'Y'.
ELSE.
tmp_total = ( tmp_credit-zzplan_alloc_amt * -1 ) + tmp_total.
tmp_total = ( tmp_credit-zzact_alloc_amt * -1 ) + tmp_total.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT tmp_credit WHERE vbeln EQ p_ord.
tmp_total = ( tmp_credit-zzplan_alloc_amt * -1 ) + tmp_total.
tmp_total = ( tmp_credit-zzact_alloc_amt * -1 ) + tmp_total.
ENDLOOP.
ENDIF.
If Net value is below zero, adjust the invoice amount to become
zero, as there cannot be Negative Invoices.
IF tmp_total LT 0.
READ TABLE t_price WITH KEY vbeln = p_ord
condition = 'Discounts ( - )'.
IF sy-subrc EQ 0.
SUBTRACT tmp_total FROM t_price-price.
MODIFY t_price INDEX sy-tabix.
CLEAR tmp_total.
ENDIF.
ELSEIF tmp_total LE 1.
However, if the value is less than a buck (after considering any store
credits), per Kevin Coyle, it's just not worth capturing the amount,
considering all the transaction fees. So, adjust the invoice to show
zero amount.
tmp_total = tmp_total * -1.
LOOP AT tmp_credit WHERE vbeln = p_ord.
IF tmp_credit-zzplan_alloc_amt GE tmp_total.
IF tmp_credit-zzact_alloc_amt GE tmp_total.
SUBTRACT tmp_total FROM tmp_credit-zzplan_alloc_amt .
SUBTRACT tmp_total FROM tmp_credit-zzact_alloc_amt.
CLEAR tmp_total.
IF tmp_credit-zzplan_alloc_amt EQ 0.
IF tmp_credit-zzact_alloc_amt EQ 0.
DELETE tmp_credit.
ENDIF.
EXIT.
ELSE.
SUBTRACT tmp_credit-zzplan_alloc_amt FROM tmp_total.
SUBTRACT tmp_credit-zzact_alloc_amt FROM tmp_total.
DELETE tmp_credit.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
READ TABLE t_price WITH KEY vbeln = p_ord
condition = 'Discounts ( - )'.
IF sy-subrc EQ 0.
ADD tmp_total TO t_price-price.
MODIFY t_price INDEX sy-tabix.
CLEAR tmp_total.
ENDIF.
ENDIF.
ENDIF.
SORT tmp_credit.
LOOP AT tmp_credit.
AT END OF zzdesc.
SUM.
t_price-vbeln = p_ord.
tmp_seq = tmp_seq + 1.
t_price-seq = tmp_seq.
CONCATENATE tmp_credit-zzdesc ' Department Credit'
INTO t_price-condition.
t_price-price = ( tmp_credit-zzplan_alloc_amt * -1 ).
t_price-price = ( tmp_credit-zzact_alloc_amt * -1 ).
APPEND t_price.
ENDAT.
ENDLOOP.
CLEAR t_price.
t_price-vbeln = p_ord.
t_price-seq = '99'.
t_price-condition = 'TOTAL'.
t_price-price = tmp_total.
APPEND t_price.
SORT t_price.
ENDFORM. " process_header
&----
*& Form process_itabs
&----
text
----
--> p1 text
<-- p2 text
----
FORM process_itabs.
*-- sort Invoices by Truck and Stop sequence
SORT : t_inv BY zztrkno zzstopseq,
t_vbap_dup.
LOOP AT t_inv.
CLEAR d_beer.
PERFORM process_items USING t_inv-vbelv.
PERFORM process_beer_items USING t_inv-vbelv.
Best Cellars: Wine items are to be displayed separately in the invoice
PERFORM process_wine_items USING t_inv-vbelv.
PERFORM process_header USING t_inv-vbelv.
ENDLOOP.
ENDFORM. " process_itabs
&----
*& Form generate_invoice
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_invoice.
SORT: t_item,
t_price.
DATA: t_item1 LIKE t_item OCCURS 0 WITH HEADER LINE.
DATA: d_suffix1(4) TYPE n.
DATA: d_suffix2 LIKE ssfcompop-tdsuffix2.
DATA: d_str TYPE i.
*--- Move the unavailable FD items to the end of the Invoice
*--- print before Free Samples, if any.
LOOP AT t_item WHERE kdmat = 'Unavailable Items'.
MOVE-CORRESPONDING t_item TO t_item1.
APPEND t_item1.
CLEAR t_item1.
DELETE t_item.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND LINES OF t_item1 TO t_item.
REFRESH t_item1.
ENDIF.
*--- Move the unavailable beer items to the end of the Invoice
*--- print before Free Samples, if any.
LOOP AT t_beer_item WHERE kdmat = 'Unavailable Items'.
MOVE-CORRESPONDING t_beer_item TO t_item1.
APPEND t_item1.
CLEAR t_item1.
DELETE t_beer_item.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND LINES OF t_item1 TO t_beer_item.
REFRESH t_item1.
ENDIF.
Best Cellars project
*--- Move the unavailable wine items to the end of the Invoice
*--- print before Free Samples, if any.
LOOP AT t_wine_item WHERE kdmat = 'Unavailable Items'.
MOVE-CORRESPONDING t_wine_item TO t_item1.
APPEND t_item1.
CLEAR t_item1.
DELETE t_wine_item.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND LINES OF t_item1 TO t_wine_item.
REFRESH t_item1.
ENDIF.
*--- Move Free Samples to the end of the Invoice print
LOOP AT t_item WHERE kdmat = 'Free Samples'.
MOVE-CORRESPONDING t_item TO t_item1.
APPEND t_item1.
CLEAR t_item1.
DELETE t_item.
ENDLOOP.
IF sy-subrc EQ 0.
APPEND LINES OF t_item1 TO t_item.
REFRESH t_item1.
ENDIF.
*--- the following logic converts the first letter (of each word)
*--- of Department into Upper Case (this is necessary since
*--- the department gets converted to all Upper cases during
*--- modifying an Order thru transaction VA02
LOOP AT t_item.
IF NOT t_item-kdmat IS INITIAL.
CONDENSE t_item-kdmat.
TRANSLATE t_item-kdmat TO LOWER CASE.
DO.
CLEAR d_str.
REPLACE '' WITH '~' INTO t_item-kdmat.
IF sy-subrc NE 0. EXIT. ENDIF.
d_str = strlen( t_item-kdmat ).
SUBTRACT 1 FROM d_str.
IF t_item-kdmat+d_str(1) = '~'.
t_item-kdmat = t_item-kdmat(d_str).
CLEAR d_str.
EXIT.
ENDIF.
ENDDO.
DO.
SEARCH t_item-kdmat FOR '~'.
REPLACE '~' WITH '' INTO t_item-kdmat.
IF sy-subrc NE 0.
TRANSLATE t_item-kdmat(1) TO UPPER CASE.
DO.
REPLACE '~' WITH '' INTO t_item-kdmat.
IF sy-subrc NE 0. EXIT. ENDIF.
ENDDO.
MODIFY t_item.
EXIT.
ENDIF.
ADD 1 TO sy-fdpos.
TRANSLATE t_item-kdmat+sy-fdpos(1) TO UPPER CASE.
ENDDO.
ENDIF.
ENDLOOP.
DATA: fm_name(30).
DATA: tmp_partner LIKE t_partner OCCURS 0 WITH HEADER LINE,
tmp_item LIKE t_item OCCURS 0 WITH HEADER LINE,
tmp_beer_item LIKE t_item OCCURS 0 WITH HEADER LINE,
tmp_wine_item LIKE t_item OCCURS 0 WITH HEADER LINE,
tmp_docflow LIKE t_docflow OCCURS 0 WITH HEADER LINE,
tmp_price LIKE t_price OCCURS 0 WITH HEADER LINE,
tmp_header LIKE t_header.
DATA: p_out LIKE ssfcompop,
p_ctrl LIKE ssfctrlop.
CLEAR: p_out,
p_ctrl.
p_ctrl-no_dialog = 'X'.
p_ctrl-device = 'PRINTER'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 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.
IF p_sship EQ 'X'.
DELETE t_inv WHERE short_ship <> 'X'.
ENDIF.
LOOP AT t_inv1.
IF t_inv1-zzmodel = '003'.
IF p_md1 EQ 'X'.
SORT t_inv BY zzstopseq.
ELSE.
SORT t_inv BY zlast_name.
ENDIF.
ELSEIF t_inv1-zzmodel = '002'.
if p_md3 eq 'X'.
sort t_inv by zzstopseq.
else.
SORT t_inv BY zlast_name.
endif.
ELSEIF t_inv1-zzmodel = '001'.
IF p_md5 EQ 'X'.
SORT t_inv BY zzstopseq.
ELSE.
SORT t_inv BY zlast_name.
ENDIF.
ENDIF.
LOOP AT t_inv WHERE zztrkno = t_inv1-zztrkno.
AT NEW zztrkno.
p_out-tdnoprev = 'X'.
p_out-tdnoprint = 'X'.
p_out-tdnoarch = 'X'.
p_out-tddelete = 'X'.
p_out-tddest = p_dest.
p_out-tdnewid = ''.
p_out-tdimmed = ' '.
p_out-tdcopies = 1.
p_out-tddataset = sy-repid.
p_out-tddelete = ' '.
d_suffix1 = t_inv-zztrkno+2(4).
CONCATENATE sy-datum+2 sy-uzeit INTO d_suffix2.
p_out-tdsuffix1 = d_suffix1.
p_out-tdsuffix2 = d_suffix2.
ENDAT.
AT LAST.
p_out-tdfinal = 'X'.
ENDAT.
CLEAR: tmp_price,
tmp_item,
tmp_docflow,
tmp_partner,
tmp_beer_item,
tmp_wine_item.
REFRESH: tmp_price,
tmp_item,
tmp_docflow,
tmp_partner,
tmp_beer_item,
tmp_wine_item.
LOOP AT t_price WHERE vbeln EQ t_inv-vbelv.
tmp_price = t_price.
APPEND tmp_price.
ENDLOOP.
LOOP AT t_item WHERE vbeln EQ t_inv-vbelv.
tmp_item = t_item.
APPEND tmp_item.
*--- update the document flow table in the same sort
*--- order to make sure Header information prints
*--- correctly in the Invoice
READ TABLE t_docflow WITH KEY ovbeln = t_item-vbeln
oposnr = t_item-posnr.
IF sy-subrc EQ 0.
tmp_docflow = t_docflow.
APPEND tmp_docflow.
ENDIF.
ENDLOOP.
LOOP AT t_beer_item WHERE vbeln EQ t_inv-vbelv.
tmp_beer_item = t_beer_item.
APPEND tmp_beer_item.
*--- update the document flow table in the same sort
*--- order to make sure Header information prints
*--- correctly in the Invoice
READ TABLE t_docflow WITH KEY ovbeln = t_beer_item-vbeln
oposnr = t_beer_item-posnr.
IF sy-subrc EQ 0.
tmp_docflow = t_docflow.
APPEND tmp_docflow.
ENDIF.
ENDLOOP.
Best Cellars project
LOOP AT t_wine_item WHERE vbeln EQ t_inv-vbelv.
tmp_wine_item = t_wine_item.
APPEND tmp_wine_item.
*--- update the document flow table in the same sort
*--- order to make sure Header information prints
*--- correctly in the Invoice
READ TABLE t_docflow WITH KEY ovbeln = t_wine_item-vbeln
oposnr = t_wine_item-posnr.
IF sy-subrc EQ 0.
tmp_docflow = t_docflow.
APPEND tmp_docflow.
ENDIF.
ENDLOOP.
<< End insert >>
READ TABLE tmp_docflow INDEX 1.
LOOP AT t_partner WHERE vbeln EQ t_inv-vbelv.
tmp_partner = t_partner.
APPEND tmp_partner.
ENDLOOP.
CLEAR: t_header, tmp_header.
READ TABLE t_header WITH KEY vbeln = t_inv-vbelv.
tmp_header = t_header.
CALL FUNCTION fm_name
EXPORTING
inv_header = tmp_header
output_options = p_out
control_parameters = p_ctrl
user_settings = ' '
TABLES
t_item = tmp_item
t_price = tmp_price
t_partner = tmp_partner
t_docflow = tmp_docflow
t_beer_item = tmp_beer_item
t_wine_item = tmp_wine_item.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
AT END OF zztrkno.
SELECT * FROM tsp01 WHERE
rq0name = sy-repid AND
rq1name = d_suffix1 AND
rq2name = d_suffix2 AND
rqowner = sy-uname.
WRITE:/ 'Spool request issued',
/ 'Spool Number:', tsp01-rqident,
/ 'Spool Name :', tsp01-rq0name,
/ 'Suffix 1 :' , tsp01-rq1name,
/ 'Suffix 2 :', tsp01-rq2name,
/ 'Owner :', tsp01-rqowner,
/ 'Device :',tsp01-rqdest,
/ 'Copies :', tsp01-rqcopies,
/ 'Processed :', tsp01-rqpjreq.
SKIP.
ENDSELECT.
IF sy-subrc EQ 0.
CALL FUNCTION 'RSPO_OUTPUT_SPOOL_REQUEST'
EXPORTING
spool_request_id = tsp01-rqident
EXCEPTIONS
archive_dest_invalid = 1
archive_dest_not_found = 2
archive_dest_no_right = 3
cannot_archive = 4
change_archdest_no_right = 5
change_copies_no_right = 6
change_dest_no_right = 7
change_devtype_no_right = 8
change_prio_no_right = 9
change_telenum_no_right = 10
change_title_no_right = 11
dest_invalid = 12
dest_not_found = 13
dest_no_right = 14
internal_problem = 15
invalid_fax_attribute = 16
invalid_parameters = 17
non_owner_no_right = 18
no_layout = 19
no_spool_request = 20
out_again_no_right = 21
spooler_problem = 22
OTHERS = 23.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDAT.
ENDLOOP.
ENDLOOP.
COMMIT WORK.
ENDFORM. " generate_invoice
&----
*& Form check_item_tax
&----
text
----
-->P_T_TODFLOW_IVBELN text
-->P_T_DOCFLOW_IPOSNR text
<--P_T_ITEM_TAX_FLAG text
----
FORM check_item_tax USING p_vbeln
p_posnr
CHANGING p_flag d_flag p_dep_flag.
CLEAR: t_vbap, t_konv, p_flag , d_flag, p_dep_flag.
*--- Get Item Tax Condition Record
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZT01'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_flag = 'T'.
ENDIF.
ENDIF.
-- get discount condition record for
-- updating discount flag with 'S'
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv
AND kposn EQ p_posnr
AND ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ).
IF NOT t_konv-kwert IS INITIAL.
d_flag = 'S'.
ENDIF.
ENDLOOP.
*--- check for bottle Deposit..indicate in invoice
*--- with a flag
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZBD1'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_dep_flag = 'D'.
ENDIF.
ENDIF.
ENDFORM. " check_item_tax
&----
*& Form get_descripion
&----
FORM get_descripion USING p_id.
REFRESH: t_tline.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = p_id
language = 'E'
name = d_name
object = 'VBBP'
TABLES
lines = t_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
ENDFORM. " get_descripion
&----
*& Form validate_deliveries
&----
FORM validate_deliveries.
DATA: d_lips_qty LIKE lips-lfimg,
d_diff LIKE lips-lfimg,
d_carton_qty LIKE zsdcarton_item-ntgew,
d_wtbased TYPE c.
FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
LOOP AT t_lips.
IF t_lips-matnr = '000000000000009999' OR
t_lips-matnr = '000000000000008888' OR
t_lips-matnr = '000000000000008889' OR
t_lips-matnr = '000000000000001111' OR
t_lips-matnr = '000000000000002222' OR
t_lips-matnr = '000000000000003333' OR
t_lips-matnr = '000000000000004444' OR
t_lips-matnr = '000000000000005555' OR
t_lips-pstyv = 'Z000' OR "Thanks Giving meal
t_lips-pstyv = 'ZPP0' OR "Party Platter package
*--Added by ponnu for delivery pass
t_lips-pstyv = 'Z004'.
*--End of changes by ponnu
CONTINUE.
ENDIF.
CLEAR: d_lips_qty,
d_carton_qty,
d_wtbased,
d_diff.
LOOP AT t_box WHERE zzvbeln_vl = t_lips-vbeln AND
zzposnr_vl = t_lips-posnr.
IF t_box-ntgew IS INITIAL.
ADD t_box-zzpckqty TO d_carton_qty.
ELSE.
d_wtbased = 'X'.
ADD t_box-ntgew TO d_carton_qty.
ENDIF.
ENDLOOP.
IF d_wtbased = 'X'.
MOVE t_lips-lgmng TO d_lips_qty.
ELSE.
MOVE t_lips-lfimg TO d_lips_qty.
ENDIF.
d_diff = d_lips_qty - d_carton_qty.
IF d_diff LT 0.
MULTIPLY d_diff BY -1.
ENDIF.
*-- Due to SAP rounding errors, if the difference in Carton table and
*-- Delivery table is less than 0.01, proceed without erroring out.
IF d_lips_qty <> d_carton_qty AND
d_diff GT p_toler.
write:/ 'Invoice Validated with Errors!',
text-e01,
t_lips-vbeln,
t_lips-posnr.
prepare email.
r_text-sign = 'I'.
r_text-option = 'EQ'.
r_text-low = 'Invoice Validated with Weight Missmatch!'.
APPEND r_text.
r_text-low = text-e01.
APPEND r_text.
READ TABLE t_inv WITH KEY vbelv = t_box-vbeln.
CONCATENATE 'Delivery:' t_lips-vbeln
'Item :' t_lips-posnr
'Route:' t_inv-zztrkno
INTO r_text-low SEPARATED BY space.
APPEND r_text.
d_char_text = d_lips_qty.
SHIFT d_char_text LEFT DELETING LEADING space.
CONCATENATE 'Delivery Weight:' d_char_text
INTO r_text-low SEPARATED BY space.
APPEND r_text.
d_char_text = d_carton_qty.
SHIFT d_char_text LEFT DELETING LEADING space.
CONCATENATE 'Packing Weight:' d_char_text
INTO r_text-low SEPARATED BY space.
APPEND r_text.
loop at t_inv where vbelv = t_box-vbeln.
delete record with missmatch from internal table
delete t_inv where vbelv = t_box-vbeln.
endloop.
ENDIF.
ENDLOOP.
FORMAT COLOR COL_NORMAL.
ENDFORM. " validate_deliveries
&----
*& Form check_negatives
&----
FORM check_negatives.
*--- Check for -ve invoices
CLEAR d_initial.
LOOP AT t_price WHERE condition = 'TOTAL' AND price LT 0.
IF d_initial IS INITIAL.
SKIP.
FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
WRITE:/2 'Following Orders were posted with Negative value!',
'Please correct the document and run this program again.'.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
SKIP.
d_initial = 'X'.
ENDIF.
prepare email
r_text-sign = 'I'.
r_text-option = 'EQ'.
r_text-low = 'Following Orders were posted with Negative value!'.
APPEND r_text.
r_text-low =
'Please correct the document and run this program again.'.
APPEND r_text.
d_char_text = t_price-price.
SHIFT d_char_text LEFT DELETING LEADING space.
WRITE:/ 'Error (Price) in '.
WRITE: 'Order ',
t_price-vbeln,
':',
t_price-price CURRENCY c_usd.
CONCATENATE 'Price Error in Order '
t_price-vbeln
'Price'
d_char_text INTO r_text-low SEPARATED BY space.
APPEND r_text.
ENDLOOP.
*--- Check for less than $1 invoices
CLEAR d_initial.
LOOP AT t_price WHERE
condition = 'TOTAL' AND
( price GT 0 AND
price LE 1 ).
IF d_initial IS INITIAL.
SKIP.
FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.
WRITE:/2 'Following Orders were posted with less than $1 value!',
'Please correct the document and run this program again.'.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
SKIP.
d_initial = 'X'.
ENDIF.
WRITE:/ 'Order ',
t_price-vbeln, ':',
t_price-price CURRENCY c_usd.
r_text-low = 'Following orders were posted with less than $1 value'.
APPEND r_text.
r_text-low =
'Please correct the document and run this program again'.
APPEND r_text.
d_char_text = t_price-price.
SHIFT d_char_text LEFT DELETING LEADING space.
CONCATENATE 'Order :' t_price-vbeln 'Price:' d_char_text
INTO r_text-low SEPARATED BY space.
APPEND r_text.
ENDLOOP.
ENDFORM. " check_negatives
----
FORM process_beer_items *
----
........ *
----
--> P_ORD *
----
FORM process_beer_items USING p_ord.
DATA: tmp_vbap LIKE t_vbap OCCURS 0 WITH HEADER LINE.
DATA: tmp_thickness LIKE t006a-mseht.
DATA: wa_mtart LIKE mara-mtart.
DATA: wa_matnr LIKE mara-matnr.
CLEAR: tmp_vbap, t_inv-short_ship.
REFRESH: tmp_vbap.
LOOP AT t_vbap WHERE vbeln EQ p_ord.
tmp_vbap = t_vbap.
APPEND tmp_vbap.
ENDLOOP.
SORT tmp_vbap.
LOOP AT tmp_vbap.
ignore header discount/delivery charges as they will be shown
at the header level with subtotals.
IF tmp_vbap-matnr = '000000000000009999' OR
tmp_vbap-matnr = '000000000000008888' OR
tmp_vbap-matnr = '000000000000008889' OR
tmp_vbap-matnr = '000000000000001111' OR
tmp_vbap-matnr = '000000000000002222' OR
tmp_vbap-matnr = '000000000000003333' OR
tmp_vbap-matnr = '000000000000004444' OR
tmp_vbap-matnr = '000000000000005555'.
CONTINUE.
ENDIF.
t_vbap = tmp_vbap.
READ TABLE t_vbak WITH KEY vbeln = tmp_vbap-vbeln.
CHECK sy-subrc EQ 0.
Ignore marketing materials.
READ TABLE t_zmarketing WITH KEY matnr = tmp_vbap-matnr.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.
*--- Include only beer items
CLEAR: t_mara.
READ TABLE t_mara WITH KEY matnr = tmp_vbap-matnr.
Wine items are separated from both beer and regular items
IF sy-subrc NE 0. CONTINUE. ENDIF.
IF sy-subrc <> 0 OR
t_mara-matkl(1) = 'W'.
CONTINUE.
ENDIF.
CLEAR t_beer_item.
t_beer_item-kdmat = 'FD Beer charges'.
t_beer_item-vbeln = tmp_vbap-vbeln.
t_beer_item-posnr = tmp_vbap-posnr.
t_beer_item-o_qty = tmp_vbap-kwmeng.
t_beer_item-o_uom = tmp_vbap-vrkme.
Material Desc.
CLEAR: t_beer_item-material, d_name.
CONCATENATE tmp_vbap-vbeln
tmp_vbap-posnr
INTO d_name.
Get Web SKU Description from the Sales Order.
PERFORM get_descripion USING 'ZL01'.
LOOP AT t_tline.
IF t_beer_item-material EQ space.
MOVE t_tline-tdline TO t_beer_item-material.
ELSE.
CONCATENATE t_beer_item-material t_tline-tdline
INTO t_beer_item-material SEPARATED BY space.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
SELECT SINGLE maktx INTO t_beer_item-material FROM makt
WHERE matnr EQ tmp_vbap-matnr AND
spras EQ 'E'.
ELSE.
SEARCH t_beer_item-material FOR '|'.
IF sy-subrc EQ 0.
t_beer_item-material = t_beer_item-material+0(sy-fdpos).
ENDIF.
ENDIF.
*--- Options
PERFORM get_descripion USING 'ZL02'.
IF sy-subrc EQ 0.
CLEAR tmp_thickness.
IF t_beer_item-o_uom NE 'EA'.
SELECT SINGLE mseht INTO tmp_thickness FROM t006a
WHERE spras = 'E' AND
msehi = t_beer_item-o_uom.
ENDIF.
IF tmp_thickness IS INITIAL.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_beer_item-material ' (' t_tline-tdline
INTO t_beer_item-material.
ELSE.
CONCATENATE t_beer_item-material t_tline-tdline
INTO t_beer_item-material.
ENDIF.
AT LAST.
CONCATENATE t_beer_item-material ')'
INTO t_beer_item-material.
ENDAT.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_beer_item-material ' (' tmp_thickness ', '
t_tline-tdline INTO t_beer_item-material.
ELSE.
CONCATENATE t_beer_item-material t_tline-tdline
INTO t_beer_item-material.
ENDIF.
ELSE.
IF sy-tabix EQ 1.
CONCATENATE t_beer_item-material ' (' tmp_thickness
t_tline-tdline INTO t_beer_item-material.
ELSE.
CONCATENATE t_beer_item-material t_tline-tdline
INTO t_beer_item-material.
ENDIF.
ENDIF.
AT LAST.
CONCATENATE t_beer_item-material ')'
INTO t_beer_item-material.
ENDAT.
ENDLOOP.
ENDIF.
ENDIF.
*--- Final Weight.
CLEAR: t_docflow, t_lips.
READ TABLE t_docflow WITH KEY ovbeln = t_beer_item-vbeln
oposnr = t_beer_item-posnr.
IF sy-subrc EQ 0.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
*--- Determine if Base Unit is MASS...
CALL FUNCTION 'Z_FD_CHECK_UOM_IS_MASS'
EXPORTING
in_uom = t_lips-meins
EXCEPTIONS
not_mass = 1
other = 2
invalid_uom = 3
OTHERS = 4.
IF sy-subrc EQ 0.
t_beer_item-weight = t_lips-lgmng.
t_beer_item-w_uom = t_lips-meins.
ENDIF.
ENDIF.
ENDIF.
*--- Delivered Qty.
CLEAR: t_beer_item-d_qty, sy-subrc.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
CLEAR d_unit.
IF t_lips-meins = t_lips-vrkme.
IF t_lips-meins = 'LB'.
d_unit = 'lb'.
ENDIF.
ENDIF.
LOOP AT t_box WHERE vbeln = tmp_vbap-vbeln AND
posnr = tmp_vbap-posnr.
if t_box-ntgew ne space.
IF d_unit = 'lb'.
t_beer_item-d_qty = t_beer_item-d_qty + t_box-ntgew.
t_beer_item-d_uom = t_box-gewei.
ELSE.
t_beer_item-d_qty = t_beer_item-d_qty + t_box-zzpckqty.
t_beer_item-d_uom = t_box-zzuom.
ENDIF.
ENDLOOP.
ENDIF.
*--- check if the SKU is a Free sample item
CLEAR: t_konv.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = tmp_vbap-posnr
kschl = 'ZF11'.
IF sy-subrc EQ 0.
IF t_beer_item-d_qty IS INITIAL.
CONTINUE.
ELSE.
t_beer_item-kdmat = 'Free Samples'.
ENDIF.
ELSE.
*--- Unit Price.
PERFORM get_unit_price USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_beer_item-unit_price
t_beer_item-u_uom.
*--- Calculate Customization Price.
PERFORM calc_cust_price_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_beer_item
CHANGING t_beer_item-cust_price.
*--- Calculate Item Net Price.
PERFORM calc_net_price_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_beer_item
CHANGING t_beer_item-net_price.
*--- Determine if item is taxable.
PERFORM check_item_tax_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_mara-matkl
CHANGING t_beer_item-tax_flag
t_beer_item-disc_flag
t_beer_item-dep_flag.
*--- If Item is unavailable, overwrite department name.
*--- Ignore the delivery pass materials (material Type - ZMKT)
*--- Remember Delivery Pass is not a pickable item so the d_qty will
*--- always be zero
IF t_beer_item-d_qty IS INITIAL.
**--- Check the material first.
CLEAR wa_matnr.
SELECT SINGLE matnr INTO wa_matnr FROM vbap
WHERE vbeln = t_beer_item-vbeln AND
posnr = t_beer_item-posnr.
***--- Get the material type
CLEAR wa_mtart.
SELECT SINGLE mtart INTO wa_mtart FROM mara
WHERE matnr = wa_matnr.
*
IF wa_mtart <> 'ZMKT'.
t_item-kdmat = 'Unavailable Items'.
t_inv-short_ship = 'X'.
ENDIF.
ENDIF.
ENDIF.
CLEAR: t_box.
READ TABLE t_box WITH KEY vbeln = t_beer_item-vbeln
posnr = t_beer_item-posnr.
IF sy-subrc EQ 0.
t_beer_item-box = t_box-zzcarton.
ENDIF.
APPEND t_beer_item.
ENDLOOP.
IF NOT t_inv-short_ship IS INITIAL.
MODIFY t_inv.
ENDIF.
ENDFORM. " process_beer_items
----
FORM calc_cust_price_beer *
----
........ *
----
--> P_VBELN *
--> P_POSNR *
--> P_CUST_PRICE *
----
FORM calc_cust_price_beer USING p_vbeln
p_posnr
p_beer_item STRUCTURE t_beer_item
CHANGING p_cust_price.
DATA: d_cust_price LIKE t_beer_item-cust_price.
DATA: d_count LIKE t_beer_item-cust_price.
CLEAR: p_cust_price, t_konv, d_cust_price,
d_count, d_old_value, d_new_value.
Condition type VA00 - Non Packaged (like Marinades) - Qty based
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'VA00'. " Non Pkgd item surcharge
d_cust_price = d_cust_price + t_konv-kbetr.
ENDLOOP.
IF sy-subrc EQ 0.
IF NOT p_beer_item-weight IS INITIAL.
d_old_value = t_lips-lfimg.
d_new_value = ( t_lips-umvkz / t_lips-umvkn ) * d_old_value.
p_cust_price = ( d_new_value * d_cust_price ) + p_cust_price.
ELSE.
p_cust_price = p_cust_price +
( d_cust_price * p_beer_item-d_qty ).
ENDIF.
ENDIF.
CLEAR: d_cust_price.
Condition type VA01 - Non Packaged (like Marinades) - % based
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'VA01'. " % based variants surcharge
p_cust_price = p_cust_price + t_konv-kbetr.
ENDLOOP.
IF sy-subrc EQ 0.
IF NOT p_beer_item-weight IS INITIAL.
p_cust_price = p_cust_price +
( d_cust_price * p_beer_item-weight ).
ELSE.
p_cust_price = p_cust_price +
( d_cust_price * p_beer_item-d_qty ).
ENDIF.
ENDIF.
CLEAR: d_cust_price.
Condition type ZP00 - Packaged Price
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv AND
kposn EQ p_posnr AND
kschl EQ 'ZP00'. " Pkgd item surcharge
ADD t_konv-kbetr TO d_cust_price .
ENDLOOP.
IF d_cust_price GT 0.
CLEAR d_count.
READ TABLE t_vbfa WITH KEY vbelv = p_vbeln
posnv = p_posnr.
IF sy-subrc EQ 0.
LOOP AT t_zwcspacks WHERE dorder = t_vbfa-vbeln AND
dline = t_vbfa-posnn.
IF t_zwcspacks-cartonid(2) <> 'SP'.
ADD t_zwcspacks-ppqty TO d_count.
ENDIF.
ENDLOOP.
IF d_count GT 0.
p_cust_price = p_cust_price +
( d_cust_price * d_count ).
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " calc_cust_price_beer
----
FORM calc_net_price_beer *
----
........ *
----
--> P_VBELN *
--> P_POSNR *
--> P_NET_PRICE *
----
FORM calc_net_price_beer USING p_vbeln
p_posnr
p_beer_item STRUCTURE t_beer_item
CHANGING p_net_price.
CLEAR: t_konv, p_net_price, d_old_value, d_new_value.
*--- calculate the net price based on the actual weight or
*--- quantity as the case may be, times the unit price.
IF t_beer_item-weight IS INITIAL.
p_net_price = ( p_beer_item-d_qty * p_beer_item-unit_price ) +
p_beer_item-cust_price.
ELSE.
d_old_value = t_lips-lfimg.
d_new_value = ( t_lips-umvkz / t_lips-umvkn ) * d_old_value.
p_net_price = ( d_new_value * p_beer_item-unit_price ) +
p_beer_item-cust_price.
ENDIF.
ENDFORM. " calc_net_price_beer
----
FORM check_item_tax_beer *
----
........ *
----
--> P_VBELN *
--> P_POSNR *
--> P_FLAG *
--> D_FLAG *
----
FORM check_item_tax_beer USING p_vbeln
p_posnr
p_matkl
CHANGING p_flag d_flag p_dep_flag.
CLEAR: t_vbap, t_konv, p_flag , d_flag, p_dep_flag.
WBL
IF p_matkl(1) = 'A' OR
p_matkl(1) = 'B'.
Get item tax condition record for WBL
FD acquired beer license mid Sep 2005 and starting October all beer
products started carrying FD tax condition ZT01. So, for transition
reasons, we check both the tax conditions here - Rajs
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZT01'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_flag = 'T'.
ENDIF.
ELSE.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZT02'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_flag = 'T'.
ENDIF.
ENDIF.
ENDIF.
-- get discount condition record for
-- updating discount flag with 'S'
LOOP AT t_konv WHERE knumv EQ t_vbak-knumv
AND kposn EQ p_posnr
AND ( kschl EQ 'ZD10' OR
kschl EQ 'ZD11' ).
IF NOT t_konv-kwert IS INITIAL.
d_flag = 'S'.
ENDIF.
ENDLOOP.
Check for bottle Deposit..indicate that in invoice with a flag
FD acquired beer license mid Sep 2005 and starting October all beer
products started carrying FD bottle deposit condition ZBD1. So, for
transition reasons, we check both the conditions here - Rajs
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZBD1'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_dep_flag = 'D'.
ENDIF.
ELSE.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZBD2'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_dep_flag = 'D'.
ENDIF.
ENDIF.
ENDIF.
Best Cellars
ELSEIF p_matkl(1) = 'W'.
Get item tax condition record for BC
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZT03'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_flag = 'T'.
ENDIF.
ENDIF.
Check for bottle deposit..indicate in invoice
with a flag
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = p_posnr
kschl = 'ZBD3'.
IF sy-subrc EQ 0.
IF NOT t_konv-kwert IS INITIAL.
p_dep_flag = 'D'.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " check_item_tax_beer
&----
*& Form process_wine_items
&----
text
----
-->P_T_INV_VBELV text
----
FORM process_wine_items USING p_ord.
DATA: tmp_vbap LIKE t_vbap OCCURS 0 WITH HEADER LINE.
DATA: tmp_thickness LIKE t006a-mseht.
DATA: wa_mtart LIKE mara-mtart.
DATA: wa_matnr LIKE mara-matnr.
CLEAR : tmp_vbap, t_inv-short_ship.
REFRESH: tmp_vbap.
LOOP AT t_vbap WHERE vbeln EQ p_ord.
tmp_vbap = t_vbap.
APPEND tmp_vbap.
ENDLOOP.
SORT tmp_vbap.
LOOP AT tmp_vbap.
ignore header discount/delivery charges as they will be shown
at the header level with subtotals.
IF tmp_vbap-matnr = '000000000000009999' OR
tmp_vbap-matnr = '000000000000008888' OR
tmp_vbap-matnr = '000000000000008889' OR
tmp_vbap-matnr = '000000000000001111' OR
tmp_vbap-matnr = '000000000000002222' OR
tmp_vbap-matnr = '000000000000003333' OR
tmp_vbap-matnr = '000000000000004444' OR
tmp_vbap-matnr = '000000000000005555'.
CONTINUE.
ENDIF.
t_vbap = tmp_vbap.
READ TABLE t_vbak WITH KEY vbeln = tmp_vbap-vbeln.
CHECK sy-subrc EQ 0.
Ignore marketing materials.
READ TABLE t_zmarketing WITH KEY matnr = tmp_vbap-matnr.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.
Include only wine items
CLEAR: t_mara.
READ TABLE t_mara WITH KEY matnr = tmp_vbap-matnr.
Wine items are separated from both beer and regular items
IF sy-subrc <> 0 OR
t_mara-matkl(1) = 'A' OR
t_mara-matkl(1) = 'B'.
CONTINUE.
ENDIF.
CLEAR t_wine_item.
t_wine_item-kdmat = 'BC Wine charges'.
t_wine_item-vbeln = tmp_vbap-vbeln.
t_wine_item-posnr = tmp_vbap-posnr.
t_wine_item-o_qty = tmp_vbap-kwmeng.
t_wine_item-o_uom = tmp_vbap-vrkme.
Material Description
CLEAR: t_wine_item-material, d_name.
CONCATENATE tmp_vbap-vbeln tmp_vbap-posnr
INTO d_name.
Get Web SKU description from the sales order
PERFORM get_descripion USING 'ZL01'.
LOOP AT t_tline.
IF t_wine_item-material EQ space.
MOVE t_tline-tdline TO t_wine_item-material.
ELSE.
CONCATENATE t_wine_item-material t_tline-tdline
INTO t_wine_item-material SEPARATED BY space.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
SELECT SINGLE maktx INTO t_wine_item-material
FROM makt
WHERE matnr EQ tmp_vbap-matnr AND
spras EQ 'E'.
ELSE.
SEARCH t_wine_item-material FOR '|'.
IF sy-subrc EQ 0.
t_wine_item-material = t_wine_item-material+0(sy-fdpos).
ENDIF.
ENDIF.
*--- Options
PERFORM get_descripion USING 'ZL02'.
IF sy-subrc EQ 0.
CLEAR tmp_thickness.
IF t_wine_item-o_uom NE 'EA'.
SELECT SINGLE mseht INTO tmp_thickness
FROM t006a
WHERE spras = 'E' AND
msehi = t_wine_item-o_uom.
ENDIF.
IF tmp_thickness IS INITIAL.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_wine_item-material ' (' t_tline-tdline
INTO t_wine_item-material.
ELSE.
CONCATENATE t_wine_item-material t_tline-tdline
INTO t_wine_item-material.
ENDIF.
AT LAST.
CONCATENATE t_wine_item-material ')'
INTO t_wine_item-material.
ENDAT.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT t_tline.
IF NOT t_tline-tdline IS INITIAL.
IF sy-tabix EQ 1.
CONCATENATE t_wine_item-material ' (' tmp_thickness ', '
t_tline-tdline INTO t_wine_item-material.
ELSE.
CONCATENATE t_wine_item-material t_tline-tdline
INTO t_wine_item-material.
ENDIF.
ELSE.
IF sy-tabix EQ 1.
CONCATENATE t_wine_item-material ' (' tmp_thickness
t_tline-tdline INTO t_wine_item-material.
ELSE.
CONCATENATE t_wine_item-material t_tline-tdline
INTO t_wine_item-material.
ENDIF.
ENDIF.
AT LAST.
CONCATENATE t_wine_item-material ')'
INTO t_wine_item-material.
ENDAT.
ENDLOOP.
ENDIF.
ENDIF.
*--- Final Weight.
CLEAR: t_docflow, t_lips.
READ TABLE t_docflow WITH KEY ovbeln = t_wine_item-vbeln
oposnr = t_wine_item-posnr.
IF sy-subrc EQ 0.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
*--- Determine if Base Unit is MASS...
CALL FUNCTION 'Z_FD_CHECK_UOM_IS_MASS'
EXPORTING
in_uom = t_lips-meins
EXCEPTIONS
not_mass = 1
other = 2
invalid_uom = 3
OTHERS = 4.
IF sy-subrc EQ 0.
t_wine_item-weight = t_lips-lgmng.
t_wine_item-w_uom = t_lips-meins.
ENDIF.
ENDIF.
ENDIF.
*--- Delivered Qty.
CLEAR: t_wine_item-d_qty, sy-subrc.
READ TABLE t_lips WITH KEY vbeln = t_docflow-dvbeln
posnr = t_docflow-dposnr.
IF sy-subrc EQ 0.
CLEAR d_unit.
IF t_lips-meins = t_lips-vrkme.
IF t_lips-meins = 'LB'.
d_unit = 'lb'.
ENDIF.
ENDIF.
LOOP AT t_box WHERE vbeln = tmp_vbap-vbeln AND
posnr = tmp_vbap-posnr.
if t_box-ntgew ne space.
IF d_unit = 'lb'.
t_wine_item-d_qty = t_wine_item-d_qty + t_box-ntgew.
t_wine_item-d_uom = t_box-gewei.
ELSE.
t_wine_item-d_qty = t_wine_item-d_qty + t_box-zzpckqty.
t_wine_item-d_uom = t_box-zzuom.
ENDIF.
ENDLOOP.
ENDIF.
*--- check if the SKU is a Free sample item
CLEAR: t_konv.
READ TABLE t_konv WITH KEY knumv = t_vbak-knumv
kposn = tmp_vbap-posnr
kschl = 'ZF11'.
IF sy-subrc EQ 0.
IF t_wine_item-d_qty IS INITIAL.
CONTINUE.
ELSE.
t_wine_item-kdmat = 'Free Samples'.
ENDIF.
ELSE.
*--- Unit Price.
PERFORM get_unit_price USING tmp_vbap-vbeln
tmp_vbap-posnr
CHANGING t_wine_item-unit_price
t_wine_item-u_uom.
*--- Calculate Customization Price.
PERFORM calc_cust_price_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_wine_item
CHANGING t_wine_item-cust_price.
*--- Calculate Item Net Price.
PERFORM calc_net_price_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_wine_item
CHANGING t_wine_item-net_price.
*--- Determine if item is taxable.
PERFORM check_item_tax_beer USING tmp_vbap-vbeln
tmp_vbap-posnr
t_mara-matkl
CHANGING t_wine_item-tax_flag
t_wine_item-disc_flag
t_wine_item-dep_flag.
*--- If Item is unavailable, overwrite department name.
*--- Ignore the delivery pass materials (material Type - ZMKT)
*--- Remember Delivery Pass is not a pickable item so the d_qty will
*--- always be zero
IF t_wine_item-d_qty IS INITIAL.
**--- Check the material first.
CLEAR wa_matnr.
SELECT SINGLE matnr INTO wa_matnr FROM vbap
WHERE vbeln = t_wine_item-vbeln AND
posnr = t_wine_item-posnr.
**--- Get the material type
CLEAR wa_mtart.
SELECT SINGLE mtart INTO wa_mtart FROM mara
WHERE matnr = wa_matnr.
*
IF wa_mtart <> 'ZMKT'.
t_wine_item-kdmat = 'Unavailable Items'.
t_inv-short_ship = 'X'.
ENDIF.
ENDIF.
ENDIF.
CLEAR: t_box.
READ TABLE t_box WITH KEY vbeln = t_wine_item-vbeln
posnr = t_wine_item-posnr.
IF sy-subrc EQ 0.
t_wine_item-box = t_box-zzcarton.
ENDIF.
APPEND t_wine_item.
ENDLOOP.
IF NOT t_inv-short_ship IS INITIAL.
MODIFY t_inv.
ENDIF.
ENDFORM. " process_wine_items
&----
*& Form send_email
&----
text
----
--> p1 text
<-- p2 text
----
FORM send_email.
CHECK NOT r_text[] IS INITIAL.
d_email_subject = 'Errors in Packing Slip Print'.
CONCATENATE d_email_subject
'Date:' sy-datum6(2) '/' sy-datum4(2) '/' sy-datum(4)
'Time:' sy-uzeit(2) ':' sy-uzeit2(2) ':' sy-uzeit4(2)
INTO d_email_subject SEPARATED BY space.
call an external program to notify users of the error
into the email box
SUBMIT z_notify_user USING SELECTION-SET 'PACKING SLIP'
WITH text1 IN r_text
WITH sub_line EQ d_email_subject
AND RETURN.
ENDFORM. " send_email
&----
*& Form udate_truck_table
&----
text
----
--> p1 text
<-- p2 text
----
FORM udate_truck_table.
update ztruck
SELECT * FROM ztruck
INTO TABLE t_ztruck
FOR ALL ENTRIES IN t_header
WHERE werks = p_werks AND
vdatu = t_header-vdatu AND
zztrkno = t_header-zztrkno.
LOOP AT t_ztruck.
IF r_text[] IS INITIAL AND
t_ztruck-zzinvoice = space.
t_ztruck-zzinvoice = '1'.
t_ztruck-zzinvoice_date = sy-datum.
t_ztruck-zzinvoice_time = sy-uzeit.
MODIFY t_ztruck TRANSPORTING zzinvoice
zzinvoice_date
zzinvoice_time
WHERE zztrkno = t_ztruck-zztrkno.
ELSEIF r_text[] IS INITIAL AND
t_ztruck-zzinvoice = 'F'.
t_ztruck-zzinvoice = '1'.
t_ztruck-zzinvoice_date = sy-datum.
t_ztruck-zzinvoice_time = sy-uzeit.
MODIFY t_ztruck TRANSPORTING zzinvoice
zzinvoice_date
zzinvoice_time
WHERE zztrkno = t_ztruck-zztrkno.
when error
ELSEIF NOT r_text[] IS INITIAL.
t_ztruck-zzinvoice = 'F'.
t_ztruck-zzinvoice_date = sy-datum.
t_ztruck-zzinvoice_time = sy-uzeit.
MODIFY t_ztruck TRANSPORTING zzinvoice
zzinvoice_date
zzinvoice_time
WHERE zztrkno = t_ztruck-zztrkno.
ELSE.
reprint
t_ztruck-zzinvoice = t_ztruck-zzinvoice + 1.
MODIFY t_ztruck TRANSPORTING zzinvoice
WHERE zztrkno = t_ztruck-zztrkno.
ENDIF.
ENDLOOP.
UPDATE ztruck FROM TABLE t_ztruck.
ENDFORM. " udate_truck_table