Application Development 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: 

More time in Extracting result set ( performence) VERY URGENT

Former Member
0 Kudos
285

Hi all,

This program is taking much more time in Extracting the the result set.........(How to increase the performence of this program)

How to decrease the Execuition of the time.......???

***INCLUDE Z00_BCI010 .

TABLES: z00_bc_cpt_sess, " Stockage des compteurs associés aux

" progs de traitement.

z00_bc_erreur, " Table des anomalies des programmes

" spécifiques.

*début ajout FAE 30463

z00_bc_err_log. "Table de stockage et retention des

"erreurs

*fin ajout FAE 30463

  • t100. " Messages.

*----


*

  • Déclaration des données internes *

*----


*

  • Table interne des anomalies.

DATA: BEGIN OF itb_erreur OCCURS 0.

INCLUDE STRUCTURE z00_bc_erreur.

DATA: END OF itb_erreur.

  • Nombre de jour pour la suppression des données dans la table des

  • anomalies

DATA: i_nb_jour(3) TYPE n.

*début ajout FAE 30463

DATA: w_dl_delai LIKE z00_bc_err_log-z_delai,

w_in_stockage LIKE z00_bc_err_log-z_stockage VALUE 'X'.

*fin ajout FAE 30463

  • Date et heure d'éxécution.

DATA: i_dt_date_execution LIKE sy-datum,

i_hr_heure_execution LIKE sy-uzeit.

  • Date de suppression.

DATA: z_date LIKE sy-datum.

  • Compteur de session.

DATA: o_ct_session LIKE z00_bc_cpt_sess-z_ct_session.

  • Compteur pour le numéro de ligne de la table d'anomalie.

DATA: l_ct_num_ligne LIKE z00_bc_erreur-z_no_num_ligne VALUE '00'.

  • Données utile au remplissage de la table interne des anomalies.

  • Nom du programme ABAP.

DATA: i_repid LIKE z00_bc_erreur-z_repid.

  • Libellé du traitement.

DATA: w_lb_traitement LIKE itb_erreur-z_lb_lib_trait.

  • Clé identifiant l'objet traité.

DATA: i_ds_clef_objet LIKE z00_bc_erreur-z_ds_clef_objet.

  • Code anomalie.

DATA: i_cd_message LIKE sy-msgno.

  • Type de message d'anomalie.

DATA: i_ty_message LIKE sy-msgty.

  • Classe de message.

DATA: i_classe_message LIKE sy-msgid.

  • Variable de message.

DATA: i_msgv1 LIKE sy-msgv1,

i_msgv2 LIKE sy-msgv2,

i_msgv3 LIKE sy-msgv3,

i_msgv4 LIKE sy-msgv4.

  • Phase d'éxécution du programme.

DATA: i_in_phase_exec LIKE z00_bc_erreur-z_in_phase_exec.

  • Libellé de la clé.

DATA: i_clef_objet(30).

  • Constante.

CONSTANTS: k_heure(8) VALUE 'Heure', "#EC NOTEXT

k_code(4) VALUE 'Code', "#EC NOTEXT

k_lb_message(80) VALUE 'Désignation', "#EC NOTEXT

k_ligne LIKE sy-linsz VALUE '127',

k_societe LIKE sy-title VALUE 'SCHNEIDER ELECTRIC INDUSTRIES S.A.S.',

k_projet LIKE sy-title VALUE 'LOGOS'.

*----


*

  • TRAITEMENT *

*----


*

  • Nettoyage de la table interne et des données.

FREE itb_erreur.

CLEAR: i_msgv1,

i_msgv2,

i_msgv3,

i_msgv4.

*----


*

  • Form F930_INIT *

*----


*

  • Fonction : *

  • - Renseigne la table transparente des anomalies. *

  • *

  • Donnée globale : *

  • - ITB_ERREUR Tables internes des erreurs. *

  • *

  • Entrées : *

  • - I_REPID Nom du programme en erreur. *

  • - I_NB_JOUR Nombre de jour avant la suppression des *

  • enrgistrement de la lable Z00_BC_ERREUR. *

  • *

  • Sortie : *

  • - O_CT_SESSION Compteur de session. *

  • *

*----


*

FORM f930_init USING i_repid

i_nb_jour.

  • Appel de la routine de suppression des vieux enregistrement.

PERFORM f911_suppression_anomalie USING i_repid

i_nb_jour.

  • Mise à jour des compteur de session.

PERFORM f912_maj_z00_bc_cpt_sess USING i_repid

CHANGING o_ct_session.

ENDFORM.

*----


*

  • Form F930_INIT_BLOCAGE *

*----


*

  • Fonction : *

  • - Suppression des vieux enregistrements

  • - mise à jour table session

  • *

  • Donnée globale : *

  • - ITB_ERREUR Tables internes des erreurs. *

  • *

  • Entrées : *

  • - I_REPID Nom du programme en erreur. *

  • - I_NB_JOUR Nombre de jour avant la suppression des *

  • enrgistrement de la lable Z00_BC_ERREUR. *

  • *

  • Sortie : *

  • - O_CT_SESSION Compteur de session. *

  • *

*----


*

FORM f930_init_blocage USING i_repid

i_nb_jour.

  • Appel de la routine de suppression des vieux enregistrement.

  • avec contrôle entrée de blocage

PERFORM f911_suppression_anomalie_bloc USING i_repid

i_nb_jour.

  • Mise à jour des compteur de session.

PERFORM f912_maj_z00_bc_cpt_sess USING i_repid

CHANGING o_ct_session.

ENDFORM.

*----


*

  • Form F900_ERREUR *

*----


*

  • Fonction : *

  • - Renseigne la table transparente des anomalies. *

  • *

  • Donnée globale : *

  • - ITB_ERREUR Tables internes des erreurs. *

  • *

  • Donnée locale : *

  • - l_CT_NUM_LIGNE Compteur de ligne *

  • - O_CT_SESSION Numéro du compteur de session *

  • *

  • Entrées : *

  • - I_REPID Nom du programme en erreur. *

  • - I_IN_PHASE_EXEC Phase d'éxécution du programme *

  • - I_DS_CLEF_OBJET Clé identifiant l'objet traité. *

  • - I_DT_DATE_EXECUTION Date d'éxécution. *

  • - I_HR_HEURE_EXECUTION Heure d'éxécution. *

  • - I_TY_MESSAGE Type de message. *

  • - I_CD_MESSAGE code anomalie. *

  • - I_CLASSE_MESSAGE Classe de message. *

  • - I_MSGV1 Variable de message. *

  • - I_MSGV2 Variable de message. *

  • - I_MSGV3 Variable de message. *

  • - I_MSGV4 Variable de message. *

  • *

*----


*

FORM f900_erreur USING i_repid

i_in_phase_exec

i_ds_clef_objet

i_dt_date_execution

i_hr_heure_execution

i_ty_message

i_cd_message

i_classe_message

value(i_msgv1)

value(i_msgv2)

value(i_msgv3)

value(i_msgv4). "#EC CALLED

  • DE3K913901 début ajout

  • On récupère l'incrément qui sera inclu au n°de session :

IF o_ct_session IS INITIAL

AND i_repid = 'Z06_MMR001'.

PERFORM f912_maj_z00_bc_cpt_sess USING 'Z06_MMR001'

CHANGING o_ct_session.

ENDIF.

  • DE3K913901 fin ajout

  • Nettoyage de la zone de l'en tete de la table interne.

CLEAR itb_erreur.

  • Incrementation du compteur du numéro de ligne de la table d'anomalie.

l_ct_num_ligne = l_ct_num_ligne + 1.

  • Remplissage de la table interne.

MOVE: i_repid TO itb_erreur-z_repid,

l_ct_num_ligne TO itb_erreur-z_no_num_ligne,

i_dt_date_execution TO itb_erreur-z_dt_date_exec,

i_hr_heure_execution TO itb_erreur-z_hr_heure_exec,

w_lb_traitement TO itb_erreur-z_lb_lib_trait,

i_in_phase_exec TO itb_erreur-z_in_phase_exec,

i_ds_clef_objet TO itb_erreur-z_ds_clef_objet.

CONCATENATE i_ty_message

i_cd_message

INTO itb_erreur-z_cd_message.

  • Récupération du libellé du message.

CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

msgid = i_classe_message

msgnr = i_cd_message

msgv1 = i_msgv1

msgv2 = i_msgv2

msgv3 = i_msgv3

msgv4 = i_msgv4

IMPORTING

message_text_output = itb_erreur-z_lb_message.

*début modification FAE 30463

*Si le flag est pas coché, on met à jour la table des erreurs

*Z00_BC_ERREUR

*s'il n'y a pas d'entrée dans la table on met aussi à jour

*Z00_BC_ERREUR

IF NOT w_in_stockage IS INITIAL.

  • Mise à jour de la table.

PERFORM f910_mise_a_jour.

ENDIF.

  • Mise à jour de la table interne.

APPEND itb_erreur.

  • Nettoyage des variables.

CLEAR: i_msgv1,

i_msgv2,

i_msgv3,

i_msgv4.

*fin modification FAE 30463

ENDFORM.

*----


*

  • Form F910_MISE_A_JOUR *

*----


*

  • Fonction : *

  • - Mets à jour les tables Z00_BC_CPT_SESS et Z00_BC_ERREUR. *

  • *

  • Donnée globale : *

  • - ITB_ERREUR Tables internes des erreurs. *

  • *

*----


*

FORM f910_mise_a_jour.

  • Mise à jour des anomalies.

MOVE-CORRESPONDING itb_erreur TO z00_bc_erreur.

CONCATENATE itb_erreur-z_dt_date_exec

itb_erreur-z_hr_heure_exec

o_ct_session

INTO z00_bc_erreur-z_no_num_session.

MODIFY z00_bc_erreur.

ENDFORM.

*----


*

  • Form F911_SUPPRESSION_VIEILLE_ANOMALIE *

*----


*

  • Fonction : *

  • - Supprime les villes anomalies. *

  • *

  • Donnée globale : *

  • - Z00_BC_ERREUR Table des anomalies des programmes spécifiques.*

  • *

  • *

  • Entrée : *

  • - I_REPID Nom du programme en erreur. *

  • - I_NB_JOUR Nombre de jour avant la suppression des *

  • enrgistrement de la lable Z00_BC_ERREUR. *

  • *

*----


*

FORM f911_suppression_anomalie USING i_repid

i_nb_jour.

  • début ajout FAE 30463

SELECT SINGLE z_stockage z_delai

INTO (w_in_stockage, w_dl_delai)

FROM z00_bc_err_log

WHERE z_repid = i_repid.

*si le programme est dans la table z00_bc_err_log, on récupère la zone

  • Z_DELAI (délai de rétention des erreurs)

*sinon le délai est celui passé en paramètre de cette fonction

IF sy-subrc = 0.

z_date = sy-datum - w_dl_delai.

ELSE.

z_date = sy-datum - i_nb_jour.

  • Pas d'enreg. ds table param, alors on stockera ds Z00_BC_ERREUR

w_in_stockage = 'X'.

ENDIF.

  • fin ajout FAE 30463

  • Suppression des enregistrements trop vieux.

DELETE FROM z00_bc_erreur WHERE z_repid EQ i_repid

AND z_dt_date_exec LE z_date.

ENDFORM.

*----


*

  • Form F911_SUPPRESSION_ANOMALIE_BLOC *

*----


*

  • Fonction : *

  • - Supprime les villes anomalies en tenant compte des objets de bloc *

  • *

  • Donnée globale : *

  • - Z00_BC_ERREUR Table des anomalies des programmes spécifiques.*

  • *

  • *

  • Entrée : *

  • - I_REPID Nom du programme en erreur. *

  • - I_NB_JOUR Nombre de jour avant la suppression des *

  • enrgistrement de la lable Z00_BC_ERREUR. *

  • *

*----


*

FORM f911_suppression_anomalie_bloc USING i_repid

i_nb_jour.

  • Blocage de la table

CALL FUNCTION 'ENQUEUE_EZ00_BC_ERREUR'

EXPORTING

mode_z00_bc_erreur = 'E'

z_mandt = sy-mandt

z_repid = i_repid

  • X_Z_REPID = ' '

  • _SCOPE = '2'

  • _WAIT = ' '

  • _COLLECT = ' '

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

  • Suppression des enr que si la table pour ce pg n'est pas bloquée

  • Si bloquée => ne rien faire car suppression aura déjà eu lieu

IF sy-subrc EQ 0.

  • début ajout FAE 30463

SELECT SINGLE z_stockage z_delai

INTO (w_in_stockage, w_dl_delai)

FROM z00_bc_err_log

WHERE z_repid = i_repid.

*si le programme est dans la table z00_bc_err_log, on récupère la zone

  • Z_DELAI (délai de rétention des erreurs)

*sinon le délai est celui passé en paramètre de cette fonction

IF sy-subrc = 0.

z_date = sy-datum - w_dl_delai.

ELSE.

z_date = sy-datum - i_nb_jour.

  • Pas d'enreg. ds table param, alors on stockera ds Z00_BC_ERREUR

w_in_stockage = 'X'.

ENDIF.

  • fin ajout FAE 30463

  • Suppression des enregistrements trop vieux.

DELETE FROM z00_bc_erreur WHERE z_repid EQ i_repid

AND z_dt_date_exec LE z_date.

  • Déblocage de la table.

CALL FUNCTION 'DEQUEUE_EZ00_BC_ERREUR'

EXPORTING

  • MODE_Z00_BC_ERREUR = 'E'

z_mandt = sy-mandt

z_repid = i_repid.

ENDIF.

ENDFORM.

*----


*

  • Form F912_MAJ_Z00_BC_CPT_SESS *

*----


*

  • Fonction : *

  • - Renseigne la table transparente des sessions. *

  • *

  • Données globales : *

  • - z00_BC_CPT_SESS Stockage des compteurs associés aux progs de *

  • traitement. *

  • - Z00_BC_ERREUR Table des anomalies des programmes spécifiques*

  • *

  • Entrée : *

  • - I_REPID Nom du programme en erreur. *

  • *

  • Sortie : *

  • - O_CT_SESSION Numéro de session. *

*----


*

FORM f912_maj_z00_bc_cpt_sess USING i_repid

CHANGING o_ct_session.

  • Blocage de la table

CALL FUNCTION 'ENQUEUE_EZ00_BC_CPT_SESS'

EXPORTING

mode_z00_bc_cpt_sess = 'E'

z_mandt = sy-mandt

z_repid = i_repid

  • X_Z_REPID = ' '

  • _SCOPE = '2'

  • _WAIT = ' '

  • _COLLECT = ' '

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

  • Si la table est déjà vérouillée.

IF sy-subrc NE 0.

DO.

  • Si c'est la 99eme fois que l'on reboucle alors on sort du programme.

IF sy-index EQ 99.

STOP.

ENDIF.

  • sinon attendre 1 seconde.

WAIT UP TO 1 SECONDS.

  • Blocage de la table

CALL FUNCTION 'ENQUEUE_EZ00_BC_CPT_SESS'

EXPORTING

mode_z00_bc_cpt_sess = 'E'

z_mandt = sy-mandt

z_repid = i_repid

  • X_Z_REPID = ' '

  • _SCOPE = '2'

  • _WAIT = ' '

  • _COLLECT = ' '

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

  • Si table bloquée.

IF sy-subrc EQ 0.

EXIT.

ENDIF.

ENDDO.

ENDIF.

  • Lecture dans la table des sessions.

SELECT SINGLE * FROM z00_bc_cpt_sess WHERE z_repid EQ i_repid.

  • Contrôle si un enregistrement avec le même nom de programme existe et

  • si le compteur de session est différent de '99'.

IF sy-subrc EQ 0 AND z00_bc_cpt_sess-z_ct_session NE 99.

z00_bc_cpt_sess-z_ct_session = z00_bc_cpt_sess-z_ct_session + 1.

o_ct_session = z00_bc_cpt_sess-z_ct_session.

MODIFY z00_bc_cpt_sess.

  • Si un enregistrement avec le même nom de programme existe et

  • si le compteur de session est égal à '99'.

ELSEIF sy-subrc EQ 0 AND z00_bc_cpt_sess-z_ct_session EQ 99.

o_ct_session = z00_bc_cpt_sess-z_ct_session.

MODIFY z00_bc_cpt_sess.

  • Sinon.

ELSEIF sy-subrc NE 0.

z00_bc_cpt_sess-z_ct_session = '00'.

z00_bc_cpt_sess-z_repid = i_repid.

o_ct_session = z00_bc_cpt_sess-z_ct_session.

MODIFY z00_bc_cpt_sess.

ENDIF.

COMMIT WORK.

  • Déblocage de la table.

CALL FUNCTION 'DEQUEUE_EZ00_BC_CPT_SESS'

EXPORTING

mode_z00_bc_cpt_sess = 'E'

z_mandt = sy-mandt

z_repid = i_repid.

  • X_Z_REPID = ' '

  • _SCOPE = '3'

  • _SYNCHRON = ' '

  • _COLLECT = ' '

ENDFORM.

*----


*

  • Form F920_TOP_OF_PAGE *

*----


*

  • Fonction : *

  • - Entête Schneider *

  • *

  • Entrée : *

  • - I_REPID Nom du programme en erreur. *

  • *

*----


*

FORM f920_top_of_page USING i_repid. "#EC CALLED

  • En-tete de page.

CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'

EXPORTING

p_linsz = k_ligne

p_pagno = sy-pagno

p_prog = i_repid

p_projet = k_projet

p_societe = k_societe

p_sujet = sy-title.

IF sy-subrc = 0.

ENDIF.

ENDFORM.

*----


*

  • Form F920_EDITION *

*----


*

  • Fonction : *

  • - Edition des erreurs. *

  • *

  • Données globales : *

  • - ITB_ERREUR Table interne des anomalies. *

  • *

  • Entrée : *

  • - I_REPID Nom du programme en erreur. *

  • - I_CLEF_OBJET, Désignation de la clé de l'objet. *

  • *

*----


*

FORM f920_edition USING i_repid

i_clef_objet. "#EC CALLED

  • En-tete de tableau.

WRITE AT (sy-linsz) sy-uline.

WRITE: sy-vline,

k_heure(8),

sy-vline,

k_code(4),

sy-vline,

k_lb_message(80),

sy-vline,

i_clef_objet.

WRITE AT sy-linsz sy-vline.

LOOP AT itb_erreur.

  • Edition de la table interne des anomalies.

  • Controle des couleurs.

IF itb_erreur-z_cd_message(1) NE 'S'.

IF itb_erreur-z_cd_message(1) EQ 'W'.

FORMAT COLOR = 7 INTENSIFIED OFF.

ELSEIF itb_erreur-z_cd_message(1) EQ 'I'.

FORMAT COLOR = 3 INTENSIFIED OFF.

ELSE.

FORMAT COLOR = 6 INTENSIFIED OFF.

ENDIF.

ELSE.

FORMAT COLOR = 5 INTENSIFIED ON.

ENDIF.

WRITE AT (sy-linsz) sy-uline.

WRITE: sy-vline,

itb_erreur-z_hr_heure_exec,

sy-vline,

itb_erreur-z_cd_message(4),

sy-vline,

itb_erreur-z_lb_message(80),

sy-vline,

*Begin change PIT DE3K936510

  • itb_erreur-z_ds_clef_objet(27).

itb_erreur-z_ds_clef_objet(59).

*End change PIT DE3K936510

WRITE AT sy-linsz sy-vline.

ENDLOOP.

WRITE AT (sy-linsz) sy-uline.

ENDFORM.

INCLUDE: z00_bci010. " Gestion des anomalies.

*----


*

  • Déclaration des données *

*----


*

  • Tables de la bases de données *

*----


*

TABLES:

ekpo, " Poste document d'achat.

lfa1, " Base fournisseurs (généralités).

marc, " Données division de l'article.

z03_bw_cmp1,

eord, "Répertoire des sources appro. Achats

eina, "Fiche infos-achats - données générales

t024, "Groupes d'acheteurs

tvarv. "FAE17345+

*----


*

  • Déclaration des données internes *

*----


*

  • Déclaration de la table interne qui permet de recuperer les mois.

DATA: BEGIN OF itb_months OCCURS 12.

INCLUDE STRUCTURE t247.

DATA: END OF itb_months.

  • Table pour récupération d'infos sur les divisions

DATA: BEGIN OF itb_t001w OCCURS 0,

werks LIKE t001w-werks,

fabkl LIKE t001w-fabkl," Clé du calendrier d'entreprise

END OF itb_t001w.

  • Déclaration de la table interne contenant les infos sur l'adresse du

  • fournisseur.

DATA: BEGIN OF itb_adresse OCCURS 0,

lifnr LIKE lfa1-lifnr, " Numéro de compte fournisseur.

name1 LIKE lfa1-name1, " Nom 1.

name2 LIKE lfa1-name2, " Nom 2.

name3 LIKE lfa1-name3, " Nom 3.

name4 LIKE lfa1-name4, " Nom 4.

stras LIKE lfa1-stras, " N° de rue et nom de la rue.

pstlz LIKE lfa1-pstlz, " Code postal.

ort01 LIKE lfa1-ort01, " Localité.

pfach LIKE lfa1-pfach, " Boîte postale.

pstl2 LIKE lfa1-pstl2, " Code de la boîte postale.

land1 LIKE lfa1-land1, " Clé de pays.

landx LIKE t005t-landx, " Pays.

spras LIKE lfa1-spras, " Code langue

END OF itb_adresse.

  • Déclaration d'une table interne pour les informations sur les

  • prévisions de commande.

DATA: BEGIN OF itb_prev_cde OCCURS 0,

werks LIKE marc-werks, " Division

idnlf LIKE eina-idnlf, " ADDsde ref article frn

lifnr LIKE eord-lifnr, " N° fournisseur.

ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs

dispo LIKE marc-dispo, " Code gestionnaire MRP

matnr LIKE eord-matnr, " Article.

maktx LIKE makt-maktx, " Désignation article.

bstmi LIKE marc-bstmi, " Quantité de commande.

men00 LIKE plaf-gsmng, " Quantité du mois en cours M.

men01 LIKE plaf-gsmng, " Quantité pour le mois M+1.

men02 LIKE plaf-gsmng, " Quantité pour le mois M+2.

men03 LIKE plaf-gsmng, " Quantité pour le mois M+3.

men04 LIKE plaf-gsmng, " Quantité pour le mois M+4.

men05 LIKE plaf-gsmng, " Quantité pour le mois M+5.

men06 LIKE plaf-gsmng. " Quantité pour le mois M+6.

DATA: END OF itb_prev_cde.

  • Structure de travail pour les commandes convernant les PFC

DATA str_pca_pfc LIKE itb_prev_cde.

*add sde

DATA str_eord_pfc LIKE itb_prev_cde.

  • Structure de travail pour les prévisons PFC

DATA str_prev_pfc LIKE itb_prev_cde.

  • Déclaration d'une table interne pour les informations sur le

  • portefeuille des commandes d'achat.

DATA: BEGIN OF itb_pca OCCURS 0,

werks LIKE ekpo-werks, " Division

idnlf LIKE eina-idnlf, " ADDsde ref article frn

lifnr LIKE eord-lifnr, " N° fournisseur.

ekgrp LIKE marc-ekgrp, " Groupe d'acheteurs

dispo LIKE marc-dispo, " Code gestionnaire MRP

matnr LIKE eord-matnr, " Article.

maktx LIKE makt-maktx, " Désignation article.

ebeln LIKE ekes-ebeln, " Numéro du document d'achat.

ebelp LIKE ekes-ebelp, " Numéro de poste du document d'achat.

slfdt LIKE eket-slfdt, " Date de livraison statistique

eindt LIKE ekes-eindt, " Date de livraison indiquée dans la

" confirmation de la cde.

menge LIKE ekes-menge, " Quantité indiquée dans la confirma-

" tion de la commande.

attdu LIKE eket-wemng, " Portefeuille fournisseur.

netpr LIKE ekpo-brtwr, " Prix net du document d'achat dans

" la devise du document.

rtard TYPE i, " Retard en jours ouvres.

wemng LIKE eket-wemng, " Quantité de l'entrée de marchandise.

bldat LIKE mkpf-bldat, " Date inscrite sur la pièce/sur le

" document.

qtran LIKE ekes-menge, " Quantité en transit.

dtran LIKE ekes-eindt. " Date du dernier avis de transit.

DATA: END OF itb_pca.

DATA: w_i TYPE i, "Compteur

w_i_char(1) TYPE c, "Texte pour récupérer compteur

w_nm_zone(20) TYPE c, "Nom zone pour assign au field-symbols

w_nb_j TYPE i, "Nb de jours ouvrés jusqu'à fin mois

w_nb_j_tot TYPE i. "Nb de jours ouvrés du mois

FIELD-SYMBOLS: TYPE ANY.

  • Déclaration d'une table contenant les fiches info achat.

DATA: BEGIN OF itb_eina OCCURS 0,

matnr LIKE eina-matnr,

lifnr LIKE eina-lifnr,

idfnl LIKE eina-idnlf.

DATA: END OF itb_eina.

  • Déclaration d'une table contenant les infos groupe acheteur.

*DATA: BEGIN OF itb_t024 OCCURS 0,

  • ekgrp LIKE t024-ekgrp,

  • eknam LIKE t024-eknam,

  • ektel LIKE t024-ektel,

  • telfx LIKE t024-telfx.

*DATA: END OF itb_t024.

  • Déclaration d'une table pour le transfert du fichier.

DATA: BEGIN OF itb_transfert OCCURS 0,

col00(8), "division

col00bis(20), "Reference article

col01(18), "No article

col02(45), "libelle article

col021(17), "Groupe acheteur

col022(13), "gestionnaire

col03(17), "qte commandée ou No de commande

col04(13), "Mois 1 ou No poste cde

col05(20), "Mois 2 ou délai initial

col06(33), "Mois 3 ou délai négocié

col07(13), "Mois 4 ou qté cdée

col08(13), "Mois 5 ou qté attendue

col09(13), "Mois 6 ou Montant attendu

col10(13), "Mois 7 ou retard

col11(13), "qte partielle livree

col12(13), "date livraison partielle

col13(13), "qté en transit

col14(13). "date

DATA: END OF itb_transfert.

  • Déclaration d'une table contenant la liste des fournisseurs.

DATA: BEGIN OF itb_lifnr OCCURS 0,

werks LIKE marc-werks,

idfnl LIKE eina-idnlf,

lifnr LIKE eord-lifnr,

ekgrp LIKE marc-ekgrp,

spras LIKE lfa1-spras,

eknam LIKE t024-eknam,

ektel LIKE t024-ektel,

telfx LIKE t024-telfx.

DATA: END OF itb_lifnr.

  • Déclaration d'une structure pour la selection dans la table MSEG.

DATA : BEGIN OF itb_mseg OCCURS 0,

mblnr LIKE mseg-mblnr,

mjahr LIKE mseg-mjahr,

ebeln LIKE mseg-ebeln,

ebelp LIKE mseg-ebelp,

END OF itb_mseg.

  • déclaration d'une structure pour la selection dans EKPO.

DATA : BEGIN OF itb_ekpo OCCURS 0,

ebeln LIKE ekpo-ebeln,

lifnr LIKE ekko-lifnr,

ekgrp LIKE ekko-ekgrp,

ebelp LIKE ekpo-ebelp,

matnr LIKE ekpo-matnr,

werks LIKE ekpo-werks,

menge LIKE ekpo-menge,

bpumz LIKE ekpo-bpumz,

netpr LIKE ekpo-netpr,

peinh LIKE ekpo-peinh, "Base de prix FAE17345+

"AFT++

bpumn LIKE ekpo-bpumn,

dispo LIKE marc-dispo, "AFT++

END OF itb_ekpo.

  • déclaration d'une structure pour la selection dans EKPO.

DATA : BEGIN OF itb_ekko OCCURS 0,

ebeln LIKE ekko-ebeln,

lifnr LIKE ekko-lifnr,

spras LIKE ekko-spras,

END OF itb_ekko.

  • déclaration d'une structure pour la selection dans EKES.

DATA : BEGIN OF itb_ekes OCCURS 0,

ebeln LIKE eket-ebeln,

ebelp LIKE eket-ebelp,

etens LIKE ekes-etens,

ebtyp LIKE ekes-ebtyp,

eindt LIKE ekes-eindt,

menge LIKE ekes-menge,

dabmg LIKE ekes-dabmg,

END OF itb_ekes.

  • déclaration d'une structure pour la selection dans EKET

DATA : BEGIN OF itb_eket OCCURS 0,

ebeln LIKE eket-ebeln,

ebelp LIKE eket-ebelp,

menge LIKE eket-menge,

wemng LIKE eket-wemng,

eindt LIKE eket-eindt,

slfdt LIKE eket-slfdt,

END OF itb_eket.

  • déclaration d'une structure pour la selection dans MKPF.

DATA : BEGIN OF itb_mkpf OCCURS 0,

mblnr LIKE mkpf-mblnr,

mjahr LIKE mkpf-mjahr,

bldat LIKE mkpf-bldat,

END OF itb_mkpf.

  • Déclaration d'une structure pour la sélection dans EORD.

DATA : BEGIN OF itb_eord OCCURS 0,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

lifnr LIKE eord-lifnr,

ekgrp LIKE marc-ekgrp,

dispo LIKE marc-dispo, "DE3K924352

disls LIKE marc-disls,

bstfe LIKE marc-bstfe,

bstrf LIKE marc-bstrf,

bstmi LIKE marc-bstmi,

bstma LIKE marc-bstma,

END OF itb_eord.

DATA : BEGIN OF itb_eordw OCCURS 0.

INCLUDE STRUCTURE itb_eord.

DATA : END OF itb_eordw.

  • Déclaration d'une structure pour la sélection dans MAKT.

DATA : BEGIN OF itb_makt OCCURS 0,

matnr LIKE makt-matnr,

spras LIKE makt-spras,

maktx LIKE makt-maktx,

END OF itb_makt.

  • Déclaration d'une structure pour la sélection dans EBAN.

DATA : BEGIN OF itb_eban OCCURS 0,

banfn LIKE eban-banfn,

bnfpo LIKE eban-bnfpo, "DB3K900702+

ekgrp LIKE eban-ekgrp,

matnr LIKE eban-matnr,

werks LIKE eban-werks,

menge LIKE eban-menge,

lfdat LIKE eban-lfdat,

webaz LIKE eban-webaz,

flief LIKE eban-flief,

ebeln LIKE eban-ebeln,

bsmng LIKE eban-bsmng,

END OF itb_eban.

  • Déclaration d'une structure pour la sélection dans PLAF.

DATA : BEGIN OF itb_plaf OCCURS 0,

plnum LIKE plaf-plnum, "DB3K900702+

matnr LIKE plaf-matnr,

plwrk LIKE plaf-plwrk,

flief LIKE plaf-flief,

pedtr LIKE plaf-pedtr,

gsmng LIKE plaf-gsmng,

webaz LIKE plaf-webaz,

END OF itb_plaf.

  • Déclaration d'une structure pour la sélection dans MARC.

DATA : BEGIN OF itb_marc OCCURS 0,

matnr LIKE marc-matnr,

werks LIKE marc-werks,

ekgrp LIKE marc-ekgrp,

dispo LIKE marc-dispo,

disls LIKE marc-disls,

bstmi LIKE marc-bstmi,

bstma LIKE marc-bstma,

bstfe LIKE marc-bstfe,

bstrf LIKE marc-bstrf,

END OF itb_marc.

DATA : BEGIN OF itb_marc_eord OCCURS 0,

matnr LIKE marc-matnr,

werks LIKE marc-werks,

strgr LIKE marc-strgr, "groupe de stratégie planif

END OF itb_marc_eord.

DATA : BEGIN OF itb_z03_bw_cmp1 OCCURS 0,

matnr LIKE z03_bw_cmp1-matnr,

werks LIKE z03_bw_cmp1-werks,

pdatu LIKE z03_bw_cmp1-pdatu,

plnmg LIKE z03_bw_cmp1-plnmg,

END OF itb_z03_bw_cmp1.

  • Begin change BNI <DE3K937051>

DATA : BEGIN OF itb_z03_bw_cmp2 OCCURS 0,

matnr LIKE z03_bw_cmp2-matnr,

werks LIKE z03_bw_cmp2-werks,

pdatu LIKE z03_bw_cmp2-pdatu,

plnmg LIKE z03_bw_cmp2-plnmg,

END OF itb_z03_bw_cmp2.

*End change BNI

DATA : BEGIN OF str_index1,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index1.

DATA : BEGIN OF str_index2,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index2.

DATA : BEGIN OF str_index3_eord,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index3_eord.

DATA : BEGIN OF str_index4,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index4.

DATA : BEGIN OF str_index5,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index5.

DATA : BEGIN OF str_index6,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index6.

DATA : BEGIN OF str_index7,

matnr LIKE eord-matnr,

werks LIKE eord-werks,

END OF str_index7.

  • Déclaration des variables de debut et de fin de mois.

DATA: w_debut_mois LIKE sy-datum,

w_debut_periode LIKE sy-datum,

w_fin_mois LIKE sy-datum,

w_fin_periode LIKE sy-datum.

  • Déclaration des variables pour les dates.

DATA: w_date0 LIKE sy-datum,

w_date1 LIKE sy-datum,

w_date2 LIKE sy-datum,

w_date3 LIKE sy-datum,

w_date4 LIKE sy-datum,

w_date5 LIKE sy-datum,

w_date6 LIKE sy-datum,

w_datejour LIKE sy-datum, "FAE15269

w_dat_da LIKE eban-lfdat,

w_dat_op LIKE plaf-pedtr,

w_mois0 LIKE t247-ltx,

w_mois1 LIKE t247-ltx,

w_mois2 LIKE t247-ltx,

w_mois3 LIKE t247-ltx,

w_mois4 LIKE t247-ltx,

w_mois5 LIKE t247-ltx,

w_mois6 LIKE t247-ltx,

w_lendemain LIKE sy-datum. "FAE17345+

  • Temoin d'un AR dans la commande d'achat.

DATA: w_temoin_ar.

  • Numéro de la confirmation de la commande

DATA : w_etens LIKE ekes-etens.

  • Déclaration des variables pour le nom des fichiers.

DATA: w_nom_fichier LIKE rlgrap-filename,

w_fichier LIKE rlgrap-filename,

w_racine LIKE rlgrap-filename,

w_file LIKE rlgrap-filename.

  • Déclaration d'une table interne pour le transfert.

DATA: BEGIN OF itb_trans OCCURS 0,

w_ligne(320).

DATA: END OF itb_trans.

  • Déclaration d'une variable pour rechercher les enregistrements vides.

DATA: w_compteur TYPE i,

w_compteur1 TYPE i,

w_compteur2 TYPE i,

w_retard TYPE i, " Retard en jours ouvres.

w_trouve_pfc TYPE c, "addsde

w_trouve_pfs TYPE c, "+DE3K937051

w_trouve TYPE c.

*Index pour les LOOP

DATA : w_index_ekpo LIKE sy-tabix,

w_index_ekes LIKE sy-tabix,

w_index_eket LIKE sy-tabix,

w_index_mseg LIKE sy-tabix,

w_index_eban LIKE sy-tabix,

w_index_plaf LIKE sy-tabix,

w_index_pca LIKE sy-tabix,

w_index_z03_bw_cmp1 LIKE sy-tabix,

w_index_z03_bw_cmp2 LIKE sy-tabix."+DE3K937051

RANGES : r_type_pfs FOR marc-strgr.

*fichier sur serveur +EDR231003

DATA : w_chemin LIKE filename-fileintern, "nom du fichier

w_date_fichier(12) TYPE c, "Date format DD_MM_AA

w_csv(307) TYPE c. "ligne du fichier format CSV

CONSTANTS: k_imputation_m LIKE eban-knttp VALUE 'M'. "FAE19001+

CONSTANTS : c_name(22) type c value 'Z03_GI_STRAT_LANCT_PFS',

c_s type c value 'S',

c_f type c value 'F',

c_e type c value 'E',

C_NB(2) TYPE C VALUE 'NB',

c_ar(2) type c value 'AR',

C_AL(2) TYPE C VALUE 'AL',

C_101(3) TYPE C VALUE '101'.

*----


*

  • Description de l écran de sélection *

*----


*

  • Paramètres "UTILISATION" *

*----


*

  • Ouverture d'un block de sélection pour le(s) fournisseur(s).

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-bl1.

  • Sélection division(s)

SELECT-OPTIONS: s_werks FOR ekpo-werks.

  • Sélection fournisseur(s).

SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr OBLIGATORY.

  • Sélection du Groupe d'acheteur

*SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp. "-FAE26446

*SELECT-OPTIONS: s_dispo FOR marc-dispo. "-FAE26446

SELECTION-SCREEN END OF BLOCK block1.

  • FAE 26446 : ajout

SELECTION-SCREEN BEGIN OF BLOCK block3 WITH FRAME TITLE text-bl3.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER p_ekgrp RADIOBUTTON GROUP g3.

SELECTION-SCREEN COMMENT 5(24) text-001 FOR FIELD p_ekgrp.

SELECT-OPTIONS: s_ekgrp FOR marc-ekgrp.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETER p_dispo RADIOBUTTON GROUP g3.

SELECTION-SCREEN COMMENT 5(24) text-002 FOR FIELD p_dispo.

SELECT-OPTIONS: s_dispo FOR marc-dispo.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK block3.

  • FAE 26446 : fin ajout

*----


*

  • Paramètres "SYSTEME" *

*----


*

  • Saut de 2 lignes.

SELECTION-SCREEN: SKIP 2.

  • Ouverture d'un block de sélection pour l'adresse physique du fichier.

SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-bl2.

PARAMETERS: p_pc RADIOBUTTON GROUP rad1 DEFAULT 'X', "+EDR231003

p_fic_pc LIKE rlgrap-filename. "+EDR231003

SELECTION-SCREEN SKIP. "+EDR231003

PARAMETERS : p_serve RADIOBUTTON GROUP rad1, "+EDR231003

p_fic_se LIKE filename-fileintern "+EDR231003

DEFAULT 'Z03_PREV_COMMANDES'. "+EDR231003

SELECTION-SCREEN END OF BLOCK block2.

*----


*

  • Logique de traitement *

*----


*

  • INITIALIZATION *

*----


*

INITIALIZATION.

  • Date du jour

MOVE sy-datum TO w_datejour. "FAE15269

  • Gestion des anomalies.

MOVE text-lb1 TO w_lb_traitement. "TEXT-LB1

PERFORM f930_init USING sy-cprog '30'.

  • Fin de la gestions des anomalies.

  • Récuperation des mois dans la table interne 'ITB_MONTHS'.

CALL FUNCTION 'MONTH_NAMES_GET'

EXPORTING

language = sy-langu

TABLES

month_names = itb_months

EXCEPTIONS

month_names_not_found = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Récupération des differentes periodes.

PERFORM f100_recuperation_date TABLES itb_months.

  • Récupération du debut du mois.

CONCATENATE sy-datlo(6) '01' INTO w_debut_mois.

MOVE: w_debut_mois TO w_debut_periode.

  • Récupération du dernier jour du mois.

CALL FUNCTION 'LAST_DAY_OF_MONTHS'

EXPORTING

day_in = sy-datlo

IMPORTING

last_day_of_month = w_fin_mois

EXCEPTIONS

day_in_no_date = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

*----


*

  • TOP-OF-PAGE *

*----


*

TOP-OF-PAGE.

CALL FUNCTION 'Z_00_BC_TOP_OF_PAGE'

EXPORTING

p_linsz = k_ligne

p_pagno = sy-pagno

p_prog = sy-cprog

p_projet = k_projet

p_societe = k_societe

p_sujet = sy-title.

*----


*

  • END-OF-PAGE *

*----


*

END-OF-PAGE.

*----


*

  • AT SELECTION-SCREEN *

*----


*

  • FAE 26446 : ajout

AT SELECTION-SCREEN ON BLOCK block3.

IF NOT ( s_ekgrp IS INITIAL )

AND NOT ( s_dispo IS INITIAL ).

MESSAGE e394(z03_mm).

ENDIF.

IF p_ekgrp = 'X'.

IF s_ekgrp IS INITIAL.

MESSAGE e395(z03_mm).

ENDIF.

ELSE.

IF s_dispo IS INITIAL.

MESSAGE e396(z03_mm).

ENDIF.

ENDIF.

  • fae26446 fin ajout

AT SELECTION-SCREEN ON BLOCK block2.

IF p_pc = 'X'.

IF p_fic_pc IS INITIAL.

*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)

MESSAGE e021(z03_mm).

ENDIF.

ELSE.

IF p_fic_se IS INITIAL.

*Attention, il n'y a aucune adresse de sauvegarde pour le(s) fichier(s)

MESSAGE e021(z03_mm).

ENDIF.

ENDIF.

  • Création du matchcode pour la selection du fichier local.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fic_pc.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

def_filename = p_fic_pc

def_path = 'C:'

mask = text-ma1 "text-ma1

mode = 'S'

title = text-sel "text-sel

IMPORTING

filename = p_fic_pc

EXCEPTIONS

inv_winsys = 1

no_batch = 2

selection_cancel = 3

selection_error = 4

OTHERS = 5.

IF sy-subrc NE 0 AND sy-subrc NE 3.

MESSAGE e032(z03_mm).

ENDIF.

*----


*

  • START-OF-SELECTION *

*----


*

START-OF-SELECTION.

PERFORM select_donnees.

=================================================

  • Liste des ARTICLES impactés pour les prévisions *

=================================================

===================================

  • PORTEFEUILLE DE COMMANDES D'ACHAT *

===================================

  • Construction itb_pca à partir de EKKO/EKPO.

w_index_ekpo = 1.

w_index_ekes = 1.

w_index_eket = 1.

w_index_mseg = 1.

  • SORT itb_ekko BY ebeln. "-FAE26446

SORT itb_ekpo BY ebeln ebelp.

SORT itb_makt BY matnr spras.

SORT itb_eket BY ebeln ebelp.

SORT itb_ekes BY ebeln ebelp.

SORT itb_mseg BY ebeln ebelp.

SORT itb_mkpf BY mblnr mjahr.

SORT itb_marc BY matnr werks. "+FAE26446

  • FAE 26446 remplacement

  • LOOP AT itb_ekko.

  • LOOP AT itb_ekpo.

  • FROM w_index_ekpo.

  • IF itb_ekko-ebeln = itb_ekpo-ebeln.

LOOP AT itb_ekpo.

READ TABLE itb_marc WITH KEY

matnr = itb_ekpo-matnr

werks = itb_ekpo-werks BINARY SEARCH.

CHECK sy-subrc = 0.

  • FAE 26446 fin remplacement

itb_pca-ebeln = itb_ekpo-ebeln.

itb_pca-ebelp = itb_ekpo-ebelp.

  • itb_pca-lifnr = itb_ekko-lifnr. "-FAE26446

itb_pca-lifnr = itb_ekpo-lifnr. "+FAE26446

itb_pca-ekgrp = itb_ekpo-ekgrp. "+FAE26446

itb_pca-dispo = itb_ekpo-dispo. "+FAE26446

itb_pca-matnr = itb_ekpo-matnr.

itb_pca-werks = itb_ekpo-werks.

  • Recherche du libellé article

READ TABLE itb_makt

WITH KEY matnr = itb_ekpo-matnr

spras = text-fra " text-fra

BINARY SEARCH.

IF sy-subrc = 0.

itb_pca-maktx = itb_makt-maktx.

ELSE.

READ TABLE itb_makt

WITH KEY matnr = itb_ekpo-matnr

spras = text-ang " text-ang

BINARY SEARCH.

IF sy-subrc = 0.

itb_pca-maktx = itb_makt-maktx.

ENDIF.

ENDIF.

IF NOT itb_ekpo-bpumn IS INITIAL.

itb_pca-menge = itb_ekpo-menge * itb_ekpo-bpumz /

itb_ekpo-bpumn.

ENDIF.

  • Sélect° ds la table EKES des dates de livraisons et des qtés

  • en transit

CLEAR w_temoin_ar.

CLEAR w_etens.

LOOP AT itb_ekes

FROM w_index_ekes.

IF itb_ekes-ebeln = itb_ekpo-ebeln

AND itb_ekes-ebelp = itb_ekpo-ebelp.

IF itb_ekes-ebtyp = text-arn. "text-arn.

itb_pca-eindt = itb_ekes-eindt.

w_temoin_ar = 'X'.

ELSE.

  • Si c'est une qté en transit alors on recupere

  • la quantité et la date.

IF itb_ekes-dabmg < itb_ekes-menge.

itb_pca-qtran = itb_pca-qtran + itb_ekes-menge -

itb_ekes-dabmg.

ENDIF.

IF itb_ekes-etens > w_etens.

w_etens = itb_ekes-etens.

itb_pca-dtran = itb_ekes-eindt.

ENDIF.

ENDIF.

ELSEIF itb_ekes-ebeln > itb_ekpo-ebeln

OR ( itb_ekes-ebeln = itb_ekpo-ebeln

AND itb_ekes-ebelp > itb_ekpo-ebelp ).

w_index_ekes = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

  • S'il n'y a pas d'AR alors récupérat° de la date livraison dans EKET.

LOOP AT itb_eket

FROM w_index_eket.

IF itb_eket-ebeln = itb_ekpo-ebeln

AND itb_eket-ebelp = itb_ekpo-ebelp.

IF w_temoin_ar IS INITIAL.

itb_pca-eindt = itb_eket-eindt.

ENDIF.

itb_pca-slfdt = itb_eket-slfdt.

  • Calcul du portefeuille fournisseur à partir de la

  • qté commandée et la qté reçue

itb_pca-attdu = itb_pca-attdu + itb_eket-menge -

itb_eket-wemng.

  • Calcul du montant du poste

itb_pca-netpr = itb_ekpo-netpr * itb_pca-attdu.

IF itb_ekpo-peinh NE 0.

itb_pca-netpr = itb_pca-netpr / itb_ekpo-peinh.

ENDIF.

  • Calcul quantité réceptionnée.

itb_pca-wemng = itb_pca-wemng + itb_eket-wemng.

  • Calcul du retard en nombre de jours calendaires

  • Le calcul du retard ne doit pas prendre en compte

  • le jour de livraison

ADD 1 TO itb_eket-eindt.

IF NOT itb_pca-attdu IS INITIAL

AND itb_eket-eindt LT sy-datum.

  • Calcul du retard en nombre de jours ouvrés

CLEAR w_retard.

CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'

EXPORTING

date_deb = itb_eket-eindt

date_fin = sy-datum

IMPORTING

jours = w_retard.

itb_pca-rtard = itb_pca-rtard + w_retard .

ENDIF.

ELSEIF itb_eket-ebeln > itb_ekpo-ebeln

OR ( itb_eket-ebeln = itb_ekpo-ebeln

AND itb_eket-ebelp > itb_ekpo-ebelp ).

w_index_eket = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

  • Recherche de la derniere date de livraison.

LOOP AT itb_mseg

FROM w_index_mseg.

IF itb_mseg-ebeln = itb_ekpo-ebeln

AND itb_mseg-ebelp = itb_ekpo-ebelp.

READ TABLE itb_mkpf

WITH KEY mblnr = itb_mseg-mblnr

mjahr = itb_mseg-mjahr

BINARY SEARCH.

IF sy-subrc = 0.

IF itb_mkpf-bldat > itb_pca-bldat.

itb_pca-bldat = itb_mkpf-bldat.

ENDIF.

ENDIF.

ELSEIF itb_mseg-ebeln > itb_ekpo-ebeln

OR ( itb_mseg-ebeln = itb_ekpo-ebeln

AND itb_mseg-ebelp > itb_ekpo-ebelp ).

w_index_mseg = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

APPEND itb_pca.

CLEAR itb_pca.

  • FAE26446 suppression parag. suivant

  • ELSEIF itb_ekpo-ebeln > itb_ekko-ebeln.

  • w_index_ekpo = sy-tabix.

  • EXIT.

  • ENDIF.

  • ENDLOOP.

  • Fin FAE26446

ENDLOOP.

=========================

  • PREVISIONS DE COMMANDES *

=========================

SORT itb_eord BY matnr werks lifnr ekgrp.

SORT itb_eban BY matnr werks flief ekgrp.

SORT itb_plaf BY matnr plwrk flief.

SORT itb_z03_bw_cmp1 BY matnr werks.

SORT itb_z03_bw_cmp2 BY matnr werks."+DE3K937051

SORT itb_pca BY matnr werks lifnr.

w_index_eban = 1.

w_index_plaf = 1.

w_index_z03_bw_cmp1 = 1.

w_index_pca = 1.

w_index_z03_bw_cmp2 = 1."+DE3K937051

  • Remplissage de la table des prévisions de commande.

LOOP AT itb_eord.

CLEAR: str_prev_pfc,

w_trouve.

MOVE-CORRESPONDING itb_eord TO str_index1.

MOVE-CORRESPONDING itb_eord TO str_index3_eord.

MOVE-CORRESPONDING itb_eord TO itb_prev_cde.

  • Recherche dans table division/article (MARC) afin de déterminer si

  • article PFS (prod fabriqué à stock) ou PFC (Prod fabriqué sur cde)

AT NEW werks.

READ TABLE itb_marc_eord

WITH KEY matnr = itb_eord-matnr

werks = itb_eord-werks

BINARY SEARCH.

IF sy-subrc NE 0.

CLEAR itb_marc_eord.

ENDIF.

ENDAT.

*----


*

  • a - Prévisions pour les PFS : DA + OP *

*----


*

*Calcul des quantités de commande.

IF itb_eord-disls = text-tl1. "text-tl1.

itb_prev_cde-bstmi = itb_eord-bstfe.

ELSEIF itb_eord-disls = text-tl2 "text-tl2

OR itb_eord-disls = text-tl3. "text-tl3.

IF itb_eord-bstrf NE 0

AND itb_eord-bstmi = 0

AND itb_eord-bstma = 0.

itb_prev_cde-bstmi = itb_eord-bstrf.

ELSEIF itb_eord-bstrf NE 0

AND itb_eord-bstmi NE 0.

itb_prev_cde-bstmi = itb_eord-bstmi.

ELSEIF itb_eord-bstrf = itb_eord-bstma

AND itb_eord-bstrf NE 0

AND itb_eord-bstmi = 0.

itb_prev_cde-bstmi = itb_eord-bstma.

ENDIF.

ENDIF.

  • si article PFS (Prod fabriqué à stock) recherche des

  • demandes d'achat ou ordres planfiés

IF itb_marc_eord-strgr IN r_type_pfs.

  • Récupérat° calendrier de la division pour calcul correct lors de

  • l'ajout de eban-webaz ou plaf-webaz jours ouvrés

CLEAR w_trouve_pfs ."+DE3K937051

READ TABLE itb_t001w

WITH KEY werks = itb_eord-werks

BINARY SEARCH.

IF sy-subrc = 0.

LOOP AT itb_eban

FROM w_index_eban.

MOVE-CORRESPONDING itb_eban TO str_index2.

IF str_index1 = str_index2.

w_trouve_pfs = 'X'."+DE3K937051

  • si qte commandées pour la DA < quantité de la DA

IF itb_eban-bsmng < itb_eban-menge.

  • ajout de quantité de la DA - qte commandée pour la DA

PERFORM affect_da.

ENDIF.

ELSEIF str_index2 > str_index1.

w_index_eban = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

  • ajout des quantité des OP (ordres planifiés)

LOOP AT itb_plaf

FROM w_index_plaf.

MOVE-CORRESPONDING itb_plaf TO str_index4.

str_index4-werks = itb_plaf-plwrk.

  • str_index4-lifnr = itb_plaf-flief.

IF str_index4 = str_index3_eord.

  • Ajout de webaz jours ouvrés à pedtr

CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'

EXPORTING

i_date = itb_plaf-pedtr

i_calendar_id = itb_t001w-fabkl

i_nb_days = itb_plaf-webaz

IMPORTING

o_date = w_dat_op

EXCEPTIONS

conv_error = 1

OTHERS = 2.

IF sy-subrc

LOOP AT itb_z03_bw_cmp2

FROM w_index_z03_bw_cmp2.

MOVE-CORRESPONDING itb_z03_bw_cmp2 TO str_index7.

MOVE-CORRESPONDING itb_eord TO str_index6.

IF str_index6 = str_index7.

CASE itb_z03_bw_cmp2-pdatu+0(6).

WHEN w_date0+0(6).

*Begin of change GKA - DE3K938206

  • Recalculation prev month M in fct of Nb of wrought days of the month

IF NOT itb_z03_bw_cmp2-plnmg IS INITIAL.

  • one does not hold any more account of the day in progress

w_lendemain = w_date0 + 1.

CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+

CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'

EXPORTING

date_deb = w_lendemain

date_fin = w_fin_mois

IMPORTING

jours = w_nb_j.

CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'

EXPORTING

date = w_lendemain

IMPORTING

jours = w_nb_j_tot.

itb_z03_bw_cmp2-plnmg = itb_z03_bw_cmp2-plnmg * w_nb_j / w_nb_j_tot.

itb_z03_bw_cmp2-plnmg = ceil( itb_z03_bw_cmp2-plnmg ).

ENDIF.

*End of change GKA - DE3K938206

itb_prev_cde-men00 = itb_prev_cde-men00 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date1+0(6).

itb_prev_cde-men01 = itb_prev_cde-men01 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date2+0(6).

itb_prev_cde-men02 = itb_prev_cde-men02 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date3+0(6).

itb_prev_cde-men03 = itb_prev_cde-men03 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date4+0(6).

itb_prev_cde-men04 = itb_prev_cde-men04 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date5+0(6).

itb_prev_cde-men05 = itb_prev_cde-men05 +

itb_z03_bw_cmp2-plnmg.

WHEN w_date6+0(6).

itb_prev_cde-men06 = itb_prev_cde-men06 +

itb_z03_bw_cmp2-plnmg.

WHEN OTHERS.

ENDCASE.

ELSEIF str_index7 > str_index6.

w_index_z03_bw_cmp2 = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

*End change BNI

  • If forecasts found in Z03_BW_CMP2 for the article

  • IF w_trouve_pfs = 'X'."-DE3K937602

  • Recalculation prev month M in fct of Nb of wrought days of the month

*Begin of change GKA - DE3K938206

  • IF NOT itb_prev_cde-men00 IS INITIAL.

    • one does not hold any more account of the day in progress

  • w_lendemain = w_date0 + 1.

*

  • CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+

  • CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'

  • EXPORTING

  • date_deb = w_lendemain

  • date_fin = w_fin_mois

  • IMPORTING

  • jours = w_nb_j.

*

  • CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'

  • EXPORTING

  • date = w_lendemain

  • IMPORTING

  • jours = w_nb_j_tot.

*

  • itb_prev_cde-men00 = itb_prev_cde-men00 * w_nb_j / w_nb_j_tot

*.

**CLA DE3K925301 FAE27197

**to round has the higher entirety

    • itb_prev_cde-men00 = ceil( itb_prev_cde-men00 ). "DE3K938206-

*

*

  • ENDIF.

*End of change GKA - DE3K938206

  • ENDIF."-DE3K937602

*End change BNI

**----


*

    • b - Prévisions pour les PFC (Z03_BW_CMP1 puis rééquilibrage) *

**----


*

  • Recherche des previsions dans Z03_BW_CMP1

  • si article PFC (Prod fabriqué sur cde) recherche des prévisions

IF NOT itb_marc_eord-strgr IN r_type_pfs.

CLEAR str_prev_pfc.

MOVE-CORRESPONDING itb_eord TO str_prev_pfc.

CLEAR w_trouve_pfc .

LOOP AT itb_z03_bw_cmp1

FROM w_index_z03_bw_cmp1.

MOVE-CORRESPONDING itb_z03_bw_cmp1 TO str_index7.

MOVE-CORRESPONDING itb_eord TO str_index6.

IF str_index6 = str_index7.

  • si on trouve des prévisions dans z03_bw_cmp1 pour la source

  • d'appro eord alors c'est un article PFC

w_trouve_pfc = 'X'.

CASE itb_z03_bw_cmp1-pdatu+0(6).

WHEN w_date0+0(6).

str_prev_pfc-men00 = itb_z03_bw_cmp1-plnmg.

WHEN w_date1+0(6).

str_prev_pfc-men01 = itb_z03_bw_cmp1-plnmg.

WHEN w_date2+0(6).

str_prev_pfc-men02 = itb_z03_bw_cmp1-plnmg.

WHEN w_date3+0(6).

str_prev_pfc-men03 = itb_z03_bw_cmp1-plnmg.

WHEN w_date4+0(6).

str_prev_pfc-men04 = itb_z03_bw_cmp1-plnmg.

WHEN w_date5+0(6).

str_prev_pfc-men05 = itb_z03_bw_cmp1-plnmg.

WHEN w_date6+0(6).

str_prev_pfc-men06 = itb_z03_bw_cmp1-plnmg.

WHEN OTHERS.

ENDCASE.

ELSEIF str_index7 > str_index6.

w_index_z03_bw_cmp1 = sy-tabix.

EXIT.

ENDIF.

ENDLOOP.

*Begin change BNI

  • Si des prévisions trouvées dans Z03_BW_CMP1 pour l'article

IF w_trouve_pfc = 'X'.

  • Recalcul prev mois M en fct du nb de jours ouvrés du mois

IF NOT str_prev_pfc-men00 IS INITIAL.

  • on ne tient plus compte du jour en cours

w_lendemain = w_date0 + 1.

CLEAR:w_nb_j,w_nb_j_tot. "DE3K938206+

CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_PERIOD'

EXPORTING

date_deb = w_lendemain

date_fin = w_fin_mois

IMPORTING

jours = w_nb_j.

CALL FUNCTION 'Z_00_BC_WORKDAYS_PER_MONTH'

EXPORTING

date = w_lendemain

IMPORTING

jours = w_nb_j_tot.

str_prev_pfc-men00 = str_prev_pfc-men00 * w_nb_j / w_nb_j_tot.

*CLA DE3K925301 FAE27197

*arrondir a l'entier supèrieur

str_prev_pfc-men00 = ceil( str_prev_pfc-men00 ).

ENDIF.

  • Equilibrage PFC : commande/prévision du mois

  • Recherche COMMANDES cumulées pour M à M+6

CLEAR str_pca_pfc.

LOOP AT itb_pca

FROM w_index_pca.

MOVE-CORRESPONDING itb_pca TO str_index5.

IF str_index5 = str_index3_eord.

IF NOT itb_pca-menge IS INITIAL.

CASE itb_pca-eindt+0(6).

WHEN w_date0+0(6).

IF itb_pca-eindt >= w_date0.

str_pca_pfc-men00 = str_pca_pfc-men00 + itb_pca-menge.

ENDIF.

WHEN w_date1+0(6).

str_pca_pfc-men01 = str_pca_pfc-men01 + itb_pca-menge.

WHEN w_date2+0(6).

str_pca_pfc-men02 = str_pca_pfc-men02 + itb_pca-menge.

WHEN w_date3+0(6).

str_pca_pfc-men03 = str_pca_pfc-men03 + itb_pca-menge.

WHEN w_date4+0(6).

str_pca_pfc-men04 = str_pca_pfc-men04 + itb_pca-menge.

WHEN w_date5+0(6).

str_pca_pfc-men05 = str_pca_pfc-men05 + itb_pca-menge.

WHEN w_date6+0(6).

str_pca_pfc-men06 = str_pca_pfc-men06 + itb_pca-menge.

ENDCASE.

ENDIF."NOT itb_pca-menge IS INITIAL

ELSEIF str_index5 > str_index3_eord.

w_index_pca = sy-tabix.

EXIT.

ENDIF.

ENDLOOP."itb_pca

*. Equilibrer commande / prévision des mois : diminuer la quantité de

  • prévision de chaque mois par le portefeuille de commande client du

  • mois*. Si ce solde est négatif alors lui donner la valeur 0.

w_i = 0.

  • Ajustement commandes/prévisions pour les mois M à M+6

WHILE w_i .

  • Pour un mois, SI Prévisions > Commandes en cours

IF .

  • Prévisions = Prévisions - Commandes en cours

= 0.

ENDIF.

  • On passe au mois suivant

w_i = w_i + 1.

ENDWHILE.

MOVE str_prev_pfc-men00 TO itb_prev_cde-men00.

MOVE str_prev_pfc-men01 TO itb_prev_cde-men01.

MOVE str_prev_pfc-men02 TO itb_prev_cde-men02.

MOVE str_prev_pfc-men03 TO itb_prev_cde-men03.

MOVE str_prev_pfc-men04 TO itb_prev_cde-men04.

MOVE str_prev_pfc-men05 TO itb_prev_cde-men05.

MOVE str_prev_pfc-men06 TO itb_prev_cde-men06.

ENDIF. "w_trouve_pfc = 'X'.

ENDIF.

**************************************************************

*recherche du libellé article

READ TABLE itb_makt

WITH KEY matnr = itb_eord-matnr

spras = text-fra " text-fra

BINARY SEARCH.

IF sy-subrc = 0.

itb_prev_cde-maktx = itb_makt-maktx.

ELSE.

READ TABLE itb_makt

WITH KEY matnr = itb_eord-matnr

spras = text-ang " text-ang

BINARY SEARCH.

IF sy-subrc = 0.

itb_prev_cde-maktx = itb_makt-maktx.

ENDIF.

ENDIF.

  • *********************

APPEND itb_prev_cde.

  • **********************

CLEAR itb_prev_cde.

ENDLOOP."itb_eord

REFRESH itb_eina.

CLEAR itb_eina.

  • begin of sudha

IF NOT itb_prev_cde[] IS INITIAL.

SELECT matnr lifnr idnlf

INTO TABLE itb_eina

FROM eina

FOR ALL ENTRIES IN itb_prev_cde

WHERE matnr = itb_prev_cde-matnr.

ENDIF.

*end of sudha

LOOP AT itb_prev_cde.

  • recherche de la ref article fournisseur

READ TABLE itb_eina WITH KEY

matnr = itb_prev_cde-matnr

lifnr = itb_prev_cde-lifnr

TRANSPORTING idfnl.

IF sy-subrc = 0.

  • on ne garde que les 20 premiers chars

itb_prev_cde-idnlf = itb_eina-idfnl(20).

MODIFY itb_prev_cde TRANSPORTING idnlf.

ENDIF.

ENDLOOP.

*********************************************************************

REFRESH itb_eina.

CLEAR itb_eina.

if not itb_pca[] is initial.

SELECT matnr lifnr idnlf

INTO TABLE itb_eina

FROM eina

FOR ALL ENTRIES IN itb_pca

WHERE matnr = itb_pca-matnr.

endif.

LOOP AT itb_pca.

READ TABLE itb_prev_cde WITH KEY werks = itb_pca-werks

matnr = itb_pca-matnr

lifnr = itb_pca-lifnr

BINARY SEARCH

*Begin of change

  • TRANSPORTING ekgrp.

TRANSPORTING dispo.

*End of change

IF sy-subrc = 0.

  • itb_pca-ekgrp = itb_prev_cde-ekgrp. "-FAE26446

itb_pca-dispo = itb_prev_cde-dispo.

*begin of sudha

MODIFY itb_pca TRANSPORTING dispo.

*end of sudha

ELSE.

READ TABLE itb_marc

WITH KEY matnr = itb_pca-matnr

werks = itb_pca-werks

BINARY SEARCH. "+FAE26446

IF sy-subrc = 0.

  • itb_pca-ekgrp = itb_marc-ekgrp. "-FAE26446

itb_pca-dispo = itb_marc-dispo.

*begin of sudha

MODIFY itb_pca TRANSPORTING dispo.

*end of sudha

ENDIF.

ENDIF.

  • recherche de la ref article fournisseur

READ TABLE itb_eina WITH KEY

matnr = itb_pca-matnr

lifnr = itb_pca-lifnr

BINARY SEARCH

TRANSPORTING idfnl.

IF sy-subrc = 0.

*on ne garde que les 20 premiers caractères

itb_pca-idnlf = itb_eina-idfnl(20).

MODIFY itb_pca TRANSPORTING idnlf.

ENDIF.

ENDLOOP.

*----


*

  • END-OF-SELECTION *

*----


*

END-OF-SELECTION.

  • Suppression des articles n'ayant pas de prevision de commande.

DELETE itb_prev_cde

WHERE men00 IS initial

AND men01 IS initial

AND men02 IS initial

AND men03 IS initial

AND men04 IS initial

AND men05 IS initial

AND men06 IS initial.

  • Suppression des articles n'ayant pas de commande.

DELETE itb_pca

WHERE ebeln IS initial

AND ebelp IS initial

AND eindt IS initial

AND menge IS initial

AND attdu IS initial

AND netpr IS initial

AND rtard IS initial

AND wemng IS initial

AND bldat IS initial

AND qtran IS initial

AND dtran IS initial.

  • Suppression des articles ayant été totalement livré.

LOOP AT itb_pca.

IF itb_pca-menge EQ itb_pca-wemng.

DELETE itb_pca.

ENDIF.

ENDLOOP.

  • Construction itb_lifnr : table des fichiers à créer

APPEND LINES OF itb_prev_cde TO itb_lifnr.

APPEND LINES OF itb_pca TO itb_lifnr.

  • DELETE itb_lifnr WHERE NOT ekgrp IN s_ekgrp. "-FAE26446

SORT itb_lifnr BY lifnr.

DELETE ADJACENT DUPLICATES FROM itb_lifnr COMPARING lifnr.

  • Tri de la table des previsions de commande.

SORT: itb_prev_cde BY matnr werks.

  • Tri de la table portefeuille de commandes achat

  • sur division/article/No cde/poste commande

SORT itb_pca

BY matnr ebeln ebelp werks.

  • Création des fichiers.

LOOP AT itb_lifnr.

  • Récupération code langue

READ TABLE itb_adresse WITH KEY lifnr = itb_lifnr-lifnr.

IF sy-subrc = 0.

itb_lifnr-spras = itb_adresse-spras.

ENDIF.

  • Traduction des élements de text dans la langue du fournisseur.

SET LANGUAGE itb_lifnr-spras.

  • Traduction des mois dans la langue du fournisseur.

  • Récuperation des mois dans la table interne 'ITB_MONTHS'.

CALL FUNCTION 'MONTH_NAMES_GET'

EXPORTING

language = itb_lifnr-spras

  • IMPORTING

  • RETURN_CODE =

TABLES

month_names = itb_months

EXCEPTIONS

month_names_not_found = 1

OTHERS = 2

.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Récupération des differentes periodes.

PERFORM f100_recuperation_date TABLES itb_months.

  • Nettoyage du compteur.

CLEAR: w_compteur.

  • Création du nom du fichier

IF p_pc = 'X'.

CONCATENATE itb_lifnr-lifnr

'_'

  • itb_lifnr-ekgrp "FAE26446

  • '-' "FAE26446

sy-datlo+6(2)

'_'

sy-datlo+4(2)

'_'

sy-datlo+2(2)

text-txt "text-txt

INTO w_nom_fichier.

CLEAR: w_fichier.

MOVE: p_fic_pc TO w_fichier.

  • FAE26446: remplacement

REPLACE 'Fournisseur_Groupeacheteurs_AA_MM_DD.xls' WITH

w_nom_fichier INTO w_fichier .

  • REPLACE 'Fournisseur_AA_MM_DD.xls' WITH

  • w_nom_fichier INTO w_fichier .

  • FAE26446 : fin remplacement

ELSE.

CLEAR w_chemin.

CONCATENATE sy-datlo+6(2)

'_'

sy-datlo+4(2)

'_'

sy-datlo+2(2)

text-csv "text-csv

INTO w_date_fichier.

ENDIF.

CALL FUNCTION 'FILE_GET_NAME'

EXPORTING

logical_filename = p_fic_se

parameter_1 = itb_lifnr-lifnr

parameter_2 = ''

parameter_3 = w_date_fichier

IMPORTING

file_name = w_chemin

EXCEPTIONS

file_not_found = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Copie de l'entete du document.

MOVE: text-l01 TO itb_transfert-col02. "text-l01

CONCATENATE: sy-datlo6(2) "sy-datum6(2)

w_mois0

sy-datlo(4) "sy-datum(4)

INTO itb_transfert-col021

SEPARATED BY space.

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • Copie du numéro du fournisseur.

CONCATENATE: text-fou "text-fou

itb_lifnr-lifnr

INTO itb_transfert-col02

SEPARATED BY space.

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • Copie de l'adresse du fournisseur.

LOOP AT itb_adresse WHERE lifnr EQ itb_lifnr-lifnr.

WRITE: itb_adresse-name1

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR: itb_transfert.

IF NOT itb_adresse-name2 IS INITIAL.

WRITE: itb_adresse-name2

TO itb_transfert-col02.

ENDIF.

APPEND: itb_transfert.

CLEAR: itb_transfert.

IF NOT itb_adresse-name3 IS INITIAL.

WRITE: itb_adresse-name3

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDIF.

IF NOT itb_adresse-name4 IS INITIAL.

WRITE: itb_adresse-name4

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDIF.

IF NOT itb_adresse-stras IS INITIAL.

WRITE: itb_adresse-stras

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDIF.

IF NOT itb_adresse-pstlz IS INITIAL.

MOVE: itb_adresse-pstlz TO itb_transfert-col02(10),

itb_adresse-ort01 TO itb_transfert-col02+10(35).

APPEND: itb_transfert.

CLEAR: itb_transfert.

ELSEIF NOT itb_adresse-pfach IS INITIAL.

WRITE: itb_adresse-pfach

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR: itb_transfert.

MOVE: itb_adresse-pstl2 TO itb_transfert-col02(10),

itb_adresse-ort01 TO itb_transfert-col02+10(35).

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDIF.

IF NOT itb_adresse-landx IS INITIAL.

WRITE: itb_adresse-landx

TO itb_transfert-col02.

APPEND: itb_transfert.

CLEAR itb_transfert.

ENDIF.

ENDLOOP.

  • Transfert d'un saut de ligne.

CLEAR: itb_transfert.

APPEND: itb_transfert.

  • Titre du tableau des quantité prévisionnelle de commande.

MOVE: text-ti1 TO itb_transfert-col02. "text-ti1

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • Titre des colonnes du tableau des quantité prévisionnelle de

  • commande.

MOVE: text-t00 TO itb_transfert-col00, " text-t00

text-bis TO itb_transfert-col00bis, " text-t00 addsde Réf. Article

*Frn.

text-t01 TO itb_transfert-col01, "text-t01

text-t0a TO itb_transfert-col021, " text-t0a

text-t0d TO itb_transfert-col022, " text-t0d

text-t02 TO itb_transfert-col02, " text-t02

text-t03 TO itb_transfert-col03, " text-t03

w_mois0 TO itb_transfert-col04,

w_mois1 TO itb_transfert-col05,

w_mois2 TO itb_transfert-col06,

w_mois3 TO itb_transfert-col07,

w_mois4 TO itb_transfert-col08,

w_mois5 TO itb_transfert-col09,

w_mois6 TO itb_transfert-col10.

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • transfert du contenu du tableau des quantités prévisionnelle de

  • commande.

LOOP AT itb_prev_cde WHERE lifnr EQ itb_lifnr-lifnr.

WRITE: itb_prev_cde-werks TO itb_transfert-col00,

itb_prev_cde-idnlf TO itb_transfert-col00bis,"addsde Réf. Article Frn.

itb_prev_cde-matnr TO itb_transfert-col01,

itb_prev_cde-maktx TO itb_transfert-col02.

MOVE itb_prev_cde-ekgrp TO itb_transfert-col021.

MOVE itb_prev_cde-dispo TO itb_transfert-col022.

  • Remplacement des write par des move pour permettre sommation dans

  • excel dans avoir besoir de convertir les cellules

MOVE itb_prev_cde-bstmi TO itb_transfert-col03.

MOVE : itb_prev_cde-men00 TO itb_transfert-col04, "Prev mois 0

itb_prev_cde-men01 TO itb_transfert-col05, "Prev mois 1

itb_prev_cde-men02 TO itb_transfert-col06, "Prev mois 2

itb_prev_cde-men03 TO itb_transfert-col07, "Prev mois 3

itb_prev_cde-men04 TO itb_transfert-col08, "Prev mois 4

itb_prev_cde-men05 TO itb_transfert-col09, "Prev mois 5

itb_prev_cde-men06 TO itb_transfert-col10. "Prev mois 6

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDLOOP.

CLEAR: w_compteur.

IF sy-subrc NE 0.

w_compteur = w_compteur + 1.

ENDIF.

  • Saut de ligne.

CLEAR: itb_transfert.

APPEND: itb_transfert.

  • Titre du tableau du portefeuille de commande achat.

MOVE: text-t09 TO itb_transfert-col02. "text-t09

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • 1ere ligne de titre du tableau du portefeuille de commande achat.

MOVE: text-t04 TO itb_transfert-col08, " text-t04

text-t05 TO itb_transfert-col09, " text-t05

text-t06 TO itb_transfert-col11," text-t06

text-t07 TO itb_transfert-col12, " text-t07

text-t08 TO itb_transfert-col13. " text-t08

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • 2eme ligne de titre du tableau du portefeuille de commande achat.

MOVE: text-t00 TO itb_transfert-col00, " text-t00

text-bis TO itb_transfert-col00bis, " text-bis addsde Réf. Article

*Frn.

text-t01 TO itb_transfert-col01,"text-t01

text-t0a TO itb_transfert-col021, "text-t0a

text-t0d TO itb_transfert-col022, "text-t0d

text-t02 TO itb_transfert-col02, "text-t02

text-t10 TO itb_transfert-col03, "text-t10

text-t11 TO itb_transfert-col04, "text-t11

text-t18 TO itb_transfert-col05, "text-t18

text-t12 TO itb_transfert-col06,

text-t13 TO itb_transfert-col07,

text-t14 TO itb_transfert-col08,

text-t15 TO itb_transfert-col09,

text-t16 TO itb_transfert-col10,

text-t14 TO itb_transfert-col11,

text-t17 TO itb_transfert-col12,

text-t14 TO itb_transfert-col13,

text-t17 TO itb_transfert-col14.

APPEND: itb_transfert.

CLEAR: itb_transfert.

  • Transfert des données du tableau

LOOP AT itb_pca WHERE lifnr EQ itb_lifnr-lifnr.

WRITE: itb_pca-werks TO itb_transfert-col00,

itb_pca-idnlf TO itb_transfert-col00bis,"addsde Réf.

"Article Frn.

itb_pca-matnr TO itb_transfert-col01, "No article

itb_pca-maktx TO itb_transfert-col02, "libelle article

itb_pca-ekgrp TO itb_transfert-col021, "Groupe acheteur

itb_pca-dispo TO itb_transfert-col022, "Gestionnaire

itb_pca-ebeln TO itb_transfert-col03, "No cde

itb_pca-ebelp TO itb_transfert-col04, "No poste cde

itb_pca-slfdt TO itb_transfert-col05 DD/MM/YY, "délai

"initial

itb_pca-eindt TO itb_transfert-col06 DD/MM/YY. "délai

"négocié

MOVE : itb_pca-menge TO itb_transfert-col07, "qté cdée

itb_pca-attdu TO itb_transfert-col08, "qté

"attendue

itb_pca-netpr TO itb_transfert-col09, "montant

"attendu

itb_pca-rtard TO itb_transfert-col10, "retard

itb_pca-wemng TO itb_transfert-col11. "qté livrée

WRITE itb_pca-bldat TO itb_transfert-col12 DD/MM/YY."date

"liv partielle

MOVE itb_pca-qtran TO itb_transfert-col13. "qté transit

WRITE itb_pca-dtran TO itb_transfert-col14 DD/MM/YY.

APPEND: itb_transfert.

CLEAR: itb_transfert.

ENDLOOP.

CLEAR w_compteur1.

CLEAR w_compteur2.

DESCRIBE TABLE itb_prev_cde LINES w_compteur1.

DESCRIBE TABLE itb_pca LINES w_compteur2.

w_compteur2 = w_compteur2 + w_compteur1.

IF sy-subrc NE 0.

w_compteur = w_compteur + 1.

ENDIF.

  • Controle du compteur pour ne pas editer de fichier vide.

  • IF w_compteur LT 2.

IF w_compteur2 NE 0.

IF p_pc = 'X'.

  • Transfert du fichier.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

filename = w_fichier

filetype = 'DAT'

TABLES

data_tab = itb_transfert

EXCEPTIONS

file_open_error = 1

file_write_error = 2

invalid_filesize = 3

invalid_type = 4

no_batch = 5

unknown_error = 6

invalid_table_width = 7

gui_refuse_filetransfer = 8

customer_error = 9

OTHERS = 10.

  • Gestion de l'anomalies.

IF sy-subrc EQ 0.

PERFORM f900_erreur

USING sy-cprog text-sel itb_lifnr-lifnr sy-datum

"text-sel

sy-uzeit 'S' '028' 'Z03_MM' '' '' '' ''.

ELSE.

PERFORM f900_erreur

USING sy-cprog text-sel itb_lifnr-lifnr sy-datum

"text-sel

sy-uzeit 'E' '128' 'Z03_MM' itb_lifnr-lifnr

'' '' ''.

ENDIF.

ELSE.

OPEN DATASET w_chemin FOR OUTPUT IN TEXT MODE .

IF sy-subrc = 0.

LOOP AT itb_transfert.

CLEAR w_csv.

CONCATENATE itb_transfert-col00

itb_transfert-col00bis

itb_transfert-col01

itb_transfert-col02

itb_transfert-col021

itb_transfert-col022

itb_transfert-col03

itb_transfert-col04

itb_transfert-col05

itb_transfert-col06

itb_transfert-col07

itb_transfert-col08

itb_transfert-col09

itb_transfert-col10

itb_transfert-col11

itb_transfert-col12

itb_transfert-col13

itb_transfert-col14

INTO w_csv SEPARATED BY ';'.

TRANSFER w_csv TO w_chemin.

ENDLOOP.

ENDIF.

CLOSE DATASET w_chemin.

  • Gestion de l'anomalies.

IF sy-subrc EQ 0.

PERFORM f900_erreur

USING sy-cprog text-sel itb_lifnr-lifnr sy-datum

"text-sel

sy-uzeit 'S' '028' 'Z03_MM' '' '' '' ''.

ELSE.

PERFORM f900_erreur

USING sy-cprog text-sel itb_lifnr-lifnr sy-datum

"text-sel

sy-uzeit 'E' '128' 'Z03_MM' itb_lifnr-lifnr

'' '' ''.

ENDIF.

ENDIF.

  • Fin de la gestion de l'anomalies.

ELSE.

  • Gestion de l'anomalies.

PERFORM f900_erreur

USING sy-cprog text-sel itb_lifnr-lifnr sy-datum

"text-sel

sy-uzeit 'I' '127' 'Z03_MM' '' '' '' ''.

  • Fin de la gestion de l'anomalies.

ENDIF.

  • Reinitialisation des table de transfert.

CLEAR: itb_transfert.

FREE: itb_transfert.

ENDLOOP.

  • Edition des anomalies.

PERFORM f920_edition USING sy-cprog

text-fo1. "text-fo1

  • Fin du programme principal.

*----


*

  • Fin du programme *

*----


*

  • Form F100_RECUPERATION_DATE *

*----


*

  • Récupération des dates.

FORM f100_recuperation_date TABLES table STRUCTURE t247.

MOVE: sy-datlo TO w_date0.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '1'

olddate = sy-datlo

IMPORTING

newdate = w_date1.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '2'

olddate = sy-datlo

IMPORTING

newdate = w_date2.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '3'

olddate = sy-datlo

IMPORTING

newdate = w_date3.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '4'

olddate = sy-datlo

IMPORTING

newdate = w_date4.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '5'

olddate = sy-datlo

IMPORTING

newdate = w_date5.

CALL FUNCTION 'MONTH_PLUS_DETERMINE'

EXPORTING

months = '6'

olddate = sy-datlo

IMPORTING

newdate = w_date6.

  • Récupération de la date de fin de periode.

CALL FUNCTION 'LAST_DAY_OF_MONTHS'

EXPORTING

day_in = w_date6

IMPORTING

last_day_of_month = w_fin_periode

EXCEPTIONS

day_in_no_date = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

  • Récupération des noms de mois qui nous interressent.

LOOP AT table.

CASE table-mnr.

WHEN sy-datlo+4(2).

MOVE: table-ltx TO w_mois0.

WHEN w_date1+4(2).

MOVE: table-ltx TO w_mois1.

WHEN w_date2+4(2).

MOVE: table-ltx TO w_mois2.

WHEN w_date3+4(2).

MOVE: table-ltx TO w_mois3.

WHEN w_date4+4(2).

MOVE: table-ltx TO w_mois4.

WHEN w_date5+4(2).

MOVE: table-ltx TO w_mois5.

WHEN w_date6+4(2).

MOVE: table-ltx TO w_mois6.

ENDCASE.

ENDLOOP.

ENDFORM.

*&----


*

*& Form affect_da

*&----


*

FORM affect_da.

*Ajout de webaz jours ouvrés à lfdat

CALL FUNCTION 'Z_03_MM_ADD_TO_FACTORYDATE'

EXPORTING

i_date = itb_eban-lfdat

i_calendar_id = itb_t001w-fabkl

i_nb_days = itb_eban-webaz

IMPORTING

o_date = w_dat_da

EXCEPTIONS

conv_error = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

CASE w_dat_da+0(6).

WHEN w_date0+0(6).

itb_prev_cde-men00 = itb_prev_cde-men00 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date1+0(6).

itb_prev_cde-men01 = itb_prev_cde-men01 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date2+0(6).

itb_prev_cde-men02 = itb_prev_cde-men02 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date3+0(6).

itb_prev_cde-men03 = itb_prev_cde-men03 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date4+0(6).

itb_prev_cde-men04 = itb_prev_cde-men04 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date5+0(6).

itb_prev_cde-men05 = itb_prev_cde-men05 + itb_eban-menge

- itb_eban-bsmng.

WHEN w_date6+0(6).

itb_prev_cde-men06 = itb_prev_cde-men06 + itb_eban-menge

- itb_eban-bsmng.

WHEN OTHERS.

ENDCASE.

ENDFORM. " affect_da

*&----


*

*& Form select_donnees

*&----


*

FORM select_donnees.

*recuperation des codes de planification qui permettront de repérer les

*articles PFS (Prod fab pour stock)

CLEAR r_type_pfs.

SELECT sign opti low high

FROM tvarv

INTO TABLE r_type_pfs

WHERE name = c_name

AND type = c_s.

  • Chargement des données utiles divisions

SELECT werks fabkl

FROM t001w

INTO TABLE itb_t001w

WHERE werks IN s_werks.

======================

  • Données Fournisseurs *

======================

  • Recupération de l'adresse des fournisseurs.

  • Recherche dans la table LFA1 en fonction du numéro fournisseur.

  • Recherche dans la table T005T de la désignation du code pays.

  • begin of changes sudha

SELECT lfa1lifnr lfa1land1 lfa1name1 lfa1name2 lfa1~name3

lfa1name4 lfa1ort01 lfa1pfach lfa1pstl2 lfa1~pstlz

lfa1stras lfa1spras t005t~landx

INTO TABLE itb_adresse

FROM lfa1 INNER JOIN t005t

ON lfa1spras = t005tspras

AND lfa1land1 = t005tland1

WHERE lfa1~lifnr IN s_lifnr.

*end of changes sudha

*Récupération du groupe d'acheteurs / code gestionnaire

  • FAE26446 : remplacement

  • SELECT eordmatnr eordwerks eordlifnr marcekgrp marc~dispo

  • marcdisls marcbstfe marcbstrf marcbstmi marc~bstma

  • INTO TABLE itb_eord

  • FROM eord INNER JOIN marc

  • ON eordmatnr = marcmatnr

  • AND eordwerks = marcwerks

  • WHERE eord~werks IN s_werks

  • AND eord~lifnr IN s_lifnr

  • AND marc~ekgrp IN s_ekgrp

  • AND marc~dispo IN s_dispo

  • AND notkz EQ ''

  • AND flifn EQ 'X'

  • AND vdatu LE w_fin_mois

  • AND bdatu GE w_debut_mois.

*begin of change by sudha

SELECT eordmatnr eordwerks eordlifnr marcekgrp marc~dispo

marcdisls marcbstmi marcbstma marcbstfe marc~bstrf

INTO TABLE itb_eordw

FROM eord INNER JOIN marc

ON eordmatnr = marcmatnr

AND eordwerks = marcwerks

WHERE eord~werks IN s_werks

AND eord~lifnr IN s_lifnr

AND notkz EQ ''

AND flifn EQ 'X'

AND vdatu LE w_fin_mois

AND bdatu GE w_debut_mois.

APPEND LINES OF itb_eordw TO itb_eord.

*end of changes by sudha

IF NOT p_ekgrp IS INITIAL .

DELETE itb_eord WHERE NOT ekgrp IN s_ekgrp.

ELSE.

DELETE itb_eord WHERE NOT dispo IN s_dispo.

ENDIF.

  • fin remplacement FAE26446

*Récupération du libéllé article

IF NOT itb_eord[] IS INITIAL.

SORT itb_eord

BY matnr werks lifnr ekgrp.

SELECT matnr werks strgr

INTO TABLE itb_marc_eord

FROM marc

FOR ALL ENTRIES IN itb_eord

WHERE matnr = itb_eord-matnr

AND werks = itb_eord-werks.

SORT itb_marc_eord BY matnr werks.

SELECT matnr spras maktx

INTO TABLE itb_makt

FROM makt

FOR ALL ENTRIES IN itb_eord

WHERE matnr = itb_eord-matnr

AND ( spras = c_f

OR spras = c_e ).

*Selection dans la table PLAF des ordres planifiés.

  • On prend tous les OP pour un artcile meme si OP

  • n'a pas de fournisseur associé ou n'a pas le bon fournisseur

SELECT plnum matnr plwrk flief pedtr gsmng webaz

INTO TABLE itb_plaf

FROM plaf

FOR ALL ENTRIES IN itb_eord

WHERE matnr = itb_eord-matnr

AND plwrk = itb_eord-werks

AND pertr GE w_debut_periode

AND pertr LE w_fin_periode.

*Recherche des previsions dans Z03_BW_CMP1

SELECT matnr werks pdatu plnmg

INTO TABLE itb_z03_bw_cmp1

FROM z03_bw_cmp1

FOR ALL ENTRIES IN itb_eord

WHERE matnr = itb_eord-matnr

AND werks = itb_eord-werks

AND pdatu >= w_debut_periode

AND pdatu

SORT itb_eord BY matnr werks ekgrp.

  • Pour les demande d'achat on ne retiendra que celles dont

  • - le groupe d'acheteur est le meme sur la DA et la fiche

  • article si la sélection se fait par groupe acheteur

  • - le code gestionnaire est le meme sur la DA et la fiche

  • article si la sélection se fait par code gestionnaire

  • - le type d'imputation est different de M

IF p_ekgrp = 'X'. "+FAE26446

*begin of changes sudha

SELECT banfn bnfpo ekgrp matnr werks menge lfdat webaz flief ebeln

bsmng

INTO TABLE itb_eban

FROM eban

fOR ALL ENTRIES IN itb_eord

WHERE matnr EQ itb_eord-matnr

AND werks EQ itb_eord-werks

AND ekgrp EQ itb_eord-ekgrp

  • and dispo eq itb_eord-dispo "-FAE26446

AND lfdat GE w_debut_periode

AND lfdat LE w_fin_periode

AND bsart EQ C_NB

AND ebeln EQ ''

AND loekz EQ ''

AND knttp NE k_imputation_m.

ELSE."+FAE26446

SELECT banfn bnfpo ekgrp matnr werks menge lfdat webaz flief ebeln

bsmng

INTO TABLE itb_eban

FROM eban

FOR ALL ENTRIES IN itb_eord

WHERE matnr EQ itb_eord-matnr

AND werks EQ itb_eord-werks

  • AND ekgrp EQ itb_eord-ekgrp "-FAE26446

AND dispo EQ itb_eord-dispo

AND lfdat GE w_debut_periode

AND lfdat LE w_fin_periode

AND bsart EQ C_NB

AND ebeln EQ ''

AND loekz EQ ''

AND knttp NE k_imputation_m.

ENDIF. "+FAE26446

ENDIF.

  • FAE26446 : début remplacement

  • IF NOT itb_eord[] IS INITIAL.

  • SORT itb_eord

  • BY lifnr ekgrp.

  • itb_eordw[] = itb_eord[].

  • DELETE ADJACENT DUPLICATES FROM itb_eordw

  • COMPARING lifnr ekgrp.

  • SELECT ebeln lifnr

  • INTO TABLE itb_ekko

  • FROM ekko

  • FOR ALL ENTRIES IN itb_eordw

  • WHERE lifnr = itb_eordw-lifnr

  • AND ekgrp = itb_eordw-ekgrp

  • AND bsart = text-tda.

*

  • IF NOT itb_ekko[] IS INITIAL.

*

  • SORT itb_ekko

  • BY ebeln.

*

  • SELECT ebeln ebelp menge bpumz bpumn matnr werks netpr

  • peinh

  • INTO TABLE itb_ekpo

  • FROM ekpo

  • FOR ALL ENTRIES IN itb_ekko

  • WHERE ebeln = itb_ekko-ebeln

  • AND bstyp = text-com

  • AND werks IN s_werks

  • AND loekz = space

  • AND elikz NE 'X'.

IF NOT itb_eordw[] IS INITIAL.

SORT itb_eordw BY lifnr.

RANGES: r_lifnr FOR ekko-lifnr.

DELETE ADJACENT DUPLICATES FROM itb_eordw COMPARING lifnr.

LOOP AT itb_eordw.

r_lifnr = 'IEQ'.

r_lifnr-low = itb_eordw-lifnr.

APPEND r_lifnr.

ENDLOOP.

ELSE.

r_lifnr[] = s_lifnr[].

ENDIF.

  • si la sélection se fait par groupe acheteur

  • recherche des cdes Ha pour le fournisseur et le groupe acheteur

  • sélectionné

  • si la sélection se fait par code gestionnaire

  • recherche des cdes Ha pour le fournisseur et les articles possédant

  • un code gestionnaire sélectionné

IF p_ekgrp = 'X'.

SELECT ekkoebeln ekkolifnr ekkoekgrp ekpoebelp ekpo~matnr

ekpowerks ekpomenge ekpobpumz ekponetpr ekpo~peinh

ekpo~bpumn

INTO TABLE itb_ekpo

FROM ekko INNER JOIN ekpo

ON ekpoebeln EQ ekkoebeln

WHERE ekko~lifnr IN r_lifnr

AND ekko~bsart EQ C_NB

AND ekko~ekgrp IN s_ekgrp

AND ekpo~bstyp = 'F'

AND ekpo~werks IN s_werks

AND ekpo~loekz NE 'L'

AND ekpo~elikz NE 'X'.

ELSE.

SELECT ekkoebeln ekkolifnr ekkoekgrp ekpoebelp ekpo~matnr

ekpowerks ekpomenge ekpobpumz ekponetpr ekpo~peinh

ekpo~bpumn

INTO TABLE itb_ekpo

FROM ( ekko INNER JOIN ekpo

ON ekpoebeln EQ ekkoebeln )

WHERE ekko~lifnr IN r_lifnr

AND ekko~bsart EQ C_NB

AND ekpo~bstyp = 'F'

AND ekpo~werks IN s_werks

AND ekpo~loekz NE 'L'

AND ekpo~elikz NE 'X'.

ENDIF.

  • FAE26446 : fin remplacement

IF NOT itb_ekpo[] IS INITIAL.

SORT itb_ekpo

BY matnr werks.

SELECT matnr werks ekgrp dispo disls bstmi bstma bstfe bstrf

INTO TABLE itb_marc

FROM marc

FOR ALL ENTRIES IN itb_ekpo

WHERE matnr = itb_ekpo-matnr

AND werks = itb_ekpo-werks

AND marc~dispo IN s_dispo. "+FAE26446

SORT itb_marc BY matnr werks.

DELETE ADJACENT DUPLICATES FROM itb_marc COMPARING matnr werks.

  • FEA26446 : recherche libellé article

IF NOT itb_marc[] IS INITIAL.

SELECT matnr spras maktx

APPENDING TABLE itb_makt

FROM makt

FOR ALL ENTRIES IN itb_marc

WHERE matnr = itb_marc-matnr

AND ( spras = C_F

OR spras = C_E ).

SORT itb_makt BY matnr spras.

ENDIF.

DELETE ADJACENT DUPLICATES FROM itb_makt COMPARING matnr spras.

  • FEA26446 : fin

SORT itb_ekpo BY ebeln ebelp.

SELECT ebeln ebelp etens ebtyp eindt menge dabmg

INTO TABLE itb_ekes

FROM ekes

FOR ALL ENTRIES IN itb_ekpo

WHERE ebeln = itb_ekpo-ebeln

AND ebelp = itb_ekpo-ebelp

AND loekz = space

AND ( ebtyp = c_ar

OR ebtyp = c_al ).

SELECT ebeln ebelp menge wemng eindt slfdt

INTO TABLE itb_eket

FROM eket

FOR ALL ENTRIES IN itb_ekpo

WHERE ebeln = itb_ekpo-ebeln

AND ebelp = itb_ekpo-ebelp.

SORT itb_ekpo

BY matnr werks ebeln ebelp.

SELECT mblnr mjahr

ebeln ebelp

INTO TABLE itb_mseg

FROM mseg

FOR ALL ENTRIES IN itb_ekpo

WHERE matnr = itb_ekpo-matnr

AND werks = itb_ekpo-werks

AND ebeln = itb_ekpo-ebeln

AND ebelp = itb_ekpo-ebelp

AND bwart = c_101.

IF NOT itb_mseg[] IS INITIAL.

SORT itb_mseg

BY mblnr.

SELECT mblnr mjahr bldat

INTO TABLE itb_mkpf

FROM mkpf

FOR ALL ENTRIES IN itb_mseg

WHERE mblnr = itb_mseg-mblnr

AND mjahr = itb_mseg-mjahr.

ENDIF.

ENDIF.

ENDFORM. " select_donnees

please resolve this problem very urgent

points should be awarded..

Thanks in advance for all..

5 REPLIES 5

jayakummar
Active Participant
0 Kudos
122

hai ,

use code inspector to find the performance issue sorce code and also it gives some tips to tune the peformance.

Go to program in display mode or editable mode and in menu bar you

have program menu in first......chose it and go to cheak....select it we have list including code inspector do it and tune it............

plzz reward if useful

regards,

jai.m

Former Member
0 Kudos
122

code spector, then use abap runtime trace.

/people/siegfried.boes/blog/2007/11/13/the-abap-runtime-trace-se30--quick-and-easy

0 Kudos
122

hi please check once agin above program

0 Kudos
122

please check out once

0 Kudos
122

hi

this program has written in 4.6C version there no codeinspector check...

please check out once