10-10-2007 7:49 AM
HI all
my program has 4 selection queries each selection queries contain one inner join
is there any performence issue my program taking much time
to come back from db
10-10-2007 7:51 AM
Hi,
If the selection is on two tables with JOIN is OK.
But if it is more than two tables better use FOR ALL ENTRIES.
10-10-2007 7:52 AM
Hi,
You can use se 30 to do run time analysis.
Also try sql trace.You can find where much time is getting consumed.If it is possible use for all entries.
Message was edited by:
Raghu Reddy
10-10-2007 7:53 AM
hi Sudhakar.
If u paste the Code.. it is easy to give some solution.
regards.
Varma
10-10-2007 8:01 AM
hi varma ,
this is my code
REPORT z03_gil010 NO STANDARD PAGE HEADING LINE-SIZE 130.
*----
*
INCLUDE *
*----
*
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,
lifnr LIKE ekko-lifnr,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
menge LIKE ekpo-menge,
bpumz LIKE ekpo-bpumz,
bpumn LIKE ekpo-bpumn,
matnr LIKE ekpo-matnr,
werks LIKE ekpo-werks,
netpr LIKE ekpo-netpr,
peinh LIKE ekpo-peinh, "Base de prix FAE17345+
ekgrp LIKE ekko-ekgrp, "AFT++
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,
ebtyp LIKE ekes-ebtyp,
eindt LIKE ekes-eindt,
menge LIKE ekes-menge,
dabmg LIKE ekes-dabmg,
etens LIKE ekes-etens,
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,
matnr LIKE eban-matnr,
werks LIKE eban-werks,
flief LIKE eban-flief,
lfdat LIKE eban-lfdat,
menge LIKE eban-menge,
bsmng LIKE eban-bsmng,
webaz LIKE eban-webaz,
ekgrp LIKE eban-ekgrp,
ebeln LIKE eban-ebeln,
banfn LIKE eban-banfn,
bnfpo LIKE eban-bnfpo, "DB3K900702+
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,
disls LIKE marc-disls,
bstrf LIKE marc-bstrf,
bstmi LIKE marc-bstmi,
bstma LIKE marc-bstma,
bstfe LIKE marc-bstfe,
ekgrp LIKE marc-ekgrp,
dispo LIKE marc-dispo,
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+
*----
*
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.
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
mode = 'S'
title = 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
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
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.
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.
itb_prev_cde-bstmi = itb_eord-bstfe.
ELSEIF itb_eord-disls = text-tl2
OR itb_eord-disls = 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
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
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.
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
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
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.
SELECT matnr lifnr idnlf
INTO TABLE itb_eina
FROM eina
FOR ALL ENTRIES IN itb_prev_cde
WHERE matnr = itb_prev_cde-matnr.
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.
SELECT matnr lifnr idnlf
INTO TABLE itb_eina
FROM eina
FOR ALL ENTRIES IN itb_pca
WHERE matnr = itb_pca-matnr.
LOOP AT itb_pca.
READ TABLE itb_prev_cde WITH KEY werks = itb_pca-werks
matnr = itb_pca-matnr
lifnr = itb_pca-lifnr
*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.
MODIFY itb_pca TRANSPORTING ekgrp dispo.
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.
MODIFY itb_pca TRANSPORTING ekgrp dispo.
ENDIF.
ENDIF.
recherche de la ref article fournisseur
READ TABLE itb_eina WITH KEY
matnr = itb_pca-matnr
lifnr = itb_pca-lifnr
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
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
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.
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
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.
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-bis TO itb_transfert-col00bis, "addsde Réf. Article Frn.
text-t01 TO itb_transfert-col01,
text-t0a TO itb_transfert-col021,
text-t0d TO itb_transfert-col022,
text-t02 TO itb_transfert-col02,
text-t03 TO itb_transfert-col03,
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.
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-t05 TO itb_transfert-col09,
text-t06 TO itb_transfert-col11,
text-t07 TO itb_transfert-col12,
text-t08 TO itb_transfert-col13.
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-bis TO itb_transfert-col00bis, "addsde Réf. Article Frn.
text-t01 TO itb_transfert-col01,
text-t0a TO itb_transfert-col021,
text-t0d TO itb_transfert-col022,
text-t02 TO itb_transfert-col02,
text-t10 TO itb_transfert-col03,
text-t11 TO itb_transfert-col04,
text-t18 TO itb_transfert-col05,
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
sy-uzeit 'S' '028' 'Z03_MM' '' '' '' ''.
ELSE.
PERFORM f900_erreur
USING sy-cprog text-sel itb_lifnr-lifnr sy-datum
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
sy-uzeit 'S' '028' 'Z03_MM' '' '' '' ''.
ELSE.
PERFORM f900_erreur
USING sy-cprog text-sel itb_lifnr-lifnr sy-datum
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
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.
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 = 'Z03_GI_STRAT_LANCT_PFS'
AND type = '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.
SELECT lfa1lifnr lfa1name1 lfa1name2 lfa1name3 lfa1~name4
lfa1stras lfa1pstlz lfa1ort01 lfa1pfach lfa1~pstl2
lfa1land1 t005tlandx lfa1~spras
INTO TABLE itb_adresse
FROM lfa1 INNER JOIN t005t
ON lfa1spras = t005tspras
AND lfa1land1 = t005tland1
WHERE lfa1~lifnr IN s_lifnr.
*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.
SELECT eordmatnr eordwerks eordlifnr marcekgrp marc~dispo
marcdisls marcbstfe marcbstrf marcbstmi marc~bstma
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.
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 = text-fra
OR spras = text-ang ).
*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
SELECT matnr werks flief lfdat menge bsmng webaz ekgrp ebeln banfn
bnfpo
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 text-tda
AND ebeln EQ ''
AND loekz EQ ''
AND knttp NE k_imputation_m.
ELSE. "+FAE26446
SELECT matnr werks flief lfdat menge bsmng webaz ekgrp ebeln banfn
bnfpo
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 text-tda
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 ekkolifnr ekkoebeln ekpoebelp ekpomenge ekpo~bpumz
ekpobpumn ekpomatnr ekpowerks ekponetpr
ekpopeinh ekkoekgrp
INTO TABLE itb_ekpo
FROM ekko INNER JOIN ekpo
ON ekpoebeln EQ ekkoebeln
WHERE ekko~lifnr IN r_lifnr
AND ekko~bsart EQ text-tda
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 ekkolifnr ekkoebeln ekpoebelp ekpomenge ekpo~bpumz
ekpobpumn ekpomatnr ekpowerks ekponetpr
ekpopeinh ekkoekgrp
INTO TABLE itb_ekpo
FROM ( ekko INNER JOIN ekpo
ON ekpoebeln EQ ekkoebeln )
WHERE ekko~lifnr IN r_lifnr
AND ekko~bsart EQ text-tda
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 disls bstrf bstmi bstma bstfe
ekgrp dispo
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
SELECT matnr spras maktx
APPENDING TABLE itb_makt
FROM makt
FOR ALL ENTRIES IN itb_marc
WHERE matnr = itb_marc-matnr
AND ( spras = text-fra
OR spras = text-ang ).
SORT itb_makt BY matnr spras.
DELETE ADJACENT DUPLICATES FROM itb_makt COMPARING matnr spras.
FEA26446 : fin
SORT itb_ekpo BY ebeln ebelp.
SELECT ebeln ebelp ebtyp eindt menge dabmg etens
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 = text-arn
OR ebtyp = text-aln ).
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 = text-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
10-10-2007 7:54 AM
Absolutely no problem in using Joins if u use in right way.. can u paste select queries?
If u use for all entries add check for itab initial before selecting, or else it may create performance problems.
10-10-2007 7:57 AM
Hi
yes, if you use joins then it will take some time execute because
if you use joins the table will hold that joins up to the program execution so the load on database increases resulting in poor performance
advise better go for FOR ALL ENTRIES instead of joins
beacuse if you use FOR ALL ENTRIES there won't be any load on database
it will get data into the internal table at once
so better to don't use JOINS
<b>Reward if usefull</b>
10-10-2007 7:57 AM
Hi Sudhakar,
Check out if selection queries are in loop statement,
avoid using corresponding fields of table.
Regards,
T.Nagaraju.
10-10-2007 8:06 AM
1>Check the join condition should be between 2-2 tables
well, to increase the performance
1>refersh internal table before entering data
2>you can use field symbols when u r moving data in final internal table.
3>use work area
4>check for deleting duplicate entries if any before selecting for other table
if these things dnt resolve
paste ur code
thkx
bhanu
10-10-2007 8:13 AM
Hi all
I already pasted the code if there please let me know why this program is taking too much time? tell me resoloved points why it is taking too much time.......
thanks advance for all
10-10-2007 8:17 AM
Hi,
check the tables before using for all entries.
IF itb_marc[] is not initial. " add this code
SELECT matnr spras maktx
APPENDING TABLE itb_makt
FROM makt
FOR ALL ENTRIES IN itb_marc
WHERE matnr = itb_marc-matnr
AND ( spras = text-fra
OR spras = text-ang ).
ENDIF " add this code
Like wise check all tables before using for all entries.
10-10-2007 8:35 AM
hi
please follow the code and let me know the performmence issue of this
code .............please check again is there any issue because this program has high importence
thanks advance for all