La logique de construction d'horaires de travail universels

Les horaires des employés font partie intégrante de tout système CRM. Mais selon les spécificités de l'entreprise du client, elles peuvent être très différentes. Dans la clinique, ce sont les horaires d'accueil des patients; dans les télécommunications, les horaires de connexion des clients; à l'école, les horaires de classe. Tous diffèrent par leur structure et leur essence. Ils ont des bouchons différents, un ensemble de champs différent, des grilles différentes.

Notre plate-forme ERP se concentre sur le développement rapide de n'importe quelle configuration de niche, et nous avons réfléchi à la façon de le faire facilement. Tout d'abord pour vous. Pour que notre travail sur l'élaboration d'un calendrier pour un créneau spécifique ne prenne pas plus d'une heure-homme.

Avant cela, les graphiques étaient une sorte de chose développée en php. Mais mon dieu! Karl! Chaque fois que vous avez besoin d'un nouveau calendrier pour une solution de niche, vous devez copier ce code et le traiter. L'individualité des graphiques n'a pas permis un changement central. Et en général, cela a sapé le concept de notre plate-forme cloud dans la mesure où le client peut le configurer indépendamment.

Par conséquent, nous avons défini les exigences suivantes pour les horaires de travail

  1. Configurabilité
    Ils doivent être entièrement configurables à partir de l'interface Web.
  2. Pas variable
    Ils doivent avoir un pas de grille variable.
    Dans une clinique, le rendez-vous peut être de 30 minutes par patient, et dans 20 autres, à la troisième heure
  3. Chapeau personnalisé
    L'en-tête du graphique peut être unique, c'est-à-dire il peut s'agir d'un ensemble de médecins, d'établissements, d'enseignants, d'équipes, etc. En général, tout ce que le client a dans le système. Même d'après ce que nous ne pouvons imaginer.
  4. Dans l'enregistrement du graphique - un ensemble arbitraire de champs
    Un ensemble de champs peut être défini arbitrairement, à partir de toute information qui se trouve dans le système. Et les entrées sont organisées conformément à l'en-tête.
  5. CRUD
    Les entrées de graphique doivent être CRUD (créer, lire, mettre à jour, supprimer), malgré des ensembles arbitraires de champs. Et pas seulement cela, mais en utilisant des procédures pour organiser des interactions complexes.

    Exemple: il y a un calendrier des tâches.
    Dans l'enregistrement de la planification, il est affiché qui exécute où le travail est effectué, etc. + quelques données sur la tâche (par exemple, son numéro et son nom).
    Des données supplémentaires pour l'enregistrement de la planification sont stockées dans une table et les données de tâche dans une autre.
    Lors de la création, le numéro de tâche est indiqué, qui effectue où et où. Et les données seront affichées à partir de deux tableaux.
    Vous ne pouvez modifier que les données de l'enregistrement de graphique, mais les données de la tâche ne peuvent pas être modifiées.
    L'entrée de planification doit être supprimée, mais pas la tâche.
    Il est nécessaire de conserver des journaux qui ont fait quelque chose avec cette entrée. Parce que il peut être supprimé et ne sera pas nécessairement visible dans le calendrier, vous devez alors accéder aux journaux d'une manière ou d'une autre. Ils sont plus logiques pour diriger la tâche elle-même, c'est-à-dire lors de la création-modification-suppression doit être écrit dans un tableau séparé et affiché dans la tâche.
    De telles choses ne peuvent être résolues que par des procédures stockées, de sorte que des situations simples et complexes peuvent être résolues.
  6. Les champs peuvent être des listes.
    Bien sûr, les champs ne doivent pas être uniquement du texte. Il peut également s'agir de listes contextuelles de certaines données du système.
  7. Les champs peuvent être des liens
    Il est pratique lorsque, par exemple, à partir du calendrier de travail sur des tâches, vous pouvez entrer dans la tâche elle-même.
  8. Masquage des champs
    S'il y a beaucoup de champs dans l'enregistrement, il est logique de réduire une partie d'entre eux à une coupe pour en faciliter la perception.
  9. Déclencheurs
    Il est nécessaire d'ajuster la réaction du système à ce qui se passe avec l'enregistrement. Cela se fait le plus facilement avec des déclencheurs.

    Par exemple, si l'utilisateur doit écrire une sorte de journaux sur les actions prises sur l'enregistrement, ou envoyer des notifications aux employés, ou même envoyer le client sms ou même faire ce que nous ne pouvons pas assumer.
  10. Registres croisés
    Les enregistrements croisés sont des enregistrements de différents graphiques combinés en un seul graphique. Ou l'apparence des entrées dans d'autres graphiques, lorsque les entrées apparaissent dans le graphique actuel.

    Par exemple, il existe des situations où les mêmes brigades effectuent des travaux, par exemple sur des applications et des tâches. C'est-à-dire ils seront à l'aise avec un certain horaire général, où les tâches de différents horaires seront affichées.

    Ou vous avez besoin de l’horaire personnel d’un employé, avec des entrées de tous les horaires auxquels il participe.
    Ces tâches sont un peu plus compliquées que les tâches classiques, mais elles peuvent être complètement résolues à l'aide de déclencheurs et de procédures d'acquisition de données. C'est-à-dire par l'article 9 et l'article 5.

    a) des déclencheurs sont créés sur les enregistrements des plannings nécessaires qui créent une entrée dans le planning personnel de l'utilisateur si celui-ci est là (en conséquence, en cas de modification, modification, en cas de suppression suppression)
    b) des champs supplémentaires sont créés dans le graphique de l'utilisateur qui comprendront les données nécessaires, et des procédures de sortie d'enregistrement sont développées pour extraire les données des tableaux d'autres graphiques utilisant ces identifiants.

    De telles tâches peuvent être résolues de la manière opposée, lors de la création de l'horaire d'un employé personnel, une procédure plus astucieuse est effectuée, qui produira des données non seulement à partir des tables personnelles, mais à partir des tables d'autres horaires où l'employé est présent le jour donné. De telles solutions basées sur cette conception sont également possibles.
  11. Superpositions de temps
    Le système doit afficher correctement les intersections des enregistrements dans le temps, et pas comme dans la plupart des systèmes où les enregistrements se rencontrent et il n'y a même pas la possibilité de lire les couches inférieures.

    Comme ça, c'est triste ...
    image
  12. Rapports
    Ainsi, selon le calendrier, il était possible de créer des rapports. Le système de stockage des données doit être organisé de manière à pouvoir être récupéré dans le configurateur de rapports.
    Par exemple, il a été nécessaire de créer un rapport qui parmi les employés combien de temps passé à voyager sur des tâches - le tour est joué! Nous allons dans le configurateur de rapports, là nous sélectionnons la table où sont stockées les données des enregistrements de l'horaire souhaité et nous faisons un rapport en utilisant le configurateur standard en fonction des données du graphique.
  13. Intégration
    Le graphique doit pouvoir être facilement intégré n'importe où sur n'importe quelle page, c'est-à-dire il doit s'agir d'un élément d'entrée standard, identique à un champ de texte ou à un bouton.
    Heureusement, nous avions de l'expérience dans le développement d'éléments standard complexes. En particulier, nous avons un élément de commentaire standard, un formulaire de demande de dossier, un formulaire de contact, un tableau. Tous sont ajoutés en un clic en tant qu'éléments normaux et sont facilement configurables.
  14. Accès et sécurité
    Les droits d'accès à la programmation dans son ensemble doivent être réglementés par le système général de droits, et à l'intérieur de la programmation, les droits d'accès aux enregistrements doivent être réglementés par les paramètres de programmation.
    Par exemple, indiquez que seul l'auteur peut modifier sa publication, son groupe ou son unité.
  15. Facilité de configuration
    Et bien sûr, la création et la configuration d'une nouvelle planification doivent être effectuées rapidement et ne pas poser de problème. En particulier, pour nous, pour un cas typique (il est clair que cela peut arriver, bien sûr, c'est très complexe) ce travail ne devrait pas prendre plus d'une heure-homme.

Nous pensons avoir réussi à mettre en œuvre ces exigences avec élégance et cet article décrira comment procéder.

Pour le moment, je ne connais pas de systèmes avec des graphes tout aussi polyvalents (si vous savez, écrivez dans les commentaires, c'est intéressant à voir)

Le schéma général de la configuration du graphique ressemble à ceci (ne jugez pas strictement, je l'ai dessiné moi-même). Chaque élément est nécessaire ici, il n'y a pas de superflu.

image

Tout le travail commence par la compréhension de l'ensemble de données qui doit figurer dans l'enregistrement et la création d'une table dans la base de données pour ce programme.

image

Par exemple, pour un calendrier de tâches pour une entreprise de télécommunications, il est important de savoir quand le travail sera effectué, pour quelle tâche, pour quel objet et quel groupe d'ingénieurs réalisera ce travail.

Par conséquent, nous formons une table où il y a tous ces champs info + service avec l'ID d'enregistrement d'enregistrement. (PS: les tableaux que nous pouvons éditer directement dans le cloud depuis le navigateur).

image

C'est un cas simple, mais cela peut être beaucoup plus compliqué, où il y a plus de champs ou plusieurs tables.

Ça y est, la structure de stockage est formée et maintenant le planning doit savoir comment travailler avec. Chaque entrée peut être ajoutée, affichée, modifiée et supprimée.

image

Parce que Si l'ensemble de données et la structure de stockage peuvent être arbitraires, cette structure doit être gérée via la procédure stockée.

image

Vous devez d'abord créer la procédure. Dans notre exemple, le cas est simple, et ils peuvent être créés dans le configurateur avec un seul bouton en utilisant la fonction "Créer des procédures standard". Le système à lui seul, selon ce tableau, créera des procédures pour tirer, modifier, supprimer et diverses conclusions.

Par exemple, un fragment d'une procédure d'ajout créée automatiquement ressemble à ceci

image

Toutes les procédures sont éditées directement depuis l'interface Web. La logique de compilation est similaire à PL-SQL.
Si quelque chose est compliqué, ces procédures peuvent être modifiées en fonction de la structure de stockage et diverses conditions, boucles, sélections, mises à jour, insertions, etc. peuvent être définies. En général, dessinez n'importe quelle structure de traitement.

Le calendrier de chaque action indique quelle procédure est responsable de cette action.

image

Paramètres de planification «intégrés»

Mais il existe également des paramètres «câblés» qui ne peuvent être configurés, mais pas modifiés. Ce n'est tout simplement pas nécessaire.

- Les coordonnées date-heure font partie intégrante de tout enregistrement
- L'emplacement du graphique dans le système. Il est édité à l'aide de l'éditeur intégré de l'interface et il n'est pas nécessaire de le faire à partir du graphique lui-même.
- La mémoire de l'emplacement de l'utilisateur - il n'est pas nécessaire de configurer directement cette propriété.

image


Dans les paramètres, l'étape (par exemple, une grille de 20 minutes ou 30) et la plage d'heures de travail (par exemple, de 8 à 20) peuvent également être spécifiées.

Un intervalle de temps est nécessaire pour couper l'excédent, par exemple, si tous les employés travaillent 8 heures par jour de travail standard, il n'est pas logique d'afficher les heures de nuit.

Étape - définit la grille du graphique. Par exemple, dans une clinique, il peut y avoir un rendez-vous avec un médecin pendant 20 minutes, dans 15 autres, dans la troisième 30. Tout cela est configurable.

Cependant, cela ne signifie pas que l'enregistrement ne peut pas être effectué en dehors de la grille. Vous pouvez faire des entrées, mais elles seront affichées dans la grille.

La plage d'étapes que nous pouvons définir 5, 10, 15, 30, 60 minutes.

Enregistrer la sortie

Il ne suffit pas de créer et de spécifier une procédure. Il faut que le planning comprenne comment travailler avec lui pour sa part.
image

Chapeau

Le plus important est d'indiquer l'en-tête du graphique. Lequel des champs de sortie de la procédure doit être un en-tête.

Considérez la logique de construire un horaire de cours dans une organisation éducative. Supposons qu'un enregistrement ait un ensemble de groupe d'enseignants.

Ici, vous pouvez créer une rubrique pour les enseignants, puis le calendrier sera formé comme suit:

image

mais vous pouvez par groupe, puis comme ceci:

image
mais vous pouvez généralement créer 2 graphiques différents et l'afficher de toute façon, comme vous le souhaitez, les utilisateurs le choisiront. Dans ce cas, les mêmes données seront utilisées, les mêmes procédures. Les changements dans un graphique changeront dans un autre.

Mais en général, le choix dépend des questions d'opportunité. Un chapeau devrait être une information fondamentale peu changeante. Si vous servez un nombre fixe d'objets - alors ce devrait être eux. Si vous avez un nombre fixe de groupes, ils le sont.

Vous pouvez faire des choses intéressantes avec un chapeau. Par exemple, si vous indiquez le statut de la tâche en tant qu'en-tête, alors lorsque le statut de la tâche change, l'enregistrement de tâche dans le graphique passera au statut correspondant lui-même. C'est-à-dire en fait, presque des tableaux kanban peuvent être faits ici, etc. les choses. Lorsque nous lions des données d'enregistrement via des procédures pour vivre des informations dans le système, elles peuvent également prendre vie sous forme de graphiques. Mécanisme très flexible.

De plus, si vous définissez des conditions de filtrage dans la procédure, vous pouvez créer des données d'en-tête dans le graphique en tenant compte de filtres arbitraires.

Que ne pas sortir

Vous pouvez également spécifier ce qui doit être affiché dans les enregistrements et ce qui ne l’est pas. Par exemple, dans la procédure, certains identificateurs de service pour les ensembles peuvent être affichés sous forme de résultats. Ces informations, non significatives pour l'utilisateur, peuvent être ignorées à la conclusion.

Que cacher

Et vous pouvez afficher, mais réduire au chat. Informations peu importantes mais parfois nécessaires. Par exemple, qui et quand a créé cet enregistrement peut être nécessaire uniquement dans le cas d'une sorte de confrontation, mais pas dans le travail opérationnel.

Les références

C'est également très pratique lorsqu'un champ peut être un lien.

Par exemple, si nous établissons un calendrier des tâches, pourquoi ne pas cliquer sur son numéro pour entrer dans la tâche elle-même.

Nous avons un mécanisme de liaison standard dans le configurateur. Vous pouvez les créer là-bas et les associer au champ du graphique. Tout fonctionne.

Le titre

Bien sûr, le champ doit être appelé d'une manière ou d'une autre. Par défaut, le système prendra le nom du champ de procédure, mais il n'est pas toujours correct pour la perception. Par conséquent, vous devez parfois saisir d'autres noms.

Par exemple, tout ce qui précède avec nous ressemble à ceci. En face, les champs de cette procédure sont cochés.

image

La sortie de l'enregistrement ressemblera à ceci:

image

Ajout d'une nouvelle entrée

Les champs pour ajouter un nouvel enregistrement doivent être déterminés par la procédure d'ajout. Des informations doivent être fournies pour chaque paramètre d'entrée de la procédure.

Mais il y a un truc. Les champs peuvent être non seulement du texte, mais aussi des listes.

Prenons notre exemple pour un télécom, où il y a une tâche, un groupe, un objet. Nous n'obligerons pas l'utilisateur à rechercher des identifiants d'objets et à les conduire. Il est nécessaire qu'il y ait une liste pop-up avec les informations nécessaires. Où l'obtenir?

Pour ce faire, le champ de saisie de procédure doit extraire une autre procédure, qui donnera par exemple une liste de tâches réelles, ou une liste d'objets nécessaires, etc. Dans ce cas, vous ne pouvez pas simplement spécifier les champs d'une table car il peut y avoir des filtres complexes. Les mêmes tâches peuvent déjà être 10 000 tamponnées dans le système, mais une liste de 100 tâches d'actualité devrait s'afficher maintenant.

image

En général, une procédure qui se déplace à travers le champ d'une autre procédure.

En fait, cela semble effrayant. Ces choses sont bien automatisées, les procédures selon les répertoires standard sont obtenues avec un seul bouton. Procédures pour diverses listes de groupes, tâches, applications, etc. mis en œuvre depuis longtemps pour le fonctionnement de divers modules CRM. Il suffit de les sélectionner. S'il existe déjà une procédure avec des fonctionnalités similaires, elle est copiée et modifiée.

Il est également nécessaire d'indiquer lequel des champs ajoutés sera un en-tête. Nous en aurons besoin dans le système d'édition.

Cela ressemble à ceci pour nous:

image

Modifier l'enregistrement

C'est encore plus intéressant ici. Il ne suffit pas d'afficher tous les champs dans les listes comme en annexe. Il est nécessaire dans ces listes de sélectionner la position actuelle (sélectionnée). Nous éditons.

Pour ce faire, vous devez associer les champs de création aux champs de sortie. Et dans le cas d'une zone de liste, ce n'est pas seulement un fil à plomb des informations de la sortie, mais l'identifiant de ces informations.

C'est-à-dire ici il faut:

a) indiquer la procédure d'édition
b) associer ses champs aux champs d'addition
c) associer ses champs aux champs de sortie des données d'enregistrement afin de mettre les données actuelles dans les listes

Il n'y a aucune autre fonctionnalité à indiquer ici, car nous avons déjà configuré la sortie et l'ajout.

Lorsque la fenêtre d'édition est affichée, le système appellera la procédure nécessaire pour chaque champ, recevra les données, les comparera avec les données de la sortie de l'enregistrement, mettra la sélection dans les listes et insérera les valeurs actuelles dans des champs simples.

Ça ressemble à ça chez nous

image

Supprimer l'enregistrement

Le retrait est le plus simple. La procédure de suppression avec un paramètre d'entrée est simplement indiquée: l'ID d'enregistrement du graphique.

Gestion des événements lors de l'ajout / modification / suppression d'enregistrements. Déclencheurs Cross Records.

Il ne suffit pas d'ajouter / de modifier des entrées dans les graphiques. Vous devez toujours gérer les événements. Cela ouvre une portée illimitée pour la configuration.

La gestion des événements est en fait très simple. Après tout, nous avons déjà des tables dans lesquelles les données des enregistrements de graphique sont stockées. Vous pouvez définir des déclencheurs de toute complexité sur ces tables. Notre configurateur cloud facilite cette tâche.

Par exemple, des journaux étaient nécessaires, qui faisait quoi dans l'enregistrement. Tout est simple. Une table est créée pour les journaux et des déclencheurs sont placés sur la table de graphique qui écrivent les données de modification dans une table avec des journaux.

Grâce à cela, des enregistrements croisés sont également disponibles. Par exemple, lorsqu'une tâche est définie dans un groupe dans notre exemple, vous pouvez identifier tous les participants de ce groupe et leur mettre un double de cet enregistrement dans vos graphiques personnels. Dans ce cas, mettre des graphiques personnels signifie faire un enregistrement dans le tableau de données d'un graphique personnel. Il est aussi un graphe dans ce système, uniquement configuré différemment et affiché à un autre endroit. Cette entrée y apparaîtra.

Ou vous devez envoyer une notification aux utilisateurs du groupe. Ou envoyer un SMS au client pour qu'il vienne le voir pour effectuer des travaux sur telle ou telle tâche de temps en temps. Pour ce faire, des déclencheurs sont simplement créés qui font des entrées dans les tables de notification ou SMS.

Rapports

Des rapports graphiques sont également nécessaires, et avec une telle structure, ils peuvent être réalisés.

Par exemple, il a été nécessaire de faire un rapport sur la durée du voyage des employés le mois précédent. Nous allons dans le configurateur de rapports, sélectionnons le tableau souhaité où les entrées de graphique sont stockées, définissons les filtres et les fonctions d'agrégation nécessaires - et vaul, le rapport est prêt.

Autres utilisations des données cartographiques

Les données graphiques peuvent être utilisées n'importe où avec un configurateur de système avancé. Par exemple, dans les tâches, nous avons pu facilement créer l'onglet Graphiques et dans une procédure simple afficher des informations sur la durée et qui avait cette tâche à exécuter.

image

Superpositions de temps

Ils arrivent. Et il n'y a rien de pire que des enregistrements se frappant et ne permettant pas de lire l'enregistrement nécessaire. Ce problème a également été résolu. Le système d'entrées qui se chevauchent se place automatiquement à proximité. Dans ce cas, seul le HTML simple est utilisé, seule la structure de la table est construite de la manière nécessaire pour cela. Le système fournit des soins à n'importe quelle profondeur, mais plus de 2 entrées sont rares.

Bien sûr, si le temps se chevauche, quelque chose n'est probablement pas prévu.Une personne ne peut pas se trouver simultanément à deux endroits, mais même de telles situations doivent être affichées correctement.

image

Accès et sécurité

L'accès est divisé en 2 niveaux. Système et graphiques personnels. Le système est défini dans son ensemble par l'éditeur de rôles et les droits par défaut spécifiés dans le configurateur d'interface. Par exemple, si cette cellule de page (ou les onglets, pages, menus hérités ci-dessus) se voit refuser l'accès en lecture, aucun utilisateur ne verra ce graphique au niveau d'affichage de l'interface tant qu'il n'aura pas attribué de droits de lecture à cette zone dans les rôles d'utilisateur.

Viennent ensuite les droits internes de l'horaire. Ils peuvent être

1) Édition

- uniquement l'auteur
- uniquement le groupe de l'auteur (tous les employés inclus dans les groupes dont l'auteur de l'enregistrement est membre)
- uniquement la division auteur (tous les employés inclus dans la division auteur, selon le stock)

PS: le groupe de travail et le personnel peuvent différer de nous. Par exemple, dans une unité, il peut y avoir plusieurs groupes de travail, ou les employés de différentes unités peuvent appartenir au même groupe. Le même employé peut également appartenir à différents groupes en même temps. Tout ce système prend en compte.

2) L'enlèvement est similaire.

- seulement l'auteur
- seulement le groupe
- seulement la division

Pourquoi avons-nous besoin de droits internes?

S'il s'agit d'un emploi du temps personnel ou de certaines fonctionnalités, il est logique de ne mettre que l'auteur.

Mais il y a du personnel de quart et des situations où le dossier doit être modifié et l'employé n'est pas au travail. Que faireIl est logique de définir de tels horaires pour les éditer par un groupe ou une unité afin que d'autres employés de quart puissent travailler avec ces enregistrements.

En outre, le rôle, qui a le droit d'administrer, peut être indiqué dans le calendrier. Les employés ayant ce rôle auront le droit de modifier et de supprimer, quels que soient les groupes et les unités.



Ici, nous avons une chose tellement cool, ce qui simplifie considérablement la vie, quand vous savez comment l'utiliser bien sûr. Une personne immédiatement inexpérimentée peut être difficile à comprendre. Mais nous devons mettre en place un tel calendrier sous une forme simple, il s'agit d'une heure-homme.

De plus, nous bénéficions également des capacités de configuration les plus profondes et de la possibilité d'interaction avec d'autres éléments du système.

Source: https://habr.com/ru/post/fr430674/


All Articles