Accueil > Forum > > > > Scinder une fature
Scinder une fature
vendredi 9 mai 2008 à 09:06:38 |
Scinder une fature

jessenierin
|
Bonjour Voici mon code pour scinder une fature Function Num_Folio(NumFacture As Variant) Dim bd0 As Database Dim rs1 As Recordset Dim mt As Double Dim folio As Integer Set bd0 = CurrentDb folio = 1 Set rs1 = bd0.OpenRecordset(" SELECT * FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " );") rs1.MoveFirst While Not rs1.EOF rs1.Edit mt = mt + rs1!PU * rs1!QuantiteColis If mt > 1500 Then folio = folio + 1 rs1!folioID = folio rs1.Update mt = rs1!PU * rs1!QuantiteColis Else rs1!folioID = folio rs1.Update End If rs1.MoveNext Wend rs1.Close End Function Seulement cela va dans tous les sens parce qu'il scinde systematiquement toutes les factures superieure a 1500 mais il les eclate drolement: exemple : pour un total de 3200 il a fais un folio avec 320 un autre avec 800 un autre avec 1200 et le 4eme folio avec 880. Mais il faut aussi dire que ces montants correspondent au total de chaque ligne de facture qui en compte 4. Ou est mon erreur please?? Help please
|
|
vendredi 9 mai 2008 à 10:29:18 |
Re : Scinder une fature

CarSoftAja
|
Salut, J'ai pas vraiment compris le but, mais je remarque déjà un problème évident avec 'mt' . En effet, à chaque passage dans la boucle il sera augmenté ( au lieu de reprendre la valeur de la ligne de l'enregistrement actuel ?) En effet, si au premier passage mt=1600, soit 2*800 (PU*QuantitéColis), lors du deuxième passage il sera de 1600+ (PU*QuantitéColis) de l'enregistrement suivant
rs1.Edit mt = mt + rs1!PU * rs1!QuantiteColis ' risque d'être souvent >1500, vu que le total est augmenté à If mt > 1500 Then ' chaque passage dans la boucle folio = folio + 1 rs1!folioID = folio rs1.Update mt = rs1!PU * rs1!QuantiteColis 'à quoi sert cette ligne ? Else rs1!folioID = folio rs1.Update
|
|
vendredi 9 mai 2008 à 20:19:38 |
Re : Scinder une fature

jessenierin
|
Bsr
mt=rs!PU*rs1!quantitecolis 'permet selon moi de faire le meme calcul dans le folio suivant.
est-ce une erreur ??
Voici un exemple concret:
La facture comporte 5 articles:
Rose blanche Quantitecolis 5 et PU 200
rose rouge Quantitecolis 3 et PU 175
margurite quantitécolis 10 et pu 225
magnola quantitecolis 8 et PU 70
Rose quantitecolis 7 et PU 60
Je lui demande de faire:
5*200 si le montant trouvé est inférieur a 1500, il prend une autre ligne de facture et l'ajoute au premier montant trouvé qui est 1000. nous conattons que s'il prend la 2eme ligne de facture; le montant trouvé sera >1500.
Comment faire pour lui demander de prendre une autre ligne de facture pour combler l'ecart du premier calcul (1500 -1000)?
ce serait soit 1000 + 8*70 ; soit 1000+7*60 si d'autres ajouts ne sont plus possibles parceque les lignes suivantes ne le permetent pas,
qu'il crée un 2eme folio dans lequel il pousuivrait ses calculs et ainsi de suite jusqu'a épuration de toutes les lignes de la facture.
tel est mon problème.
Merci d'avance
|
|
vendredi 9 mai 2008 à 22:23:59 |
Re : Scinder une fature

CarSoftAja
|
Réponse acceptée !
J'ai fait un p'tit truc en vitesse, qui pourrait sûrement être simplifiém, mais ça à l'air de fonctionner
Function Num_Folio(NumFacture As Variant) Dim bd0 As Database Dim rs1 As DAO.Recordset Dim mt As Double Dim folio As Integer ' Pour que ça fonctionne, il faut que le champ FolioID de la table soit = à 0 au départ folio = 1 mt = 0 'Requête à partir de la table, incluant le champ tot qui est [QuantitéColis]*PU et trié ' ne sélectionner que les champs non-traités; c'est-à-dire où folioID =0 Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0) ORDER BY [QuantiteColis]*[pu] DESC") rs1.MoveFirst While Not rs1.EOF While Not rs1.EOF If mt + rs1!tot <= 1500 Then While Not rs1.EOF If mt + rs1!tot <= 1500 Then rs1.Edit rs1!folioID = folio rs1.Update mt = mt + rs1!tot rs1.MoveNext Else rs1.MoveNext End If Wend Else rs1.Edit rs1!folioID = folio folio = folio + 1 rs1.Update rs1.MoveNext End If Wend mt = 0 rs1.Close ' Je refait le recordset pour l'actualiser en fonction des champs FolioID écrit entre-temps Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0) ORDER BY [QuantiteColis]*[pu] DESC") If rs1.RecordCount > 0 Then folio = folio + 1 rs1.MoveFirst End If Wend rs1.Close End Function
|
|
dimanche 11 mai 2008 à 13:10:46 |
Re : Scinder une fature

jessenierin
|
Merci carsoftaja
Le code marche super!!!!!
Thanks
|
|
dimanche 18 mai 2008 à 15:31:50 |
Re : Scinder une fature

jessenierin
|
Bjr
Ce code donné par Carsoftaja marche bien.
Function Num_Folio(NumFacture As Variant) Dim bd0 As Database Dim rs1 As DAO.Recordset Dim mt As Double Dim folio As Integer
' Pour que ça fonctionne, il faut que le champ FolioID de la table soit = à 0 au départ folio = 1 mt = 0
'Requête à partir de la table, incluant le champ tot qui est [QuantitéColis]*PU et trié ' ne sélectionner que les champs non-traités; c'est-à-dire où folioID =0 Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0) ORDER BY [QuantiteColis]*[pu] DESC")
rs1.MoveFirst While Not rs1.EOF While Not rs1.EOF If mt + rs1!tot <= 1500 Then While Not rs1.EOF If mt + rs1!tot <= 1500 Then rs1.Edit rs1!folioID = folio rs1.Update mt = mt + rs1!tot rs1.MoveNext Else rs1.MoveNext End If Wend Else rs1.Edit rs1!folioID = folio folio = folio + 1 rs1.Update rs1.MoveNext End If Wend mt = 0 rs1.Close ' Je refait le recordset pour l'actualiser en fonction des champs FolioID écrit entre-temps Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0) ORDER BY [QuantiteColis]*[pu] DESC") If rs1.RecordCount > 0 Then folio = folio + 1 rs1.MoveFirst End If Wend rs1.Close End Function
J'ai voulu intégrer un autre critère que j'ai appelé "rubrique" Chaque rubrique contient une liste d'articles. a- Rubrique Rose contient Rose rouge, rose blanche, rose rose .... b- rubrique feuillage contient: Feuille verte, feuille jaune, feuille rouge... Ce que je voudrais en fait c'est que le code face la boucle dans chaque rubrique, epuise le critère qui est toujours <=1500 par folio avant de continuer vers une autre rubrique de la meme facture. Ilne serait pas souhaitable que l'on retrouve dans la meme rubrique des artcicles qui n'appartiennent pas a cette rubrique. Je ne sais comment m'y prendre. help please. Merci d'avance
|
|
mardi 20 mai 2008 à 16:38:38 |
Re : Scinder une fature

CarSoftAja
|
Il suffit de rajouter une boucle avant le traitement, qui sélectionne chaque rubrique existante. J'ai donc créé un recordset (RS0) qui sélectionne les rubriques existantes et je boucle sur ce recordset, tout en passant cette rubrique contenue dans la variable "varRubrique" au recordset rs1 qui traite les factures.
Function Num_Folio(NumFacture As Variant) Dim bd0 As Database Dim rs1 As DAO.Recordset Dim rs0 As DAO.Recordset Dim mt As Double Dim folio As Integer Dim varRubrique ' Pour que ça fonctionne, il faut que le champ FolioID de la table soit = à 0 au départ folio = 1 mt = 0 'Requête qui regroupe toutes les différentes rubriques utilisées avec le N° de facture NumFacture ' Ne prend qu'une fois chaque rubrique grâce au mot clé DISTINCT Set rs0 = CurrentDb.OpenRecordset("SELECT DISTINCT Rubrique FROM DETAIL_COMMANDE WHERE [factureID]=" & NumFacture) rs0.MoveFirst ' On boucle sur chaque rubrique While Not rs0.EOF 'Requête à partir de la table, incluant le champ tot qui est [QuantitéColis]*PU et trié ' ne sélectionner que les champs non-traités; c'est-à-dire où folioID =0 et dont la rubrique est égale à rs0 varRubrique = rs0!Rubrique Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0 AND [Rubrique] LIKE""" & varRubrique & """) ORDER BY [QuantiteColis]*[pu] DESC") rs1.MoveFirst While Not rs1.EOF While Not rs1.EOF If mt + rs1!tot <= 1500 Then While Not rs1.EOF If mt + rs1!tot <= 1500 Then rs1.Edit rs1!folioID = folio rs1.Update mt = mt + rs1!tot rs1.MoveNext Else rs1.MoveNext End If Wend Else rs1.Edit rs1!folioID = folio folio = folio + 1 rs1.Update rs1.MoveNext End If Wend mt = 0 rs1.Close ' Je refais le recordset pour l'actualiser en fonction des champs FolioID écrit entre-temps Set rs1 = CurrentDb.OpenRecordset(" SELECT *, [QuantiteColis]*[pu] AS tot FROM DETAIL_COMMANDE WHERE (factureID=" & NumFacture & " AND folioID=0 AND [Rubrique] LIKE""" & varRubrique & """) ORDER BY [QuantiteColis]*[pu] DESC") If rs1.RecordCount > 0 Then folio = folio + 1 rs1.MoveFirst End If Wend rs1.Close ' On passe à la rubrique suivante en incrémentant le folio folio = folio + 1 rs0.MoveNext Wend rs0.Close End Function
|
|
mercredi 21 mai 2008 à 19:45:03 |
Re : Scinder une fature
|
mercredi 21 mai 2008 à 19:45:52 |
Re : Scinder une fature

jessenierin
|
Bonjour
je viens d'inserer le code dans ma base de donnée.
Resulta; pour une montant de 4200F; il a éclater la facture en 08 folios. Ce qui est normal compte tenu du fait que la facture avait 08 rubriques.
J'ai essayé de corriger en supprimant : folio = folio+1
' On passe à la rubrique suivante en incrémentant le folio
folio = folio + 1
rs0.MoveNext
Wend
rs0.Close
la alors il a tout simplement regroupé la facture en un bloc et selon les rubriques.
Ce qui me conviendrait ce serait que: pour ce meme montant par exemple; qui'il fasse :
Folio1
Rubrique Roses
Rose rouge 150
Rose blanche 450
Rose jaune 550
Rubrique Feuillages
Feuillage vert 100
feuillage jaune 230
TOTAL 1480 qui est <= 1500
Folio2
Rubrique feuillages
Feuillage sec 450
feuillage ... 200
Ainsi de suite.
Que le code aie la possibiliter de faire continuer dans le 2eme folio une rubrique entamée dans le folio précedent.
Comment m'y prendre??
Merci d'avance.
|
|
dimanche 25 mai 2008 à 16:18:17 |
Re : Scinder une fature

jessenierin
|
Bjr CarSoftAja, je n'arrive pas toujours à faire ce qu'il faut pour avoir ce que je veux. Ou dois-je donc modifier ?? Merci
|
|
Cette discussion est classée dans : rs1, mt, scinder, folio, bd0
Répondre à ce message
Sujets en rapport avec ce message
scinder des cellules excel [ par lebleu ]
j'ai un fichier ckient dans lequel j'ai besoin de scinder la colonne titre+nom+prenom en une colonne titre, une colonne nom et une colonne prenom...je
datareport ->printreport [ par Rahan ]
En apercu j ai pas de bleme quand j en ferme un l autre s affiche tout desuite avec les valeurs radraichies mais quand je remplace show parprintreport
datareport et imprimession [ par lolo ]
bonjourj ai une boucle ds laquelle j imprime des report les uns apres les autresSi chaque report contiennent une seule page c est okmais des lors ou u
VB et ssdbgrid [ par pimousse75 ]
bonjour, j'ai ce bout de code While Not rs1.EOF index = index + 1 'SSDBGrid1.AddNew 'SSDBGrid1.MoveNext MsgBox SSDBGrid1.Row AddItemString = "" 'AddIt
connexion ADO et recordset?urgent [ par marlo ]
je veux récupérer la valeur d'un recordset d'une connexion ADO "conn1".Set rs1 = New ADODB.Recordsetrs1.CursorType = adOpenStaticrs1.CursorLocation =
connexion ADO et utilisation de recordset?urgent?urgent?urgent [ par marlo ]
salut,s'il vous plaît je veux afficher le contenu d'un recordset d'une connexion ADO mais pour le cas ou le champ à afficher et dans une variable, le
Bout de code incompréhensible [ par pimousse75 ]
Salut,je récupère un pgr avec ceci 'verrouillage du principal intervenant si nécessaire If rs1.RecordCount = 0 Then CheckPI.Enabled
SOS sur combo et filtre [ par soni ]
Bonjour,J'ai un recrdset créé en ado par code.Tout va bien sur le recordset.Je le lie à un dbcombo ou une datalist pour afficher les valeurs d'un cham
combo et fitre [ par soni ]
Bonjour, J'ai un recrdset créé en ado par code. Tout va bien sur le recordset. Je le lie à un dbcombo ou une datalist pour afficher les valeurs d'un
ADO - moveprevious - recordset - access2000 - CacheSize - deplacement arriere [ par sansoussix ]
bonjour, je suis nouveau en vb et j'essaie d'effectuer des lectures dans une base de donnees access 2000.J'ai utilise le provider 4.0 pour ma connecti
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|