Suivez et participez au développement du nouvel OpenCellar : PLOC.co
> Open Cellar for Windows
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Developers resources
> Open Cellar for Mobile
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Open Cellar for Mac/Linux
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Developers resources
> My Account
> My Live services
> My pages
> My library
> My published wines
> My labels
> My posted messages
> Write a page
> Open Cellar Forum Index
> Windows Forum
> Mac/Linux Forum
> Mobile Forum
> Search for and import wines
> Search for labels
> Compare prices (Sniffer)
Search:
> Search with all engines
> Search in forums
> Search in personal pages
> Search on open-cellar.com
> Search in wine cards
> Search in labels
> Search in price comparison tool (Sniffer)
Welcome (
connect
-
create an account
)
Home
»
The forum
»
Open Cellar Home Edition (Windows)
Nuage de tags
Open Cellar
Scripts
Etiquette
PPP
Cellar book
Mac
Vista
Synchronisation
Excel export
vinoXml
usb
sniffer
backup
import
printing
chardonnet
palm
statistics
Linux
Bravo et encore Merci pour ce superbe Soft!
23/05/2008
Reply
Bravo et encore Merci pour ce superbe Soft!
JuanJuan
21 posts
Honêtement je ne connais pas d'autre logiciel de gestion de cave qui lui arrive à la cheville!
Voici mon utilisation. Je dispose de 3 caves pour lesquelles je suis assuré, mais mon assureur me demande de tenir un livre de cave régulièrement afin d'être en mesure de me rembourser ce qui aurait effectivement été vole en un tel fâcheux cas.
Serait il possible de développer un complément qui me permette de sélectionner un emplacement et de demander l'impression de tous les vins ayant une fiche dans l'emplacement, ainsi que pour chaque vin les entrées & sorties?
Un livre de cave avec les mouvements ! Bien sur si un vin n'est pas présent dans le meuble de cave (ou totalement bu ;-) il n'apparaîtrait plus!
Bravo encore et j'attends avec impatience la version Palm qui sera plus agréable à utiliser avec 320x240 que celle de mon PPC en 240x180
A boentôt!
25/05/2008
Reply
Re : Bravo et encore Merci pour ce superbe Soft!
Administrateur
3099 posts
Bonjour, merci et bienvenue
Premier essai, ci dessous le script qui vous imprimera pour l'emplacement sélectionné la liste des vins, le stock (de l'emplacement et pas de la cave) ainsi que la liste complete des achats consos.
Modifiez la ligne 1 pour la faire correspondre avec le nom de l'emplacement.
Enfin pour executer le script copiez le dans la fenetre "Préférences" -> "Editeur de scripts"
string sourceRackName = "Nom de l'emplacement"; if(App.ActiveCellar == null) { MessageBox.Show("Aucune cave n'est ouverte"); return; } // Récupere l'emplacement source. Rack theRack = null; ObjectCollection racks = App.ActiveCellar.GetCollection((ushort)ObjectType.Rack); for (int i = 0; i < racks.Count; i++) { Rack rk = (Rack)racks[i]; if(rk.Name.Trim().ToLower() == sourceRackName.ToLower()) { theRack = rk; break; } } // Verifie que le rack a été trouvé if(theRack == null) { MessageBox.Show("Impossible de continuer : \nL'emplacement \"" + sourceRackName + "\" est introuvable.\nModifiez le nom de l'emplacement à la ligne 1."); return; } App.Animate(AnimationType.Work, true); App.SetCursor(true); Hashtable items = new Hashtable(); for(byte col = 0; col < theRack.Columns; col++) { for(byte row = 0; row < theRack.Rows; row++) { RackItem item = theRack.Get(col, row); if((item != null) && (!item.IsEmpty)) { Wine w = item.Wine; if(items.Contains(w)) { items[w] = (int)items[w] + 1; } else { items.Add(w, 1); } } } } // Modifiez ici le titre du report string reportName = "Liste des vins de l'emplacement \"" + sourceRackName + "\""; // Creation entete report ReportTable rt = new ReportTable(reportName); // Région ReportColumn rcArea = rt.NewColumn("Région"); rcArea.Size = 170; // Nom ReportColumn rcName = rt.NewColumn("Nom"); rcName.Size = 330; // Année ReportColumn rcYear = rt.NewColumn("Année"); rcYear.Size = 50; rcYear.ContentAlignment = ReportContentAlignment.Right; rcYear.DataType = ReportColumnType.Numeric; // Stock par emplacement ReportColumn rcStock = rt.NewColumn("Stock"); rcStock.Size = 50; rcStock.ContentAlignment = ReportContentAlignment.Right; rcStock.DataType = ReportColumnType.Numeric; // Date ReportColumn rcDate = rt.NewColumn("Date"); rcDate.Size = 70; // Entrées ReportColumn rcIn = rt.NewColumn("Entrées"); rcIn.Size = 60; rcIn.ContentAlignment = ReportContentAlignment.Right; rcIn.DataType = ReportColumnType.Numeric; // Sorties ReportColumn rcOut = rt.NewColumn("Sorties"); rcOut.Size = 60; rcOut.ContentAlignment = ReportContentAlignment.Right; rcOut.DataType = ReportColumnType.Numeric; // Alimentation de la source IDictionaryEnumerator wines = items.GetEnumerator(); while (wines.MoveNext()) { Wine wine = (Wine)wines.Key; ReportRow row = rt.NewRow(); row[0] = wine.Area.Name.Trim(); row[1] = wine.Name.Trim(); if(wine.Year != 0) { row[2] = wine.Year.ToString(); } row[3] = Convert.ToInt32(wines.Value).ToString(); // Fiche achats for (int j = 0; j < wine.Purchases.Count; j++) { PurchaseSales psales = (PurchaseSales)wine.Purchases[j]; ReportRow rowEx = rt.NewRow(); rowEx[4] = psales.Date.ToString("dd/MM/yy"); rowEx[5] = psales.ConsumeBottles.ToString(); rowEx[6] = psales.PurchaseBottles.ToString(); } } // Génération System.Collections.ArrayList list = new System.Collections.ArrayList(); list.Add(rt); IReport report = App.ReportEngine.GetSystemReport(PredefinedReport.Grid); string destFileName = App.Path + "Cache\\" + sourceRackName + ".pdf"; bool success = false; try { report.Create(list, destFileName); success = true; } catch(Exception ex) { MessageBox.Show("Erreur (1)" + ex.ToString()); } // Affichage du report if(success) { IShellWindow shellWindow = (IShellWindow)App.GetWindow(WindowType.Shell, null); if(shellWindow != null) { shellWindow.Start(destFileName); } } App.SetCursor(false); App.StopAnimate();
Matthieu
09/06/2008
Reply
Re : Bravo et encore Merci pour ce superbe Soft!
JuanJuan
21 posts
Et bien c'est du rapide... je n'étais revenu ici depuis un moment, trop occupé à trier les bouteilles pour renseigner la base!
Alors un premier test me remonte une erreur en fait les entrées & les sorties sont inversées! J'ai bien essayé d'aller voir dans le code, mais hormis inverser rowEx[6] et rowEx[5] ...
L'idée d'assigner 1 ligne par mouvement est excellente, serait-il possible d'inscrire dans la colonne
NOM
mais aligné sur la droite ou en italique, la 1° ligne du champ
Commentaire
.
Dans le cas des entrées, cela permettrait d'y stocker le N° de facture par exemple, et pour les sorties le motif...
...et le tout sans lignes supplémentaires...
A bientôt!
15/06/2008
Reply
Re : Bravo et encore Merci pour ce superbe Soft!
Administrateur
3099 posts
Hello,
Voici le script mis à jour, pour ce qui est de la mise en forme (italique) vous en demandé trop au moteur ;-)
Si votre vin possede un commentaire il est placé a coté du nom du vin (vin - commentaire)
string sourceRackName = "Nom de l'emplacement"; if(App.ActiveCellar == null) { MessageBox.Show("Aucune cave n'est ouverte"); return; } // Récupere l'emplacement source. Rack theRack = null; ObjectCollection racks = App.ActiveCellar.GetCollection((ushort)ObjectType.Rack); for (int i = 0; i < racks.Count; i++) { Rack rk = (Rack)racks[i]; if(rk.Name.Trim().ToLower() == sourceRackName.ToLower()) { theRack = rk; break; } } // Verifie que le rack a été trouvé if(theRack == null) { MessageBox.Show("Impossible de continuer : \nL'emplacement \"" + sourceRackName + "\" est introuvable.\nModifiez le nom de l'emplacement à la ligne 1."); return; } App.Animate(AnimationType.Work, true); App.SetCursor(true); Hashtable items = new Hashtable(); for(byte col = 0; col < theRack.Columns; col++) { for(byte row = 0; row < theRack.Rows; row++) { RackItem item = theRack.Get(col, row); if((item != null) && (!item.IsEmpty)) { Wine w = item.Wine; if(items.Contains(w)) { items[w] = (int)items[w] + 1; } else { items.Add(w, 1); } } } } // Modifiez ici le titre du report string reportName = "Liste des vins de l'emplacement \"" + sourceRackName + "\""; // Creation entete report ReportTable rt = new ReportTable(reportName); // Région ReportColumn rcArea = rt.NewColumn("Région"); rcArea.Size = 170; // Nom ReportColumn rcName = rt.NewColumn("Nom"); rcName.Size = 330; // Année ReportColumn rcYear = rt.NewColumn("Année"); rcYear.Size = 50; rcYear.ContentAlignment = ReportContentAlignment.Right; rcYear.DataType = ReportColumnType.Numeric; // Stock par emplacement ReportColumn rcStock = rt.NewColumn("Stock"); rcStock.Size = 50; rcStock.ContentAlignment = ReportContentAlignment.Right; rcStock.DataType = ReportColumnType.Numeric; // Date ReportColumn rcDate = rt.NewColumn("Date"); rcDate.Size = 70; // Entrées ReportColumn rcIn = rt.NewColumn("Entrées"); rcIn.Size = 60; rcIn.ContentAlignment = ReportContentAlignment.Right; rcIn.DataType = ReportColumnType.Numeric; // Sorties ReportColumn rcOut = rt.NewColumn("Sorties"); rcOut.Size = 60; rcOut.ContentAlignment = ReportContentAlignment.Right; rcOut.DataType = ReportColumnType.Numeric; // Alimentation de la source IDictionaryEnumerator wines = items.GetEnumerator(); while (wines.MoveNext()) { Wine wine = (Wine)wines.Key; ReportRow row = rt.NewRow(); row[0] = wine.Area.Name.Trim(); row[1] = wine.Name.Trim(); if(wine.Comment != String.Empty) { row[1] += " - " + wine.Comment.Replace("\n", " "); } if(wine.Year != 0) { row[2] = wine.Year.ToString(); } row[3] = Convert.ToInt32(wines.Value).ToString(); // Fiche achats for (int j = 0; j < wine.Purchases.Count; j++) { PurchaseSales psales = (PurchaseSales)wine.Purchases[j]; ReportRow rowEx = rt.NewRow(); rowEx[4] = psales.Date.ToString("dd/MM/yy"); rowEx[5] = psales.PurchaseBottles.ToString(); rowEx[6] = psales.ConsumeBottles.ToString(); } } // Génération System.Collections.ArrayList list = new System.Collections.ArrayList(); list.Add(rt); IReport report = App.ReportEngine.GetSystemReport(PredefinedReport.Grid); string destFileName = App.Path + "Cache\\" + sourceRackName + ".pdf"; bool success = false; try { report.Create(list, destFileName); success = true; } catch(Exception ex) { MessageBox.Show("Erreur (1)" + ex.ToString()); } // Affichage du report if(success) { IShellWindow shellWindow = (IShellWindow)App.GetWindow(WindowType.Shell, null); if(shellWindow != null) { shellWindow.Start(destFileName); } } App.SetCursor(false); App.StopAnimate();
Matthieu
© 2006-2014
Matthieu DUCROCQ
- All rights reserved - Last update: january 2014 |
|
Support Open Cellar
|
Contact
|
About