Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

spool request

Former Member
0 Likes
1,189

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

4 REPLIES 4
Read only

Former Member
0 Likes
1,023

in the structure field name will ssfcompop-tdnoprev = 'X',

i am passing this one to smartofmr

Read only

0 Likes
1,023

hi seshu,

SUBMIT YHFDBI88 TO SAP-SPOOL

AND RETURN

WITH SELECTION-TABLE SELTAB

IMMEDIATELY ' '

SAP COVER PAGE ' '

this code was used for spool request.....

Read only

0 Likes
1,023

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

Read only

Former Member
0 Likes
1,023

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