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éer une commande dans Acomba par Access

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

Créer une commande dans Acomba par Access

Message  lboisvert le Lun 19 Juil 2010 - 13:53

Bonjour,

J'essaie de créer une commande dans Acomba en utilisant Access et ODBC.

J'ai utilisé une bonne partie du code Créer une facture pour ma commande et je l'ai adapté pour les besoins.

Voici mon code :

**********************************************************
Sub ExportationAcomba()
'Déclaration des variables
Dim strsql As String
Dim tbl As DAO.Recordset
Dim cnn As New ADODB.Connection
Dim rstTransactionHeader As New ADODB.Recordset
Dim rstTransactionDetail As New ADODB.Recordset
Dim rstCustomerData As New ADODB.Recordset
Dim rstProductData As New ADODB.Recordset
Dim rstCurrentTaxes As New ADODB.Recordset
Dim rstLastTransHeader As New ADODB.Recordset
Dim rstLastTransDetail As New ADODB.Recordset
Dim verreur As Integer
Dim vTaNum As Integer
Dim vLigne As Integer
Dim vInUnique As Variant
verreur = 0
cnn.ConnectionString = "DSN=DEMO"
cnn.CursorLocation = adUseClient
cnn.Open

On Error GoTo ExportationAcomba_Err

strsql = "tmpCommande"
Set tbl = CurrentDb.OpenRecordset(strsql)
'**********************************************************
'Étape 1 : Initialiser les propriétés de l'entête de la
' facturation
'**********************************************************
'Boucle tant qu'il y a des commandes dans la table tmpCommande

Do Until tbl.EOF

cnn.Execute ("BEGIN_TRANSACTION_IN")

rstTransactionHeader.Open "SELECT * FROM TransactionHeader", cnn, adOpenKeyset, adLockOptimistic
'
'Vérifie si la commande existe dans la table TransactionHeader d'Acomba
Do Until rstTransactionHeader.EOF
If Trim(rstTransactionHeader![InAssociatedOrder]) = tbl![NoCommande] Then
GoTo detail
End If
If Trim(rstTransactionHeader![InInvoiceNumber]) = tbl![NoCommande] Then
GoTo detail
End If
rstTransactionHeader.MoveNext
Loop
continue:
rstTransactionHeader.AddNew
'Pour une commande
rstTransactionHeader!InInvoiceType = 2
rstTransactionHeader!InReference = ""
rstTransactionHeader!InDescription = ""
rstTransactionHeader!InCurrentDay = 1
rstTransactionHeader!InTransactionActive = 1
rstTransactionHeader![InInvoiceNumber] = tbl![NoCommande]

'Trouve le numéro de client selon le nom du client

'Numéro du client associé à la facture
If tbl![NomClient] = "TREMCAR IBERVILLE" Then
CustomerName = "TREMCAR INC."
Else
CustomerName = tbl![NomClient]
End If

'On veut aller chercher les informations du client
rstCustomerData.Open "SELECT * FROM Customer where cuName = '" & CustomerName & "'", 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 propriétés concernant le client
'associé à la facture
rstTransactionHeader!InInvoicedToCP = rstCustomerData!CuInvoicedToCP

'Numéro du compte recevable du client auquel la facturation
'est associée
rstTransactionHeader!InReceivableOffset = rstCustomerData!CuReceivable
End If
'**********************************************************
'Étape 2 : Assigner le nombre total de lignes incluses
' dans la facturation à la propriété TANumLines
'**********************************************************
rstTransactionHeader!TANumLines = tbl![NbrLigne]
rstTransactionHeader.Update

detail:

'**********************************************************
'Étape 3 : Initialiser les propriétés de la première
' ligne de la facturation
'**********************************************************
rstTransactionDetail.Open "SELECT * FROM TransactionDetail where TaNum = " & tbl![NoLigne], cnn, adOpenKeyset, adLockOptimistic

'Pour une commande
rstTransactionDetail!ILType = 2
rstTransactionDetail!ILLineNumber = tbl![NoLigne]
rstTransactionDetail!ILProductNumber = tbl![NoProduit]

rstProductData.Open "SELECT * FROM Product where PrNumber = '" & tbl![NoProduit] & "'", 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
'propriétés le concernant dans la facturation
rstTransactionDetail!ILProductCP = rstProductData!RecCardPos
rstTransactionDetail!ILDescription = rstProductData!PrDescription1
rstTransactionDetail!ILSellingPrice = tbl![Prix]

rstTransactionDetail!ILProductGroupCP = rstProductData!PrProductGroupCP
'Pour une commande
rstTransactionDetail!ILOrderedQty = tbl![Qte]
Else
'Si le produit n'existe pas dans l'inventaire, les valeurs
'à assigner aux propriétés le concernant dans la facturation
'doivent provenir d'une autre source que l'inventaire
'd'Acomba

'Ajoute le produit dans la table Acomba s'il n'existe pas
rstProductData.AddNew

rstProductData![PrNumber] = tbl![NoProduit]
rstProductData![PrTimeModified] = Now
rstProductData![PrDescription1] = tbl![Description]
rstProductData![PrSortKey1] = Left(tbl![Description], 15)
rstProductData![PrSellingPrice0_1] = tbl![Prix]
rstProductData![PrQtyOrdered] = tbl![Qte]
rstProductData![RecCardPos] = DMax("RecCardPos", "rstProductData") + 1

rstProductData.Update

rstTransactionDetail!ILDescription = tbl![Description]
rstTransactionDetail!ILSellingPrice = tbl![Prix]

'Détermine le groupe du produit selon le début du numéro de produit
If Left(tbl![NoProduit], 6) = "312261" Then
rstTransactionDetail!ILProductGroupCP = 1
ElseIf Left(tbl![NoProduit], 6) = "312291" Then
rstTransactionDetail!ILProductGroupCP = 2
End If

'Pour une commande
rstTransactionDetail!ILOrderedQty = tbl![Qte]
End If

rstTransactionDetail.Update

rstTransactionDetail.Close
rstProductData.Close

rstTransactionHeader.Close
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Calcul de taxe
'On peut effectuer le calcul des taxes et y avoir accès 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


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

'On veut avoir accès aux montants des taxes fraiches calculées Avant l'exécution 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
' rstCurrentTaxes.Close

'Si on veut canceller la transaction et par le fait même libérer les cartes pré-réservées, mais il ne faut pas exécuter le END_TRANSACTION_IN après.
'cnn.Execute ("CANCEL_TRANSACTION_IN")

'Terminer la création 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 particulièrement obtenir le CardPos de la transaction une fois créée
' afin de faire des opérations 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
MsgBox "Transaction terminé"
fin:
tbl.MoveNext
Loop
ExportationAcomba_Exit:
cnn.Close
Exit Sub

ExportationAcomba_Err:
MsgBox Err.Description
cnn.Execute ("CANCEL_TRANSACTION_IN")
Resume ExportationAcomba_Exit
End Sub

**********************************************************
Fin de mon code

Le problème s'est qu'il met un message d'erreur sur la ligne :

cnn.Execute ("END_TRANSACTION_IN")

Le message est le suivant :
Erreur de toolkit
Fonction = ModifyCard
Champ = ILType[2]
Erreur = Valeur invalide <1997>

Quelqu'un peut-il m'aider svp ?

Merci

lboisvert

lboisvert

Nombre de messages : 8
Date d'inscription : 19/07/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Créer une commande dans Acomba par Access

Message  PlanteG le Mar 20 Juil 2010 - 10:02

Extraits du fichier d'aide d'ODBC:

ILType

Type InvoicingLineType de la ligne de facturation (Facture, Commande, Commande ouverte, Sousmission, Achat, Format, Transport, Taxe, Écriture comptable).

InvoicingLineType

Constantes des types de lignes de facturation.

Valeur Description

1 Facture
2 Commande
3 Commande ouverte
4 Soumission
5 Achat
6 Format
7 Transport
8 Taxe
9 Affectation comptable

Donc ILType doit prendre une valeur de 1 à 9. Cette valeur est 1997 et est donc invalide.
avatar
PlanteG

Nombre de messages : 982
Ville : Québec
Date d'inscription : 11/07/2007

Fiche d'Entreprise
Nom de l'entreprise: Informatique Gilles Plante

Voir le profil de l'utilisateur http://ingp.ca

Revenir en haut Aller en bas

MERCI

Message  lboisvert le Mar 20 Juil 2010 - 15:42

MERCI pour ta réponse

Mais je ne sais pas d'où vient le 1997, j'ai beau regarder mon programme et cela ne fonctionne toujours pas.

J'ai découvert que dans ma table lié TransactionDetail il y avait un enregistrement dont plusieurs champs sont à 0 dont le champ ILType, est-ce que le problème peut venir de là? J'ai essayé de supprimer cet enregistrement et je suis toujours en lecture seule donc je n'y arrive pas. Avez-vous un exemple de programme pour supprimer tout le contenu de cette table ?

J'ai réussie une seule fois à enregistrer une commande mais je crois que depuis que j'ai cet enregistrement à 0 je ne suis plus capable de faire quoi que ce soit dans cette table.

Avez-vous une idée???

Merci

Lboisvert

lboisvert

Nombre de messages : 8
Date d'inscription : 19/07/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Créer une commande dans Acomba par Access

Message  PlanteG le Mar 20 Juil 2010 - 16:38

Hum, effectivement, ILType est mis à 0 dans le code. Peut-être que c'est le syndrome du mauvais message d'erreur qui se produit.

Il y a tout de même un truc qui me semble accrocher: il y a une boucle qui traite toutes les commandes (Do until), mais je ne semble pas voir la boucle qui traite toutes les lignes d'une commande. En fait le squelette devrait être semblable à ceci:

Do xxx ' Traite tous les commandes

' Traite le header de la commande

Do xxx 'Traite toutes les lignes de la commande


loop ' Toutes les lignes de la commande

loop ' Traite toutes les commandes


Si la ligne rstTransactionHeader!TANumLines = tbl![NbrLigne] indique qu'il y a 3 lignes, mais qu'une seule est créée dans la tables des détails, il va y avoir à coup sûr un problème.
avatar
PlanteG

Nombre de messages : 982
Ville : Québec
Date d'inscription : 11/07/2007

Fiche d'Entreprise
Nom de l'entreprise: Informatique Gilles Plante

Voir le profil de l'utilisateur http://ingp.ca

Revenir en haut Aller en bas

MERCI

Message  lboisvert le Mer 21 Juil 2010 - 10:04

Bonjour PlanteG

Merci pour votre réponse cela m'a beaucoup éclairé, j'ai réussie à entrer une commande dans Acomba par Access.

UN GROS MERCI!!!

Une autre petite question, si dans ma commande le produit n'existe pas j'aimerais pouvoir le créer dans la table Product. Comment doit-je faire ? Dois-je utiliser BEGIN... et END.... ?

Merci
lboisvert

lboisvert

Nombre de messages : 8
Date d'inscription : 19/07/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Créer une commande dans Acomba par Access

Message  PlanteG le Mer 21 Juil 2010 - 10:15

Pour ce qui de créer des produits, voir ce sujet Ajout de nouveaux Produits via ODBC
qui est sur ce forum.
avatar
PlanteG

Nombre de messages : 982
Ville : Québec
Date d'inscription : 11/07/2007

Fiche d'Entreprise
Nom de l'entreprise: Informatique Gilles Plante

Voir le profil de l'utilisateur http://ingp.ca

Revenir en haut Aller en bas

Produit dans ODBC

Message  lboisvert le Mer 21 Juil 2010 - 10:22

Oui merci je l'ai vue après avoir posé la question.

lboisvert

lboisvert

Nombre de messages : 8
Date d'inscription : 19/07/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Créer une commande dans Acomba par 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