2006 Jan 12 4:30 PM
Hi Friends,
I'm now working on a Interface, which will upload the Material Master Data to a .txt file.
Now they have asked me to add the Outsert field in the program to see that too in the file.
Actually there is one existing program which gets the Outserts, so i have to merge these two programs into one.
The outsert(BOM component) is in the table: STPO-IDNRK.
In the selection screen i have 2 parmameters only
1.Valuation Area (MBEW-BWKEY),
2.file path
Now I have to dispaly the outsert part numbers against eachmaterial number.
And the BOMs shd be of 'UNRESTRICTED' type. i.e, STKO-STKTX = UNRESTRICTED.
please help me..
thanks,
kp
Hi Friends,
I'm now working on a Interface, which will upload the Material Master Data to a .txt file.
Now they have asked me to add the Outsert field in the program to see that too in the file.
Actually there is one existing program which gets the Outserts, so i have to merge these two programs into one.
The outsert(BOM component) is in the table: STPO-IDNRK.
In the selection screen i have 2 parmameters only
1.Valuation Area (MBEW-BWKEY),
2.file path
Now I have to dispaly the outsert part numbers against eachmaterial number.
And the BOMs shd be of 'UNRESTRICTED' type. i.e, STKO-STKTX = UNRESTRICTED.
please help me..
thanks,
kp
2006 Jan 12 4:56 PM
Here is a sample program showing how you can join the tables. You can add your condition for STKO-STKTX to the where clause of the select statement.
report zrich_0003 .
data: begin of itab occurs 0,
matnr type mast-matnr,
werks type mast-werks,
posnr type stpo-posnr,
idnrk type stpo-idnrk,
end of itab.
select-options: s_matnr for itab-matnr,
s_werks for itab-werks.
start-of-selection.
select mast~matnr mast~werks stpo~posnr stpo~idnrk
into table itab
from mast
inner join stko
on mast~stlnr = stko~stlnr
and mast~stlal = stko~stlal
inner join stpo
on stko~stlty = stpo~stlty
and stko~stlnr = stpo~stlnr
where mast~matnr in s_matnr
and mast~werks in s_werks.
loop at itab.
write:/ itab-matnr, itab-werks, itab-posnr, itab-idnrk.
endloop.
Regards,
Rich Heilman
2006 Jan 12 5:27 PM
Hi Rich,
Thanks for the reply.......
I have a diffrent thing to work on ........
Have a look on the existing code....
To that I have to add a field - OUTSERT (STPO-IDNRK)...
Let me know if anything is unclear....
REPORT Z2.
Table definitions ----------------------------------------------------
TABLES: AUSP, " Characteristic Values
CABN, " Characteristic
CAWN, " Characteristic values
CAWNT, " Value Texts
LFA1, " Vendor master (general section)
MAKT, " Material Descriptions
MARA, " Material Master: General Data
MARM, " Units of Measure
MBEW, " Material Valuation
MVKE, " Material Master: Sales Data
TVMST, " Materials: SD Status: Texts
TVM3T, " Material pricing group 3: Description
TVM5T, " Material pricing group 5: Description
KOTD001, " Conditions: Substitution - Sample Structure
KONDD. " Material Substitution - Data Division
*----
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TITLE1.
SELECT-OPTIONS: S_BWKEY FOR MBEW-BWKEY
MEMORY ID DEFAULT_BWKEY OBLIGATORY
No-Extension No Intervals.
SELECTION-SCREEN END OF BLOCK B1.
PARAMETERS:
MATLFILE(100) LOWER CASE OBLIGATORY
DEFAULT '/sapinterface/ebus/mfile'.
Constants ------------------------------------------------------------
CONSTANTS:
ZERO_DEC_3 TYPE P DECIMALS 3 VALUE 0,
ZEROS(9) TYPE N VALUE 0,
REC_TYPE(2) VALUE 'MM',
DELIMETER_QUOTE VALUE '"',
BEGIN OF DEFAULTS,
BWTAR LIKE MBEW-BWTAR VALUE SPACE,
VKORG LIKE MVKE-VKORG VALUE '1000',
VTWEG LIKE MVKE-VTWEG VALUE '10',
END OF DEFAULTS.
constants:
c_uncpath_material(43)
value '/sapinterface/unconverted/zvppo102_matlfile',
c_final_path(44)
value '/sapinterface/ebusiness/' ,
c_uncpath(26)
value '/sapinterface/unconverted/' .
*----
Data Elements --------------------------------------------------------
DATA: PROGNAME LIKE SY-REPID,
PROG_START_DATE LIKE SY-DATUM,
PROG_START_TIME LIKE SY-UZEIT,
WRITE_COUNT TYPE I,
OUTFILE(100),
WK_STPRS LIKE MBEW-STPRS,
WK_AUSP LIKE AUSP,
WK_CABN LIKE CABN,
WK_MARA LIKE MARA,
WK_MARM LIKE MARM.
DATA: BEGIN OF MATERIAL_DATA,
DELIMITER_START,
REC_TYPE LIKE REC_TYPE,
MATNR LIKE MARA-MATNR,
MAKTX LIKE MAKT-MAKTX,
SMATN LIKE KONDD-SMATN,
SMATN_START LIKE KOTD001-DATAB,
SMATN_END LIKE KOTD001-DATBI,
VMSTA LIKE MVKE-VMSTA,
VMSTB LIKE TVMST-VMSTB,
LAEDA LIKE MARA-LAEDA,
AENAM LIKE MARA-AENAM,
VENDOR_NUM LIKE MARA-MFRNR,
VENDOR_NM LIKE LFA1-NAME1,
PROD_LINE_CD LIKE MVKE-MVGR5,
PROD_LINE_DSC(20),
DEA_SCH_ID LIKE MVKE-MVGR3,
DEA_SCH_DSC(20),
NORMT LIKE MARA-NORMT,
STPRS(13),
LOGO_DESC(30),
PRESCRIPT_FLAG(1),
THER_CLASS(5),
THER_CLASS_DSC(30),
THER_SUB_CLASS(5),
THER_SUB_CLASS_DSC(30),
THER_EQUIV(2),
ITEM_PACKAGE_SIZE(10),
ITEM_PACKAGE_TYPE(2),
DOSAGE_FORM(3),
DOSAGE_FORM_DSC(30),
DOSE_ADMIN(3),
DOSE_ADMIN_DSC(30),
BOTTLE_SIZE(6),
BRAND_NAME(25),
BRAND_DISTR(20),
BRAND_COLOR(20),
BRAND_SHAPE(15),
ANDA_DATE LIKE SY-DATUM,
ANDA_NUMBER(9),
BIO_STUDY,
DESI_INDICATOR,
DRUG_TERM_DT LIKE SY-DATUM,
FDA_APPRV_DT LIKE SY-DATUM,
ITEM_REG_NM(30),
MARKET_DT LIKE SY-DATUM,
PRODUCT_COLOR(20),
PRODUCT_FLAVOR(15),
PRODUCT_SHAPE(15),
PRODUCT_STRENGTH(18),
MEINS LIKE MARA-MEINS,
BEGIN OF BASE_MEASURES,
WEIGHT(15), "* like mara-brgew
WT_UNIT LIKE MARA-GEWEI,
VOLUM(15), "* like mara-volum,
VOL_UNIT LIKE MARA-VOLEH,
PKG_LENGTH(15), "* like mara-laeng
PKG_WIDTH(15), "* like mara-breit
PKG_HEIGHT(15), "* like mara-hoehe
DIM_UNIT LIKE MARA-MEABM,
END OF BASE_MEASURES,
INR_CRTN_COUNT(6), "* like marm-umrez
INR_CRTN_MEASURES LIKE MATERIAL_DATA-BASE_MEASURES,
CASE_COUNT(6), "* like marm-umrez
CASE_MEASURES LIKE MATERIAL_DATA-BASE_MEASURES,
ITEM_NOTE(500),
DELIMITER_END,
END OF MATERIAL_DATA.
DATA : F_M_uncFILE(100) . " Material file(unconverted)
DATA: W_BRM(3) Value 'SVG'.
*----
INITIALIZATION.
*----
*--- Initialize text fields for selection screen.
TITLE1 = 'Set Default'.
SET PARAMETER ID 'DEFAULT_BWKEY' FIELD W_SVG.
START-OF-SELECTION.
*----
PERFORM INITIAL_STUFF.
PERFORM MAIN_SELECT.
PERFORM WRAPUP.
*----
Select all material master records for finished products.
*----
FORM MAIN_SELECT.
SELECT MATNR
BISMT
LAEDA
AENAM
MEINS
BRGEW
GEWEI
VOLUM
VOLEH
LAENG
BREIT
HOEHE
MEABM
NORMT
INTO (MATERIAL_DATA-MATNR,
MATERIAL_DATA-SMATN,
MATERIAL_DATA-LAEDA,
MATERIAL_DATA-AENAM,
MATERIAL_DATA-MEINS,
WK_MARA-BRGEW,
MATERIAL_DATA-BASE_MEASURES-WT_UNIT,
WK_MARA-VOLUM,
MATERIAL_DATA-BASE_MEASURES-VOL_UNIT,
WK_MARA-LAENG,
WK_MARA-BREIT,
WK_MARA-HOEHE,
MATERIAL_DATA-BASE_MEASURES-DIM_UNIT,
MATERIAL_DATA-NORMT)
FROM MARA
WHERE MTART = 'FERT' "* Finished product
OR MTART = 'HAWA' "NIELSSA1 01/25/00
ORDER BY MATNR.
Assign default values for fields which may not be available.
PERFORM ASSIGN_DEFAULTS.
Get related data from other tables.
PERFORM GET_MATERIAL_DESCRIPTION.
PERFORM GET_STANDARD_PRICE.
PERFORM GET_MVKE.
PERFORM GET_MARM.
PERFORM GET_AUSP.
PERFORM GET_SUBSTITUTE_MATNR.
PERFORM GET_BASIC_DATA_TEXT.
PERFORM GET_VENDOR_NAME.
Check for double quotation, Replace the double quotation with a space
SEARCH MATERIAL_DATA FOR '"'.
IF SY-SUBRC = 0.
REPLACE '"' WITH ' ' INTO MATERIAL_DATA.
ENDIF.
MATERIAL_DATA-DELIMITER_START = DELIMETER_QUOTE.
MATERIAL_DATA-DELIMITER_END = DELIMETER_QUOTE.
Write output record.
ADD 1 TO WRITE_COUNT.
TRANSFER MATERIAL_DATA TO F_M_UNCFILE .
Reinitialize work variables.
CLEAR: MATERIAL_DATA,
WK_STPRS,
WK_AUSP,
WK_CABN,
WK_MARA,
WK_MARM.
ENDSELECT.
ENDFORM. " main_select
*----
Assign numeric fields to character fields for output.
*----
FORM ASSIGN_DEFAULTS.
MATERIAL_DATA-REC_TYPE = REC_TYPE.
MATERIAL_DATA-BASE_MEASURES-WEIGHT = WK_MARA-BRGEW.
MATERIAL_DATA-BASE_MEASURES-VOLUM = WK_MARA-VOLUM.
MATERIAL_DATA-BASE_MEASURES-PKG_LENGTH = WK_MARA-LAENG.
MATERIAL_DATA-BASE_MEASURES-PKG_WIDTH = WK_MARA-BREIT.
MATERIAL_DATA-BASE_MEASURES-PKG_HEIGHT = WK_MARA-HOEHE.
Set character fields to 0 in case not found on DB.
MATERIAL_DATA-ANDA_NUMBER = ZEROS. "* ???
MATERIAL_DATA-ITEM_PACKAGE_SIZE = 0.
MATERIAL_DATA-INR_CRTN_COUNT = 0.
MATERIAL_DATA-CASE_COUNT = 0.
MATERIAL_DATA-INR_CRTN_MEASURES-WEIGHT = ZERO_DEC_3.
MATERIAL_DATA-INR_CRTN_MEASURES-VOLUM = ZERO_DEC_3.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_LENGTH = ZERO_DEC_3.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_WIDTH = ZERO_DEC_3.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_HEIGHT = ZERO_DEC_3.
MOVE-CORRESPONDING MATERIAL_DATA-INR_CRTN_MEASURES
TO MATERIAL_DATA-CASE_MEASURES.
ENDFORM. " assign_defaults
*----
FORM GET_VENDOR_NAME.
SELECT SINGLE NAME1
INTO MATERIAL_DATA-VENDOR_NM
FROM LFA1
WHERE LIFNR = MATERIAL_DATA-VENDOR_NUM.
ENDFORM. " get_vendor_name
*----
FORM GET_MATERIAL_DESCRIPTION.
SELECT SINGLE MAKTX
INTO MATERIAL_DATA-MAKTX
FROM MAKT
WHERE MATNR = MATERIAL_DATA-MATNR
AND SPRAS = SY-LANGU.
ENDFORM. " get_material_description
*----
FORM GET_STANDARD_PRICE.
data: l_vprsv like mbew-vprsv,
l_verpr like mbew-verpr.
clear: l_Vprsv, l_verpr.
SELECT SINGLE VPRSV VERPR stprs
into (l_vprsv, l_verpr, WK_stprs)
FROM MBEW
WHERE MATNR = MATERIAL_DATA-MATNR
AND BWKEY IN S_BWKEY
AND BWTAR = DEFAULTS-BWTAR.
IF L_VPRSV = 'V'.
WK_STPRS = L_VERPR.
ENDIF.
MATERIAL_DATA-STPRS = WK_STPRS.
ENDFORM. " get_standard_price
*----
FORM GET_MVKE.
SELECT SINGLE MVGR3
VMSTA
MVGR5
INTO (MATERIAL_DATA-DEA_SCH_ID,
MATERIAL_DATA-VMSTA,
MATERIAL_DATA-PROD_LINE_CD)
FROM MVKE
WHERE MATNR = MATERIAL_DATA-MATNR
AND VKORG = DEFAULTS-VKORG
AND VTWEG = DEFAULTS-VTWEG.
IF SY-SUBRC = 0.
PERFORM GET_DEA_ID_DSC.
PERFORM GET_PROD_LINE_DSC.
PERFORM GET_VMSTB.
ENDIF.
ENDFORM. " get_mvke
*----
FORM GET_DEA_ID_DSC.
SELECT SINGLE BEZEI
INTO MATERIAL_DATA-DEA_SCH_DSC
FROM TVM3T
WHERE SPRAS = SY-LANGU
AND MVGR3 = MATERIAL_DATA-DEA_SCH_ID.
ENDFORM. " get_dea_id_dsc
*----
FORM GET_PROD_LINE_DSC.
SELECT SINGLE BEZEI
INTO MATERIAL_DATA-PROD_LINE_DSC
FROM TVM5T
WHERE SPRAS = SY-LANGU
AND MVGR5 = MATERIAL_DATA-PROD_LINE_CD.
ENDFORM. " form get_prod_line_dsc
*----
FORM GET_VMSTB.
SELECT SINGLE VMSTB
INTO MATERIAL_DATA-VMSTB
FROM TVMST
WHERE SPRAS = SY-LANGU
AND VMSTA = MATERIAL_DATA-VMSTA.
ENDFORM. " form get_vmstb
*----
Get measurements, etc. for inner carton and case from the MARM table.
*----
FORM GET_MARM.
SELECT MEINH " alternative unit of measure for stockkeeping unit
UMREZ " numerator for conversion to base units of measure
LAENG " length
BREIT " width
HOEHE " height
MEABM " unit of dimension for length/width/height
VOLUM " volume
VOLEH " volume unit
BRGEW " gross weight
GEWEI " unit of weight
INTO (WK_MARM-MEINH,
WK_MARM-UMREZ,
WK_MARM-LAENG,
WK_MARM-BREIT,
WK_MARM-HOEHE,
WK_MARM-MEABM,
WK_MARM-VOLUM,
WK_MARM-VOLEH,
WK_MARM-BRGEW,
WK_MARM-GEWEI)
FROM MARM
WHERE MATNR = MATERIAL_DATA-MATNR
AND MEINH IN ('CS', 'PAK').
PERFORM EVALUATE_MEINH.
CLEAR WK_MARM.
ENDSELECT.
ENDFORM. " get_marm
*----
Populate output record fields based on alternative unit of measure.
*----
FORM EVALUATE_MEINH.
CASE WK_MARM-MEINH.
WHEN 'CS'.
MATERIAL_DATA-CASE_COUNT = WK_MARM-UMREZ.
MATERIAL_DATA-CASE_MEASURES-WEIGHT = WK_MARM-BRGEW.
MATERIAL_DATA-CASE_MEASURES-WT_UNIT = WK_MARM-GEWEI.
MATERIAL_DATA-CASE_MEASURES-VOLUM = WK_MARM-VOLUM.
MATERIAL_DATA-CASE_MEASURES-VOL_UNIT = WK_MARM-VOLEH.
MATERIAL_DATA-CASE_MEASURES-PKG_LENGTH = WK_MARM-LAENG.
MATERIAL_DATA-CASE_MEASURES-PKG_WIDTH = WK_MARM-BREIT.
MATERIAL_DATA-CASE_MEASURES-PKG_HEIGHT = WK_MARM-HOEHE.
MATERIAL_DATA-CASE_MEASURES-DIM_UNIT = WK_MARM-MEABM.
WHEN 'PAK'.
MATERIAL_DATA-INR_CRTN_COUNT = WK_MARM-UMREZ.
MATERIAL_DATA-INR_CRTN_MEASURES-WEIGHT = WK_MARM-BRGEW.
MATERIAL_DATA-INR_CRTN_MEASURES-WT_UNIT = WK_MARM-GEWEI.
MATERIAL_DATA-INR_CRTN_MEASURES-VOLUM = WK_MARM-VOLUM.
MATERIAL_DATA-INR_CRTN_MEASURES-VOL_UNIT = WK_MARM-VOLEH.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_LENGTH = WK_MARM-LAENG.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_WIDTH = WK_MARM-BREIT.
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_HEIGHT = WK_MARM-HOEHE.
MATERIAL_DATA-INR_CRTN_MEASURES-DIM_UNIT = WK_MARM-MEABM.
ENDCASE.
ENDFORM. " evaluate_meinh
*----
Get characterics from the AUSP & CABN tables.
*----
FORM GET_AUSP.
*--- Get object number for classification lookup.
data: l_objek like ausp-objek.
clear l_objek.
select cuobj into l_objek from inob up to 1 rows
where klart = '001'
and obtab = 'MARA'
and objek = material_data-matnr.
endselect.
SELECT A~ATINN " internal characteristic
A~ATWRT " characteristic value
A~ATAWE " unit of measurement
A~ATAW1 " unit of measurement
A~ATFLV " internal floating point from (value if date)
C~ATNAM " characteristic name
INTO (WK_AUSP-ATINN,
WK_AUSP-ATWRT,
WK_AUSP-ATAWE,
WK_AUSP-ATAW1,
WK_AUSP-ATFLV,
WK_CABN-ATNAM)
FROM AUSP AS A INNER JOIN
CABN AS C ON AATINN = CATINN
where a~objek = l_objek
AND C~ATNAM LIKE 'MM_%'
AND A~LKENZ = SPACE.
PERFORM EVALUATE_CHARACTERISTIC.
ENDSELECT.
ENDFORM. " get_ausp
*----
Populate output record fields based on characteristic type.
*----
FORM EVALUATE_CHARACTERISTIC.
DATA: SIZE_TEMP TYPE I. "NIELSSA1 01/31/00
CASE WK_CABN-ATNAM.
when 'MM_BOTTLE_SIZE'.
MATERIAL_DATA-BOTTLE_SIZE = WK_AUSP-ATWRT.
when 'MM_BRAND_COLOR'.
MATERIAL_DATA-BRAND_COLOR = WK_AUSP-ATWRT.
when 'MM_BRAND_DISTR'.
WHEN 'MM_BRAND_DISTRIBUTOR'. "NIELSSA1 01/25/00
MATERIAL_DATA-BRAND_DISTR = WK_AUSP-ATWRT.
when 'MM_BRAND_NAME'.
MATERIAL_DATA-BRAND_NAME = WK_AUSP-ATWRT.
when 'MM_BRAND_SHAPE'.
MATERIAL_DATA-BRAND_SHAPE = WK_AUSP-ATWRT.
WHEN 'MM_DOSAGE_FORM'.
MATERIAL_DATA-DOSAGE_FORM = WK_AUSP-ATWRT.
PERFORM GET_CHARACTERISTIC_DSC
USING WK_AUSP-ATINN
WK_AUSP-ATWRT
CHANGING MATERIAL_DATA-DOSAGE_FORM_DSC.
when 'MM_DOSE_ADMINISTRATION'.
MATERIAL_DATA-DOSE_ADMIN = WK_AUSP-ATWRT.
PERFORM GET_CHARACTERISTIC_DSC
USING WK_AUSP-ATINN
WK_AUSP-ATWRT
CHANGING MATERIAL_DATA-DOSE_ADMIN_DSC.
WHEN 'MM_ITEM_PACKAGE_SIZE'.
SIZE_TEMP = WK_AUSP-ATFLV.
MATERIAL_DATA-ITEM_PACKAGE_SIZE = SIZE_TEMP.
WHEN 'MM_ITEM_PACKAGE_TYPE'.
MATERIAL_DATA-ITEM_PACKAGE_TYPE = WK_AUSP-ATWRT.
when 'MM_LOGO_DESC'.
MATERIAL_DATA-LOGO_DESC = WK_AUSP-ATWRT.
when 'MM_PRESCRIPTION_FLAG'.
MATERIAL_DATA-PRESCRIPT_FLAG = WK_AUSP-ATWRT.
when 'MM_THERAPEUTIC_CLASS'.
MATERIAL_DATA-THER_CLASS = WK_AUSP-ATWRT.
PERFORM GET_CHARACTERISTIC_DSC
USING WK_AUSP-ATINN
WK_AUSP-ATWRT
CHANGING MATERIAL_DATA-THER_CLASS_DSC.
when 'MM_THERAPEUTIC_SUB_CLASS'.
MATERIAL_DATA-THER_SUB_CLASS = WK_AUSP-ATWRT.
PERFORM GET_CHARACTERISTIC_DSC
USING WK_AUSP-ATINN
WK_AUSP-ATWRT
CHANGING MATERIAL_DATA-THER_SUB_CLASS_DSC.
WHEN 'MM_THERAPEUTIC_RATING'.
MATERIAL_DATA-THER_EQUIV = WK_AUSP-ATWRT.
when 'MM_ANDA_DATE'.
PERFORM CONVERT_TO_DATE USING WK_AUSP-ATFLV
CHANGING MATERIAL_DATA-ANDA_DATE.
when 'MM_ANDA_NUMBER'.
MATERIAL_DATA-ANDA_NUMBER = WK_AUSP-ATWRT.
when 'MM_BIO_STUDY'.
MATERIAL_DATA-BIO_STUDY = WK_AUSP-ATWRT.
when 'MM_DESI_INDICATOR'.
MATERIAL_DATA-DESI_INDICATOR = WK_AUSP-ATWRT.
when 'MM_DRUG_TERMINATION_DATE'.
PERFORM CONVERT_TO_DATE USING WK_AUSP-ATFLV
CHANGING MATERIAL_DATA-DRUG_TERM_DT.
when 'MM_FDA_APPROVAL_DATE'.
PERFORM CONVERT_TO_DATE USING WK_AUSP-ATFLV
CHANGING MATERIAL_DATA-FDA_APPRV_DT.
when 'MM_ITEM_REGULATORY_NAME'.
MATERIAL_DATA-ITEM_REG_NM = WK_AUSP-ATWRT.
when 'MM_MARKET_DATE'.
PERFORM CONVERT_TO_DATE USING WK_AUSP-ATFLV
CHANGING MATERIAL_DATA-MARKET_DT.
when 'MM_PRODUCT_COLOR'.
MATERIAL_DATA-PRODUCT_COLOR = WK_AUSP-ATWRT.
when 'MM_PRODUCT_FLAVOR'.
MATERIAL_DATA-PRODUCT_FLAVOR = WK_AUSP-ATWRT.
when 'MM_PRODUCT_SHAPE'.
MATERIAL_DATA-PRODUCT_SHAPE = WK_AUSP-ATWRT.
when 'MM_PRODUCT_STRENGTH'.
MATERIAL_DATA-PRODUCT_STRENGTH = WK_AUSP-ATWRT.
WHEN 'MM_VENDOR'.
MATERIAL_DATA-VENDOR_NUM = WK_AUSP-ATWRT.
ENDCASE.
CLEAR SIZE_TEMP.
ENDFORM. " evaluate_characteristic
*----
Get descriptive text from CAWN & CAWNT for characteristics.
*----
FORM GET_CHARACTERISTIC_DSC USING PARM_ATINN
PARM_ATWRT
CHANGING PARM_DSC_TEXT.
CLEAR PARM_DSC_TEXT.
SELECT SINGLE ATWTB
INTO PARM_DSC_TEXT
FROM CAWN AS C1 INNER JOIN
CAWNT AS C2 ON C1ATINN = C2ATINN
AND C1ATZHL = C2ATZHL
WHERE C1~ATINN = PARM_ATINN
AND C1~ATWRT = PARM_ATWRT
AND C2~SPRAS = SY-LANGU
AND C2~ADZHL = 0.
ENDFORM. " get_characteristic_dsc
*----
Call function CTCV_CONVERT_FLOAT_TO_DATE to convert floating point
number to a date in yyyymmdd format.
*----
form convert_to_date using date
changing conv_date.
clear conv_date.
data: wrk_date(30) type c."Format YYYYMMDD changing it to MMDDYYYY
call function 'CTCV_CONVERT_FLOAT_TO_DATE'
EXPORTING
float = date
IMPORTING
date = wrk_date
EXCEPTIONS
others = 1.
CONV_DATE = WRK_DATE.
ENDFORM. " convert_to_date
*----
Get substitute material number.
*----
FORM GET_SUBSTITUTE_MATNR.
SELECT SINGLE SMATN
DATAB
DATBI
INTO (MATERIAL_DATA-SMATN,
MATERIAL_DATA-SMATN_START,
MATERIAL_DATA-SMATN_END)
FROM KOTD001 INNER JOIN
KONDD ON KOTD001~KNUMH = KONDD~KNUMH
WHERE KAPPL = 'V' "* Sales/Distribution
AND KSCHL = 'A001' "* Material Entered
AND MATWA = MATERIAL_DATA-MATNR
AND DATBI >= SY-DATUM
AND DATAB <= SY-DATUM
AND SUGRD = SPACE.
ENDFORM. " get_substitute_matnr.
*----
Get basic data text for material item note.
If this is longer than 500 bytes, it will be truncated at 500.
*----
FORM GET_BASIC_DATA_TEXT.
DATA: BEGIN OF TEXT_HEADER.
INCLUDE STRUCTURE THEAD. "* SAPscript: Text Header
DATA: END OF TEXT_HEADER.
DATA: BEGIN OF TEXT_LINES OCCURS 100.
INCLUDE STRUCTURE TLINE. "* SAPscript: text lines
DATA: END OF TEXT_LINES.
DATA: ITEM_NOTE_LENGTH TYPE I.
Set up text header for call to READ_TEXT.
TEXT_HEADER-TDOBJECT = 'MATERIAL'.
TEXT_HEADER-TDNAME = MATERIAL_DATA-MATNR.
TEXT_HEADER-TDID = 'GRUN'. "* Basic data text
TEXT_HEADER-TDSPRAS = SY-LANGU.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = TEXT_HEADER-TDID
LANGUAGE = TEXT_HEADER-TDSPRAS
NAME = TEXT_HEADER-TDNAME
OBJECT = TEXT_HEADER-TDOBJECT
ARCHIVE_HANDLE = 0
IMPORTING
HEADER =
TABLES
LINES = TEXT_LINES
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
CASE SY-SUBRC.
WHEN 0.
LOOP AT TEXT_LINES.
IF SY-TABIX = 1.
MATERIAL_DATA-ITEM_NOTE = TEXT_LINES-TDLINE.
ELSE.
Pass up to 500 bytes to Siebel.
ITEM_NOTE_LENGTH = STRLEN( MATERIAL_DATA-ITEM_NOTE ).
IF ITEM_NOTE_LENGTH > 498.
EXIT.
ELSE.
CONCATENATE MATERIAL_DATA-ITEM_NOTE
TEXT_LINES-TDLINE
INTO MATERIAL_DATA-ITEM_NOTE
SEPARATED BY SPACE.
ENDIF.
ENDIF.
ENDLOOP.
WHEN 4.
Not found; this is normal if no text was entered.
WHEN OTHERS.
MESSAGE E000(38) WITH 'Bad call to function READ_TEXT'.
ENDCASE.
ENDFORM. " get_substitute_matnr
*----
Open files, set initial conditions, etc.
*----
FORM INITIAL_STUFF.
data : w_length type i . " MUDIGAN1 DEVK991428
PROGNAME = SY-REPID.
WRITE: / 'Program: ', PROGNAME.
WRITE: / 'Execution start date: ', SY-DATUM.
WRITE: / 'Execution start time: ', SY-UZEIT.
WRITE: / .
CALL FUNCTION 'Z_SET_INTERFACE_FILENAME'
EXPORTING
INTERFACE_NAME = MATLFILE
DATE_TIME_SW = 'X'
EXTENSION_TYPE = 'txt'
IMPORTING
PATHNAME = OUTFILE
EXCEPTIONS
OTHERS = 1.
----
f_m_uncfile = outfile .
clear w_length.
w_length = strlen( matlfile ).
replace matlfile with c_uncpath_material into F_M_UNCFILE length
w_length .
open dataset F_m_UNCFILE for output in text mode .
if sy-subrc <> 0 .
MESSAGE E000(38) WITH 'Unable to open file ' F_m_UNCFILE.
endif.
ENDFORM. " initial_stuff.
*----
Close files, etc.
*----
FORM WRAPUP.
CLOSE DATASET F_M_UNCFILE.
PERFORM CONVERT_FILE.
WRITE: / 'Material interface file name: ', OUTFILE,
/,
/ 'Number of records written to material file: ', WRITE_COUNT.
endform.
*----
This form is included for testing and is performed if the test_rec
checkbox is checked.
*----
FORM WRITE_FORMATTED_TEST_RECORD.
WRITE: /,
/ 'Beginning of new record :',
/ 'Start Delimiter :|' NO-GAP,
MATERIAL_DATA-DELIMITER_START NO-GAP, '|',
/ 'Record Type :|' NO-GAP,
MATERIAL_DATA-REC_TYPE NO-GAP, '|',
/ 'Material Number :|' NO-GAP,
MATERIAL_DATA-MATNR NO-GAP USING NO EDIT MASK, '|',
/ 'Material Description :|' NO-GAP,
MATERIAL_DATA-MAKTX NO-GAP, '|',
/ 'Substitute Material Number :|' NO-GAP,
MATERIAL_DATA-SMATN NO-GAP, '|',
/ 'Substitute Start Date :|' NO-GAP,
MATERIAL_DATA-SMATN_START NO-GAP, '|',
/ 'Substitute End Date :|' NO-GAP,
MATERIAL_DATA-SMATN_END NO-GAP, '|',
/ 'Status Code :|' NO-GAP,
MATERIAL_DATA-VMSTA NO-GAP, '|',
/ 'Status Description :|' NO-GAP,
MATERIAL_DATA-VMSTB NO-GAP, '|',
/ 'Date of last change :|' NO-GAP,
MATERIAL_DATA-LAEDA NO-GAP, '|',
/ 'User who changed record :|' NO-GAP,
MATERIAL_DATA-AENAM NO-GAP, '|',
/ 'Manufacturer Number :|' NO-GAP,
MATERIAL_DATA-VENDOR_NUM NO-GAP, '|',
/ 'Vendor Name :|' NO-GAP,
MATERIAL_DATA-VENDOR_NM NO-GAP, '|',
/ 'Product Line Code :|' NO-GAP,
MATERIAL_DATA-PROD_LINE_CD NO-GAP, '|',
/ 'Product Line Description :|' NO-GAP,
MATERIAL_DATA-PROD_LINE_DSC NO-GAP, '|',
/ 'DEA Schedule ID :|' NO-GAP,
MATERIAL_DATA-DEA_SCH_ID NO-GAP, '|',
/ 'DEA Schedule Description :|' NO-GAP,
MATERIAL_DATA-DEA_SCH_DSC NO-GAP, '|',
/ 'Labeller Code :|' NO-GAP,
MATERIAL_DATA-NORMT NO-GAP, '|',
/ 'Standard Price :|' NO-GAP,
MATERIAL_DATA-STPRS NO-GAP, '|',
/ 'Logo Description :|' NO-GAP,
MATERIAL_DATA-LOGO_DESC NO-GAP, '|',
/ 'Prescription Flag :|' NO-GAP,
MATERIAL_DATA-PRESCRIPT_FLAG NO-GAP, '|',
/ 'Therapeutic Class :|' NO-GAP,
MATERIAL_DATA-THER_CLASS NO-GAP, '|',
/ 'Therapeutic Class Description :|' NO-GAP,
MATERIAL_DATA-THER_CLASS_DSC NO-GAP, '|',
/ 'Therapeutic Subclass :|' NO-GAP,
MATERIAL_DATA-THER_SUB_CLASS NO-GAP, '|',
/ 'Therapeutic Subclass Description:|' NO-GAP,
MATERIAL_DATA-THER_SUB_CLASS_DSC NO-GAP, '|',
/ 'Therapeutic Equivalence :|' NO-GAP,
MATERIAL_DATA-THER_EQUIV NO-GAP, '|',
/ 'Item Package Size :|' NO-GAP,
MATERIAL_DATA-ITEM_PACKAGE_SIZE NO-GAP, '|',
/ 'Item Package Type :|' NO-GAP,
MATERIAL_DATA-ITEM_PACKAGE_TYPE NO-GAP, '|',
/ 'Dosage Form :|' NO-GAP,
MATERIAL_DATA-DOSAGE_FORM NO-GAP, '|',
/ 'Dosage Form Description :|' NO-GAP,
MATERIAL_DATA-DOSAGE_FORM_DSC NO-GAP, '|',
/ 'Dose Administration :|' NO-GAP,
MATERIAL_DATA-DOSE_ADMIN NO-GAP, '|',
/ 'Dose Administration Description :|' NO-GAP,
MATERIAL_DATA-DOSE_ADMIN_DSC NO-GAP, '|',
/ 'Bottle Size :|' NO-GAP,
MATERIAL_DATA-BOTTLE_SIZE NO-GAP, '|',
/ 'Brand Name :|' NO-GAP,
MATERIAL_DATA-BRAND_NAME NO-GAP, '|',
/ 'Brand Distributor :|' NO-GAP,
MATERIAL_DATA-BRAND_DISTR NO-GAP, '|',
/ 'Brand Color :|' NO-GAP,
MATERIAL_DATA-BRAND_COLOR NO-GAP, '|',
/ 'Brand Shape :|' NO-GAP,
MATERIAL_DATA-BRAND_SHAPE NO-GAP, '|',
/ 'ANDA Date :|' NO-GAP,
MATERIAL_DATA-ANDA_DATE NO-GAP, '|',
/ 'ANDA Number :|' NO-GAP,
MATERIAL_DATA-ANDA_NUMBER NO-GAP, '|',
/ 'Bio Study :|' NO-GAP,
MATERIAL_DATA-BIO_STUDY NO-GAP, '|',
/ 'DESI Indicator :|' NO-GAP,
MATERIAL_DATA-DESI_INDICATOR NO-GAP, '|',
/ 'Drug Term Date :|' NO-GAP,
MATERIAL_DATA-DRUG_TERM_DT NO-GAP, '|',
/ 'FDA Approval Date :|' NO-GAP,
MATERIAL_DATA-FDA_APPRV_DT NO-GAP, '|',
/ 'Item Regulatory Name :|' NO-GAP,
MATERIAL_DATA-ITEM_REG_NM NO-GAP, '|',
/ 'Market Date :|' NO-GAP,
MATERIAL_DATA-MARKET_DT NO-GAP, '|',
/ 'Product Color :|' NO-GAP,
MATERIAL_DATA-PRODUCT_COLOR NO-GAP, '|',
/ 'Product Flavor :|' NO-GAP,
MATERIAL_DATA-PRODUCT_FLAVOR NO-GAP, '|',
/ 'Product Shape :|' NO-GAP,
MATERIAL_DATA-PRODUCT_SHAPE NO-GAP, '|',
/ 'Product Strength :|' NO-GAP,
MATERIAL_DATA-PRODUCT_STRENGTH NO-GAP, '|',
/ 'Base Unit of Measure :|' NO-GAP,
MATERIAL_DATA-MEINS NO-GAP, '|',
/ 'Base Weight :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-WEIGHT NO-GAP, '|',
/ 'Base Weight Unit :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-WT_UNIT NO-GAP, '|',
/ 'Base Volume :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-VOLUM NO-GAP, '|',
/ 'Base Volume Unit :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-VOL_UNIT NO-GAP, '|',
/ 'Base Package Length :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-PKG_LENGTH NO-GAP, '|',
/ 'Base Package Width :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-PKG_WIDTH NO-GAP, '|',
/ 'Base Package Height :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-PKG_HEIGHT NO-GAP, '|',
/ 'Base Dimension Unit :|' NO-GAP,
MATERIAL_DATA-BASE_MEASURES-DIM_UNIT NO-GAP, '|',
/ 'Inner Carton Count :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_COUNT NO-GAP, '|',
/ 'Inner Carton Weight :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-WEIGHT NO-GAP, '|',
/ 'Inner Carton Weight Unit :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-WT_UNIT NO-GAP, '|',
/ 'Inner Carton Volume :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-VOLUM NO-GAP, '|',
/ 'Inner Carton Volume Unit :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-VOL_UNIT NO-GAP, '|',
/ 'Inner Carton Package Length :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_LENGTH NO-GAP, '|',
/ 'Inner Carton Package Width :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_WIDTH NO-GAP, '|',
/ 'Inner Carton Package Height :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-PKG_HEIGHT NO-GAP, '|',
/ 'Inner Carton Dimension Unit :|' NO-GAP,
MATERIAL_DATA-INR_CRTN_MEASURES-DIM_UNIT NO-GAP, '|',
/ 'Case Count :|' NO-GAP,
MATERIAL_DATA-CASE_COUNT NO-GAP, '|',
/ 'Case Weight :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-WEIGHT NO-GAP, '|',
/ 'Case Weight Unit :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-WT_UNIT NO-GAP, '|',
/ 'Case Volume :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-VOLUM NO-GAP, '|',
/ 'Case Volume Unit :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-VOL_UNIT NO-GAP, '|',
/ 'Case Length :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-PKG_LENGTH NO-GAP, '|',
/ 'Case Width :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-PKG_WIDTH NO-GAP, '|',
/ 'Case Height :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-PKG_HEIGHT NO-GAP, '|',
/ 'Case Dimension Unit :|' NO-GAP,
MATERIAL_DATA-CASE_MEASURES-DIM_UNIT NO-GAP, '|',
/ 'Item Note :|' NO-GAP,
MATERIAL_DATA-ITEM_NOTE NO-GAP, '|',
/ 'End Delimiter :|' NO-GAP,
MATERIAL_DATA-DELIMITER_END NO-GAP, '|',
/.
ENDFORM. " write_formatted_test_record
*----
Copy the output files to the appropriate archive folder.
*----
FORM COPY_TO_ARCHIVE USING C_FILE.
DATA:
ARCHFILE(100),
COPYFILES(255),
ITAB LIKE BTCXPM OCCURS 0 WITH HEADER LINE,
W_LENGTH TYPE I , " MUDIGAN1 DEVK991428
W_INFILE(100), " MUDIGAN1 DEVK991428
W_OUTFILE(100). " MUDIGAN1 DEVK991428
PERFORM BUILD_ARCHIVE_NAME USING C_FILE
CHANGING ARCHFILE.
CONCATENATE C_FILE C_UNCPATH INTO COPYFILES SEPARATED BY SPACE .
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = 'ZUNIXCOPY'
ADDITIONAL_PARAMETERS = COPYFILES
OPERATINGSYSTEM = SY-OPSYS
STDOUT = 'X'
STDERR = 'X'
TERMINATIONWAIT = 'X'
TABLES
EXEC_PROTOCOL = ITAB
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
PROGRAM_START_ERROR = 6
PROGRAM_TERMINATION_ERROR = 7
X_ERROR = 8
PARAMETER_EXPECTED = 9
TOO_MANY_PARAMETERS = 10
ILLEGAL_COMMAND = 11
WRONG_ASYNCHRONOUS_PARAMETERS = 12
CANT_ENQ_TBTCO_ENTRY = 13
JOBCOUNT_GENERATION_ERROR = 14
OTHERS = 15.
w_length = strlen( c_final_path ).
replace c_final_path with ' ' into c_file length w_length.
shift c_file left deleting leading space .
concatenate c_uncpath c_file into w_infile .
concatenate archfile c_file into w_outfile .
CALL FUNCTION 'Z_CONVERT_UNIX2DOS'
EXPORTING
INFILE = w_infile
OUTFILE = w_outfile
EXCEPTIONS
ERROR = 1
IDENTICAL_FILENAMES = 2
NO_INPUT_FILE = 3
OTHERS = 4.
IF SY-SUBRC = 0.
SKIP.
WRITE: / C_FILE, 'copied to', ARCHFILE.
ELSE.
MESSAGE E000(38) WITH 'Archive file copy failed.'.
ENDIF.
ENDFORM. " copy_to_archive.
*----
Build Archive file pathnames.
*----
FORM BUILD_ARCHIVE_NAME USING P_PATH
CHANGING P_ARCH.
DATA:
NODECOUNT TYPE I,
LASTNODE TYPE I,
BEGIN OF NODES OCCURS 25,
NODENAME(100),
END OF NODES.
SPLIT P_PATH AT '/' INTO TABLE NODES.
DESCRIBE TABLE NODES LINES NODECOUNT.
CLEAR P_ARCH.
LASTNODE = NODECOUNT - 1.
LOOP AT NODES.
CASE SY-TABIX.
WHEN LASTNODE.
CONCATENATE P_ARCH NODES-NODENAME '/archive/' INTO P_ARCH.
WHEN NODECOUNT.
WHEN OTHERS.
CONCATENATE P_ARCH NODES-NODENAME '/' INTO P_ARCH.
ENDCASE.
ENDLOOP.
ENDFORM. " build_archive_name
&----
*& Form CONVERT_FILE
&----
Move output files from unconverted directory to final destination
directory and convert from UNIX to DOS format in the process.
----
FORM CONVERT_FILE.
CONCATENATE MATLFILE '.txt' INTO OUTFILE.
Convert customer file from Unix to DOS
CALL FUNCTION 'Z_CONVERT_UNIX2DOS'
EXPORTING
INFILE = F_M_UNCFILE
OUTFILE = outFILE
EXCEPTIONS
ERROR = 1
IDENTICAL_FILENAMES = 2
NO_INPUT_FILE = 3
OTHERS = 4.
.
IF SY-SUBRC <> 0.
write: /'Error converting file. Input file: ', F_M_UNCFILE.
write: /' Output file: ', outFILE.
ENDIF.
ENDFORM. " CONVERT_FILE
thnks,
kp
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |