SAP et Windev 12, ça marche mais ...
Le
Fredo
Bonjour,
Je suis en train d'essayer d'interfacer Windev 12 avec SAP (objectif,
récupérer la liste et l'état des commandes pour un client précis)
J'arrive bien à me connecter à SAP et à récupérer la liste de toutes les
ignes de commandes en utilisant la BAPI : BAPI_SALESORDER_GETDETAIL.
Mon soucis est le suivant : Le resultat de cette fonction doit être stocké
dans un tableau d'éléments "structures" décomposé selon les différents
éléments de la requette (n° de commande, n° de ligne, Ref article, )
Malheureusement, les données injectés dans le tableau résultat sont mal
distribués (le n° de commande contient n° de commande + n° de ligne + la
moitié de la ref article) etc
Selon l'exemple fourni, les différents éléments de la structure sont déclaré
en chaine j'ai essayé de changer ceci en fonction du type de champs sous
sap (chaine fixe, entier, ) la fonction n'alimente le tableau que si tous
les éléments sont déclarés en chaine mais elle les alimentes mal.
Quelqu'un aurait t'il trouvé une solution pour pallier à ce problème.
Merci d'avance.
Voici ci-apres l'exemple de code que j'utilise.
SalesOrder est une structure
SD_DOC est un entier
ITM_NUMBER est une entier
MATERIAL est une chaîne
SHORT_TEXT est une chaîne
DOC_TYPE est une chaîne
DOC_DATE est une chaîne
REQ_QTY est une chaîne
REQ_DATE est une chaîne
PURCH_NO est une chaîne
BATCH est une chaîne
VALID_FROM est une chaîne
VALID_TO est une chaîne
BILL_BLOCK est une chaîne
DLV_BLOCK est une chaîne
SOLD_TO est une chaîne
NAME est une chaîne
EXCHG_RATE est une chaîne
DLV_QTY est une chaîne
BASE_UOM est une chaîne
NET_PRICE est une chaîne
COND_P_UNT est une chaîne
COND_UNIT est une chaîne
NET_VAL_HD est une chaîne
NET_VALUE est une chaîne
DIVISION est une chaîne
DOC_STATUS est une chaîne
SALES_GRP est une chaîne
SALES_OFF est une chaîne
SALES_ORG est une chaîne
SALES_UNIT est une chaîne
SHIP_POINT est une chaîne
DISTR_CHAN est une chaîne
GI_DATE est une chaîne
lCURRENCY est une chaîne
PLANT est une chaîne
STORE_LOC est une chaîne
ORD_REASON est une chaîne
REASON_REJ est une chaîne
B_UOM_ISO est une chaîne
CD_UNT_ISO est une chaîne
S_UNIT_ISO est une chaîne
CURR_ISO est une chaîne
PURCH_NO_C est une chaîne
EXCHG_RATE_V est une chaîne
MAT_EXT est une chaîne
MAT_GUID est une chaîne
MAT_VERS est une chaîne
CREATION_DATE est une chaîne
CREATION_TIME est une chaîne
FIN
lReturn est une chaîne
Ltab est un tableau dynamique de 0 SalesOrder
cmd est un SalesOrder
// Vérification des champs
SI Adresse ~= "" ALORS
Erreur("Vous devez saisir l'adresse du serveur SAP.")
RepriseSaisie(Adresse)
FIN
SI Numéro_client ~= "" ALORS
Erreur("Vous devez saisir le numéro de client à utiliser pour la connexion
au serveur SAP.")
RepriseSaisie(Numéro_client)
FIN
SI Utilisateur ~= "" ALORS
Erreur("Vous devez saisir le nom d'utilisateur à utiliser pour la connexion
au serveur SAP.")
RepriseSaisie(Utilisateur)
FIN
SI Langue ~= "" ALORS
Erreur("Vous devez saisir la langue à utiliser pour la connexion au serveur
SAP.")
RepriseSaisie(Langue)
FIN
IDConnexion est un entier // L'identifiant de connexion
// Paramètres de connexion
SAP.Adresse = Adresse // Adresse du serveur
SAP.NuméroSystème = Numéro_système // Numéro du système
SAP.NumClient = Numéro_client // Numéro du client
SAP.Utilisateur = Utilisateur // Nom d'utilisateur
SAP.MotDePasse = Mot_de_passe // Mot de passe
SAP.Langue = Langue // Langue du serveur
// Connexion au serveur SAP
IDConnexion = SAPConnecte()
lNumCli est une chaîne ="0000001111"
SI PAS SAPExécute(IDConnexion
,"BAPI_SALESORDER_GETLIST","CUSTOMER_NUMBER,SALES_ORGANIZATION,RETURN,SALES_ORDERS",
lNumCli ,"DAIT" ,lReturn,Ltab) ALORS
ErreurInfo(errComplet)
FIN
lCh est une chaîne
// Parcours du tableau pour le remplissage de la table
POUR TOUT ELEMENT cmd DE Ltab
TableAjoute(Table1,cmd:SD_DOC+TAB+cmd:ITM_NUMBER+TAB+cmd:MATERIAL+TAB+cmd:DOC_DATE+TAB+cmd:REQ_QTY+TAB+cmd:PURCH_NO)
FIN
SAPDéconnecte(IDConnexion)
--
Frédéri LACROIX
Resp. Informatique
Datacol France
04 66 57 30 00
Je suis en train d'essayer d'interfacer Windev 12 avec SAP (objectif,
récupérer la liste et l'état des commandes pour un client précis)
J'arrive bien à me connecter à SAP et à récupérer la liste de toutes les
ignes de commandes en utilisant la BAPI : BAPI_SALESORDER_GETDETAIL.
Mon soucis est le suivant : Le resultat de cette fonction doit être stocké
dans un tableau d'éléments "structures" décomposé selon les différents
éléments de la requette (n° de commande, n° de ligne, Ref article, )
Malheureusement, les données injectés dans le tableau résultat sont mal
distribués (le n° de commande contient n° de commande + n° de ligne + la
moitié de la ref article) etc
Selon l'exemple fourni, les différents éléments de la structure sont déclaré
en chaine j'ai essayé de changer ceci en fonction du type de champs sous
sap (chaine fixe, entier, ) la fonction n'alimente le tableau que si tous
les éléments sont déclarés en chaine mais elle les alimentes mal.
Quelqu'un aurait t'il trouvé une solution pour pallier à ce problème.
Merci d'avance.
Voici ci-apres l'exemple de code que j'utilise.
SalesOrder est une structure
SD_DOC est un entier
ITM_NUMBER est une entier
MATERIAL est une chaîne
SHORT_TEXT est une chaîne
DOC_TYPE est une chaîne
DOC_DATE est une chaîne
REQ_QTY est une chaîne
REQ_DATE est une chaîne
PURCH_NO est une chaîne
BATCH est une chaîne
VALID_FROM est une chaîne
VALID_TO est une chaîne
BILL_BLOCK est une chaîne
DLV_BLOCK est une chaîne
SOLD_TO est une chaîne
NAME est une chaîne
EXCHG_RATE est une chaîne
DLV_QTY est une chaîne
BASE_UOM est une chaîne
NET_PRICE est une chaîne
COND_P_UNT est une chaîne
COND_UNIT est une chaîne
NET_VAL_HD est une chaîne
NET_VALUE est une chaîne
DIVISION est une chaîne
DOC_STATUS est une chaîne
SALES_GRP est une chaîne
SALES_OFF est une chaîne
SALES_ORG est une chaîne
SALES_UNIT est une chaîne
SHIP_POINT est une chaîne
DISTR_CHAN est une chaîne
GI_DATE est une chaîne
lCURRENCY est une chaîne
PLANT est une chaîne
STORE_LOC est une chaîne
ORD_REASON est une chaîne
REASON_REJ est une chaîne
B_UOM_ISO est une chaîne
CD_UNT_ISO est une chaîne
S_UNIT_ISO est une chaîne
CURR_ISO est une chaîne
PURCH_NO_C est une chaîne
EXCHG_RATE_V est une chaîne
MAT_EXT est une chaîne
MAT_GUID est une chaîne
MAT_VERS est une chaîne
CREATION_DATE est une chaîne
CREATION_TIME est une chaîne
FIN
lReturn est une chaîne
Ltab est un tableau dynamique de 0 SalesOrder
cmd est un SalesOrder
// Vérification des champs
SI Adresse ~= "" ALORS
Erreur("Vous devez saisir l'adresse du serveur SAP.")
RepriseSaisie(Adresse)
FIN
SI Numéro_client ~= "" ALORS
Erreur("Vous devez saisir le numéro de client à utiliser pour la connexion
au serveur SAP.")
RepriseSaisie(Numéro_client)
FIN
SI Utilisateur ~= "" ALORS
Erreur("Vous devez saisir le nom d'utilisateur à utiliser pour la connexion
au serveur SAP.")
RepriseSaisie(Utilisateur)
FIN
SI Langue ~= "" ALORS
Erreur("Vous devez saisir la langue à utiliser pour la connexion au serveur
SAP.")
RepriseSaisie(Langue)
FIN
IDConnexion est un entier // L'identifiant de connexion
// Paramètres de connexion
SAP.Adresse = Adresse // Adresse du serveur
SAP.NuméroSystème = Numéro_système // Numéro du système
SAP.NumClient = Numéro_client // Numéro du client
SAP.Utilisateur = Utilisateur // Nom d'utilisateur
SAP.MotDePasse = Mot_de_passe // Mot de passe
SAP.Langue = Langue // Langue du serveur
// Connexion au serveur SAP
IDConnexion = SAPConnecte()
lNumCli est une chaîne ="0000001111"
SI PAS SAPExécute(IDConnexion
,"BAPI_SALESORDER_GETLIST","CUSTOMER_NUMBER,SALES_ORGANIZATION,RETURN,SALES_ORDERS",
lNumCli ,"DAIT" ,lReturn,Ltab) ALORS
ErreurInfo(errComplet)
FIN
lCh est une chaîne
// Parcours du tableau pour le remplissage de la table
POUR TOUT ELEMENT cmd DE Ltab
TableAjoute(Table1,cmd:SD_DOC+TAB+cmd:ITM_NUMBER+TAB+cmd:MATERIAL+TAB+cmd:DOC_DATE+TAB+cmd:REQ_QTY+TAB+cmd:PURCH_NO)
FIN
SAPDéconnecte(IDConnexion)
--
Frédéri LACROIX
Resp. Informatique
Datacol France
04 66 57 30 00

Poser une question


pouvez essayer ceci :
pour i = 1 a dimension(Ltab)
trace(Ltab[i]:SD_DOC,Ltab[i]:ITM_NUMBER,Ltab[i]:MATERIAL,Ltab[i]:DOC_DATE,...)
fin
--
Cordialement JeAn-PhI
Frédéri LACROIX
Resp. Informatique
Datacol France
04 66 57 30 00
"JeAn-PhI"
L'affectation du tableau avec pour tout n'est pas en cause, l'acces direct
au tableau donne le même résultat.
Merci quand même pour la piste.
Frédéri.