Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 12h28   #1
Candidat au titre de Membre du Club
 
Homme Julien
Ingénieur qualité méthodes
Inscription : juillet 2009
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : Chine

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Distribution

Informations forums :
Inscription : juillet 2009
Messages : 53
Points : 14
Points : 14
Par défaut Critères sur champs pour les formulaires

Bonjour, voici la configuration de ma table :

Relationship_critere champ.JPG

Je vais décrire les realtions en 2 parties :

1/
- Commandes (T_PO)
- Envois (T_Shipments)
- Items (T_Items)

Commandes 1-----oo Envois 1-----oo Produits

2/
- Catégories (T_Categories)
- Sections (T_Sections)
- Famille de produit (T_ProductFamilies
- Produits (T_Products)

Categories 1-----oo Sections 1-----oo Product Families 1-----oo Products


Ces 2 parties sont reliées par les tables "Items" et "Products"
Products 1-----oo Items


La 1ère partie concerne l'insertion des commandes.
J'ai créé un formulaire très simple basé sur "Commande" qui contient un sous formulaire (datasheet) "Envois" qui lui même contient un sous formulaire (datasheet) "Items". Ce qui nous donne :
- Commande : formulaire
- Envois : sous-formulaire
- Produits : sous sous-formulaire

La 2ème partie concerne la création de chaque produit dans la base de données.

Pour enregistrer des commandes, les utilisateurs doivent sélectionner le produit correspondant, si le produit n'existe pas, l'administrateur devra le créer ...

Ma base de données est splittées en 2 parties : les data d'un côté et les formulaires/requêtes de l'autre.
Notre fichier "data" est sur notre serveur et chaque utilisateurs possède son propre fichier "formulaires/requêtes'' sur son PC.

En fonction de chaque utilisateurs j'aimerai donner des accès spécifiques. Pour simplifier il y a un utilisateur par Catégorie. Je voudrais que lorsque ces utilisateurs enregistrent des commandes, ils ne puissent voir que celles qui appartiennent à leur catégorie.

Le problème est qu'entre le formulaire "Commande" (T_PO + T_Shipments + T_items) et la table "Categories" il y a beaucoup "d'obstacles".

T_PO 1-----oo T_Shipments 1-----oo T_items oo-----1 Products oo-----1 Product Families oo-----1 Sections oo-----1 Categories

J'ai essayé plusieurs méthodes mais sans succès, en fait j'aimerai surtout savoir si ce que je souhaite faire est réalisable.


Merci !
btks59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 17h39   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 472
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 472
Points : 7 557
Points : 7 557
Comment sais-tu qu'un utilisateur est d'une catégorie donnée ?

Comment sais-tu qu'une commande est d'une catégorie donnée ? En fonction des produits qu'elle contient ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 18h34   #3
Candidat au titre de Membre du Club
 
Homme Julien
Ingénieur qualité méthodes
Inscription : juillet 2009
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : Chine

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Distribution

Informations forums :
Inscription : juillet 2009
Messages : 53
Points : 14
Points : 14
Citation:
Envoyé par marot_r Voir le message
Comment sais-tu qu'un utilisateur est d'une catégorie donnée ?
J'ai une table "employés" où chaque personne est lié à une catégorie mais n'ayant pas de système d'authentification personnalisé ça ne servira pas je pense. Je crois que mettre un système d'authentification personnalisé avec mot de passe sur Access est assez compliqué non ?
Niveau sécurité ma base n'est pas terrible, j'ai juste un mot de passe à l'ouverture (un unique mot de passe ...)

Ce que je souhaitais c'est créer un fichier ACCESS "interface" personnalisé pour chaque type d'utilisateur. C'est long et laborieux c'est vrai mais peut être le plus simple et plus rapide à mettre en place.

Citation:
Envoyé par marot_r Voir le message
Comment sais-tu qu'une commande est d'une catégorie donnée ? En fonction des produits qu'elle contient ?
Exactement. C'est la "2ème partie" de la base que j'ai décrit.
Les tables "catégories", "sections" et "product families" sont des listes en fait que moi seul peut modifier.
Chaque section est déjà liée à une catégorie. Et chaque famille de produit à une section. Donc les familles de produits sont liés à la catégorie par la section.

Les utilisateurs renseignent donc d'abord dans la base les références de nos produits. Pour cela ils le vont dans le formulaire "Produits" où ils mettent la référence et sélectionnent la famille de produit.
La référence produit sera donc liées à une catégorie.

Ensuite pour chaque commande, les utilisateurs lancent le formulaire "Commande". Pour simplifier ils renseignent le numéro de commande ... ensuite dans le sous formulaire "Envois", le type d'envoi, container ... et dans le sous sous formulaire "Items", ils sélectionnent dans la liste le ou les produits dans chaque envoi et renseignent les quantité, prix, ...


Honnêtement je pense qu'un système d'authentification par type d'utilisateur serait préférable mais je n'ai aucune connaissance, je ne sais pas si c'est faisable et surtout si c'est facile ou non à mettre en place.
btks59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 19h07   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 472
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 472
Points : 7 557
Points : 7 557
Citation:
Honnêtement je pense qu'un système d'authentification par type d'utilisateur serait préférable mais je n'ai aucune connaissance, je ne sais pas si c'est faisable et surtout si c'est facile ou non à mettre en place.
Si tu n'utilises pas la sécurité d'Access, et que tu n'as pas besoin d'un niveau de sécurité très élevé (en gros résiste à un usage courant mais pas à un utilisateur averti) cela n'est pas très complex.

On peut facilement récupérer l'identifiant de l'utilisateur sur le réseau, c'est une seule instruction (user=environ$("UserName")). Et faire un simple écran de connexion est très facile aussi.

Après, on peut ainsi facilement définir ce qu'on va afficher ou pas.

Ce que je n'arrive pas a saisir c'est à quel moment tu sais si une commande est d'une catégorie ou d'une autre. Après il suffit de ne présenter que les éléments qui sont dans la catégorie voulue, avec une requête c'est assez simple.

L'interdiction de voir les commandes des autres catégories est-elle de niveau légale ou d'affaire (du genre tu as une amende ou/et un procès si quelqu'un le sait) ou est-elle de niveau simplement pratique pour ne pas surcharger l'utilisateur d'info qui ne lui sont pas utiles ?

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 04h54   #5
Candidat au titre de Membre du Club
 
Homme Julien
Ingénieur qualité méthodes
Inscription : juillet 2009
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : Chine

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Distribution

Informations forums :
Inscription : juillet 2009
Messages : 53
Points : 14
Points : 14
Citation:
Envoyé par marot_r Voir le message
Si tu n'utilises pas la sécurité d'Access, et que tu n'as pas besoin d'un niveau de sécurité très élevé (en gros résiste à un usage courant mais pas à un utilisateur averti) cela n'est pas très complex.
Les utilisateurs ne sont pas avertis, le gros problème c'est que parfois quand ils ne savent pas ils touchent un peu à tout et supprime des enregistrements sans s'en rendre compte.

Citation:
Envoyé par marot_r Voir le message
On peut facilement récupérer l'identifiant de l'utilisateur sur le réseau, c'est une seule instruction (user=environ$("UserName")). Et faire un simple écran de connexion est très facile aussi.
Tu veux dire qu'on peut lier Access à notre serveur/domaine ?
En effet dans mon entreprise les utilisateurs se connectent sur le réseau à l'aide d'un identifiant et d'un mot de passe.
Par contre il faudrait que tu me guides un peu sur la procédure car je suis complètement novice.

Citation:
Envoyé par marot_r Voir le message
Ce que je n'arrive pas a saisir c'est à quel moment tu sais si une commande est d'une catégorie ou d'une autre. Après il suffit de ne présenter que les éléments qui sont dans la catégorie voulue, avec une requête c'est assez simple.
En général une commande est liée à une seule catégorie. Mais parfois il arrive qu'une commande soit liée à 2.
La commande est liée à une catégorie par le biais du produit qui est lié à une famille de produit, section et catégorie.
Comme je disais entre la table "Commande" et la table "catégorie, il y a beaucoup d'intermédiaires ...

Autre possibilité aussi que je n'ai pas mentionné, chaque envoi (Shipment) est lié à un responsable (champ "Shipments_Manager" lié à la table "T_Employees". Et chaque responsable est lié à une catégorie, cf screen ci-dessous. Passer par les responsables simplifierai sûrement les choses non ?
relation ship-employees-cat.JPG


Citation:
Envoyé par marot_r Voir le message
L'interdiction de voir les commandes des autres catégories est-elle de niveau légale ou d'affaire (du genre tu as une amende ou/et un procès si quelqu'un le sait) ou est-elle de niveau simplement pratique pour ne pas surcharger l'utilisateur d'info qui ne lui sont pas utiles ?
L'intérêt est multiple, tout d'abord nous voulons éviter que tout le monde puisse accéder à toutes les données de la base. En cas de démissions par exemple, actuellement un employé peut partir avec toutes nos informations, ce qui serait problématique (notre activité est principalement du sourcing).
Dans le cas de la saisie, l'intérêt est de ne pas surcharger l'utilisateur comme t'as dit mais aussi d'éviter que quelqu'un modifie les données d'une personne d'une autre catégorie sans s'en rendre compte (lié à un manque de savoir chez les utilisateurs).
Par exemple notre formulaire commande affiche les commande par ordre croissant, ça peut paraître surprenant mais les utilisateurs souvent "oubliaient" qu'il fallait cliquer sur "Nouveau" pour ajouter une nouvelle commande. Il est déjà arrivé qu'ils modifient entièrement une commande existante pour insérer la leur.
En ne voyant que leur commande, si ce cas arrivait ils ne pourront s'en prendre qu'à eux même et devront ressaisir la commande supprimée.
Le gros problème de ce genre d'erreur pour le moment est qu'on n'a aucune traçabilité, nous sommes incapables de dire qui a fait quoi.
btks59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 14h46   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 472
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 472
Points : 7 557
Points : 7 557
Citation:
On peut facilement récupérer l'identifiant de l'utilisateur sur le réseau, c'est une seule instruction (user=environ$("UserName")). Et faire un simple écran de connexion est très facile aussi.

Tu veux dire qu'on peut lier Access à notre serveur/domaine ?
En effet dans mon entreprise les utilisateurs se connectent sur le réseau à l'aide d'un identifiant et d'un mot de passe.
Par contre il faudrait que tu me guides un peu sur la procédure car je suis complètement novice.
Je ne suis pas sur du lier Access à notre serveur/domaine mais l'instruction user=environ$("UserName") te permets de récupérer le code que l'utilisateur a utilisé pour se connecté. Il n'y a rien de plus à faire.

ex de code qui récupère le code et la catégorie de l'utilisateur et les rends disponible pour toute l'application.

Code :
1
2
3
4
global userName as string
userName=environ$("UserName")
global idCatUser as long
idCatUser=nz(dfirst("IdCat","tableUser","[UserName]=""" & userName & """"), -1)
Une sugestion qui simplifierai peut-être ta solution, plustôt que de déduire la catégorie des produits, pourquoi ne pas ajouter un attribut catégorie à la commande. La solution avec les produits est très éléguante mais tant que tu n'as aucun produit ta commande n'a aucune catégorie. Si tu ajoute l'attribut catégorie à ta commande, le filtrage devient très simple.

Comme tes utilisateurs sont répartis par catégorie, si un utilisateur crée une commande tu sais immédiatement quelle est la catégorie de la commande.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 06h24   #7
Candidat au titre de Membre du Club
 
Homme Julien
Ingénieur qualité méthodes
Inscription : juillet 2009
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : Chine

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Distribution

Informations forums :
Inscription : juillet 2009
Messages : 53
Points : 14
Points : 14
Bonjour, désolé pour le temps de réponse mais je suis pas mal occupé en ce moment.

Le problème de rajouter une catégorie à la commande est la "double saisie" mais aussi qu'une commande peut appartenir à plusieurs catégories. Pour le moment nous avons eu maximum 2 catégories par commande mais il se peut qu'à l'avenir une commande contienne 3 catégories.
Dans ce cas je devrais créer 2 champs catégories dans ma table et la plupart du temps un des champs restera vide.

Je rêve peut être mais, le produit étant indirectement lié à une catégorie et les utilisateurs sélectionne les produits de chaque commande à l'aide de la table "items", existerait-il un moyen pour extraire la catégorie et la lier directement à la commande ?
Pas évident à expliquer désolé
Mais au final chaque commande est indirectement liée à une ou plusieurs catégorie donc pour éviter les saisies multiples et rébarbatives, j'essaie de trouver une solution par ce biais.


Pour la partie authentification, je ne suis trop novice et j'avoue ne pas bien comprendre mais je regarderai plus en détail plus tard.

Pour expliquer la situation en détail, pour filtrer les informations, je dois créer un fichier "interface" par personne (une 20aine).
Dans ces fichiers je ne donne accès qu'au(x) formulaire(s) dont les gens ont besoin et j'ai modifié chaque requête pour mettre des critères.
Par exemple un filtre sur les produits en fonction es catégories, comme ça la personne qui travaille dans le département Audio Video, ne verra que les produits audio video. Avant tout le monde voyait tous les produits, ce qui était inutile et surtout peu pratique (la liste étant très très longue).

Seul problème, dès que je fais une modification sur ces formulaires, je dois le faire 20 fois.
Il faudrait que je trouve un moyen pour n'utiliser qu'un fichier "interface" et créer des accès pour chaque personne sans forcément devoir créer 5 fois le même formulaire pour filtrer des données.
btks59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h04   #8
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 472
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 472
Points : 7 557
Points : 7 557
Pour résoudre ton problème de filtrage par personne tu peux simplement faire une table :

ClefPersonne
ClefCatégorie

et inclure cette table dans tes requêtes de sélection de produit avec un des tes critères à [ClefPersonne]=LireClefPersonne().

Code :
1
2
3
public function LireClefPersonne() as long
    LireClefPersonne=VarGlobale_ClefPersonne 'VarGlobale_ClefPersonne est initialisée à la connexion.
end function
La personne ne voit dans la sélection que les produits de sa ou ses catégories. Ce serait la solution la plus simple qui évite d'avoir à classer la commande dans une catégorie particlulère.

Pour associer ta commande à ta catégorie tu pourrais avoir une table :

ClefCommande
ClefCategorie

qui te permettrai d'associer une commande à une ou plusieurs catégories.

Mais pour déduire la catégorie de la commande à partir des produits il faut qu'l y ai des produits dans la commande.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h25.


 
 
 
 
Partenaires

Hébergement Web