Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SAP et Windev 12, ça marche mais ...

2 réponses
Avatar
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

2 réponses

Avatar
JeAn-PhI
Fredo a écrit :
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)



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
Avatar
Fredo
--
Frédéri LACROIX
Resp. Informatique
Datacol France
04 66 57 30 00
"JeAn-PhI" a écrit dans le message de news:

Fredo a écrit :
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)



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





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.