Introduction : Notions élémentaires
Une des différences majeure entre sollo et les logiciels standard réside incontestablement par sa capacité à vous offrir un paramétrage de votre logiciel en fonction de vos besoins réels, de votre métier, de vos habitudes.
C'est donc VOUS qui pouvez à tout moment gérer une nouvelle information en fonction de votre activité. Et l'idée fondamentale de sollo est de vous permettre de le faire seul, sans compétence particulière de développement. L'idée est également de notre côté (les développeurs) de ne pas avoir à recréer, à chaque nouveau besoin, un nouveau fichier.
De plus, ces paramétrages sont contenus dans la base de travail. Il ne souffrions donc d'aucun changement dans la cas d'une mise à jour de votre logiciel sollo. En outres, si vous avez plusieurs dossier (plusieurs bases de travail) , chacune d'elle aura son propore paramétrages, ces propres champs, ces propres listes déroulantes, champs calculés...
Vous allez donc pouvoir créer (et/ou modifier) vous même vos propres fichiers, appeler type dans sollo.
Ces types s'articulent autours des 5 pôles de sollo : Contacts - Actions - Articles - Pièces et Dossier.
Avant de créer un nouveau type, il suffit donc de savoir dans quel pôle il est plus judicieux de le mettre. Quelques fois, ce choix n'est pas simple. Dans ce cas n'hésitez pas à demander conseil à votre consultant sollo.
En effet, si nous prenons le cas d'un centre de formation. Il sera évident de paramétrer les Clients, les Formateurs, les Elèves... dans Contacts. Mais la gestion d'une convention de formation, peut être aussi bien matérialisée dans une Action, une pièce ou un dossier. Tout dépend du niveau d'informations dont on aura besoin ensuite.
Si il s'agit juste d'identifier le client, le montant et la date de la convention, le pôle Action est sans doute le plus approprié. Mais si il s'agit de suivre les inscription, les élèves, la facturation, les acomptes, les planning liées... alors sans doute que les conventions devront être enregistrées dans les dossiers de sollo.
Prenons le cas d'un mémo : une fiche dont on voudrait seulement enregistrer un élément que l'on ne veut pas oublier. Si il s'agit de souvenir de ce que l'on s'ait dit au téléphone avec un client, sans doute qu'une action est la plus appropriée. Car les notions de Qui, Quand et sont importantes. Mais si il s'agit des identifiants et mot de passe d'accès à vôtre site préféré de vente en ligne, alors ce sera plus judicieux de créer un type mémo dans Articles. Ceci dit, les deux notions étant juxtaposables, rien n'empêche de créer un type Mémo dans le pôle Action et un autre type Mémo dans le pôle Articles.
Le paramétrage de ces types vous permet en outre, de définir les renseignements nécessaires, en fonction de chacun d'entre eux. Vous allez définir les questions (les libellés) qui permettent de qualifier le type en question. ce paramétrage se fait par type de zone de réponse. des réponses de type texte, numérique, date, Oui/Non appelé Booléenne, et Mémo.
Et là encore, le choix peut s'avérer difficile. Car comme dans tous logiciels, il y a toujours plusieurs façons d'arriver au même résultat. Si nous prenons l'exemple d'une agence de voyage, qui doit renseigner le mode de transport choisi par son client : Train, Voiture, Avion ou Autre. Il sera possible de définir 4 case à cocher (zones de type Oui/Non) pour chacun des options, ou de créer une liste déroulante contenant les 4 options. Sachez au passage, que dans ce cas, c'est la 2eme solution qui de loin est la meilleure. Car elle permettre de n'utiliser qu'un seul champs au lieu de 4, de rajouter très simplement une ou plusieurs options de plus, et d'effectuer des filtres beaucoup plus facilement.
Conclusion : Encore une fois, n'hésitez pas à demander conseil si vous hésiter sur le paramétrage de vos types.
Mode de fonctionnement
Pour chacun des types de sollo, il est possible de paramétrer plus précisément la saisie.
Pour ouvrir le paramétrage, vous pouvez passer par le bouton paramètre sur l'accueil de sollo, puis le bouton paramétrage rapide, puise double-clique sur le type à modifier.
C'est ici, que vous pouvez également rajouter de nouveaux types de contacts, d'actions, d'articles, de pièces ou de dossiers.
Vous pouvez avoir autant de types sur vous voulez. Et pour chacun d'entre eux, définir les intitulés des zones libres, des listes déroulantes, des formules de calcul...
Remarque : Vous pouvez également entrer dans le paramétrage d'un type en double-cliquant dessus sur n'importe quelle fiche : EX : une fiche Contact, de type Client >> double-cliquez sur le type : le mot Client en à gauche du formulaire des contacts.
Paramétrez vos intitulés, listes déroulantes et formules de calculs.
Ce paramétrage s'effectue zone par zone, en fonction de son type :
Oui/Non - Texte - Date - Numérique - Mémo
En fonction du pôle (Contacts, Action, Pièces, Articles ou Dossiers) des éléments complémentaires peuvent être renseignés.
Pour chaque fiche de sollo, vous disposez de 9 zones par type de réponses Oui/Non - Texte - Date - Numérique et 3 Mémos.
Paramètre des éléments Booléens - Oui/Non :
Vous pouvez paramétrer seulement l'intitulé.
Paramètre des éléments Texte :
Vous pouvez paramétrer l'intitulé, une valeur par défaut et une liste déroulante.
Paramétrage d'une liste déroulante :
Les listes déroulante peuvent être de 2 types :
- Soit une liste de valeurs (séparées par des point-virgules ";")
Ex : Marié;Célibataire;Union Libre;PACS
- Soit une clause SQL : L'idée est de faire évoluer la liste déroulante en fonction des informations contenue dans une table de sollo. Imaginons que vous souhaitiez faire une liste déroulante des Contacts de type Fournisseur. Chaque fois que vous rajoutez un nouveau fouyrnisseur, il faudrait que cette liste déroulante le contienne.
Pour cela il faut que le contenu de la liste déroulante contienne la clause SQL qui retourne les code des Contacts de Type Fournisseur.
Cette clause ressemble à ça : SELECT DISTINCTROW C.Ccod, C.Ctyp FROM C WHERE (((C.Ctyp)="Fournisseur")) ORDER BY C.Ccod;
Evidemment, il est plus simple d'utiliser le générateur de requête d'Access.
Il est accessible sur le bouton =... (à droite)
Procédure :
-
Cliquer sur le bouton =... >> le générateur de requête s'ouvre.
Compléter ou supprimer toutes les tables se trouvant sur la requête (c'est le dernière requête paramétrée qui s'affiche par défaut.
Créez votre requête en ajoutant les tables nécessaires, en complétant les critères et les tris.
Attention : seule une zone sera disponible dans votre liste déroulante : la première de votre requête - les autres colonnes ne peuvent servir qu'à effectuer des critères de sélection et/ou de tri.
Fermez la requête - et répondez OUI à l'enregistrement des modifications de celle-ci.
Appuyer sur le bouton complètement à droite >>> la clause SQL de la requête s'affiche automatiquement dans la zone et la case à cocher se coche (cette case sert à stipuler à sollo qu'il s'agit bien d'une clause SQL et non d'une liste de valeur pour la liste déroulante en question).
Astuce !!! Compliquons un peut les choses.
Nous venons de voir une liste déroulante simple, basée sur une table avec un critère.
Mais imaginons le cas suivant : Sur mes fiche Articles, mon premier champs est la Famille et mon second champs est la Sous-famille. Et bine sûr, j'aimerais avoir une liste déroulante sur le premier champs une liste de famille et dans le second une liste de sous-famille, MAIS qui évolue en fonction de la famille choisie. C'est à dire qu'il existe des sous-familles par familles.
Exemple :
Famille
|
Sous-famille
|
Montres
|
Tag-Hauer
|
|
Rolex
|
|
Festina
|
|
Casio
|
Collier
|
Or
|
|
Argent
|
|
Or et Argent
|
Bagues
|
Or
|
|
Argent
|
|
Or et Argent
|
|
...
|
Si vous n'avez que peu de famille, rien n'empêche de faire une liste déroulante de liste de valeurs. Mais si vous ne voulez pas retourner dans le paramétrage de votre liste, chaque fois qu'i y a une nouvelle famille, placez la requête suivante :
Placez la table A (Articles)
Faite un regroupement (signe Sigma sur la barre d'outils)
Placez At1 (premier champs texte des Articles) - trier par ordre croissant.
Placez Atyp et votre critère "Produit" pour n'avoir que les Articles de type produit
La clause est : SELECT DISTINCTROW A.At1, A.Atyp FROM A GROUP BY A.At1, A.Atyp HAVING (((A.Atyp)="Produit")) ORDER BY A.At1;
L'intérêt ici, est que chaque fois que vous aurez à rajouter une nouvelle famille, taper simplement son nom la première fois dans la fiche, et elle sera présente dans la liste déroulante la prochaine fois.
En ce qui concerne la sous-famille, l'idée est de rajouter un critère pour qu'il n'y ait que les sous-famille de la famille choisie au dessus.
LA première colonne contient les valeurs existantes dans la zone AT2 (paramétrée comme étant la sous-famille)
La seconde stipule que l'on ne désire que les fiches dont AT1 (la famille) est égale au contenu de la fiche actuelle (forma!A!At1)
La 3em colonne stipule que l'on ne désire que les Articles de type "Produit"
La claiuse SQL est la suivante : "SELECT DISTINCTROW A.At2 FROM A WHERE (((A.At1)=forms!A!AT1) And ((A.Atyp)="Produit")) GROUP BY A.At2 ORDER BY A.At2, A.At1; "
De la ,même façon, si vous avez une nouvelle sous-famille pour une famille, il suffit de la renseigner une première fois sur une fiche, elle sera présente la prochaine fois dans la liste déroulante.
Paramètre des éléments Numériques :
Vous pouvez paramétrer l'intitulé, une valeur par défaut et une formules de calcul.
En ce qui concernant la valeur par défaut, prenez soin si vous entrez une valeur décimale de de respecter le sigle décimale : point ou virgule en fonction de votre paramétrage Windows.
Paramétrage d'une formule de calcul :
Ce paramétrage s'effectue ne fonction d'une syntaxe particulière, propre à sollo.
Au moment de la validation de la fiche, la formule sera interprétée en Visual Basic (le langage d'Access, donc de sollo) pour être appliquée.
Si votre formule n'est pas correcte, vous obtiendrez au mieux aucun résultat, au pire un message d'erreur. Aussi, n'hésitez pas à demander conseil à votre consultant sollo pour paramétrer vos formules.
Les champs calculés ne peuvent pas être modifiés à la saisie, et apparaissent en rouge sur les formulaires.
Il faut déjà connaître de nom des champs. cela dépend sur quel type vous travaillez.
Les champs numériques sont au nombre de 9 par type.
Contacts
|
Actions
|
Articles
|
Pièces
|
Lignes de pièces
|
Dossiers
|
Cn1
|
En1
|
An1
|
Pn1
|
Pln1
|
Dn1
|
Cn2
|
En2
|
An2
|
Pn2
|
Pln2
|
Dn2
|
Cn3
|
En3
|
An3
|
Pn3
|
Pln3
|
Dn3
|
...
|
...
|
...
|
...
|
...
|
...
|
Cn9
|
En9
|
An9
|
Pn9
|
Pln9
|
Dn9
|
Prenons l'exemple d'un Article de Type produit :
An1 contient le prix d'achat
An2 contient le prix de vente HT
An3 contient le taux de TVA
An4 contient le prix de vente TTC - égal au prix de vente HT multiplier par 1 plus le taux de TVA
An5 le taux de marge
Pour ne pas avoir à saisir et calculer à la main le montant TTC, nous pouvons placer une formule de calcul sur AN4:
La syntaxe sera la suivante : {An2}*(1+{An3})
Les zones numériques à utiliser dans la formule doivent figurer entre accolades "{xxx}"
Pour An5 : {An1}/{An2}
Vous pouvez arrondir à 2 décimales le résultat en plaçant la formule comme ceci : Arrondi2({An1}/{an2})
Si An2 a des risques d'être nul, et que dans ce cas, vous désirez retourner 0, il vous faudra utiliser la fonction VraiFaux qui en Visual Basic se nomme iif.
Syntaxe : iif(condition , si OUI , si NON)
Pour le cas ci-dessus : iif({An2}=0 , 0 , Arrondi2({An1}/{An2}))
Prenons maintenant le cas d'une Action de type intervention.
Ici nous souhaitons calculer le montant à facturer par défaut, en fonctions d'une durée saisie dans la fiche action et d'un taux horaire saisi dans la fiche de l'utilisateur (du collaborateur).
Primo, nous avons saisi un utilisateur (par exemple Arnaud COLAS : code AC) - et un Contacts de type Collaborateur et dont la code est également AC
Dans l'action :
En1 = montant facturé
En2 = la durée : la seule donnée saisie
En3 = le taux horaire compris dans la fiche C (contact) dont le code (Ccod) est égal à l'utilisateur de l'Action (Eusr)
Alors :
En2: {[En2]*dlookup("[CN1]","C","[Ccod]='" & {[Eusr] & "'")
En3 : dlookup("[CN1]","C","[Ccod]='" & {Eusr} & "'")
Explication de Fonction Dlookup.
La fonction DLookup recherche la valeur d'un champ particulier qui fait partie d'un jeu d'enregistrements défini (un domaine).
La fonction DLookup vous permet d'afficher la valeur d'un champ qui n'appartient pas à la source d'enregistrements sur laquelle le formulaire ou l'état est fondé. Ici nous allons chercher la valeur de Cn1 dans la une fiche C dont le code (Ccod) est égale à Eusr (l'utilisateur de l'action).
Syntaxe : DLookup(expr, domaine, [critère])
Les arguments de la fonction DLookup sont les suivants :
Argument
|
Description
|
expr
|
Expression qui identifie le champ dont vous souhaitez renvoyer la valeur. Il peut s'agir d'une expression chaîne identifiant un champ dans une table ou une requête, ou d'une expression qui effectue un calcul sur les données de ce champ. Dans expr, vous pouvez inclure le nom d'un champ de table, un contrôle de formulaire, une constante ou une fonction. Si expr inclut une fonction, elle peut être intrinsèque ou définie par l'utilisateur, mais ne peut pas être une autre fonction de regroupement Domaine ou SQL.
|
domaine
|
Expression chaîne identifiant les enregistrements qui constituent le domaine. Il peut s'agir d'un nom de table ou d'un nom de requête qui ne requiert aucun paramètre.
|
critère
|
Expression chaîne facultative servant à limiter la plage des données sur laquelle porte la fonction DLookup. Par exemple, critère est souvent équivalent à la clause WHERE d'une expression SQL sans le mot WHERE. En cas d'omission de critère, la fonction DLookup évalue expr par rapport à l'intégralité du domaine. Chaque champ compris dans critère doit aussi l'être dans domaine, sans quoi la fonction DLookup renvoie la valeurNull.
|
Remarques
La fonction DLookup renvoie une seule valeur de champ à partir de l'information spécifiée dans critère. L'argument critère est facultatif, mais si vous ne lui associez pas de valeur, la fonction DLookup renvoie simplement une valeur aléatoire dans le domaine.
Si aucun enregistrement ne satisfait à critère ou si domaine ne contient pas d'enregistrement, la fonction DLookup renvoie la valeur Null.
Si plusieurs enregistrements correspondent au critère, la fonction DLookup renvoie la valeur du champ de la première occurrence. Il est recommandé de choisir un critère qui garantira l'unicité de la valeur de champ renvoyée par la fonctionDLookup. Vous pouvez utiliser une valeur de clé primaire pour ce critère.
Que vous utilisiez la fonction DLookup dans une macro, un module, une expression de requête ou un contrôle calculé, construisez l'argument critère avec soin pour en garantir l'évaluation correcte.
Vous pouvez utiliser la fonction DLookup pour spécifier des critères dans la ligne Critères d'une requête, au sein d'une expression de champ calculé dans une requête, ou dans la ligne Mise à jour d'une requête de mise à jour.
Vous pouvez aussi utiliser la fonction DLookup dans une expression de contrôle calculé d'un formulaire ou d'un état, si le champ à afficher ne fait pas partie de la source d'enregistrements sur laquelle le formulaire ou l'état est fondé.
La fonction Dmax à la même syntaxe que Dlookup et permet de retourner la valeur maximale d'un domaine.
Exemple si nous voulions rechercher le dernier numéro de facture.
Dmax("[Pnum]","P","[Ptyp]='facture'")
Ici nous avons mis la valeur à rechercher en dur : facture
Dans le cas précédent, nous voulions aller chercher la valeur qui se trouve dans une zone du formulaire actif : Eusr.
Remarque : La syntaxe de Dlookup n'est pas toujours simple
Suivez bien ...
Notez que facture est entre quotes : 'facture', et que l'ensemble du critère doit toujours être placé être guillemets. Si le critère de recherche du domaine est basé sur un champs texte, la valeur recherchée devra être placée entre quote - ce n'est pas le cas pour les valeur numériques - alors qu'une date devra se trouver entre #.
C'est pour cela que le critère était : "[Ccod]='" & {Eusr} & "'"
Car ce que l'on veut c'est : "[Ccod]='AC'"
Si je mets des espaces pour être plus clair cela donne :
"[Ccod] = ' " & {Eusr} & " ' "
les signes & permettent de concaténer la chaine caractères pour au final obtenir ce que l'on veut :
un guillemet + le champs à rechercher (entre crochet) + le signe égal + une quote + la valeur du champs recherché + une quote + un guillemet
Or AC est contenu dans la zone Eusr - qui elle placée entre accolades car il s'agit d'un champs sollo.
On aurait pu mettre à la place de {Eusr} : Forms!E!Eusr
Mais dans ce cas, le calcul de la zone n'aurait pu s'effectuer que sur le formulaire E (Action) et non dans les formulaires de liste d'action, ou de planning par exemple.
A contrario des zones mises entre accolades, qui permet au dernier moment d'interpréter le nom du formulaire ou du sous-formulaire sur lequel on se trouve.