25 sept. 2011

Introduction à la gestion des états


Nous allons aborder dans ce ticket, la gestion des états sur sollo.
Je ne vais pas vous expliquer ici, la conception car cela fera l'objet d'un module ultérieur.


Lorsque vous êtes sur une fiche, quelque soit le pôle, contacts, actions, articles, pièces ou dossiers, vous pouvez éditer un état spécifique ... lié au type .


Le lancement de l'état se fait toujours par le biais du bouton apperçu, en bas à droite de chaque fiche.
Exemple : Action : type courrier : sollo cherche un état qui se nomme E_xxxx#Courrier#


La codification de l'état (nom donné à l'état) est la suivante :
E_ : car nous sommes ici dans le pôle Action (Evènement) - la lettre A étant réservée au pôle Articles.
xxxx : ce que vous voulez, bien souvent on reprend ici le type
puis entre # : le nom du type : ici : courrier.


Imaginons que je veuille faire un état lié à une action de type Intervention.
Cet état devra se nommer E_inter#Intervention#
Puisque je suis dans le pôle Action (Evènement) il faut que mon état commence par E_ et finisse par #Intervention# (le nom du type d'action que je veux imprimer).


Si je veux une fiche Porpsect spécifique, le principe est le même :
Le nom de mon état devra être C_Prosp#Prospect#
Voilà pourquoi lorsque vous êtes sur ue facture : sollo lance un état nommé : P_Facture#Facture



Si vous avez décidé de renommer le pôle Facture en autre chose : par exemple FactureClient - lorsque vous essayerez de lancer l'état, sollo cherchera un état qui se nomme P_xxxx#FactureClient#


Or, si cet état n'exsite pas , sollo vous afiche Etat à définir.


Vous pouvez très facilement copier/coller l'état le plus proche, à savoir P_Facture#Facture# en P_Facture#FactureClient#


ATTENTION : chaque fois que vous supprimez, renommez, dupliquez ou créez un nouvel état, vous devez informer sollo de ces nouveautés. 
Pour cela, allez dans paramètres (sur l'onglet accueil) puis cliquez sur la bouton gestion des états. Rerfermer - refermer les paramètres : vos états sont à jour.


Alors pourquoi doit ont metre deux fois le mot facture sur P_Facture#Facture#
En fait comme expliqué ci-dessous, il s'agit de P_xxx : où xxx est égal à ce que l'on veut.
Mais cela sert à avoir plusieurs états pour le même pôle.


Cas concret :
Vous désirez faire une facture en Français, et une facture en Anglais.
Vous devrez donc faire deux états, l'un avec des étiquettes en Français, l'autre avec des informations en Anglais.
Et donc avoir 2 états différents :


P_FactureFR#Facture#
et
P_FactureENG#Facture# par exemple.


Dans ce cas, sur l'appuis du bouton apperçu en bas à droite, sollo lancera les 2 états l'un après l'autre.
Cela peut servir également si vous voulez des états avec ou sans tête de lettre intégrée.
Ou si vous vouliez avoir un état complémentaire avec les conditions générales de vente par exemple.


Remarque : Pour renommer un état, supprimer, dupliquer ou créer un état de toute pièce, il faut être sous Access.
Donc cette fonctionnalité n'est pas disponible en run-time.
De plus, il faut être sur la fenêtre base de données de sollo.


Si elle n'est pas visible vous pouvez lancer Access seul : puis ouvrir sollo en maintennant la touche SHIFT.
Sous la V4 de sollo, dans Paramètres : il existe désormais un bouton pour afficher la base de données sous Access.



20 sept. 2011

Enregistrez vos filtres de contacts


Les filtres sur contacts peuvent s'enregistrer Pour sauvegarder un filtre, que vous devriez refaire souvent par exemple, vous pouvez vous servir de l'onglet Filtres présent uniquement sur les contacts. Tout d'abords effectuez votre filtre soit via le clic droit, soit par formulaire. Les filtres peuvent se cumuler. Le fonctionnement des filtres est expliqué ici : http://supportsollo.blogspot.com/2011/09/filtrez-vos-informations.html


A - Sauvegarder un filtre : 1) Faites votre filtre. 2) sur l'onglet Filtres - sur une ligne blanche - tapez les libellé de votre filtre (ex : clients de la RP ayant un email) dans la première colone. 3) appuyez sur le bouton Récup -> la clause SQL correspondant à votre filtre s'affiche dans la seconde colonne. 

B - Récupérer un filtre enregistré 1) Ouvrez n'importe quelle fiche contact 2) Cliquez sur l'onglet Filtres
3) Trouvez le filtre approprié - et cliquez sur le bouton Appliquer de la ligne.

-> cela applique le filtre sélectionné.

Pour supprimer le filtre et ré afficher tous les enregistrements appuyez sur l’entonnoir avec la croix rouge au bas du formulaire.

Vous savez toujours le nombre de fiches que vous avez sur la barre d'état - en bas de chaque formulaire.

Si il est mentionné (filtré) à droite- cela veut dire qu'un filtre est actuellement appliqué, et que par conséquent vous n'avez pas toutes les fiches sous les yeux. Pour réafficher tous les enregistrement, faites clic droit dans n'importe quelle zone. (Pas nécessairement celle que vous venez de filtrer) - et choisissez l'option Afficher tous les enregistrements - ou appuyez sur l’entonnoir avec la croix rouge au bas du formulaire.

Remarque : à compter de la V4 de sollo, vous pouvez aussi renseigner le nom d'une requête à exécuter avant l'application du filtre. Tapez simplement le nom de la requ^te sur la seconde ligne blanche, sous la clause SQL du filtre.
A quoi ça sert ? Imaginer une requête qui mette à jour le montant à facturer de chaque client, sur une des zones des fiches contacts. Afin d'appliquer un filtre triant par exemple les clients à facturer par ordre décroissant, il faudra effectuer cette mise à jour de chaque fiche avant d’appliquer le filtre.
Faites vous assister de votre consultant sollo si vous avez de tels besoins.



Filtrez vos informations


Ce qui est expliqué ci-dessous concerne tous les formulaires de sollo.

Nous prendrons comme exemple les fiches contacts - mais le procédé est le même pour les actions, les articles, les pièces, les dossiers... et même tous les formulaires en liste.

Dans cette rubrique vous allez apprndre comment fonctionne le clic droit - Filtrer...
Plus bas vous verrez comment enregistrez vos filtres dans les contacts.

Fonctionnement du clic droit dans un formulaire sollo



Sous Access 2007 et 2010 l'utilisation des filtres via le clic droit est assez limpide.
Ici, l'aide en ligne sur les filtres Access sur le site de Microsoft.

En revanche pour les versions antérieure, voici quelques explicationsVersion sollo sous Access 2000, 2002 et 2003.
Pour filtrer vos fiches (contacts, action, pièces....), l'une des solutions les plus efficaces est l'utilisation du clic droit.Placez-vous dans la zone à filtrer.
Exemple : le code postal des fiches contacts.
Lorsque vous faîtes clic droit dans une zone.
Le menu contextuel ci-dssus apparaît.
3 options sont disponibles

Filtrer par sélection :
-> Filtre les enregistrements (les fiches) qui sont égale à la valeur se trouvant dans la zone.
Si vous êtes sur le code postal, et que celui-ci contient 75001 - en choisissant filtrer par sélection, vous obtiendrez toutes les fiches, et seulement celle-ci, dont le code postal est égal à 75001.

Filtrer hors sélection
-> Filtre les enregistrements (les fiches) qui sont différentes de la valeur se trouvant dans la zone.
Si vous êtes sur le code postal, et que celui-ci contient 75001 - en choisissant filtrer hors sélection, vous obtiendrez toutes les fiches, et seulement celle-ci, dont le code postal est différent à 75001.
Remarque : dans ce cas vous n'obtenez pas les fiches dont la valeur concernée (ici le code postal) est nulle, mais seulement les fiche sur lesquelles la valeur du code postal est rempli et différente de 75001.

Filtrer Pour...
-> Là il n'y a plus de limite. Les critères de filtre seront directement saisi dans la zone Filtrer pour :
Unfois vos critères renseignés : appuyer sur ENTREE pour appliquer le filtre.

Les critères diffèrent en fonction du type de zone dans laquelle vous vous trouvez :

Zones de type Texte :
Imaginons que l'on soit dans la zone ville :

Critère : PARIS -> filtre les fiche dont la zone est égale à PARIS
Là les Paris cedex ... ne seront pas pris en compte - puisque ces fiches ne contiennent pas le mot PARIS exactement.

Critère : PARIS* -> Filtre les fiches qui commencent par PARIS - ici les Paris cedex... seront pris en compte.

Critère : *cedex : Toutes les fiches dont la zone spécifiée (ici la ville) finit par cedex - ici les Paris cedex 12 ne seront pas pris en compte.

Critère *cedex* -> Toutes les fiches dont la zone spécifiée (ici la ville) contient le mot cedex.

Il est possible d'indiquer des OU.
Si on voulait toutes les fiches de la région parisienne :
Clic droit dans le code postal (qui est une Zone texte)
Filtrer Pour...
75* ou 77* ou 78* ou 91* ou 92* ou 93* ou 94* ou 95*
= à toutes les fiches dont le code postal commence par 75, 77, 78...

Enfin, si vous voulez l'inverse - toute les fiches sauf la région parisienne :
<>75* ET <>77* et <>78*....
Ici <>75* signifie différent de 75* soit ne commence pas par 75

Zone de type Date :
Les critères sont obligatoirement des dates :

Ex 1 : 01/01/2009 -> filtre toutes les fiches dont la zone date spécifiée (celle dans laquelle vous faite votre clic droit) est égale au 01/01/2009
Remarque : inutile de taper /2009 si c'est l'année en cours : 01/01 suffit pour spécifier le premier janvier de l'année en cours.

Ex 2 : >=01/01/2009 -> filtre les fiche dont la date est supérieure ou égale au 1er janvier 2009.

Ex 3 : <01/01/2009 -> filtre les fiche dont la date est inférieure strictement au 1er janvier 2009.

Ex 4 : Entre 01/01/2009 et 31/03/2009 : filtre les fiches dont la date est comprise entre le 1er janvier 2009 et le 31/03/2009 inclus.

Zone de type Nombre :
Les critères sont obligatoirement des nombres :

Ex 1 : 100 -> filtre toutes les fiches dont la zone numérique spécifiée (celle dans laquelle vous faite votre clic droit) est égale au 100.

Ex 2 : >=100 -> filtre les fiche dont la valeur numérique est supérieure ou égale à 100.

Ex 3 : <100 -> filtre les fiche dont la valeur numérique est inférieure strictement à 100.
Remarque : les fiches dont la valeur est nulle (Attention nulle ne veut pas dire 0 zéro - mais vide) ne seront pas prises en compte. Celle dont la valeur est égale à 0 zéro seront prises en compte.

Ex 4 : Entre 100 et 200 : filtre les fiches dont la valeur numérique est comprise entre 100 et 200 inclus.

Champs Booléen - Oui/Non - Case à cochée.
Ici on se sert exclusivement des rubriques Par sélection et Hors sélection.
Si vous êtes sur une fiche où la case en question (celle sur laquelle vous désirez faire un filtre - et dans la quelle vous avez fait votre clic droit) est cochée :
En prenant Par sélection : vous aurez toutes les fiches cochées.
En prenant Hors Sélection : vous aurez toutes les fiches qui ne sont pas cochées.
A L'inverse :
Si vous êtes sur une fiche où la case en question (celle sur laquelle vous désirez faire un filtre - et dans la quelle vous avez fait votre clic droit) n'est pas cochée :
En prenant Par sélection : vous aurez toutes les fiches qui ne sont pas cochées.
En prenant Hors Sélection : vous aurez toutes les fiches qui sont cochées.

Remarques importantes :

Les filtres peuvent se cumuler

Lorsque vous avez fait un filtre (par exemple les fiches contacts de la région parisienne - voir critères plus haut) - vous pouvez cumuler ce filtre avec un autre.
Refaite un clic droit dans une nouvelle zone et remettez de nouveaux critères.
Par exemple les fiches contacts qui on une adresse email.
Placez vous dans le zone email : clic droit ... tri croissant
Vous obtiendrez la première fiche qui n'a pas d'email.
Si il y a un email, cela signifie qu'aucune fiche ne contient pas d'email.
Si vous êtes bien sur une fiche dont l'email est vide, fait clic droit dessus, et choisissez Hors sélection (ce qui veut dire toutes les fiches qui ne sont pas égale à celle sur laquelle je suis - donc celles qui ne sont pas vides - celles qui ont un email).

12 sept. 2011

Paramétrez vos saisies


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 :




  1. Cliquer sur le bouton =... >> le générateur de requête s'ouvre.
  2. 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.
  3. Créez votre requête en ajoutant les tables nécessaires, en complétant les critères et les tris.
  4. 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.
  5. Fermez la requête - et répondez OUI à l'enregistrement des modifications de  celle-ci.
  6. 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.