Suivez et participez au développement du nouvel OpenCellar : PLOC.co
> Open Cellar pour Windows
> Centre d'aide et de support
> Questions fréquentes
> Centre de téléchargement
> Accéder à la communauté
> Historique des versions
> Ressources pour les développeurs
> Open Cellar pour Windows Mobile
> Open Cellar pour iPhone
> Centre d'aide et de support
> Questions fréquentes
> Centre de téléchargement
> Accéder à la communauté
> Historique des versions
> Open Cellar pour Mac/Linux
> Centre d'aide et de support
> Questions fréquentes
> Centre de téléchargement
> Accéder à la communauté
> Historique des versions
> Ressources pour les développeurs
> Mon compte
> Mes services live
> Mes pages
> Ma bibliothèque
> Mes vins publiés
> Mes étiquettes
> Mes messages sur la communauté
> Ecrire une page
> Accéder à la liste des forums
> Communauté Windows
> Communauté Mac/Linux
> Communauté Mobile
> Rechercher et importer des vins
> Rechercher des étiquettes
> Comparer les prix (Sniffer)
Rechercher :
> Rechercher dans tous les moteurs
> Rechercher dans la communauté
> Rechercher dans les pages persos
> Rechercher sur le site open-cellar.com
> Rechercher dans les fiches vins
> Rechercher dans les étiquettes
> Rechercher sur le comparateur de prix (Sniffer)
Bienvenue (
se connecter
-
créer un compte
)
Accueil
»
La communauté
»
Open Cellar Home Edition (Windows)
Facebook
Nuage de tags
Open Cellar
Scripts
Etiquette
PPP
iPhone
Livre de cave
Mac
Vista
Synchronisation
Export Excel
vinoXml
usb
sniffer
sauvegarde
importation
impression
chardonnet
palm
statistiques
Linux
Bravo et encore Merci pour ce superbe Soft!
23/05/2008
Répondre
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
Répondre
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
Répondre
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
Répondre
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
- Tous droits réservés - Dernière mise à jour : janvier 2014 |
|
|
Soutenir Open Cellar
|
Contact
|
Crédits