Création d'une commande via Access
2 participants
- Luc Martin
- Nombre de messages : 20
Date d'inscription : 21/11/2008
Création d'une commande via Access
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...
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...
- Lartis
- Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007
Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
Erreurs sur création de ligne de commande
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)
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
- Luc Martin
- Nombre de messages : 20
Date d'inscription : 21/11/2008
Erreuer de mise à jour sur table liée
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.
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
Problème en partie résolu
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....
'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
Problème Ouverture Recordset
Dim 23 Nov 2008 - 8:51
Mon problème réel est l'ouverture des recordset TransactionHeader et TransactionDetail, ça prend une éternitée...
- Lartis
- Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007
Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
Filtre ton recordset de addnew...
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! Le RecCardPos est indexé, et ne contient pas de valeur 0.
Les exemples que fournis Acomba ne sont pas du tout optimisés.
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! 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
- Luc Martin
- Nombre de messages : 20
Date d'inscription : 21/11/2008
Merci!!!!!!!
Dim 23 Nov 2008 - 9:59
Ça marche numéro 1.
Tu viens de m'enlever une épine du pied...
Tu viens de m'enlever une épine du pied...
- Luc Martin
- Nombre de messages : 20
Date d'inscription : 21/11/2008
Un autre petit problème
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...
'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...
- Lartis
- Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007
Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
Recordset
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.
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
- Luc Martin
- Nombre de messages : 20
Date d'inscription : 21/11/2008
Merci!!!!!!! Encore
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
Merci pour ton aide et ton service rapide...
Je donne 10/10 au forum et au répondant Sylvain Laurence de Lartis
- Lartis
- Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007
Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
évaluation du forum...
Dim 23 Nov 2008 - 16:28
Merci!
Ne te gène surtout pas pour répondre et participer aux différentes discussions.
Au plaisir,
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
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum