Forum d'entraide Acomba
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.

Rejoignez le forum, c’est rapide et facile

Forum d'entraide Acomba
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.
Forum d'entraide Acomba
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Connexion
Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

Aller en bas
avatar
lboisvert
Nombre de messages : 8
Date d'inscription : 19/07/2010

Commande dans Acomba par Access Empty Commande dans Acomba par Access

Mer 24 Nov 2010 - 9:27
Bonjour,
Je transfert des commandes dans Acomba en utilisant ODBC par Access. Lorsque j'ai des commandes de 6 lignes et plus mon programmen plante sur la ligne
rstTransactionDetail.Update
il me donne le message suivant "La ligne n'a pas pu être trouvé pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture."

Fait bizarre : si je exécute à nouveau le programme il va passer correctement j'usqu'a la prochaine commande de 6 lignes ou plus.

Aidez-moi svp, je ne sais plus quoi faire.

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

Fiche d'Entreprise
Nom de l'entreprise: Informatique Gilles Plante
http://ingp.ca

Commande dans Acomba par Access Empty RE: Commande dans Acomba par Access

Mer 24 Nov 2010 - 10:34
J'ai une petite suggestion: poster le code de votre fonction d'insertion de commande. Ça pourrait peut-être aider à trouver l'explication pour cette erreur.
avatar
lboisvert
Nombre de messages : 8
Date d'inscription : 19/07/2010

Commande dans Acomba par Access Empty RE: COMMANDE DANS ACOMBA PAR ACCESS

Mer 24 Nov 2010 - 12:50
Voici le code intégral.

Donc tel que mentionné c'est la ligne rstTransactionDetail.Update
de la 6ieme ligne de commande qui plante.

Merci

****** 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 rstCustomerData2 As New ADODB.Recordset
Dim rstProductData As New ADODB.Recordset
Dim rstProductGroup As New ADODB.Recordset
Dim rstCurrentTaxes As New ADODB.Recordset
Dim rstLastTransHeader As New ADODB.Recordset
Dim rstLastTransDetail As New ADODB.Recordset

Dim Numero As String
Dim trouve As Integer
Dim clientdiff As Integer

Dim vProduit As String
Dim vDescription As String
Dim vNoCommande As String

cnn.ConnectionString = "DSN=DEMO"
'cnn.ConnectionString = "DSN=RAYNOX"
cnn.CursorLocation = adUseClient
cnn.Open

On Error GoTo ExportationAcomba_Err

strsql = "tmpCommande"
Set tbl = CurrentDb.OpenRecordset(strsql)

tbl.MoveFirst
vNoCommande = Str(tbl![NoCommande])
'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

trouve = 0
clientdiff = 0
'Vérifie si la commande existe dans la table TransactionHeader d'Acomba
Do Until rstTransactionHeader.EOF
If Trim(rstTransactionHeader![InAssociatedOrder]) = tbl![NoCommande] Then
trouve = 1
MsgBox "La commande " & tbl![NoCommande] & " est déjà créée dans Acomba. À VÉRIFIER!!!"
GoTo suivant
End If
If Trim(rstTransactionHeader![InInvoiceNumber]) = tbl![NoCommande] Then
trouve = 1
MsgBox "La commande " & tbl![NoCommande] & " est déjà créée dans Acomba. À VÉRIFIER!!!"
GoTo suivant
End If
rstTransactionHeader.MoveNext
Loop

rstTransactionHeader.AddNew

'Pour une commande
rstTransactionHeader!InInvoiceType = 2

'rstTransactionHeader!InReference = ""
rstTransactionHeader!InReference = "PO # " & tbl![NoCommande] & " - " & Left(tbl![Instructions], 13)
rstTransactionHeader!InDescription = tbl![Instructions]
rstTransactionHeader!InCurrentDay = 1
rstTransactionHeader!InDate = tbl![DateCommande]
rstTransactionHeader!InTransactionActive = 1
rstTransactionHeader![InInvoiceNumber] = tbl![NoCommande]
If tbl![ExpedieVia] = "Votre camion" Then
rstTransactionHeader!InShippingNumber = 1
rstTransactionHeader!InShippingCP = 1
End If

'Nom du client associé à la facture
If tbl![Devise] = "USD" Then
CustomerName = "TREMCAR INC. - ($ us)"
CustomerName2 = "TREMCAR ST-CESAIRE INC."
Else
If tbl![NomClient] = "TREMCAR IBERVILLE" Then
CustomerName = "TREMCAR INC."
' ElseIf tbl![NomClient] = "HUTCHINSON INDUSTRIES" Then
' CustomerName = "HUTCHINSON INDUSTRIES CANADA"
' Else
' CustomerName = tbl![NomClient]
ElseIf tbl![NomClient] = "TREMCAR ST-CESAIRE INC." Then
CustomerName = tbl![NomClient]
Else
MsgBox "COMMANDE NON TRANSFÉRÉ " & tbl![NoCommande] & "."
clientdiff = 1
GoTo suivant
End If
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
'Adresse de facturation
rstTransactionHeader!InName = rstCustomerData!CuName
rstTransactionHeader!InAddress = rstCustomerData!CuAddress
rstTransactionHeader!InCity = rstCustomerData!CuCity
rstTransactionHeader!InPostalCode = rstCustomerData!CuPostalCode
rstTransactionHeader!InPhoneNumber1 = rstCustomerData!CuPhoneNumber1
rstTransactionHeader!InPhoneNumber2 = rstCustomerData!CuPhoneNumber2
rstTransactionHeader!InPhoneNumber3 = rstCustomerData!CuPhoneNumber3
rstTransactionHeader!InPhoneDescription1 = "Téléphone"
rstTransactionHeader!InPhoneDescription2 = "Télécopieur"
rstTransactionHeader!InPhoneDescription3 = "téléphone"
rstTransactionHeader!InISOCountryCode = rstCustomerData!CuISOCountryCode

If tbl![Devise] = "USD" Then
rstCustomerData2.Open "SELECT * FROM Customer where cuName = '" & CustomerName2 & "'", cnn, adOpenKeyset, adLockOptimistic
If Not rstCustomerData2.EOF Then
'Adresse de livraison
rstTransactionHeader!InShipName = rstCustomerData2!CuName
rstTransactionHeader!InShipAddress = rstCustomerData2!CuAddress
rstTransactionHeader!InShipCity = rstCustomerData2!CuCity
rstTransactionHeader!InShipPostalCode = rstCustomerData2!CuPostalCode
rstTransactionHeader!InShipPhoneNumber1 = rstCustomerData2!CuPhoneNumber1
rstTransactionHeader!InShipPhoneNumber2 = rstCustomerData2!CuPhoneNumber2
rstTransactionHeader!InShipPhoneDescription1 = "Téléphone"
rstTransactionHeader!InShipPhoneDescription2 = "Télécopieur"
rstTransactionHeader!InShipISOCountryCode = rstCustomerData2!CuISOCountryCode
End If
rstCustomerData2.Close
End If
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:


' Do While Str(tbl![NoCommande]) = vNoCommande
Do While tbl![NoLigne] <= tbl![NbrLigne]
If Str(tbl![NoCommande]) = vNoCommande Then

'**********************************************************
'É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!ILKeepBO = -1
' Ceci est un example pour demontrer comment aller chercher le prix en fonction
' des parametres du client

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![PrUsed] = -1
rstProductData![PrTimeModified] = Now
rstProductData![PrDescription1] = tbl![Description]
rstProductData![PrSortKey1] = Left(tbl![Description], 15)
' rstProductData![PrSellingPrice0_1] = tbl![Prix]
' rstProductData![PrQtyOrdered] = rstProductData![PrQtyOrdered] + tbl![Qte]
rstProductData![PrQtyOrdered] = tbl![Qte]
rstProductData![PrProductGroupNumber] = 1
rstProductData![PrBoAllowed] = -1
rstProductData![PrActive] = -1

rstProductData.Update

rstProductData.Close

rstProductData.Open "SELECT * FROM Product where PrNumber = '" & tbl![NoProduit] & "'", cnn, adOpenKeyset, adLockOptimistic

If Not rstProductData.EOF Then
rstTransactionDetail!ILProductCP = rstProductData!RecCardPos
End If

rstTransactionDetail!ILDescription = tbl![Description]
rstTransactionDetail!ILSellingPrice = tbl![Prix]
rstTransactionDetail!ILKeepBO = -1

'Le groupe du produit est toujours 1 pour Tremcar
rstTransactionDetail!ILProductGroupCP = 1

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

End If

rstTransactionDetail.Update

rstTransactionDetail.Close
rstProductData.Close
Else
Exit Do
End If
tbl.MoveNext

If tbl.EOF Then
Exit Do
End If

Loop

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

rstCustomerData.Close

'Terminer la création de la transaction
cnn.Execute ("END_TRANSACTION_IN")
If tbl.EOF Then
Exit Do
Else
vNoCommande = Str(tbl![NoCommande])
End If


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 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
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

suivant:

'Si la commande exite dans Acomba passe au suivant
If trouve = 1 Or clientdiff = 1 Then
tbl.MoveNext
vNoCommande = Str(tbl![NoCommande])
rstTransactionHeader.Close
End If

Loop

tbl.Close

'Empêche les demande de confirmation de s'afficher
'DoCmd.SetWarnings False
'
''Efface le contenu de la table
'DoCmd.RunSQL "DELETE * FROM tmpCommande;"
'
''Retablit les confirmations
'DoCmd.SetWarnings True

MsgBox "Exportation des commandes vers Acomba terminé."

ExportationAcomba_Exit:

cnn.Close
Exit Sub

ExportationAcomba_Err:

MsgBox Err.Description
cnn.Execute ("CANCEL_TRANSACTION_IN")
Resume ExportationAcomba_Exit

End Sub
PlanteG
PlanteG
Nombre de messages : 1024
Ville : Québec
Date d'inscription : 11/07/2007

Fiche d'Entreprise
Nom de l'entreprise: Informatique Gilles Plante
http://ingp.ca

Commande dans Acomba par Access Empty RE: COMMANDE DANS ACOMBA PAR ACCESS

Mer 24 Nov 2010 - 16:08
Hum,

il y a pas mal de code là-dedans Very Happy . Ça ressemble passablement au code exemple dans le fichier d'aide, et comme ça marche dans plusieurs cas, il y a lieu de croire que la base serait correcte.

J'ai quelques commentaires/questions, espérons qu'il vous mettront sur la piste.

Au début de detail:, on voit:

Do While tbl![NoLigne] <= tbl![NbrLigne]
If Str(tbl![NoCommande]) = vNoCommande Then


J'en conclus donc qu'il n'y a qu'une seule table avec les entêtes et les détails. Est-ce exact ? Si c'est le cas, cela implique que tous les enregistrements d'une même commande sont contigus et en ordre croissant de [NoLigne]. Sauf que si la requête ne les retourne pas dans le bon ordre, il y aura un os dans la moulinette. Ne serait-il pas alors préférable d'emplir tbl en spécifiant un tri croissant sur le no de commande puis le no de ligne ?

D'un autre côté, le message d'erreur pourrait laisser entendre qu'une même ligne serait créée plus d'une fois. À condition bien sûr que vous ne soyez pas victime du syndrome du mauvais message d'erreur Wink . J'ai malheureusement vécu cela déjà... Oh et le message d'erreur laisse entendre que c'est une mise à jour, pas la création d'une nouvelle entrée. Bizarre...
avatar
lboisvert
Nombre de messages : 8
Date d'inscription : 19/07/2010

Commande dans Acomba par Access Empty RE: Commande dans Acomba par Access

Mer 24 Nov 2010 - 16:37
Bonjour,

Merci de me répondre rapidement.

Il n'y a effectivement qu'une seule table avec les entêtes et les détails et la table est indexé par no de commande. Pour le numéro de ligne l'ordre est établie par un programme qui inscrit le numéro de ligne sur chaque ligne d'une commande en faisant première ligne de la commande noligne = 1, deuxième ligne de la commande noligne = 2 etc...
Quand j'utilise l'option de débogage avec F8 tout semble ok.
Le problème est intermittant, il n'est pas systématique à chaque fois que j'ai une commande de plusieurs lignes. J'ai remarqué qu'il a déjà planté lorsque la dernière ligne de la commande était un nouveau produit que j'ajoute par le même programme. Ensuite lorsque je l'ai réexécuter la commande a réussi à passer probablement parce que le produit était maintenant créé. En même temps je ne sait pas si ça peux être ça parce que sur d'autre commande dont le produit est nouveau cela a bien passé.

Avez-vous d'autres idée???

Merci
Jeremie
Jeremie
Nombre de messages : 123
Date d'inscription : 11/08/2010

Fiche d'Entreprise
Nom de l'entreprise:
http://bourgeois-sc.com

Commande dans Acomba par Access Empty Re: Commande dans Acomba par Access

Mer 24 Nov 2010 - 17:07
Bonjour,

Je n'ai pas lu le code en entier ... il y a n'a un peux trop et j'ai le flegme de faire la conversion VBA vers .net

Ensuite, j'ai eu le même problème, mais moi c'étais dès la deuxième ligne.

Alors se que les programmeur Acomba ont finis par me donner, c'est une fonction en pseudo .Net
avec la particularité qu'il traité le détail deux fois.

La seul chose que j'ai modifié est le fait que je n'utilise plus d'ADODB depuis 2001.
Et pour que cela fonctionne en VBA, faudra retirer les try catch si ma mémoire est bonne.

Je fait rarement de VBA, mais mon premier poste de Programmeur n'étais que ça du VBA.

Avant de mettre les donnée dans le détail, il créé la ligne vide.
dans mon cas. j'ai enlever l'aspect linéaire pour englobé dans des for.

Se qui donne quelques chose qui ressemble à ceci.
Code:


                    'Faut créé les ligne avant.
                    For i = 0 To iNbLot
                        sRequest = "UPDATE TransactionDetail SET ILType=0, " & _
                                    "ILLineNumber=0,ILProjectCP=0, ILCharterCP=0, " & _
                                    "ILProductNumber='',ILProductGroupNumber=0, " & _
                                    "ILDescription='',ILSellingPrice=0, ILProductCPLinkedToSerialNumber=0, " & _
                                    "ILSerialNumberType=0, ILProductItemCP=0, ILProductItemCategory3='', " & _
                                    "ILProductItemDescriptor1='', ILProductItemDescriptor2='', ILIsQuantity=0, " & _
                                    "ILPriceList=0,ILPriceBeforeDiscount=0, ILDiscountPercent=0, ILDiscountPriceLevel=0, " & _
                                    "ILKeepBO=0, ILBypassPrinting=0, ILTaxLineRate1=0, ILTaxLineRate2=0, " & _
                                    "ILTaxLineRate3=0, ILTaxLineRate4=0, ILTaxLineRate5=0, ILUnitTaxAmount1=0, " & _
                                    "ILUnitTaxAmount2=0, ILUnitTaxAmount3=0,ILUnitTaxAmount4=0,ILUnitTaxAmount5=0, " & _
                                    "ILTotalAmount=0 WHERE TaNum = " & i + 1

                        objAcomba.executeSave(sRequest)

                    Next

                    For i = 0 To iNbLot
                            'Aller chercher les information sur le produit.
                        sRequest = "SELECT * from Product Where PrNumber = '" & dgDetail.Item(i, 1) & "'"
                        dtProduct = objAcomba.executeSelect(sRequest).Tables(0)

                        If dtProduct.Rows.Count > 0 Then

                            sRequest = "UPDATE TransactionDetail SET " _
                                    & " ILType = 2, ILLineNumber = " & i + 1 & "," _
                                    & " ILCustomerSupplierCP = " & iCustomerCU & ", " _
                                    & " ILDate = {d '" & Today.ToString("yyyy-MM-dd") & "'}" _
                                    & ", ILDescription = '" & dtProduct.Rows(0).Item("PrDescription1") _
                                    & "',ILProductGroupNumber = " & dtProduct.Rows(0).Item("PrProductGroupNumber") _
                                    & ",  ILProductCP = " & dtProduct.Rows(0).Item("RecCardPos") _
                                    & ",ILProductNumber = '" & dgDetail.Item(i, 1) _
                                    & "',ILOrderedQty = " & dgDetail.Item(i, 3) _
                                    & ", ILCost = " & dtProduct.Rows(0).Item("PrLastCost") & ", ILSellingPrice =  " & dgDetail.Item(i, 7) _
                                    & " Where TaNum = " & i + 1

                            If Not objAcomba.executeSave(sRequest) Then
                                bOk = False
                                Exit For
                            End If

                        End If

                    Next i


Ça devrait fonctionner, mais j'avoue ne pas avoir essayé avec plus de 4 items.
En gros, l'exemple qui est donnée dans le fichier d'aide est incomplète.

Si vous êtes intéressé, je peux mettre le code complet que j'ai finis par avoir.
Après deux ou trois semaines à leur envoyer des oui, mais non ça fonctionne pas.

Code:


      'Objet utilisé pour utiliser la source de données ODBC

        Dim cnn As New ADODB.Connection

        'Recordset utilisé pour obtenir le numéro de la dernière
        'commande qui a été créée
        Dim rstLastTransHeader As New ADODB.Recordset

        'Contient le numéro de la dernière commande créée
        Dim Numero As String
        'Recorset utilisé pour obtenir le CardPos du groupe de taxes
        'du client
        Dim rstCustomer As New ADODB.Recordset

        'Contient CardPos du groupe de taxes du client
        Dim CardPosTaxGroup As Long
        'Variable utilisées pour consulter les lignes de taxes qui
        'ont été générées lors de l'exécution de CALCULATE_TAXES
        Dim NoTaxe As String
        Dim DescTaxe As String
        Dim MtTaxe As Double
        Dim TypeTaxe As Long

        Err.Clear()

        cnn.ConnectionString = "DSN=Demo"
        cnn.CursorLocation = ADODB.CursorLocationEnum.adUseClient

            Try

                'Indique qu'on veut créer une facturation
                cnn.Execute("BEGIN_TRANSACTION_IN")

                'Création de l'entête de la facturation de type commande
                cnn.Execute("INSERT INTO TransactionHeader(InInvoiceType, InReference, InDescription, InCurrentDay, InTransactionActive, InTaxGroupCP, InCustomerSupplierNumber, InDate, InReceivableOffset, TANumLines) " & _

                                        "VALUES (2, 'Commande du site Web par ODBC', 'Commande du site Web par ODBC', 1, 1, " & CardPosTaxGroup & ", '5222546', {D '2010-11-10'}, 0, 1)")

                    '-------------------------------------------------------------------------
                    'Tout d'abord, en modification de facturation, il est de bonne pratique
                    'de s'assurer que tous les champs de la nouvelle ligne sont à vides.
                    'Ainsi, on met d'abord à vide tous les champs des nouvelles lignes de
                    'produit.
                    '-------------------------------------------------------------------------

                    'Mettre à vide les champs de la ligne qui sera la première
                    'nouvelle ligne de produit (TaNum = 2)
                    cnn.Execute("UPDATE TransactionDetail SET ILType=0, " & _
                                                            "ILLineNumber=0, " & _
                                                            "ILProjectCP=0, " & _
                                                            "ILCharterCP=0, " & _
                                                            "ILProductNumber='', " & _
                                                            "ILProductGroupNumber=0, " & _
                                                            "ILDescription='', " & _
                                                            "ILSellingPrice=0, " & _
                                                            "ILProductCPLinkedToSerialNumber=0, " & _
                                                            "ILSerialNumberType=0, " & _
                                                            "ILProductItemCP=0, " & _
                                                            "ILProductItemCategory1='', " & _
                                                            "ILProductItemCategory2='', " & _
                                                            "ILProductItemCategory3='', " & _
                                                            "ILProductItemDescriptor1='', " & _
                                                            "ILProductItemDescriptor2='', " & _
                                                            "ILProductItemDescriptor3='', " & _
                                                            "ILProductSupplierCP=0, " & _
                                                            "ILInvoicedQty=0, " & _
                                                            "ILOrderedQty=0, " & _
                                                            "ILCost=0, " & _
                                                            "ILIsQuantity=0, " & _
                                                            "ILPriceList=0, " & _
                                                            "ILPriceBeforeDiscount=0, " & _
                                                            "ILDiscountPercent=0, " & _
                                                            "ILDiscountPriceLevel=0, " & _
                                                            "ILKeepBO=0, " & _
                                                            "ILBypassPrinting=0, " & _
                                                            "ILTaxLineRate1=0, " & _
                                                            "ILTaxLineRate2=0, " & _
                                                            "ILTaxLineRate3=0, " & _
                                                            "ILTaxLineRate4=0, " & _
                                                            "ILTaxLineRate5=0, " & _
                                                            "ILUnitTaxAmount1=0, " & _
                                                            "ILUnitTaxAmount2=0, " & _
                                                            "ILUnitTaxAmount3=0, " & _
                                                            "ILUnitTaxAmount4=0, " & _
                                                            "ILUnitTaxAmount5=0, " & _
                                                            "ILTotalAmount=0 " & _
                                                            "WHERE (TaNum = 2)")



                'Ajout d'une ligne dans la commande
                cnn.Execute("UPDATE TransactionDetail SET ILType=2, " & _
                                                        "ILLineNumber=1, " & _
                                                        "ILProductCP=2, " & _
                                                        "ILProductNumber='CARTOUCHE', " & _
                                                        "ILProductGroupNumber=2, " & _
                                                        "ILDescription='Cartouche pour imprimante', " & _
                                                        "ILOrderedQty=5, " & _
                                                        "ILSellingPrice=48.04" &
                                                        "WHERE(TaNum = 1)")

                'Indique de calculer les taxes pour la commande
                cnn.Execute("CALCULATE_TAXES")

                'Indique de créer la commande
                cnn.Execute("END_TRANSACTION_IN")
                MsgBox("Factruration de type commande créée avec succès.")

                '------------------------------------------------
                'Obtenir le numéro de la commande qui a été créée
                '------------------------------------------------
                'Obtenir l'enregistrement qui a été ajoutée dans
                'la table LastTransactionHeader
                rstLastTransHeader.Open("SELECT * FROM LastTransactionHeader", cnn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic)


                'Assigner à Numero le numéro de la dernière commande
                Numero = rstLastTransHeader.Fields("InInvoiceNumber").Value
                rstLastTransHeader.Close()

            Catch
                If Err.Number <> 0 Then
                    MsgBox(Err.Description)
                End If
            Finally
                cnn.Close()
            End Try

Very Happy

Edit :

Je viens de lire votre dernier post.

oui, le produit dois avoir été créé AVANt de faire la commande.

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

Commande dans Acomba par Access Empty Commande dans Acomba par Access

Jeu 25 Nov 2010 - 10:08
Bonjour à tous,

Merci pour vos réponses!!

J'ai effectivement pensé hier soir à modifier mon code pour créer les produits avant de créer les commandes tel que proposé par Jeremie donc ta proposition confirme mon idée.

Après l'avoir testé cela a l'air de bien fonctionné.

Je l'essaie encore pour un temps et on verra.

Merci et bonne journée!!
Contenu sponsorisé

Commande dans Acomba par Access Empty Re: Commande dans Acomba par Access

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