Hi all,
I really hope someone will be able to help me, im on this program for 4 days and i really want to make it works.
But for the moment, this program is half-working !
In fact, Im trying to write a program which would allow users to add EAN for materials with material transaction MM42.
(Basic Data -> Additional Data -> Additional EANs)
I first try with LSMW, but no batch input is possible because we couldnt be sure to go to the last line of the list.
So, I decided to go on with a BAPI calling, and thats what I got now:
(I know, its quite simple for you all, but its my first one!)
_________________________________________________________
REPORT z_mm_ean_supplem MESSAGE-ID zfi_ap.
***********************************************************************
*******************DECLARATION ET INITIALISATION*********************
***********************************************************************
*----
*
Déclaration
*----
*
Tables générales
TABLES: mean. " Numéros d'articles européens pour article
variables
DATA: v_princ(1) TYPE c, " indicateur d'EAN principal
v_fonct(3) TYPE c VALUE '004'.
Zone de réception des erreurs et logs
DATA : bw_return TYPE bapireturn1.
Table de recupération du fichier
DATA: BEGIN OF gt_get_fich OCCURS 0,
z_matnr(18),
z_vkorg(4),
z_vtweg(2),
z_fiwrk(4),
z_meinh(3),
z_ean11(13),
z_eantp(2),
END OF gt_get_fich.
DATA: BEGIN OF g_get_fich OCCURS 0,
z_tot(1000),
END OF g_get_fich.
Table de reception des lignes existantes et structures associées
DATA : BEGIN OF t_mean OCCURS 0.
INCLUDE STRUCTURE mean.
DATA : END OF t_mean.
DATA : BEGIN OF bt_head OCCURS 0.
INCLUDE STRUCTURE bapie1mathead.
DATA : END OF bt_head.
DATA : BEGIN OF bt_marm OCCURS 0.
INCLUDE STRUCTURE bapie1marmrt.
DATA : END OF bt_marm.
DATA : BEGIN OF bt_marmx OCCURS 0.
INCLUDE STRUCTURE bapie1marmrtx.
DATA : END OF bt_marmx.
DATA : BEGIN OF bt_mean OCCURS 0.
INCLUDE STRUCTURE bapie1meanrt.
DATA : END OF bt_mean.
DATA : BEGIN OF bt_return OCCURS 0.
INCLUDE STRUCTURE bapireturn1.
DATA : END OF bt_return.
*----
*
Ecran de sélection
*----
*
SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP.
PARAMETERS: p_file LIKE ibipparms-path OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK bl2.
*----
*
Initialization
*----
*
INITIALIZATION.
*----
*
At selection screen
*----
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
***********************************************************************
*************************DEBUT DU PROGRAMME**************************
***********************************************************************
*----
*
Start of selection
*----
*
START-OF-SELECTION.
PERFORM lecture_du_fichier.
PERFORM traitement.
PERFORM conclusion.
END-OF-SELECTION.
***********************************************************************
*************************FORM ASSOCIES*******************************
***********************************************************************
*&----
*
*& Form lecture_du_fichier
*&----
*
Déchargement des fichiers en entrée dans des tables internes
*----
*
--> p1 text
<-- p2 text
*----
*
FORM lecture_du_fichier.
CALL FUNCTION 'AA_FILE_UPLOAD_EXCEL'
EXPORTING
i_filename = p_file
I_TEST =
I_UCOMM =
I_MAXCOLS =
i_delimiter = '#'
TABLES
et_filecontent = g_get_fich
EXCEPTIONS
ERROR_ACCESSING_FILE = 1
OTHERS = 2
.
LOOP AT g_get_fich.
SPLIT g_get_fich AT '#' INTO gt_get_fich-z_matnr gt_get_fich-z_vkorg
gt_get_fich-z_vtweg gt_get_fich-z_fiwrk gt_get_fich-z_meinh
gt_get_fich-z_ean11 gt_get_fich-z_eantp.
APPEND gt_get_fich.
ENDLOOP.
ENDFORM. " lecture_du_fichier
*&----
*
*& Form traitement
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM traitement.
*Traitement du fichier recupéré
LOOP AT gt_get_fich.
CLEAR v_princ.
CLEAR t_mean.
REFRESH bt_marmx.
REFRESH bt_head.
REFRESH bt_marm.
REFRESH bt_mean.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gt_get_fich-z_meinh
LANGUAGE = SY-LANGU
IMPORTING
output = gt_get_fich-z_meinh
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2
.
SELECT * FROM mean INTO TABLE t_mean
WHERE matnr = gt_get_fich-z_matnr
AND meinh = gt_get_fich-z_meinh.
IF sy-subrc <> 0.
v_princ = 'X'.
ENDIF.
********************ZONE D'APPEL******************
Chargt HEAD
bt_head-material = gt_get_fich-z_matnr.
bt_head-basic_view = 'X'.
APPEND bt_head.
Chargt MARM
bt_marm-function = v_fonct.
bt_marm-material = gt_get_fich-z_matnr.
bt_marm-alt_unit = gt_get_fich-z_meinh.
bt_marm-ean_upc = gt_get_fich-z_ean11.
bt_marm-ean_cat = gt_get_fich-z_eantp.
bt_marm-SUB_UOM = 'ST'.
bt_marm-NUMERATOR = '10'.
bt_marm-DENOMINATR = '1'.
APPEND bt_marm.
Chargt MEAN
bt_mean-function = v_fonct.
bt_mean-material = gt_get_fich-z_matnr.
bt_mean-unit = gt_get_fich-z_meinh.
bt_mean-ean_upc = gt_get_fich-z_ean11.
bt_mean-ean_cat = gt_get_fich-z_eantp.
bt_mean-main_ean = v_princ.
APPEND bt_mean.
Chargt MARMX
bt_marm-function = v_fonct.
bt_marm-material = gt_get_fich-z_matnr.
bt_marmx-alt_unit = gt_get_fich-z_meinh.
IF v_princ = 'X'.
bt_marmx-ean_upc = v_princ.
bt_marmx-ean_cat = v_princ.
ENDIF.
bt_marmx-SUB_UOM = 'X'.
bt_marmx-NUMERATOR = 'X'.
bt_marmx-DENOMINATR = 'X'.
APPEND bt_marmx.
PERFORM call_bapi.
ENDLOOP.
ENDFORM. " traitement
*&----
*
*& Form call_bapi
*&----
*
remplissage des tables concernées MARM-MEAN
*----
*
--> p1 text
<-- p2 text
*----
*
FORM call_bapi.
IF v_princ = 'X'.
CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
EXPORTING
headdata = bt_head
IMPORTING
return = bt_return
TABLES
unitsofmeasure = bt_marm
unitsofmeasurex = bt_marmx
UNITOFMEASURETEXTS =
internationalartnos = bt_mean
.
ELSE.
CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
EXPORTING
headdata = bt_head
IMPORTING
return = bt_return
TABLES
unitsofmeasure = bt_marm
unitsofmeasurex = bt_marmx
UNITOFMEASURETEXTS =
internationalartnos = bt_mean
.
ENDIF.
APPEND bt_return.
ENDFORM. " call_bapi
*&----
*
*& Form conclusion
*&----
*
Affichage des resultats
*----
*
--> p1 text
<-- p2 text
*----
*
FORM conclusion.
LOOP AT bt_return INTO bw_return.
WRITE:/ bw_return-message.
ENDLOOP.
COMMIT WORK.
ENDFORM. " conclusion
_________________________________________________________
Here is my problem:
When I try just to add a new EAN when there is already a main one, it works really well. I can add a second line, three, four, five lines more, no problem. But when I try to add an EAN when there is no previous value, the program doesnt want to modify anything.
When I give a look at application log, I see exactly the same log for both, with just one difference :
In the first case (already a main EAN) : Material XXXXXX changed.
In the second one (no previous EAN) : No changes made
I tried a lot of things, but nothing works.
I dont understand why
I need your help.
Thanks to all answer.
Regards,
R.P.
Message was edited by: Papillon Romain