2007 Sep 29 6:21 AM
i m doing BDC for BOM.if anybody has done earlier. pls try to help.i mean send the code to me.
i m doing BDC for BOM.if anybody has done earlier. pls try to help.i mean send the code to me.
2007 Sep 29 12:28 PM
Hi
See the sample codes:
REPORT ZPPBDCP_BOM
line-size 150.
----
Tables
----
Tables: bicsk, " BOM Header Data
bicsp, " BOM Item Data
bgr00, " Session Data
MARA,
makt. " Material Descriptions
----
Internal Tables
----
*-- Internal Table to hold bom data
data : begin of it_bom_data occurs 0,
key(2),
matnr(18), "MATERIAL
werks(4), "PLANT
stlan(1), "BOM USAGE
datuv(10), "DATE
bmenge(17), "QUANTITY
posnr(4), "ITEM NO
idnrk(18), "COMPONENT
menge(18), "QUANTITY
meins(3), "UNIT
postp(1), "Item category
ALPGR(2), "AltItemGroup
ALPST(1), "Strategy
ALPRF(2), "Priority
EWAHR(3), "Usage probability(%)
LGORT(4), "SLOC
end of it_bom_data.
----
Start of selection
----
parameter : File like RLGRAP-FILENAME default 'BOM1.txt'.
Start-of-selection.
clear it_bom_data.
refresh it_bom_data.
*To Upload Flat file from presentation server
CALL FUNCTION 'UPLOAD'
EXPORTING
filename = 'C:\WINDOWS\Desktop\bom1.txt'
filetype = 'DAT'
TABLES
data_tab = it_bom_data
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6
OTHERS = 7.
*--Open File on Application Server
open dataset File FOR OUTPUT IN TEXT MODE.
if sy-subrc ne 0.
write : / 'File could not be uploaded.. Check file name.'.
stop.
endif.
*--populate session header record
BGR00-STYPE = 0.
BGR00-GROUP = 'BOM'.
BGR00-MANDT = sy-mandt.
BGR00-USNAM = sy-uname.
BGR00-START = sy-datum.
BGR00-XKEEP = 'X'.
BGR00-NODATA = '/'.
transfer BGR00 to File.
loop at it_bom_data.
IF it_bom_data-MATNR NE ' ' AND it_bom_data-MATNR NE '/'.
at new key.
read table it_bom_data index sy-tabix.
clear mara-matnr.
select single matnr
into mara-matnr
from mara
where bismt eq it_bom_data-matnr.
*--populate bom header record
if sy-subrc eq 0.
bicsk-stype = 1.
bicsk-TCODE = 'CS01'.
bicsk-matnr = mara-matnr.
bicsk-werks = it_bom_data-werks.
bicsk-stlan = it_bom_data-stlan.
bicsk-datuv = it_bom_data-datuv.
bicsk-bmeng = it_bom_data-bmenge.
write:/ bicsk.
transfer bicsk to File.
else.
write:/ it_bom_data-matnr,' Not exists'.
endif.
ENDIF.
endat.
clear mara-matnr.
select single matnr
into mara-matnr
from mara
where bismt eq it_bom_data-idnrk.
*--populate bom details.
if sy-subrc eq 0.
bicsp-stype = 2.
bicsp-posnr = it_bom_data-posnr.
bicsp-idnrk = mara-matnr.
bicsp-menge = it_bom_data-menge.
bicsp-meins = it_bom_data-meins.
bicsp-postp = it_bom_data-postp.
bicsp-ALPGR = it_bom_data-ALPGR.
bicsp-ALPST = it_bom_data-ALPST.
bicsp-ALPRF = it_bom_data-ALPRF.
bicsp-EWAHR = it_bom_data-EWAHR.
bicsp-LGORT = it_bom_data-LGORT.
write:/ bicsp.
transfer bicsp to File.
else.
write:/ it_bom_data-idnrk,' Not exists'.
endif.
endloop.
close dataset File.
REPORT ZPPBDCP_BOM_EXTENSION NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE ZBDCRECX1.
DATA : BEGIN OF IT_DATA OCCURS 0,
RC29N_bismt LIKE MAra-bismt,
RC29N_WERKS LIKE RC29N-WERKS,
RC29N_STLAN LIKE RC29N-STLAN,
RC29P_SELPO LIKE RC29P-SELPO,
RC29N_BISMT1 LIKE MAra-BISMT,
RCUKD_KNNAM01 LIKE RCUKD-KNNAM,
RCUKD_KNNAM02 LIKE RCUKD-KNNAM,
RCUKD_KNNAM03 LIKE RCUKD-KNNAM,
RCUKD_KNNAM04 LIKE RCUKD-KNNAM,
RCUKD_KNNAM05 LIKE RCUKD-KNNAM,
RCUKD_KNNAM06 LIKE RCUKD-KNNAM,
RCUKD_KNNAM07 LIKE RCUKD-KNNAM,
RCUKD_KNNAM08 LIKE RCUKD-KNNAM,
RCUKD_KNNAM09 LIKE RCUKD-KNNAM,
RCUKD_KNNAM10 LIKE RCUKD-KNNAM,
RCUKD_KNNAM11 LIKE RCUKD-KNNAM,
RCUKD_KNNAM12 LIKE RCUKD-KNNAM,
RCUKD_KNNAM13 LIKE RCUKD-KNNAM,
RCUKD_KNNAM14 LIKE RCUKD-KNNAM,
RCUKD_KNNAM15 LIKE RCUKD-KNNAM,
RCUKD_KNNAM16 LIKE RCUKD-KNNAM,
RCUKD_KNNAM17 LIKE RCUKD-KNNAM,
RCUKD_KNNAM18 LIKE RCUKD-KNNAM,
RCUKD_KNNAM19 LIKE RCUKD-KNNAM,
RCUKD_KNNAM20 LIKE RCUKD-KNNAM,
END OF IT_DATA.
DATA : IT_STPO LIKE STPO_API02 OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF IT_MATNR OCCURS 0,
SNO(5),
MATNR LIKE MAKT-MATNR,
BISMT LIKE MAra-BISMT,
WERKS LIKE RC29N-WERKS,
STLAN LIKE RC29N-STLAN,
SELPO LIKE RC29P-SELPO,
MATNR1 LIKE MARA-MATNR,
END OF IT_MATNR.
DATA : BEGIN OF IT_ITEMS OCCURS 0,
SNO(5),
MATNR LIKE MAKT-MATNR,
WERKS LIKE RC29N-WERKS,
STLAN LIKE RC29N-STLAN,
SELPO LIKE RC29P-SELPO,
MATNR1 LIKE MARA-MATNR,
BISMT1 LIKE MARA-BISMT,
END OF IT_ITEMS.
DATA : BEGIN OF IT_DEPENDENCIES OCCURS 0,
SNO(5),
SELPO LIKE RC29P-SELPO,
KNNAM LIKE RCUKD-KNNAM,
END OF IT_DEPENDENCIES.
DATA : BEGIN OF IT_ERROR OCCURS 0,
MATNR LIKE MARA-MATNR,
BISMT LIKE MARA-BISMT,
SELPO LIKE RC29P-SELPO,
MATNR1 LIKE MARA-MATNR,
BISMT1 LIKE MARA-BISMT,
END OF IT_ERROR.
DATA : V_FIRST,
V_TABIX type i,
V_LINES TYPE I,
V_INDEX(2) TYPE N,
V_SNO(5),
V_FNAME(40),
V_DATE(10),
V_TIME(8),
V_MODE VALUE 'A',
V_ROWS TYPE I,
V_SKIP.
DATA : V_ITEM_NO(4) TYPE N,
V_COMPONENT(18).
DATA : V_MATNR LIKE MARA-MATNR,
V_MATNR1 LIKE MARA-MATNR.
FIELD-SYMBOLS <F>.
DATA : BEGIN OF IT OCCURS 0,
PROGRAM(10),
DYNPRO(10),
DYNBEGIN(10),
FNAM(20),
FVAL(20),
END OF IT.
START-OF-SELECTION.
PERFORM OPEN_GROUP.
WRITE : / 'Upload of BOM Extn. from ', P_FNAME, ' on ', SY-DATUM.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME =
'
sap-abdul\ProjectFolde\Chunduru\BOMExtension.txt'
FILETYPE = 'DAT'
TABLES
DATA_TAB = IT_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.
OPEN DATASET P_FNAME FOR INPUT IN TEXT MODE.
IF SY-SUBRC NE 0.
WRITE : / 'Could not upload the file.. please try again.'.
ENDIF.
CLEAR : IT_DATA[], IT_DATA.
DO.
READ DATASET P_FNAME INTO V_STR.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
write v_str.
translate v_str using '#/'.
SPLIT V_STR AT ',' INTO IT_DATA-RC29N_BISMT
IT_DATA-RC29N_WERKS
IT_DATA-RC29N_STLAN
IT_DATA-RC29P_SELPO
IT_DATA-RC29N_BISMT1
IT_DATA-RCUKD_KNNAM01
IT_DATA-RCUKD_KNNAM02
IT_DATA-RCUKD_KNNAM03
IT_DATA-RCUKD_KNNAM04
IT_DATA-RCUKD_KNNAM05
IT_DATA-RCUKD_KNNAM06
IT_DATA-RCUKD_KNNAM07
IT_DATA-RCUKD_KNNAM08
IT_DATA-RCUKD_KNNAM09
IT_DATA-RCUKD_KNNAM10
IT_DATA-RCUKD_KNNAM11
IT_DATA-RCUKD_KNNAM12
IT_DATA-RCUKD_KNNAM13
IT_DATA-RCUKD_KNNAM14
IT_DATA-RCUKD_KNNAM15
IT_DATA-RCUKD_KNNAM16
IT_DATA-RCUKD_KNNAM17
IT_DATA-RCUKD_KNNAM18
IT_DATA-RCUKD_KNNAM19
IT_DATA-RCUKD_KNNAM20.
translate it_data-rc29n_bismt to upper case.
APPEND IT_DATA.
CLEAR IT_DATA.
ENDDO.
IF IT_DATA[] IS INITIAL.
WRITE : / 'No data found to upload'.
STOP.
ENDIF.
LOOP AT IT_DATA.
IF IT_DATA-RC29N_BISMT NE SPACE.
SELECT SINGLE MATNR INTO (V_MATNR) FROM MARA
WHERE BISMT = IT_DATA-RC29N_BISMT.
SPRAS = 'EN'.
V_SNO = V_SNO + 1.
IT_MATNR-SNO = V_SNO.
IT_MATNR-MATNR = V_MATNR.
IT_MATNR-BISMT = IT_DATA-RC29N_BISMT.
IT_MATNR-WERKS = IT_DATA-RC29N_WERKS.
IT_MATNR-STLAN = IT_DATA-RC29N_STLAN.
APPEND IT_MATNR.
ENDIF.
SELECT SINGLE MATNR INTO (V_MATNR1) FROM MARA
WHERE BISMT = IT_DATA-RC29N_BISMT1.
IT_DEPENDENCIES-SNO = V_SNO.
IT_DEPENDENCIES-SELPO = IT_DATA-RC29P_SELPO.
IT_ITEMS-SNO = V_SNO.
IT_MATNR-SELPO = IT_DATA-RC29P_SELPO.
IT_MATNR-MATNR1 = V_MATNR1.
APPEND IT_MATNR.
IT_ITEMS-SELPO = IT_DATA-RC29P_SELPO.
IT_ITEMS-MATNR1 = V_MATNR1.
IT_ITEMS-BISMT1 = IT_DATA-RC29N_BISMT1.
APPEND IT_ITEMS.
DO 20 TIMES.
CLEAR V_FNAME.
V_INDEX = SY-INDEX.
CONCATENATE 'IT_DATA-RCUKD_KNNAM' V_INDEX INTO V_FNAME.
ASSIGN (V_FNAME) TO <F>.
IF <F> EQ SPACE.
EXIT.
ENDIF.
IT_DEPENDENCIES-KNNAM = <F>.
APPEND IT_DEPENDENCIES.
ENDDO.
ENDLOOP.
LOOP AT IT_MATNR.
V_TABIX = SY-TABIX.
CALL FUNCTION 'CSAP_MAT_BOM_READ'
EXPORTING
MATERIAL = IT_MATNR-MATNR
PLANT = IT_MATNR-WERKS
BOM_USAGE = IT_MATNR-STLAN
ALTERNATIVE =
VALID_FROM =
VALID_TO =
CHANGE_NO =
REVISION_LEVEL =
IMPORTING
FL_WARNING =
TABLES
T_STPO = IT_STPO
T_STKO =
T_DEP_DATA =
T_DEP_DESCR =
T_DEP_ORDER =
T_DEP_SOURCE =
T_DEP_DOC =
EXCEPTIONS
ERROR = 1
OTHERS = 2.
CLEAR V_SKIP.
IF SY-SUBRC EQ 0.
LOOP AT IT_ITEMS WHERE SNO = IT_MATNR-SNO.
V_ITEM_NO = IT_ITEMS-SELPO.
WRITE : IT_ITEMS-MATNR1 TO V_COMPONENT NO-ZERO.
READ TABLE IT_STPO WITH KEY ITEM_NO = V_ITEM_NO
COMPONENT = V_COMPONENT.
IF SY-SUBRC NE 0.
V_SKIP = 'X'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF V_SKIP = 'X'.
IT_ERROR-MATNR = IT_MATNR-MATNR.
IT_ERROR-BISMT = IT_MATNR-BISMT.
IT_ERROR-SELPO = IT_ITEMS-SELPO.
IT_ERROR-MATNR1 = IT_ITEMS-MATNR1.
IT_ERROR-BISMT1 = IT_ITEMS-BISMT1.
APPEND IT_ERROR.
DELETE IT_DEPENDENCIES WHERE SNO = IT_MATNR-SNO.
DELETE IT_ITEMS WHERE SNO = IT_MATNR-SNO.
DELETE IT_MATNR INDEX V_TABIX.
ENDIF.
ENDLOOP.
WRITE : / 'Item Numbers and Components does not match for following :'.
LOOP AT IT_ERROR.
WRITE : /5 IT_ERROR-BISMT, IT_ERROR-SELPO, IT_ERROR-BISMT1.
ENDLOOP.
DATA : BEGIN OF IT_KNNAM OCCURS 0,
KNNAM LIKE CUKB-KNNAM,
END OF IT_KNNAM.
SELECT KNNAM INTO TABLE IT_KNNAM FROM CUKB
FOR ALL ENTRIES IN IT_DEPENDENCIES
WHERE KNNAM = IT_DEPENDENCIES-KNNAM.
SKIP.
WRITE : / 'Dependencies does not exist :'.
LOOP AT IT_DEPENDENCIES.
READ TABLE IT_KNNAM WITH KEY KNNAM = IT_DEPENDENCIES-KNNAM.
IF SY-SUBRC NE 0.
READ TABLE IT_MATNR WITH KEY SNO = IT_DEPENDENCIES-SNO.
WRITE : /5 IT_MATNR-BISMT, IT_DEPENDENCIES-SELPO,
IT_DEPENDENCIES-KNNAM.
DELETE IT_DEPENDENCIES WHERE SNO = IT_MATNR-SNO.
DELETE IT_ITEMS WHERE SNO = IT_MATNR-SNO.
DELETE IT_MATNR WHERE SNO = IT_MATNR-SNO.
ENDIF.
ENDLOOP.
V_ROWS = SY-SROWS - 7.
DESCRIBE TABLE IT_MATNR LINES V_LINES.
IF V_LINES EQ 0.
WRITE : / 'No materials found to process'.
STOP.
ENDIF.
SKIP.
DATA : V_TOTAL(4) TYPE C.
DATA : V_CURRE(4) TYPE C.
DATA : V_TEXT(25).
DATA : V_PERC TYPE I.
DESCRIBE TABLE IT_MATNR LINES V_TOTAL.
LOOP AT IT_MATNR.
V_CURRE = SY-TABIX.
CONDENSE : V_TOTAL, V_CURRE.
CONCATENATE V_CURRE '/' V_TOTAL INTO V_TEXT.
V_PERC = V_TOTAL * ( V_CURRE / 100 ).
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = V_PERC
TEXT = V_TEXT.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0100'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RC29N-STLAN'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD1 USING 'RC29N-MATNR'
IT_MATNR-MATNR. " '933'.
PERFORM BDC_FIELD1 USING 'RC29N-WERKS'
IT_MATNR-WERKS. " '2000'.
PERFORM BDC_FIELD1 USING 'RC29N-STLAN'
IT_MATNR-STLAN. " '3'.
PERFORM BDC_FIELD1 USING 'RC29N-STLAL'
'1'.
PERFORM BDC_FIELD1 USING 'RC29N-DATUV'
'17.07.2001'.
LOOP AT IT_ITEMS WHERE SNO = IT_MATNR-SNO.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0150'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RC29P-POSNR(01)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=SETP'.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0708'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=CLWI'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RC29P-SELPO'.
PERFORM BDC_FIELD1 USING 'RC29P-SELPO'
IT_ITEMS-SELPO. " '0040'.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0150'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RC29P-AUSKZ(01)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=WIZU'.
PERFORM BDC_FIELD1 USING 'RC29P-AUSKZ(01)'
'X'.
PERFORM BDC_DYNPRO USING 'SAPLCUKD' '0130'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RCUKD-KNNAM(02)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'/00'.
V_SNO = 0.
LOOP AT IT_DEPENDENCIES WHERE SNO = IT_ITEMS-SNO AND
SELPO = IT_ITEMS-SELPO.
PERFORM BDC_DYNPRO USING 'SAPLCUKD' '0130'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RCUKD-KNNAM(02)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=SICH'.
PERFORM BDC_FIELD1 USING 'RCUKD-KNNAM(01)'
IT_DEPENDENCIES-KNNAM." 'test6'.
V_SNO = V_SNO + 1.
CONDENSE V_SNO.
CONCATENATE 'RCUKD-KNNAM(' V_SNO ')' INTO V_FNAME.
PERFORM BDC_FIELD USING V_FNAME
IT_DEPENDENCIES-KNNAM." 'test6'.
IF V_SNO = 13.
PERFORM BDC_DYNPRO USING 'SAPLCUKD' '0130'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RCUKD-KNNAM(01)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=NEWZ'.
PERFORM BDC_DYNPRO USING 'SAPLCUKD' '0130'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RCUKD-KNNAM(02)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'/00'.
V_SNO = 1.
ENDIF.
ENDLOOP.
PERFORM BDC_DYNPRO USING 'SAPLCUKD' '0130'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RCUKD-KNNAM(01)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=SICH'.
ENDLOOP.
PERFORM BDC_DYNPRO USING 'SAPLCSDI' '0150'.
PERFORM BDC_FIELD1 USING 'BDC_CURSOR'
'RC29P-POSNR(01)'.
PERFORM BDC_FIELD1 USING 'BDC_OKCODE'
'=FCBU'.
WRITE : / 'Messages returned for ', IT_MATNR-BISMT,
IT_MATNR-WERKS, IT_MATNR-STLAN.
SKIP.
PERFORM BDC_TRANSACTION USING 'CS02'.
ENDLOOP.
PERFORM CLOSE_GROUP.
----
Insert field *
----
FORM BDC_FIELD1 USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
REPORT ZPPBDCP_BOM
line-size 150.
----
Tables
----
Tables: BIKSSK,BIAUSP,MARA.
----
Internal Tables
----
*-- Internal Table to hold bom data
data : begin of it_class occurs 0,
*KLART(4),
OBJEK(50),
CLASS(18),
ATNAM(30),
ATWRT(30),
end of it_class.
----
Start of selection
----
Start-of-selection.
clear it_class.
refresh it_class.
*To Upload Flat file from presentation server
CALL FUNCTION 'UPLOAD'
EXPORTING
filename = 'C:\WINDOWS\Desktop\class.txt'
filetype = 'DAT'
TABLES
data_tab = it_class
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6
OTHERS = 7.
*--Open File on Application Server
open dataset 'class.txt' FOR OUTPUT IN TEXT MODE.
loop at it_class.
IF IT_CLASS-class NE ' '.
CLEAR MARA-MATNR.
SELECT SINGLE MATNR INTO MARA-MATNR
FROM MARA
WHERE BISMT EQ IT_CLASS-OBJEK.
if sy-subrc ne 0.
WRITE:/ 'Invalid Old Material',IT_CLASS-OBJEK.
endif.
perform popu_BIKSSK.
transfer BIKSSK to 'class.txt'.
ENDIF.
perform popu_BIAUSP.
transfer BIAUSP to 'class.txt'.
ENDLOOP.
&----
*& Form popu_BIKSSK
&----
text
----
--> p1 text
<-- p2 text
----
FORM popu_BIKSSK.
BIKSSK-STYPE = 1.
BIKSSK-TCODE = 'CL20'.
BIKSSK-MAFID = 'O'.
BIKSSK-KLART = '001'.
BIKSSK-OBJEK = mara-matnr.
BIKSSK-CLASS = IT_CLASS-CLASS.
BIKSSK-OBTAB = 'MARA'.
ENDFORM. " popu_BIKSSK
&----
*& Form popu_BIAUSP
&----
text
----
--> p1 text
<-- p2 text
----
FORM popu_BIAUSP.
BIAUSP-STYPE = 2.
BIAUSP-ATNAM = IT_CLASS-ATNAM.
BIAUSP-ATWRT = IT_CLASS-ATWRT.
ENDFORM. " popu_BIAUSP
Regards
Anji
2007 Sep 29 1:05 PM
HI frnd
i want source code of mm01 using bapi....(no validations in my requirement only upload the data)
can u help me out
2007 Oct 01 10:56 AM
Dear Nancy,
Kindly go through the sample program at the following link:
http://www.sap-img.com/abap/program-loads-the-bill-of-material.htm
Regards,
Abir
***************************************
Don't forget to Reward Points *
2010 Feb 01 7:09 AM
2010 Feb 01 7:10 AM
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |