Professional Documents
Culture Documents
* PROGRAM NAME
: Authorized Contracts
*
* APPLICATION NAME : SD
*
* SUBSYSTEM
:
*
* AUTHOR
: gkgoh
*
* TRANSACTION
: ZV08A
*
* TABLES UPDATED
: None
*
* REPORTS
: Authorized Contracts
*
* INPUT FILES
: None
*
* OUTPUT FILES
: Yes
*
* SAP RELEASE
: 4.0B
*
* PROGRAM ID
: ZV_AUTHORIZED_CONTRACTS_AUTO
*
* REFERENCED PROGRAM : ZV_AUTHORIZED_CONTRACTS
*
* PROGRAM DESCRIPTION : This program determines the contracts that
*
*
have been authorized. It generates a report in *
*
the unix server contains authorized contracts *
*
for all the selected distis. There is a shell *
*
script in ecc6prd that segregates the report *
*
and emails them separately to each selected *
*
disti.
*----------------------------------------------------------------------*
* LOG #
| DATE | AUTHOR
| DESCRIPTION
*
*----------------------------------------------------------------------*
* 001
| 8/2/11 | gkgoh
| All the enhancements of the
*
*
original report are marked with *
*
tag gkg080211.
*----------------------------------------------------------------------*
REPORT zv_authorized_contracts_auto LINE-SIZE 275
LINE-COUNT 65.
TABLES : vbak,
" Sales Document: Header Data
vbap,
" Sales Document: Item Data
knvv,
" Customer Master Sales Data
jest,
" Object status
kna1,
" General Data in Customer Master
vbpa,
" Sales Document: Partner
jcds, " Change Documents for System/User Statuses (Table JEST)
vbkd,
" Sales Document: Business Data
konv,
konp.
SELECT-OPTIONS : s_guebg FOR vbak-guebg NO-EXTENSION NO INTERVALS,
s_gueen FOR vbak-gueen NO-EXTENSION NO INTERVALS,
*
s_erdat for vbak-erdat obligatory,"contract creation dt
*
s_erdat for vbak-erdat, "contract creation dt
*erdat added back 7/3/02, Requestor: K.Vosburg
s_matkl FOR vbap-matkl, " material group
*matnr added 5/27 for idt material, requestor: K.Vosburg
s_matnr FOR vbap-matnr, "IDT material number
s_ernam FOR vbak-ernam, " contract created by
s_kunnr FOR vbak-kunnr,
" customer
*
s_pernr FOR vbpa-pernr obligatory, " territory code
s_pernr FOR vbpa-pernr, " non-oblig. terr. code.
*vbak-ktext added 10/30/03 for description, requestor: K.Vosburg
s_ktext FOR vbak-ktext, "description
s_vkbur FOR vbak-vkbur, " sales office
s_bzirk FOR knvv-bzirk, " sales district "DEVK920169 in
s_erdat FOR vbak-erdat, "contract creation dt
s_vkorg FOR vbak-vkorg,
" sales org
s_azrcon FOR vbak-zazr_contract.
PARAMETER : chk_auth AS CHECKBOX. " to display only authorized conts.
* Begin of mod gkg080211
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_file TYPE rlgrap-filename DEFAULT '/erp/interface/interfaceout/zv08/zv08.csv'.
SELECTION-SCREEN END OF BLOCK b1.
* End of mod gkg080211
*--int. table to store SO # that have changed in the specified dt. range
DATA : BEGIN OF tab0 OCCURS 10,
vbeln LIKE vbak-vbeln,
" contracts
posnr LIKE vbap-posnr.
" item
DATA : END OF tab0.
*--int. table to store the final data that has to be displayed
DATA : BEGIN OF itab OCCURS 10,
kunnr LIKE vbak-kunnr,
" customer
pernr LIKE vbpa-pernr,
" Sales terrotory
vbeln LIKE vbak-vbeln,
" contract
posnr LIKE vbap-posnr,
" contract item
vkorg LIKE vbak-vkorg,
" sales org
vtweg LIKE vbak-vtweg,
" Distribution channel
spart LIKE vbak-spart,
" Division
bzirk LIKE knvv-bzirk,
" sales district "DEVK920169 in
matnr LIKE vbap-matnr,
" material #
knumv LIKE vbak-knumv,
bstkd LIKE vbkd-bstkd,
" Customer purchase order number
ktext LIKE vbak-ktext,
" Description
guebg LIKE vbak-guebg,
" valid from
gueen LIKE vbak-gueen,
" valid to
zmeng TYPE p DECIMALS 0,
" target qty
netpr LIKE vbap-netpr,
" net price
zz_unit_price LIKE vbap-zz_unit_price,
"KC060522
kzwi5 LIKE vbap-kzwi5,
" Resale total Price
udate LIKE jcds-udate,
" change dt
*
book_price LIKE konv-kbetr, "Book price
"KC060522
book_price LIKE vbap-zz_unit_price,
"KC060522
*
amm_price LIKE konv-kbetr, "Approved Price
"KC060522
amm_price LIKE vbap-zz_unit_price,
"KC060522
open_qty TYPE p DECIMALS 0, "PGIed Qty
zrsl_price LIKE vbap-zz_unit_price,
"KC060522
zazr_contract LIKE vbap-zazr_contract,
zazr_item LIKE vbap-zazr_item,
text(14).
DATA : END OF itab.
DATA: BEGIN OF terr_c10 OCCURS 0,
sign(1),
options(2),
low(10),
high(10).
DATA: END OF terr_c10.
DATA : fname(20),
fvalue LIKE vbak-vbeln,
true TYPE i VALUE 1,
false TYPE i VALUE 0,
err_rc TYPE i,
terr_i TYPE i VALUE 0,
terr_char(10).
* Begin of mod gkg080211
TYPES: BEGIN OF ty_rpt,
kunnr TYPE vbak-kunnr,
vbeln TYPE vbak-vbeln,
posnr TYPE vbap-posnr,
"Customer
"Debit #
"Item #
""DEVK920169 in
* insert - dtr10232001
* check rep authorization to perform query/report
err_rc = false.
* convert field types (I know - its odd...)
* strip the 0's off the territory number ...
LOOP AT s_pernr.
terr_c10 = s_pernr.
terr_i = s_pernr-low.
terr_char = terr_i.
CONDENSE terr_char NO-GAPS.
terr_c10-low = terr_char.
terr_i = s_pernr-low.
terr_char = terr_i.
CONDENSE terr_char NO-GAPS.
terr_c10-high = terr_char.
APPEND terr_c10.
ENDLOOP.
CALL FUNCTION 'Z_CHECK_REP_AUTH'
TABLES
s_pernr = terr_c10
CHANGING
err_rc = err_rc.
IF err_rc = true.
EXIT.
ENDIF.
* end isnert - dtr10232001
PERFORM data_select.
END-OF-SELECTION.
PERFORM write_output.
* Begin of mod gkg080211
IF p_file IS NOT INITIAL.
PERFORM write_file.
ENDIF.
* End of mod gkg080211
*top-of-page.
* perform write_header. " header that repeats for every page
AT LINE-SELECTION.
GET CURSOR FIELD fname VALUE fvalue.
PERFORM call_va43.
*&---------------------------------------------------------------------*
*&
Form DATA_SELECT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM data_select.
DATA : lines(3),
" used for DESCRIBE TABLE LINES
p_objnr LIKE jest-objnr, " temp storage of data to select from
" JEST
x_objnr LIKE p_objnr. " temp storage for the obj. # from JCDS
*--get the contracts that have been changed in the specified dt range -*
*Above erdat selection added back in 7/3/02: Requestor:K.Vosburg
*--the OBJNR field in JCDS stores the Contract Info in the form of ----*
*--VB(Contract#)(Item #) ----------------------------------------------*
* select objnr into x_objnr
"DEVK920169 out
*
from jcds
"DEVK920169 out
*
where
"DEVK920169 out
*
udate in s_erdat and
"DEVK920169 out
*
objnr like 'VB%'.
*--first 2 chars of JCDS-OBJNR = 'VB'
*--next 10 chars
= Sales order #
*--next 6 chars
= Item #
* tab0-vbeln = x_objnr+2(10).
"DEVK920169 out
* tab0-posnr = x_objnr+13(6).
"DEVK920169 out
* append tab0. clear tab0.
"DEVK920169 out
* endselect.
"DEVK920169 out
* sort tab0 by vbeln posnr.
"DEVK920169 out
* delete adjacent duplicates from tab0 comparing all fields."DEVK920169
*---get the contracts details for the contracts selected above --------*
*---depending on the selection criteria entered on the screen ---------*
* loop at tab0.
"DEVK920169 out
SELECT f~vbeln f~vtweg f~spart f~kunnr f~guebg f~gueen f~erdat f~vkorg
f~knumv f~ktext p~posnr p~matnr p~zmeng p~netpr p~zz_unit_price
p~kzwi5 p~zazr_contract p~zazr_item
INTO CORRESPONDING FIELDS OF itab
FROM vbak AS f INNER JOIN vbap AS p
ON f~vbeln = p~vbeln
WHERE f~auart = 'ZDQT'
AND f~zazr_contract IN s_azrcon
AND f~ernam IN s_ernam
AND f~erdat IN s_erdat
AND f~vkbur IN s_vkbur
AND f~vkorg IN s_vkorg
AND f~kunnr IN s_kunnr
AND f~guebg IN s_guebg
AND f~gueen IN s_gueen
"DEVK920169 out
*---check if the contracts selected are in the territory code range, if*
*---entered on the selection screen -----------------------------------*
CLEAR lines.
* describe table s_pernr lines lines.
* if lines <> 0.
* loop at itab.
*
select single * from vbpa where vbeln = itab-vbeln
*
and posnr = itab-posnr
*
and parvw = 'VE'.
*
if sy-subrc <> 0.
*
select single * from vbpa where vbeln = itab-vbeln
*
and posnr = '000000'
*
and parvw = 'VE'.
*
endif.
*
if vbpa-pernr in s_pernr.
*
else.
*
delete itab.
* endif.
* endloop.
** endif.
LOOP AT itab.
CLEAR p_objnr.
CONCATENATE 'VB' itab-vbeln itab-posnr INTO p_objnr.
*---Check the status of the Contract----------------------------------*
*---E0001 - Authorized, E0002 - Not Authorized ------------------------*
*---A status is active when the field INACT is space ------------------*
SELECT * FROM jest WHERE objnr = p_objnr
AND stat IN ('E0001', 'E0002')
AND inact = space.
IF jest-stat = 'E0002'.
MOVE 'Y' TO itab-text.
SELECT MAX( udate ) INTO itab-udate
FROM jcds
WHERE objnr = p_objnr
AND stat = jest-stat.
ELSE.
MOVE 'N' TO itab-text.
ENDIF.
PERFORM get_values.
MODIFY itab.
ENDSELECT.
IF sy-subrc <> 0.
MOVE 'N' TO itab-text.
PERFORM get_values.
MODIFY itab.
ENDIF.
CLEAR itab.
ENDLOOP.
ENDFORM.
" DATA_SELECT
*&---------------------------------------------------------------------*
*&
Form WRITE_HEADER
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM write_header.
WRITE :/ 'DI Quote #',
12 'Item',
19 'Customer Name',
40 'Material',
60 'PE',
68 'Quantity',
87 'Book Cost',
104 'AMM',
121 'Unit price',
138 'Extended Price',
155 'Resale Price',
*
*
*
*
*
*
ULINE.
ENDFORM.
" WRITE_HEADER
*&---------------------------------------------------------------------*
*&
Form WRITE_OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM write_output.
247 itab-ktext.
ENDLOOP.
IF sy-subrc <> 0.
MESSAGE i009(zrep).
ENDIF.
ENDFORM.
" WRITE_OUTPUT
*&---------------------------------------------------------------------*
*&
Form CALL_VA43
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM call_va43.
SET PARAMETER ID 'KTN' FIELD fvalue.
CALL TRANSACTION 'VA43' AND SKIP FIRST SCREEN.
ENDFORM.
" CALL_VA43
*&---------------------------------------------------------------------*
*&
Form GET_VALUES
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM get_values.
SELECT SINGLE kbetr waers FROM konv
INTO (konv-kbetr , konv-waers)
"KC060522
WHERE knumv = itab-knumv
"KC060522
AND kposn = itab-posnr
"KC060522
AND kschl = 'ZRSL'.
"KC060522
IF sy-subrc = 0.
"KC060522
IF konv-waers = 'US$'.
"KC060522
itab-zrsl_price = konv-kbetr / 10.
"KC060522
ELSE.
"KC060522
itab-zrsl_price = konv-kbetr.
"KC060522
ENDIF.
"KC060522
ENDIF.
"KC060522
CLEAR konv.
SELECT * FROM konv WHERE knumv = itab-knumv
AND kposn = itab-posnr
AND kschl IN ('ZPR1').
",'ZB00').
PERFORM get_book_value USING konv-kposn konv-stunr
konv-zaehk konv-kschl itab-vbeln.
IF itab-book_price IS INITIAL.
*
SELECT kbetr INTO itab-book_price
"KC060522
*
FROM konp WHERE knumh = konv-knumh.
"KC060522
*
ENDSELECT.
"KC060522
SELECT kbetr konwa
"KC060522
INTO CORRESPONDING FIELDS OF konp
"KC060522
FROM konp WHERE knumh = konv-knumh.
"KC060522
IF konp-konwa = 'US$'.
"KC060522
itab-book_price = konp-kbetr / 10.
"KC060522
ELSE.
"KC060522
itab-book_price = konp-kbetr.
"KC060522
ENDIF.
"KC060522
CLEAR konp.
"KC060522
ENDSELECT.
"KC060522
ENDIF.
* SELECT mxwrt INTO itab-amm_price
"KC060522
*
FROM konp WHERE knumh = konv-knumh.
"KC060522
* ENDSELECT.
"KC060522
SELECT mxwrt konwa
"KC060522
INTO CORRESPONDING FIELDS OF konp
"KC060522
FROM konp WHERE knumh = konv-knumh.
"KC060522
IF konp-konwa = 'US$'.
"KC060522
itab-amm_price = konp-mxwrt / 10.
"KC060522
ELSE.
"KC060522
itab-amm_price = konp-mxwrt.
"KC060522
ENDIF.
"KC060522
ENDSELECT.
"KC060522
ENDSELECT.
ENDFORM.
" GET_VALUES
*&---------------------------------------------------------------------*
*&
Form GET_BOOK_VALUE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_P_KPOSN text
*
*
-->P_P_STUNR text
*
*
-->P_P_ZAEHK text
*
*
-->P_P_KSCHL text
*
*
-->P_P_VBELN text
*
*----------------------------------------------------------------------*
FORM get_book_value USING p_kposn p_stunr p_zaehk p_kschl p_vbeln.
DATA : key LIKE cdpos-tabkey,
objectid LIKE cdhdr-objectid.
DATA:BEGIN OF line OCCURS 5.
INCLUDE STRUCTURE cdred.
DATA:END OF line.
CLEAR key.
CONCATENATE p_kposn p_stunr p_zaehk p_kschl INTO key.
MOVE p_vbeln TO objectid.
CALL FUNCTION 'CHANGEDOCUMENT_READ'
EXPORTING
*
archive_handle
=0
*
changenumber
= ''
objectclass
= 'VERKBELEG'
objectid
= objectid
tablekey
= key
tablename
= 'KONVC'
TABLES
editpos
= line
EXCEPTIONS
no_position_found
=1
wrong_access_to_archive = 2
time_zone_conversion_error = 3
OTHERS
= 4.
READ TABLE line INDEX 1.
IF sy-subrc = 0.
itab-book_price = line-f_old+1(15).
ENDIF.
ENDFORM.
" GET_BOOK_VALUE
*&---------------------------------------------------------------------*
*&
Form INITIALIZE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM initialize.
DATA:date1 LIKE sy-datum,
date2 LIKE sy-datum.
IF NOT s_guebg IS INITIAL.
date1 = s_guebg-low.
REFRESH s_guebg.CLEAR s_guebg.
s_guebg-sign = 'I'.
s_guebg-option = 'GE'.
s_guebg-low = date1.
APPEND s_guebg .
ENDIF.
IF NOT s_gueen IS INITIAL.
date2 = s_gueen-low.
REFRESH s_gueen.CLEAR s_gueen.
s_gueen-sign = 'I'.
s_gueen-option = 'LE'.
s_gueen-low = date2.
APPEND s_gueen.
ENDIF.
ENDFORM.
" INITIALIZE
*&---------------------------------------------------------------------*
*&
Form GET_PERNR
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM get_pernr.
*{ INSERT
NDVK903723
1
* AMOK 05/29/2001 - PE to ZE Conversion
SELECT SINGLE * FROM vbpa WHERE vbeln = itab-vbeln
AND posnr = itab-posnr
AND parvw = 'ZE'.
IF sy-subrc <> 0.
SELECT SINGLE * FROM vbpa WHERE vbeln = itab-vbeln
AND posnr = '000000'
AND parvw = 'ZE'.
ENDIF.
itab-pernr = vbpa-kunnr.
IF itab-pernr IN s_pernr.
" ztericode is in the selected range
ELSE.
CLEAR itab.
ENDIF.
*} INSERT
*{ DELETE
NDVK903723
2
*\
SELECT SINGLE * FROM VBPA WHERE VBELN = ITAB-VBELN
*\
AND POSNR = ITAB-POSNR
*\
AND PARVW = 'VE'.
*\
IF SY-SUBRC <> 0.
*\
SELECT SINGLE * FROM VBPA WHERE VBELN = ITAB-VBELN
*\
AND POSNR = '000000'
*\
AND PARVW = 'VE'.
*\
ENDIF.
*\
IF VBPA-PERNR IN S_PERNR.
*\
ITAB-PERNR = VBPA-PERNR.
*\
ELSE.
*\
CLEAR ITAB.
*\
ENDIF.
*} DELETE
ENDFORM.
" GET_PERNR
*&---------------------------------------------------------------------*
*&
Form GET_PGI_QTY
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM get_open_qty.
DATA:v_rfmng LIKE vbfa-rfmng,
pgi TYPE p DECIMALS 0.
SELECT SUM( rfmng ) INTO v_rfmng FROM vbfa WHERE
vbelv = itab-vbeln AND
posnv = itab-posnr AND
vbtyp_n = 'K'.
pgi = v_rfmng.
itab-open_qty = itab-zmeng - pgi.
CLEAR:v_rfmng,pgi.
ENDFORM.
" GET_PGI_QTY
* Begin mod of gkg080211
*&---------------------------------------------------------------------*
*&
Form WRITE_FILE
*&---------------------------------------------------------------------*
*
Write the report to a file kept in ecc6prd. File path is
*
defined on the selection screen.
*
Segregate the report according to the disti and email to them
*
separately. This is accomplished by using a shell script.
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM write_file .
DATA: l_str TYPE string,
l_zmeng TYPE string,
l_book_price TYPE string,
l_zz_unit_price TYPE string,
l_zrsl_price TYPE string,
l_open_qty TYPE string,
l_guebg(10) TYPE c,
l_gueen(10) TYPE c.
LOOP AT itab.
MOVE-CORRESPONDING itab TO wa_rpt.
APPEND wa_rpt TO it_rpt.
CLEAR: itab, wa_rpt.
ENDLOOP.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
LOOP AT it_rpt INTO wa_rpt.
l_zmeng = wa_rpt-zmeng.
l_book_price = wa_rpt-book_price.
l_zz_unit_price = wa_rpt-zz_unit_price.
l_zrsl_price = wa_rpt-zrsl_price.
l_open_qty = wa_rpt-open_qty.
WRITE wa_rpt-guebg MM/DD/YYYY TO l_guebg.
WRITE wa_rpt-gueen MM/DD/YYYY TO l_gueen.
CONCATENATE wa_rpt-kunnr
wa_rpt-vbeln
wa_rpt-posnr
wa_rpt-matnr
l_zmeng
l_book_price
l_zz_unit_price
l_zrsl_price
l_guebg
l_gueen
l_open_qty
INTO l_str SEPARATED BY ','.
TRANSFER l_str TO p_file.
CLEAR: wa_rpt, l_str.
ENDLOOP.
CLOSE DATASET p_file.
ENDFORM.
" WRITE_FILE
* End of mod gkg080211