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 :

Switcher un devis vers une facture [AC-2013]


Sujet :

Access

  1. #1
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut Switcher un devis vers une facture
    Bonjour à tous,


    Je me suis créer avec l'aide de ce forum un fichier client/devis/facturation pour ma petite entreprise.
    Tout est fonctionnel, mais dans le soucis d'être toujours plus rapide, je me demandais comment faire pour qu'un devis enregistré puissent être automatiquement switché en facture sur demande.

    J'ai donc un formulaire F_Devis basé sur 3 tables: T_Clients, T_Devis et T_Devis_Détails.
    J'ai également un formulaire F_Facture basé lui aussi sur 3 tables: T_Clients, T_Facture et T_Factures_Détails.
    Les tables T_Clients sont évidemment les mêmes, les tables T_Factures_Détails et T_Devis_Détails sont 2 tables distinctes mais comportent exactement les mêmes champs. Les tables T_Factures et T_Devis sont un peu différentes mais se ressemblent (Par exemple présence du mode de paiement dans les factures et présence d'une check box "devis accepté" dans les devis).
    Dans ces formulaires, j'ai des zones de texte pour le calcul des totaux.

    Je pense que c'est faisable, mais je ne vois pas trop la marche à suivre; si quelqu'un peut m'éclairer le chemin, ce serait gentil.


    Merci.
    A bientôt.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    (c'est encore moi),

    Dans l'ordre, l'idée serait :
    1- Créer automatiquement un nouvel enregistrement dans la table facture avec un nouvel Id, l'Id du client dans la proforma, la référence de la proforma (là c'est une question intéressante), est-ce que chaque facture doit faire référence à un devis ou Non (il faut que tu définisses cela dans ton modèle) et les autres champs de la facture (date,....) avec une requête ajout (INSERT).
    2- Faire une boucle sur les enregistrements correspondants de ta table Devis_Détails avec l'IdProforma sélectionné et les ajouter dans la table Facture_Détails avec l'IdFacture du point 1. Cela avec toujours une requête INSERT.
    Pour la boucle, tu est obligé d'utiliser DAO avec les fonctions FindFirst et FindNext ou une boucle While pour parcourir tes enregistrements.

    Bonne continuation et @+

  3. #3
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Salut,


    Oui tu es toujours présent pour me sauver la mise à ce que je vois

    La manipulation me semble plus compliquée que ce à quoi je m'attendais... Je vais faire des essais ce soir et je verrais bien ce que cela donne. Au besoin je reviendrais poster.


    Merci à bientôt.

  4. #4
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Voila ou je suis arrivé jusque la (pas bien loin j'imagine...)

    - J'ai édité ma table T_Factures pour qu'elles reçoivent un champs ID_Devis_Fact (et une checkbox Chk_Devis) qui correspond à un ID_Devis de la table T_Devis. J'ai mis en place une relation simple entre les deux tables (pas d'intégrité révérencielle pour ne pas forcer à générer un numéro de facture à chaque devis créer).
    - J'ai ajouter un sous formulaire SF_Devis_Fact (ou j'ai un ID_Client, un ID_Facture et ma checkbox Chk_Devis) dans mon sous formulaire SF_Factures. Lorsque je coche la checkbox, le numéro de facture se génère; par contre je remplis manuellement le client. (Je pense qu'il y a déjà une erreur ici)
    - J'ai ensuite pensé mettre un bouton qui ouvre mon formulaire de facturation classique avec en macro where:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [ID_Client]=[Formulaires]![F_Clients_Facturation]![ID_Client]
    'ou
    [ID_Facture]=[Formulaires]![F_Clients_Facturation]![ID_Facture]
    Mais ni l'une ni l'autre ne me permet d'obtenir mon formulaire au moins déjà pré remplit avec le client et le numéro de facture généré...


    A partir de la, je bloque... Dois-je créer un nouveau formulaire de facturation dédié au switch devis vers facture? D'autant plus qu'il faudra que je fasse afficher d'autres informations en "pré remplit" si le but final est d'avoir la facture prête à être imprimée ou presque.


    Merci.
    A bientôt.

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Un peu difficile à expliquer par de mots la manipulation à faire. Je joins un db exemple (la tienne encore).

    L'ajout du nouveau champ dans la table T_Factures est bonne et la simple liaison établie.

    Après, (pour le moment, à toi de voir la suite), tout se passe sur un bouton de commande dans ton sous-formulaire Client_Devis. J'y ai ajouté un bouton de commande qui crée la facture à partir des éléments du sous-formulaire (devis) en cours. En code mes explications dans mon message précédent en gros.

    A la fin, je me suis emmêlé les pinceaux parce que je ne sais pas ce que tu veux faire après (le plus dur est fait je pense). A toi de continuer.

    Bonne continuation

  6. #6
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    Merci beaucoup pour le fichier.
    J'ai eu peu de temps libre ces derniers jours.... du coup je n'ai pas pu plus avancer. En cherchant sur le forum, j'avais finalement trouvé une demande un peu similaire, j'avais prévu de m'en inspirer. Je pense qu'avec ta pièce jointe + l'autre fil de discussion et tes explications, je devrais m'en sortir.

    Au pire.... je sais ou chercher de l'aide maintenant

    Je m'en occupe ce soir si j'ai le temps mais je tag déjà le post en résolu.


    Merci,
    A bientôt.

  7. #7
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Re,

    J'ai un petit bug avec le fichier joint:
    Lorsque je clique sur le bouton voulu dans devis, il me met une boite de dialogue me demandant de confirmer l'ajout d'1 ligne. Et la boite pop x fois x étant le nombre de ligne.
    Après avoir cliquer x fois sur oui, je suis redirigé vers le formulaire facturation comme prévu, mais il est vierge (ni client, ni facture).

    Je travail dessus dès que j'ai un instant.

    si tu passes par la, hésites pas à me dire ce que tu en penses, merci


    A bientôt.


    Edit:
    - Pour ne pas avoir la confirmation redondante, on pourrait utiliser: DoCmd.SetWarnings False (seul inconvénient, aucune confirmation du tout...)
    - J'ai trouvé cela qui pourrait m'aider mais je ne comprend pas la présence des tables de transitions... http://www.developpez.net/forums/d10...devis-facture/


    Pour mémoire:
    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
    31
    32
    33
    34
    Option Compare Database
    Option Explicit
    Private Sub BtnCreerFacture_Click()
    Dim strSQL As String
    Dim NumFact As Long
    Dim rstsform As DAO.Recordset
    'Rajouter dans la table facture le numéro de client et de devis.
    strSQL = "INSERT INTO T_Factures ( Id_Devis_FK, ID_Client ) SELECT " & Me.ID_Devis & "," & Me.ID_Client & ";"
    DoCmd.RunSQL strSQL ' Exécuter la requête
    'Récupérer le numéro de la facture
    NumFact = DMax("[ID_Facture]", "[T_Factures]")
    'Parcourir le sous-formulaire
    Set rstsform = Me.S_F_Devis_Détails.Form.RecordsetClone
    With rstsform
        .MoveFirst
        While Not .EOF
        'Insérer les détails du devis dans la facture NumFact
        strSQL = "INSERT INTO T_Factures_Détails " _
                & "( ID_Facture, ID_Tarif, Désignation, Quantité, Prix_Unitaire," _
                & "Remise, TVA )" _
                & " SELECT " & NumFact & "," & rstsform![ID_Tarif] & ",'" & rstsform![Désignation] & "'," _
                & Replace(rstsform![Quantité], ",", ".") & "," & Replace(rstsform![Prix_unitaire], ",", ".") & "," _
                & Replace(rstsform![Remise], ",", ".") & "," & Replace(rstsform![TVA], ",", ".") & ";"
    'Debug.Print strSQL
        DoCmd.RunSQL strSQL
        .MoveNext
        Wend
    End With
    Set rstsform = Nothing
    'Ouvrir le formulaire de facturation sur le client
    DoCmd.OpenForm "F_Clients_Facturation", , , "[ID_Client]" = Me.ID_Client
     
     
    End Sub
    et la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO T_Factures_Détails ( ID_Facture, ID_Tarif, Désignation, Quantité, Prix_Unitaire, Remise, S_Total, TVA, Montant_TVA, S_Total_TTC )
    SELECT "NumFact" AS NumFact, T_Devis_Détails.ID_Tarif, T_Devis_Détails.Désignation, T_Devis_Détails.Quantité, T_Devis_Détails.Prix_Unitaire, T_Devis_Détails.Remise, T_Devis_Détails.S_Total, T_Devis_Détails.TVA, T_Devis_Détails.Montant_TVA, T_Devis_Détails.S_Total_TTC
    FROM T_Devis_Détails;
    Les champs sembles correspondrent...

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Avec l'exécution des requêtes action, les boites de confirmation s'affichent autant de fois que d'opérations à effectuer sur les tables. On peut les inhiber avec un Docmd.SetWarnings, mais il faut se créer un Message personnalisé avec un MsgBox si on veut quand même une confirmation. Là, je te laisse le truc parce que je pense que tu peux t'en sortir toute seule.

    J'ai rajouter l'ouverture du formulaire Facturation, mais ce n'est pas au point. Et je n'étais pas sûr sur le déroulement de l'application que tu voulais :
    - Partir effectivement du formulaire Devis et ouvrir automatiquement le formulaire facturation (ce qui serait logique).ou
    - Aller dans la facturation et de là appeler le devis et alimenter le formulaire de facturation.

    Dans les 2 cas, il ne s'agit que d'ouvrir les formulaires en transmettant les bonnes informations. Donc je pense aussi que tu peux t'en sortir avec plus de recherche peut-être.

    Dis-nous quand même si tu as de grande difficulté pour mettre en oeuvre tout ça.

    Bonne continuation

  9. #9
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Bonjour,
    merci pour ta réponse comme toujours

    J'ai surtout du mal à ne pas mélanger tout ce que je vois lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "F_Clients_Facturation", , , "[ID_Client]" = Me.ID_Client
    Cette ligne n'est pas sensée ouvrir mon formulaire avec le client sélectionné? chez moi cela ne fonctionne pas


    Merci à bientôt.

  10. #10
    Membre régulier
    Femme Profil pro
    emploi
    Inscrit en
    Mars 2014
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : emploi

    Informations forums :
    Inscription : Mars 2014
    Messages : 138
    Points : 99
    Points
    99
    Par défaut
    Re,


    J'ai finalement eu du temps pour m'y mettre très sérieusement; cela fonctionne.

    Alors pour mon soucis du formulaire facturation qui ne s'ouvrait pas, j'avais cherché beaucoup trop loin l'erreur alors que c'était une simple erreur de syntaxe dans le code....
    Voici la ligne de code juste concernant l'ouverture du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "F_Clients_Facturation", , , "[ID_Client] =" & Me.ID_Client

    Merci pour l'aide.
    A bientôt.

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

Discussions similaires

  1. [AC-2010] Affichage de deux TVA dans une facture/devis
    Par pprieu dans le forum Access
    Réponses: 5
    Dernier message: 31/03/2012, 10h35
  2. Générer une facture depuis plusieurs devis
    Par bssouf21 dans le forum Microsoft Dynamics CRM
    Réponses: 2
    Dernier message: 30/12/2011, 02h51
  3. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  4. Réponses: 11
    Dernier message: 24/07/2003, 09h24
  5. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44

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