Acomba (Forum)
Pourquoi ne pas devenir membre du forum ?

Identifiez-vous ou Inscrivez-vous afin d'accéder à l'inrégralité du forum:
Accès à toutes les catégories du forum,
Entraide entre les 6 500 membres, et ce nombre s'accroît quotidiennement!

Notez que ce forum est indépendant de la société Acceo Solutions, éditrice du logiciel Acomba.
Connexion

Récupérer mon mot de passe


Création d'une commande via Access

Voir le sujet précédent Voir le sujet suivant Aller en bas

Création d'une commande via Access

Message  Luc Martin le Ven 21 Nov 2008 - 20:59

J'ai déveloopé une petite application avec Access 2003 pour synchroniser les commande sur un site web et les importer dans Acomba.

La création des clients fonctionne numéro 1.
La création de la commande se crée très bien via "TransactionHeader"
Par contre je rencotre un problème avec l'insersion des lignes via "TransactionDetail", j'obtien une erreure,

Quelqu'un aurait une idée...

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Erreurs sur création de ligne de commande

Message  Lartis le Sam 22 Nov 2008 - 21:40

Bonjour,

Quel est l'erreur?

Le plus probable, c'est qu'il manque un champ requis, ou qu'un RecCarPos utilisé n'existe pas (Filer error 41 je crois).

Le plus simple, pour tester ça, c'est généralement de hardcoder des valeurs que l'on sait valides jusqu'à ce que ça marche. As-tu un ILType valide? (rstTransactionDetail!ILType = 1 pour une facture, 2 pour une commande)

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
avatar
Lartis

Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.

Voir le profil de l'utilisateur http://www.lartis.com

Revenir en haut Aller en bas

Erreuer de mise à jour sur table liée

Message  Luc Martin le Dim 23 Nov 2008 - 7:35

Je crois que ça se passe au niveau du TaNumLines, car lorsque je cré ma TransactionHeader et que je le laisse à 0, la commande se crée très bien...

Dès que tante d'y inséré un nombre de ligne c'est là que ça bloque...

La méthode que j'utilise pour créer la commande n'est peut-être pas la bonne ?? Pour le moment je passe des formulaires, je cré mon TransactionHeader et afin d'être capable de récupérer mon RecCardPos et mon InUnique, je ferme mon TransactionHeader puis le réouvre avec le numéro de commande que je viens de créer.

Par la suite j'ouvre mon TransactionDetail et essaye d'insérer des ligne avec les données du TransactionHeader que j'ai réouvert. J'essaye par le fait même de mettre à jour le TaNumLines du TransactionHeader à jour avec le nombre de que je veux insérer.

Chaque fois que je tante de faire un acNew j'ai une erreur me disant impossible d'atteindre l'enregistrement.

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Problème en partie résolu

Message  Luc Martin le Dim 23 Nov 2008 - 8:35

J'ai changé la façon d'insérer ma commande, je ne passe plus par des formulaires mais plutôt par les recordset. Tout marche bien SAUF la procédure est très longue, ça prend environ 3 minutes exécuter ce code:

'Dclaration des variables
Dim cnn As New ADODB.Connection
Dim rstTransactionHeader As New ADODB.Recordset
Dim rstTransactionDetail As New ADODB.Recordset
Dim rstCurrentTaxes As New ADODB.Recordset
Dim rstLastTransHeader As New ADODB.Recordset
Dim rstLastTransDetail As New ADODB.Recordset
Dim rstCustomerData As New ADODB.Recordset
Dim rstProductData As New ADODB.Recordset

cnn.ConnectionString = "DSN=ODBC TJD;"
cnn.CursorLocation = adUseClient
cnn.Open
On Error GoTo Command1_Err

'**********************************************************
'tape 1 : Initialiser les proprits de l'entte de la
' facturation
'**********************************************************
cnn.Execute ("BEGIN_TRANSACTION_IN")
rstTransactionHeader.Open "SELECT * FROM TransactionHeader", cnn, adOpenKeyset, adLockOptimistic

rstTransactionHeader.AddNew
rstTransactionHeader!InInvoiceNumber = "ZZ1"
'Pour une commande
rstTransactionHeader!InInvoiceType = 2
rstTransactionHeader!InReference = "Test du 23"
rstTransactionHeader!InDescription = "Sans passer par formulaire"
rstTransactionHeader!InCurrentDay = 1
rstTransactionHeader!InTransactionActive = 1
'Numro du client associ la facture
CustomerNumber = "4188635885"
MsgBox "Ici", vbCritical
'On veut aller chercher les informations du client
rstCustomerData.Open "SELECT * FROM Customer where cuNumber = '" & CustomerNumber & "'", cnn, adOpenKeyset, adLockOptimistic

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Pour le calcul des taxes avec le cnn.Execute("CALCULATE_TAXES")
'il faut initialiser un CardPos du groupe de taxe
'On peut donc aller chercher le groupe de taxe auquel le client fait parti
'pour utiliser les bonnes taxes pour le calcul
rstTransactionHeader!InTaxGroupCP = rstCustomerData!CuTaxGroupCP
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

If Not rstCustomerData.EOF Then
rstTransactionHeader!InCustomerSupplierCP = rstCustomerData!RecCardPos
Else
rstTransactionHeader!InCustomerSupplierCP = 0
End If

'Si le client existe
If rstTransactionHeader!InCustomerSupplierCP > 0 Then
'Initialisation des proprits concernant le client
'associ la facture
rstTransactionHeader!InInvoicedToCP = rstCustomerData!CuInvoicedToCP

'Numro du compte recevable du client auquel la facturation
'est associe
rstTransactionHeader!InReceivableOffset = rstCustomerData!CuReceivable
End If

'**********************************************************
'tape 2 : Assigner le nombre total de lignes incluses
' dans la facturation la proprit TANumLines
'**********************************************************
rstTransactionHeader!TANumLines = 2
rstTransactionHeader.Update

'**********************************************************
'tape 3 : Initialiser les proprits de la premire
' ligne de la facturation
'**********************************************************
rstTransactionDetail.Open "SELECT * FROM TransactionDetail where TaNum = 1", cnn, adOpenKeyset, adLockOptimistic

'Pour une commande
rstTransactionDetail!ILType = 2
rstTransactionDetail!ILLineNumber = 1
rstTransactionDetail!ILProductNumber = "99XG-010"

rstProductData.Open "SELECT * FROM Product where PrNumber = '99XG-010'", cnn, adOpenKeyset, adLockOptimistic

If Not rstProductData.EOF Then
'Si le produit existe dans l'inventaire, consultation
'de sa fiche pour obtenir les valeurs assigner aux
'proprits le concernant dans la facturation
rstTransactionDetail!ILProductCP = rstProductData!RecCardPos
rstTransactionDetail!ILDescription = rstProductData!PrDescription1
'rstTransactionDetail!ILSellingPrice = 3
' Ceci est un example pour demontrer comment aller chercher le prix en fonction
' des parametres du client
strPriceField = "PrSellingPrice" & rstCustomerData!CuReceivable & "_" & rstCustomerData!CuPriceLevel + 1
rstTransactionDetail!ILSellingPrice = rstProductData(strPriceField)

rstTransactionDetail!ILProductGroupCP = rstProductData!PrProductGroupCP
'Pour une commande
rstTransactionDetail!ILOrderedQty = 1
Else
'Si le produit n'existe pas dans l'inventaire, les valeurs
' assigner aux proprits le concernant dans la facturation
'doivent provenir d'une autre source que l'inventaire
'd'Acomba
rstTransactionDetail!ILDescription = "Cartouche d'imprimante"
rstTransactionDetail!ILSellingPrice = 44.21
rstTransactionDetail!ILProductGroupCP = 1
'Pour une commande
'rstTransactionDetail!ILOrderedQty = 2
End If

rstTransactionDetail.Update

rstTransactionDetail.Close
rstProductData.Close

'**********************************************************
'tape 4 : Initialiser les proprits de la deuxime
' ligne de la facturation
'**********************************************************

rstTransactionDetail.Open "SELECT * FROM TransactionDetail where TaNum = 2", cnn, adOpenKeyset, adLockOptimistic

'La premire ligne de la facturation est une ligne de
'saisie de produits
'Pour une commande
rstTransactionDetail!ILType = 2
rstTransactionDetail!ILLineNumber = 2
rstTransactionDetail!ILProductNumber = "XXX"

rstProductData.Open "SELECT * FROM Product where PrNumber = 'XXX'", cnn, adOpenKeyset, adLockOptimistic

If Not rstProductData.EOF Then
'Si le produit existe dans l'inventaire, consultation
'de sa fiche pour obtenir les valeurs assigner aux
'proprits le concernant dans la facturation
rstTransactionDetail!ILProductCP = rstProductData!RecCardPos
rstTransactionDetail!ILDescription = rstProductData!PrDescription1
rstTransactionDetail!ILSellingPrice = 12
'rstProductData!PrSellingPrice0_1
rstTransactionDetail!ILProductGroupCP = rstProductData!PrProductGroupCP
rstTransactionDetail!ILInvoicedQty = 2
'Pour une commande
'rstTransactionDetail!ILOrderedQty = 2
Else
'Si le produit n'existe pas dans l'inventaire, les valeurs
' assigner aux proprits le concernant dans la facturation
'doivent provenir d'une autre source que l'inventaire
'd'Acomba
rstTransactionDetail!ILDescription = "XXXXXX"
rstTransactionDetail!ILSellingPrice = 21
rstTransactionDetail!ILProductGroupCP = 1
rstTransactionDetail!ILInvoicedQty = 2
End If
rstTransactionDetail.Update

rstTransactionDetail.Close
rstTransactionHeader.Close

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Calcul de taxe
'On peut effectuer le calcul des taxes et y avoir accs avant la finalisation de la facture
'Voici un exemple avec lequel on calcul les taxes et on ajoute par la suite une ligne de transport
'il est possible aussi de calculer les taxes, ajouter des produits, et recalculer les taxes

'Calcul des taxes sur nos 2 produits
'Il ajoute automatiquement les lignes TANumLines, donc aprs son excution TANumLines = 4
cnn.Execute ("CALCULATE_TAXES")


'Aprs avoir calcul les taxes, on veut ajouter une ligne de transport
'ajuste le nombre de lignes en incluant maintenant les lignes de taxes et de transport
rstTransactionHeader.Open "SELECT * FROM TransactionHeader", cnn, adOpenKeyset, adLockOptimistic
rstTransactionHeader!TANumLines = 5
rstTransactionHeader.Update
'Ajout de la ligne de transport
rstTransactionDetail.Open "SELECT * FROM TransactionDetail where TaNum = 5", cnn, adOpenKeyset, adLockOptimistic
rstTransactionDetail!ILLineNumber = 991
rstTransactionDetail!ILType = 7
rstTransactionDetail!ILTotalAmount = 200
rstTransactionDetail.Update

'On recalcule les taxes en incluant la ligne de transport
cnn.Execute ("CALCULATE_TAXES")

'On veut avoir accs aux montants des taxes fraiches calcules Avant l'excution du END_TRANSACTION_IN
rstCurrentTaxes.Open "select * from LastTransactionDetail where ILType = 8", cnn, adOpenKeyset, adLockOptimistic
Amount = rstCurrentTaxes!ILTotalAmount
Amount = rstCurrentTaxes!ILType
rstCurrentTaxes.MoveNext
Amount = rstCurrentTaxes!ILTotalAmount
Amount = rstCurrentTaxes!ILType

'Si on veut canceller la transaction et par le fait mme librer les cartes pr-rserves, mais il ne faut pas excuter le END_TRANSACTION_IN aprs.
'cnn.Execute ("CANCEL_TRANSACTION_IN")

'Terminer la cration de la transaction
cnn.Execute ("END_TRANSACTION_IN")

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Si on veut obtenir des informations sur le dernier header cr,
' les informations se trouvent dans le LastTransactionHeader
' On veut particulirement obtenir le CardPos de la transaction une fois cre
' afin de faire des oprations sur celle-ci
' Toutes autres informations sont aussi disponibles
'rstLastTransHeader.Open "select * from LastTransactionHeader", cnn, adOpenKeyset, adLockOptimistic
'CardPos = rstLastTransHeader!RecCardPos ' <---------
'InvoiceTotal = rstLastTransHeader!InInvoiceTotal
'SupplierCP = rstLastTransHeader!InCustomerSupplierCP
'rstLastTransHeader.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Si on veut obtenir des informations sur les lignes de taxes,
' les informations se trouvent dans le LastTransactionDetail (Ainsi que d'autres informations de lignes)
'rstLastTransDetail.Open "select * from LastTransactionDetail where ILType = 8", cnn, adOpenKeyset, adLockOptimistic
'premiere ligne de taxe
'Amount = rstLastTransDetail!ILTotalAmount
'deuxieme ligne de taxe
'rstLastTransDetail.MoveNext
'Amount = rstLastTransDetail!ILTotalAmount
'rstLastTransDetail.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Fermeture des RecordSet
rstCustomerData.Close
rstProductData.Close
MsgBox "Transaction termin"


Command1_Exit:
cnn.Close
Exit Sub

Command1_Err:
MsgBox Err.Description
cnn.Execute ("CANCEL_TRANSACTION_IN")
Resume Command1_Exit

Y A-T-IL un moyen d'accélérer le tout... J'ai l'impression que le fais d'ouvrir le recordset au complet puis de faire un addnew le ralentis, j'ai inséré des points de vérification et à chaque ajout c'est très long... On dirait qu'il a de la difficulté à trouver le dernier enregistrement, car lorsque j'ouvre un formulaire et que je demande le dernier enregistrement c'est très très très long....

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Problème Ouverture Recordset

Message  Luc Martin le Dim 23 Nov 2008 - 8:51

Mon problème réel est l'ouverture des recordset TransactionHeader et TransactionDetail, ça prend une éternitée... scratch

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Filtre ton recordset de addnew...

Message  Lartis le Dim 23 Nov 2008 - 9:34

Salut,

Le problème est le suivant, il ouvre toutes les factures dans ta requête servant à ajouter, c'est inutile.

Change
rstTransactionHeader.Open "SELECT * FROM TransactionHeader", cnn, adOpenKeyset, adLockOptimistic

pour
rstTransactionHeader.Open "SELECT * FROM TransactionHeader WHERE RecCarPos = 0", cnn, adOpenKeyset, adLockOptimistic

Tu passeras probablement de 3 minutes à quelques secondes! Very Happy Le RecCardPos est indexé, et ne contient pas de valeur 0.

Les exemples que fournis Acomba ne sont pas du tout optimisés.

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
avatar
Lartis

Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.

Voir le profil de l'utilisateur http://www.lartis.com

Revenir en haut Aller en bas

Merci!!!!!!!

Message  Luc Martin le Dim 23 Nov 2008 - 9:59

Ça marche numéro 1.

Tu viens de m'enlever une épine du pied...

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Un autre petit problème

Message  Luc Martin le Dim 23 Nov 2008 - 10:41

J'ai le même problème avec la zone transport,

'Aprs avoir calcul les taxes, on veut ajouter une ligne de transport
'ajuste le nombre de lignes en incluant maintenant les lignes de taxes et de transport
rstTransactionHeader.Open "SELECT * FROM TransactionHeader", cnn, adOpenKeyset, adLockOptimistic
rstTransactionHeader!TANumLines = 5
rstTransactionHeader.Update

C'est énorméement long d'ouvrir le recordset...

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Recordset

Message  Lartis le Dim 23 Nov 2008 - 11:09

Salut,

Tu pourrais ajouter le transport lorsque tu ajoutes ta ligne dans le header, plutôt que de le faire après coup.

Si tu le fais après coup, tu peux récupérer ton CP après l'insertion initiale,
rstLastTransHeader.Open "select * from LastTransactionHeader", cnn, adOpenKeyset, adLockOptimistic
LeRecCardPos = rstLastTransHeader!RecCardPos ' <---------
rstLastTransHeader.Close

le garder en mémoire et filtrer par LeRecCardPos lorsque tu ajoutes le transport.

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
avatar
Lartis

Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.

Voir le profil de l'utilisateur http://www.lartis.com

Revenir en haut Aller en bas

Merci!!!!!!! Encore

Message  Luc Martin le Dim 23 Nov 2008 - 15:39

J'ai finalement opté pour inclure mon transport dès le départ.

Merci pour ton aide et ton service rapide...

Je donne 10/10 au forum et au répondant Sylvain Laurence de Lartis


Dernière édition par Luc Martin le Dim 23 Nov 2008 - 15:41, édité 1 fois (Raison : erreur dans le nom)

Luc Martin

Nombre de messages : 20
Date d'inscription : 21/11/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

évaluation du forum...

Message  Lartis le Dim 23 Nov 2008 - 16:28

Merci!

Ne te gène surtout pas pour répondre et participer aux différentes discussions.

Au plaisir,

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
avatar
Lartis

Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.

Voir le profil de l'utilisateur http://www.lartis.com

Revenir en haut Aller en bas

Re: Création d'une commande via Access

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum