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
-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

Aller en bas
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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...
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.
http://www.lartis.com

Création d'une commande via Access Empty 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)

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
Création d'une commande via Access Groupe-conseil-lartis-inc-acomba200
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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.
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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....
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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... scratch
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.
http://www.lartis.com

Création d'une commande via Access Empty 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! 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
Création d'une commande via Access Groupe-conseil-lartis-inc-acomba200
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty Merci!!!!!!!

Dim 23 Nov 2008 - 9:59
Ça marche numéro 1.

Tu viens de m'enlever une épine du pied...
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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...
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.
http://www.lartis.com

Création d'une commande via Access Empty 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.

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
Création d'une commande via Access Groupe-conseil-lartis-inc-acomba200
avatar
Luc Martin
Nombre de messages : 20
Date d'inscription : 21/11/2008

Création d'une commande via Access Empty 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


Dernière édition par Luc Martin le Dim 23 Nov 2008 - 15:41, édité 1 fois (Raison : erreur dans le nom)
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.
http://www.lartis.com

Création d'une commande via Access Empty é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,

_________________
Sylvain Laurence, partenaire, revendeur et développeur Acomba
Groupe Conseil Lartis Inc. www.lartis.com
Création d'une commande via Access Groupe-conseil-lartis-inc-acomba200
Contenu sponsorisé

Création d'une commande via Access Empty Re: Création d'une commande via Access

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