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
désactiver la gestion d'emplacements?
23/09/2007
Reply
désactiver la gestion d'emplacements?
ramus
13 posts
Bonjour,
grâce à l'importation csv j'ai réussi à importer l'essentiel de ma cave dans Open Cellar.
Pb: bien que les nombres de bouteilles achetées et consommées ait été correctement importés, le total de bouteilles restantes affiche toujours 0. Je soupçonne que c'est parce que mes bouteilles ne sont pas placées dans un emplacement.
Or je n'ai aucune envie de placer à la souris chacune de mes 600 bouteilles dans des petiites cases rondes! (entre nous je ne sais pas qui ce genre de jeu peut amuser ;-)
Peut-on désactiver la gestion des emplacements, et avoir le nombre de bouteilles = nb acheté - nb consommé tout simplement?
Accessoirement, je ne suis pas contre un champ "emplacement", mais tout ce qui m'importe c'est de savoir si ma bouteille est dans la cave ou dans le frigo (C ou F). J'aurais bien importé un tel champ mais ce n'est pas dispo en importation csv.
cordialement,
Franck
23/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Administrateur
3099 posts
Bonsoir,
Si vous ne souhaitez pas gérér visuellement vos bouteilles c'est aussi possible, dans ce cas et sur chaque fiche vin allez sous l'onglet "Achats-consos" puis cliquez sur la case "Gérer manuellement les bouteilles pour ce vin" dans la zone de saisie tapez le nombre de bouteilles.
Si ca vous interesse (et je pense que oui !) je peux vous envoyer un script qui vous fera le tout automatiquement.
Matthieu
23/09/2007
Reply
Re : désactiver la gestion d'emplacements?
ramus
13 posts
Pour le script, bien volontiers car j'ai 178 vins à traiter. Merci.
Ceci dit, il me semble avoir compris que dans la gestion manuelle des vins, on entre manuellement le nombre de bouteilles restantes, et donc qu'il n'y a pas de mise à jour automatique du nombre de bouteilles après chaque dégustation. Si c'est bien cela, je vais regretter cette fonction. N'est-il donc pas possible de calculer le nombre de bouteilles sans passer par les emplacements?
cordialement,
Franck
24/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Administrateur
3099 posts
Bonsoir,
Je vous joins le script demandé :
Pour ouvrir l'editeur de scripts, pointez sur le menu Préférences -> Editeur de scripts
// Sept 2007 // Active le mode de gestion manuelle if(App.ActiveCellar == null) { return; } ObjectCollection oc = App.ActiveCellar.GetCollection((ushort)ObjectType.Wine); for (int i = 0; i < oc.Count; i++) { ushort bottles = 0; Wine wine = (Wine)oc[i]; wine.ManualManagement = true; // Fiches achats for (int j = 0; j < wine.Purchases.Count; j++) { PurchaseSales psales = (PurchaseSales)wine.Purchases[j]; bottles += Convert.ToUInt16((int)psales.PurchaseBottles - (int)psales.ConsumeBottles); } wine.Bottles = bottles; wine.Save(); } MessageBox.Show("Terminé !");
Matthieu
24/09/2007
Reply
Re : désactiver la gestion d'emplacements?
ramus
13 posts
Formidable, merci!
Franck
24/09/2007
Reply
pour Matthieu
Thewolf
99 posts
Bonsoir.
Dans l'attente de la possibilité d'importation des emplacements, j'avais essayé de faire un script équivalent en m'inspirant des différents scripts que je commence à collectionner ...
Par manque de documentation (j'ai l'impression de me répéter !), je n'avais fait que la partie "achats " car je n'avais pas trouvé la variable "ConsumeBottles". Cependant, cela ne marchait pas car j'avais écrit, en reprenant le nom de vos variables, "int bottles" au lieu de "ushort bottles". Mes connaissance en programmation étant plutôt orientées Pascal(Delphi), je ne connaissais même pas le terme "ushort" !...
J'ai donc jeté mon œuvre inachevée pour la remplacer par le script que vous proposez et là, surprise !, cela ne marche pas. J'ai le message (que je connais maintenant trop bien) "impossible d'exécuter le script" !!!
Après divers tâtonnements, j'ai remplacé :
bottles += Convert.ToUInt16((int)psales.PurchaseBottles - (int)psales.ConsumeBottles);
à la syntaxe qui m'échappe quelque peu ...
par :
bottles +=psales.PurchaseBottles;
bottles -=psales.ConsumeBottles;
et là cela marche parfaitement ! Va savoir pourquoi ...
Par nature, j'aime comprendre de A à Z ce que je fais, c'est pourquoi je trouve cette approche par tâtonnements particulièrement frustrante.
Alors ayez pitié! Dites-moi comment je peux surmonter ces difficultés ...
Christian
24/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Administrateur
3099 posts
Pour vous aider au debuggage j'aurai du vous préciser que lorsqu'un script ne compile pas un fichier script.log est crée vous donnant accés aux erreurs rencontrées.
Le type ushort est un entier 16bits non signé (0 -> 65535)
Sous le framework les opérations (* - %...) renvoient par défaut un int et le ushort ne supportent pas les conversions implicitent d'ou le cast (type)valeur
Matthieu
24/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Thewolf
99 posts
Va pour le script.log, cela m'aidera peut-être ...
Cependant 2 petites questions :
1) Comment pouvais-je savoir que wine.Bottles (variable interne à OC) demande un ushort dans l'affectation: "wine.Bottles = bottles;"
2) J'ai (à peu près) compris votre explication mais alors, comment se fait-il que le script que vous avez indiqué (avec le typecasting) ne marche pas (du moins sur mon ordi) alors que ma version "allégée", à savoir :
bottles +=psales.PurchaseBottles;
bottles -=psales.ConsumeBottles;
(sans typecasting)
fonctionne parfaitement. Là, je ne suis plus ...
24/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Thewolf
99 posts
Pour info, contenu de script/log :
24/09/2007 23:49:20 -> Erreur :: Pile
24/09/2007 23:49:20 -> System.OverflowException: La valeur était trop grande ou trop petite pour un UInt16.
at System.Convert.ToUInt16(Int32 value)
at OpenCellar.Application.UserScript.Run(IApplication App)
at OpenCellar.Application.ScriptHost.Run()
27/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Administrateur
3099 posts
Bonjour,
Lorsque vous faites :
bottles +=psales.PurchaseBottles;
bottles -=psales.ConsumeBottles;
Ca fonctionne pafaitement car vous additionnez des byte & a un ushort.
Par contre ceci :
bottles += psales.PurchaseBottles - psales.ConsumeBottles;
ne fonctionnera pas car toutes les opérations mathématiques renvoient des int. Les int (ou Int32) ayant une plus grande capacité que les ushort le framework refuse la conversion implicite
d'ou le :
bottles += Convert.ToUInt16(psales.PurchaseBottles - psales.ConsumeBottles);
Note : le cast en (int) était inutile.
Matthieu
27/09/2007
Reply
Re : désactiver la gestion d'emplacements?
Thewolf
99 posts
Bonjour.
J'ai sasi la subtilité de la chose. En revanche, je vous confirme que le script que vous proposez ne fonctionne pas et je pense en avoir trouvé la raison :
supposons un vin pour lequel je fais tout d'abord un achat de 3 puis une conso de 1. Lorsque le script traite la fiche conso, il cherche à convertir -1 en ushort d'où le plantage, ushort allant de 0 à 65535...
La méthode que j'ai indiquée (avec 2 instructions) fonctionne bien que théoriquement invalide.
Dans l'exemple précité, le script, commençant par la fiche conso va ajouter successivement les valeurs suivantes : 0,-1,3,0 et la variable bottles prendra successivement les valeurs suivantes : 0, 65535 (!!!), 2, 2.
Je pense qu'une méthode plus correcte serait de faire les calculs en int et de faire la conversion en ushort au moment où l'on insère la valeur dans wine.Bottle.
Ce qui donne :
int bottles = 0;
Wine wine = (Wine)oc[i];
wine.ManualManagement = true;
// Fiches achats
for (int j = 0; j < wine.Purchases.Count; j++)
{
PurchaseSales psales = (PurchaseSales)wine.Purchases[j];
bottles += psales.PurchaseBottles - psales.ConsumeBottles;
}
wine.Bottles = (ushort)bottles;
wine.Save();
© 2006-2014
Matthieu DUCROCQ
- All rights reserved - Last update: january 2014 |
|
Support Open Cellar
|
Contact
|
About