IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Archivage de facture


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut Archivage de facture
    Bonjour,

    J'ai fait un petit programme permettant de facturer à partir de commande qui viennent d'une autre appli.

    Le principe est le suivant : On sélectionne la commande que l'on veut facturer et les quantités de la commande sont proposés pour la facture. Ces quantités peuvent être modifiés afin de facturer une commande en "partiel".

    Je dois faire apparaitre dans les commandes à facturer uniquement les commandes qui n'ont pas été facturés totalement.

    J'ai donc créé un champ FLAG au niveau de ma table "Commande entête" et "Commande détail" qui me sert à archiver les commande qui ont été facturés totalement.

    Pour la Mise à jour de la table "commande détail" pas de soucis, je met à jour lorsque la ligne lorsque Commandé - facturé =0

    Mon problème est pour la table "commande entête", il faufrait que je mette à jour la ligne de commande lorsque toutes les lignes de la table "commande détail" pour cette commande sont elles mêmes archiver (FLAG à -1). J'ai essayer plusieurs formules mais je ne m'en sort pas.

    Pouvez-vous m'aider?
    Merci

  2. #2
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 179
    Points : 217
    Points
    217
    Par défaut
    Salut,

    En fait chaque fois que tu flag une ligne de commande détail, il faut que tu vérifie que toutes les lignes de cette commande sont effectivement flagués "Commandé - Facturé".

    Si toutes les lignes de commandes sont flagués "Commandé - Facturé" alors tu fais un update sur ta Commande entête sinon tu fais rien...

    (il faudra penser au cas de l'annulation d'une ligne de commande qui est flagué "Commandé - Facturé")

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse.

    C'st justement cette manip que je n'arrive pas à faire. je fais mes requêtes à partir de l'interface graphique, et pour faire cela, il me semble que j'ai besoin de sous-requêtes, or la requête de MAJ en final plante avec le message: la requête se base sur un requête qui peut être mise à jour...

  4. #4
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 179
    Points : 217
    Points
    217
    Par défaut
    A mon avis un petit bout de code serait le bienvenue.

    Juste après avoir effectué la maj de la ligne de commande, tu lancer une petite vérification. Ca donnerait quelque chose comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    Dim Cnx As ADODB.connexion
    Dim Rs As ADODB.Recordset
    Dim Sql As String
     
    Set Cnx = Application.CurrentProject.Connection
    Set Rs = New ADODB.Recordset
     
    Sql = "SELECT T_CMDDET.FlagFac " & _
            "FROM T_CMDDET " & _
            "WHERE T_CMDDET.NumCmd = " & Me.NumCmd.Value & " And T_CMDDET_FlagFac = 0;"
     
    Rs.Open Sql, Cnx, adOpenStatic, adLockReadOnly
     
    'Si fin de fichier alors cela veut dire qu'il n'y a plus de lignes non flaguées
    If Rs.EOF Then
     
        'On fait donc la maj sur la commande Entête
        Sql = "UPDATE T_CMDENT SET T_CMDENT.FlagFac = -1 WHERE T_CMDENT.NumCmd = " & Me.NumCmd.Value
        Cnx.Execute (Sql)
     
    End If
     
     
    Rs.Close
    Cnx.Close
    Set Rs = noting
    Set Cnx = Nothing
    Sql = Empty
    Le
    N'est valable que si tu executes ta requêtes depuis le formulaire Commande

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Je n'ai pas de fomulaire de commande, je n'ai qu'un formulaire de facturation.

    Est-ce que je peux me passer de la variable Me.NumCmd.Value?

    Merci pour ton aide

  6. #6
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 179
    Points : 217
    Points
    217
    Par défaut
    Me.NumCmd.Value c'est pour l'exemple. Dans ton appli le numéro de facture s'appelle comme tu l'as nommé...

  7. #7
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 179
    Points : 217
    Points
    217
    Par défaut
    Et tu es obligé de faire un UPDATE avec un WHERE. Sinon toutes tes factures vont se retrouver soldées...
    Ce que tu souhaites faire, c'est uniquement solder la facture que tu as à l'écran.
    Donc il faut mettre un "WHERE" le numéro de facture = le numéro de facture que je consulte actuellement.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Mon problème n'est pas pour archiver la facture en cours mais les commandes avec lesquelles j'ai fait ma facture.

    J'ai un peu modifier le code que tu m'a donné est-il cohérent? (Je suis vraiment débutant avec le code...)

    [CODE]
    Option Compare Database

    Dim Cnx As ADODB.connexion
    Dim Rs As ADODB.Recordset
    Dim Sql As String
    Dim NumCmd As String

    Set Cnx = Application.CurrentProject.Connection
    Set Rs = New ADODB.Recordset

    'je stocke la valeur des numéros de commande
    NumCmd = "SELECT DISTINCT OF_LIGN.NUM_OF " & _
    "FROM OF_LIGN;" & _
    "WHERE OF_LIGN.FLAG_SOLD=0;"

    'je sélectionne les lignes de commandes non flaguées
    Sql = "SELECT OF_LIGN.NUM_OF " & _
    "FROM OF_LIGN " & _
    "WHERE OF_LIGN.NUM_OF = Me.NumCmd.value, OF_LIGN.FLAG_SOLD=0;"

    Rs.Open Sql, Cnx, adOpenStatic, adLockReadOnly

    'Si fin de fichier alors cela veut dire qu'il n'y a plus de lignes non flaguées
    If Rs.EOF Then

    'On fait donc la maj sur la commande Entête
    Sql = "UPDATE OF_ENT SET OF_ENT.FLAG_SOLD = -1 WHERE OF_ENT.NUM_OF = " & Me.NumCmd.Value
    Cnx.Execute (Sql)

    End If


    Rs.Close
    Cnx.Close
    Set Rs = noting
    Set Cnx = Nothing
    Sql = Empty
    [CODE]

  9. #9
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 179
    Points : 217
    Points
    217
    Par défaut
    Lorsque tu flagues une ligne de commande, tu dois rechercher toutes les lignes de commande rattachées à ta facture

    Donc on fait une requête qui cherche toutes les lignes de commandes non flagués pour 1 facture
    Dans ta ligne de commande tu dois normalement avoir quelque part un champ NUM_OF qui permet de retrouver la facture de la ligne de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sql = "SELECT OF_LIGN.NUM_OF " & _
    "FROM OF_LIGN " & _
    "WHERE OF_LIGN.NUM_OF = " & Me.NUM_OF.Value & ", OF_LIGN.FLAG_SOLD=0;"
    
    Rs.Open Sql, Cnx, adOpenStatic, adLockReadOnly
    
    'Si fin de fichier alors cela veut dire qu'il n'y a plus de lignes non flaguées
    If Rs.EOF Then
    
    'On fait donc la maj sur la commande Entête
    Sql = "UPDATE OF_ENT SET OF_ENT.FLAG_SOLD = -1 WHERE OF_ENT.NUM_OF = " & Me.NUM_OF.Value
    Cnx.Execute (Sql)
    
    End If
    Et le Me.Num_OF.value doit correspondre à la valeur de la facture pour laquelle tu veux savoir si Oui ou Non tu dois la flaguer

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta patience...

    Je n'ai pas de lien entre les commandes et les factures.
    Les commandes sont importées à partir d'un autre système.

    je peux faire une facture regroupant plusieurs commandes

    Voici la structure (en gros)

    Table OF_ENT
    Dans cette table j'ai les entêtes de commandes (NUM_OF, DATE, etc...)

    Table OF_LIGN
    Dans cette table j'ai le détail des commandes (NUM_OF, NUM_LIGN, etc...)

    Ces tables sont liées par le NUM_OF

    J'ai exactement la même structure pour la facturation avec FAC au lieu de OF

    Lorsque je créé une facture, j'ai le choix parmis les NUM_OF de OF_ENT, lorsque je sélectionne un NUM_OF, cela me ramène le détail de la commande moins le facturé (OF_LIGN-FAC_LIGN) à partir d'un INSERT

    Je sais flagué OF_LIGN (OF_LIGN-FAC_LIGN=0)
    Je sais flagué FAC_ENT et FAC_LIGN (lors de la validation de la facture)

    Je ne sais pas flagué OF_ENT qui doit être flagué lorsque toutes les lignes de OF_LIGN pour un NUM_OF sont flaguées.
    Ce traitement permetrai d'avoir uniquement les OF_ENT non flagués dans la liste de sélection lorsque je fais une facture.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE entete SET entete.commande = DCount 
     
    ("commande","detail","commande =" & [commande])=DCount  
     
    ("commande","detail","commande =" & [commande] & "  and facturé=true");

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse

    peux-tu m'expliquer un peu ce code?

    Où est-t-il à placer?

    Merci

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il ne s'agit pas de code mais d'une requête que tu écris et que tu invoques où tu veux

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Désolé...

    Mais peux-tu me l'expliquer un peu, d'habitude, je fais les requêtes avec l'interface graphique

    Merci

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ben si tu es habitué au qbe
    tu fais sous qbe affichage sql
    et là tu copies ta requête

    l'affichage sql a de grandes vertus
    allez au delà du sql proposé par le qbe (notamment sous requête et requête
    union)
    possibilitè de copier le texte du sql et de le coller dans le code

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    OK Merci

    Mais peux-tu me dire à quoi correspond les valeures de la requête?

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 70
    Points : 38
    Points
    38
    Par défaut
    Ca y est je crois que j'ai compris ta manip sur le fait de compter les enregistrement...

    Par contre j'arrive à le faire en 3 requêtes...

    Est-ce que quelqu'un pourrait m'aider à n'en faire qu'une seule car j'ai un message lorsque j'exécute la 3e requête :"l'opération doit utilisé une requête qui peut être mise à jour"

    Requête 1 (test1)
    [CODE]
    SELECT Count(OF_LIGN.NUM_OF) AS CompteDeNUM_OF, OF_LIGN.NUM_OF
    FROM OF_LIGN
    WHERE (((OF_LIGN.FLAG_SOLD)=Yes))
    GROUP BY OF_LIGN.NUM_OF;
    [CODE]

    Requête 2 (test2)
    [CODE]
    SELECT Count(OF_LIGN.NUM_OF) AS CompteDeNUM_OF, OF_LIGN.NUM_OF
    FROM OF_LIGN
    GROUP BY OF_LIGN.NUM_OF;
    [CODE]

    Requête 3
    [CODE]
    UPDATE (test1 RIGHT JOIN test2 ON (test1.CompteDeNUM_OF = test2.CompteDeNUM_OF)
    AND (test1.NUM_OF = test2.NUM_OF)) LEFT JOIN OF_ENT ON test1.NUM_OF = OF_ENT.NUM_OF SET OF_ENT.FLAG_SOLD = Yes
    WHERE (((OF_ENT.NUM_OF) Is Not Null));
    [CODE]

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Archivage des factures
    Par Valreg dans le forum SAP
    Réponses: 4
    Dernier message: 20/11/2014, 10h10
  2. Logiciel archivage factures
    Par PIEPLU dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 28/12/2011, 15h28
  3. Gros problème avec la facturation de Tiscali
    Par Harry dans le forum Dépannage et Assistance
    Réponses: 5
    Dernier message: 21/10/2004, 18h55
  4. [struts] "Archivage" d'emails
    Par k4eve dans le forum Struts 1
    Réponses: 4
    Dernier message: 09/06/2004, 08h31
  5. ?Convertir le montant de ma facture en lettres?
    Par Redhouane dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/05/2004, 00h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo