Jump to content
  • 0

ID patient et import


Sadlig
 Share

Question

Bonjour

Apres avoir bien avancé ma base patients je me heurte à un problème lorsque j'importe des patients depuis une autre base de données: la définition d'un nouvel ID patient

Lorsque que je les créé dans ma base, ils ont un Numéro ID attribué automatiquement mais lorsqu'ils sont importés, il faut leur attribuer un numéro ID qui ne soit pas deja existant.....

Je prends alors l'ID le plus élevé existant et je l'incrément de à chaque nouvelle validation, mais le problème c'est que la création automatique de N° de série n'est pas au courant que le dernier N° le plus élevé à changé...

Comment faites vous pour résoudre ce problème? Création d'ID par script avec rétention automatique du Numéro le plus élevé pour le prochain import ou la prochaine création ou bien utilisation de l'UUID ?

Merci pour vos avis et solutions

 

Link to comment
Share on other sites

Recommended Posts

  • 0

Bonjour

J' aime bien l' UUID:

1°)d' abord, il résoudra ton Pb

2°) ill permet de concevoir  l' Id pour ce qu' il doit être: un identifiant unique ! sans autre destination

Si on veut faire une clef de tri: on ajoute par exemple un horodatage de création (date à l' envers): à l' UUID ou dans une autre rubrique

3°) Pour les fiches déjà créées: tu affiches toutes tes fiches et tu utilises le script Remplace (ou sélectionner la rubrique Id et Menu FMP/Enregistrements/Remplacer/Résultat du calcul/Obtenir UUID)

4°) Si tu utilises un N° de Série: en cas de suppression de fiche tu auras un "manque" dans la suite: ce n' est pas rédhibitoire mais il faudra en tenir compte

Link to comment
Share on other sites

  • 0

Merci pour le retour

La base ne fonctionnera que sur un réseau local sur 2 ou 3 Mac

Si lors de la création d'un patient en manuel, je créé un N° de série formaté en Nombre qui soit Obtenir(HorodatageActuel), Entrée auto non modifiable lors de la saisie, j'aurai toujours un N° de série different et incrémenté lors des création suivantes, sachant qu'en manuel on ne peut pas créer plus d'un patient à la seconde. 

Si par la suite, ou si avant cela, j'importe les patients d'une base de donnée (qui sera toujours la même s'il y a des imports réguliers) et que je créé une variable avec la meme méthode, que j'incremente de 1 sur une boucle qui saisi le N° de série de chaque patient, lorsque l'importation sera finie j'aurai j'aurai un N° de série different et unique pour chaque patient et toujours supérieur aux numéros de série des patient créés les jours précedents, et ainsi de suite.

Il n'y aura pas d'incrémentation régulière de 1 entre chaque patient créé ou importé d'un jour à l'autre mais cette méthode n'assure t-elle pas d'avoir toujours un N° de série different unique et plus élevé à chaque patient créé, ce qui me semble le principal et si je supprime un patient, ca ne pose aucun problème. Après essai j'obtiens des numéros à 11 chiffres

Cela permet également de trier.

Qu'en pensez vous? je n'arrive pas à voir les inconvénients d'une telle méthode.

 

 

Link to comment
Share on other sites

  • 0
il y a 42 minutes, Sadlig a dit :

Si par la suite, ou si avant cela, j'importe les patients d'une base de donnée (qui sera toujours la même s'il y a des imports réguliers) et que je créé une variable avec la meme méthode, que j'incremente de 1 sur une boucle qui saisi le N° de série de chaque patient, lorsque l'importation sera finie j'aurai j'aurai un N° de série different et unique pour chaque patient et toujours supérieur aux numéros de série des patient créés les jours précedents, et ainsi de suite.

Oui. L' incrémentation se fait dans le fichier cible

il y a 46 minutes, Sadlig a dit :

Il n'y aura pas d'incrémentation régulière de 1 entre chaque patient créé ou importé d'un jour à l'autre

Si

 

il y a 49 minutes, Sadlig a dit :

mais cette méthode n'assure t-elle pas d'avoir toujours un N° de série different unique et plus élevé à chaque patient créé, ce qui me semble le principal et si je supprime un patient, ca ne pose aucun problème.

Si un N° de série supérieur à chaque fiche importée: donc OK

 

il y a 51 minutes, Sadlig a dit :

Après essai j'obtiens des numéros à 11 chiffres

????  Tu n' as pas 100 millions de fiches !!

Link to comment
Share on other sites

  • 0

Non je n'ai que 5000 fiches mais Obtenir(HoradatageActuel) lorsqu'on formate en nombre et pas en date donne un N° à 11 chiffres qui doit être un nombre de secondes écoulé depuis je ne sais quand....et si j'importe aujourd'hui puis demain, le premier N° de série qui sortira demain  sera incrémenté du nombre de secondes écoulés depuis la dernière importation, du moins c'est ce qu'il me semble après avoir fait un essai entre 2 périodes de la matinée pour voir ce que j'obtenais

Link to comment
Share on other sites

  • 0
il y a une heure, Sadlig a dit :

en manuel on ne peut pas créer plus d'un patient à la seconde

Bonjour,

Par discipline et par prudence, on ne se fie pas à cette assertion. C'est l'expérience qui parle.

il y a une heure, Sadlig a dit :

Après essai j'obtiens des numéros à 11 chiffres

Attention, si on utilise UUID ou un horodatage, la rubrique doit être de type Texte. Avec une rubrique Nombre, un horodatage est non lisible, ce qui est dommage.

Une formule possible d'identifiant (en auto-entrée recalculée et non modifiable à la main, sur un rubrique de type Texte) :

Definir (
[
h = Obtenir ( HorodatageActuel )
] ;

Annee ( h )
& Fin ( "00" & mois ( h ) ; 2 )
& Fin ( "00" & jour ( h ) ; 2 )
& "-"
& Fin ( "00" & heures ( h ) ; 2 )
& Fin ( "00" & minutes ( h ) ; 2 )
& Fin ( "00" & secondes ( h ) ; 2 )
& "-"
& Fin ( "00000" ; Obtenir ( IDEnreg ) )

)

 

Il y a 9 heures, Jean-Louis a dit :

ce qu' il doit être: un identifiant unique ! sans autre destination

👍

Link to comment
Share on other sites

  • 0

Bonjour Jérémie et merci du retour

Pour être clair voici une photo d'écran qui récapitule la chose: Il s'agit de la rubrique essai_N_Serie qui est formatée en nombre, a gauche mon script, a droite la table patient avec les N° obtenus: j'ai bien des nombres! et il sont tous incrémentés de 1 et uniques

OT1c37W.png

Link to comment
Share on other sites

  • 0

D'accord.

Question : pourquoi générer ces numéros par script ? Si on veut qu'il soient ensuite non modifiable, mieux vaut avoir une auto-entrée avec option "non modifiable pendant la saisie". En plus, ça épargne le travail de script.

1462285030_Capturedcran2021-02-0313_03_08.png.e2eb3ee2317efcf6281a58ac628c419a.png

Là, on voit un tout bête souci d'affichage. En mode modèle, si tu fais apparaître les 2 rubriques et que tu les règles en affichage "tel que saisi" (dans le dernier volet de l'inspecteur), tu n'auras plus les puissances de 10.

Link to comment
Share on other sites

  • 0

Merci pour l'info, encore une subtilité que j'apprends....

Si je fais un import les N° de série ne recréent pas automatiquement et comme il faut un script après import pour les créer, je ne peux pas faire en automatique pour les N° de série de ceux que je crée manuellement et en script pour les import éventuel, sinon j'ai un risque d'avoir un N° déjà utilisé, donc si j'utilise l'UUId, ca réglé le problème, mais d'un autre coté si je dois faire un script pour créer un N° d'ordre pour les classer par ordre d'ancienneté par exemple, autant ne créer qu'un numéro en utilisant l'horodatage.....

Link to comment
Share on other sites

  • 0
il y a 21 minutes, Sadlig a dit :

Si je fais un import les N° de série ne recréent pas automatiquement

Il le font, si on a défini une auto-entrée et qu'on demande dans la fenêtre d'importation que la formule soit appliquée.

Evidemment, à l'import, on a plusieurs enregistrements créés en une seule seconde, d'où l'utilité d'ajouter Obtenir ( IDEnreg ) juste après.

Link to comment
Share on other sites

  • 0

En fait je vais avoir une grosse base de données à importer d'un coup et a nettoyer (doublon) et remarques entrées à la place du nom etc....d'ou un script qui verifie et élimine tout ce qui ne va pas et qui attribue des numéros de serie cohérent.

Par la suite ce ne seront que ce ne seront qu'une dizaine de patient journaliers à entrer, verifier s'ils existent deja dans la base et attribuer un N° de serie. Le plus compliqué va être de trouver comment lancer un script qui va chercher les données, les mets dans un tableur Excel que j'importe ensuite. C'est cette dernière opération d'import que j'ai script, mais pour ce qui précèdent il va falloir que j'étudie appleScript si je veux automatiser la tache.

Je vais déjà regarder et adapter l'auto entrée à l'import. Obtenir (IDenreg) c'est donc pour verifier qu'il n'y en n'a pas 2 semblables?

Merci

 

Link to comment
Share on other sites

  • 0

NB: Je n' ai plus trop suivi

Mais je précise qu' une date à l' envers: AA/MM/JJ permet de trier une date format texte chronologiquement (bon à savoir...)

Link to comment
Share on other sites

  • 0
Il y a 2 heures, Sadlig a dit :

Obtenir (IDenreg) c'est donc pour verifier qu'il n'y en n'a pas 2 semblables?

C'est plutôt une façon comme une autre de donner un numéro qui n'a pas encore été utilisé.

Faites des tests, avec la formule que j'ai donnée en auto-entrée…

Link to comment
Share on other sites

  • 0

Oui effectivement l'autoentrée avec Obtenir(HorodatageActuel) marche très bien a la création manuel d'un patient

Cependant lors de l'importation, forcement il vont tous avoir le meme numéro - quoique j'ai vu q'on pouvait obtenir l'horodatage à la milliseconde près....

donc il est nécessaire de faire un script qui attribue des numéros différents après importation....Je teste tout ca

Link to comment
Share on other sites

  • 0

Bonsoir Jeremie

J'ai essayé la formule et ca marche très bien,La fonction me sort un texte de ce type: 20210204-001552-00000 sur plusieurs imports mais lObtenir(IDEnreg) me donne un identifiant à 4 chiffres different à chaque enregistrements importés, donc c'est bon

Mais si vous avez le temps j'aimerais bien comprendre comment ca marche: si j'importe 20 enregistrements ca marche, mais si j'en emporte 1000 en une fois est ce que ca marche aussi ? Peut on avoir un id à 5 chiffres?

Vous avez éveillé ma curiosité!! et je ne veux pas l'appliquer bêtement sans comprendre......

Merci si vous pouvez developper, je suis sur que vous allez faire des heureux!

 

Link to comment
Share on other sites

  • 0

Ma curiosité m'a fait chercher comment fonctionnait cette formule. Je n'en comprends pas l'utilité puisque la fonction Obtenir(IDEnreg) seule me donne de toute façon un ID qui est different pour chaque enregistrement, que la formule soit entrée ou non.

Avec la formule je n'obtiens que le meme chiffre qui change toutes les secondes mais qui se termine toujours par 0000: On a l'année et le mois puis le jour agrégé ensemble, puis un tiret et 6chiffres représentant HHMMSS, et 00000. Est ce que la fin de la formule ne devrait pas être  & Obtenir ( IDEnreg ) plutôt que  & Fin ( "00000" ; Obtenir ( IDEnreg) ?

On aurait ainsi à la fin les chiffres de l'IDEnreg plutôt que 00000

Pour un import massif je proposerai plutôt ca comme formule: Obtenir ( HeureActuelleUTCMillisecondes ) & Obtenir ( IDEnreg ) identifiant à 18 chiffres avec les 14 premiers changent toutes les 10ms ou bien  Obtenir ( Horodatageactuel ) & Obtenir ( IDEnreg )

Ou alors on s'en tient juste à l'IDEnreg qui dans tous les cas change, du moins c'est ce que je crois comprendre: que se passe t'il avec lui quand on élimine un enregistrement ou bien quand on arrive à 9999?

Link to comment
Share on other sites

  • 0
Il y a 20 heures, Jérémie Gimenez a dit :

Attention, si on utilise UUID ou un horodatage, la rubrique doit être de type Texte. Avec une rubrique Nombre, un horodatage est non lisible, ce qui est dommage.

Bonjour @Jérémie Gimenez lorsque l'on met un résultat de Obtenir ( horodatageActuel )  dans un nombre (calcul, etc.) (par exemple ObtenirNombre ( Obtenir ( HorodatageActuel ) ) ) on obtient le nombre de secondes depuis le 1er janvier 0001 0h0m0s. Et pour l'opération inverse on utilise la fonction ObtenirHorodatage ( nb ) et l'on obtient l'horodatage correspondant au nombre.

Voici l'horodatage de mon commentaire : 63748026184

Le résultat en horodatage un peu plus humain : ObtenirHorodatage ( 63748026184 ) : 04/02/2021 09:03:04

Concernant Obtenir ( HeureActuelleUTCMillisecondes ) on obtient le nombre de millisecondes depuis le 1er janvier 0001 0h0m0s,000.

Obtenir ( HeureActuelleUTCMillisecondes ) : 63748022766550

ObtenirHorodatage ( 63748022766550 / 1000 ) : 04/02/2021 08:06:06,55

 

La différence obtenue entre Obtenir ( HeureActuelleUTCMillisecondes ) et Obtenir ( HorodatageActuel ) nous donne le fuseau horaire actuel…

Link to comment
Share on other sites

  • 0

Pour ceux que ca intéresse voici ce que donne une entrée auto nom modifiable sur un calcul avec la formule Obtenir ( HeureActuelleUTCMillisecondes ) & Obtenir ( IDEnreg ) sur un import de 6572 enregistrements

ID du premier 637480245420727221 les 4 derniers chiffres sont l'IDEnreg et les 4 précédents les millisecondes (2,072) ID à 18 chiffres

ID du dernier 6374802454356013792. L'IDenreg a 5 chiffres 13792 et on est à 5,601s . On a une ID à 19 chiffres et il s'est passé un peu plus de 3,5s

Il n'y a aucun doublon mais à priori Obtenir(IDEnreg) seul suffit a ne pas avoir de doublons

Link to comment
Share on other sites

  • 0
Le 03/02/2021 à 20:58, Sadlig a dit :

Cependant lors de l'importation, forcement il vont tous avoir le meme numéro

C'est la raison pour laquelle j'ajoute :

Le 03/02/2021 à 12:27, Jérémie Gimenez a dit :

& Fin ( "00000" ; Obtenir ( IDEnreg ) )

La formule que j'ai donnée fonctionne. On peut la mettre en entrée automatique, recalculée et non modifiable, et ne plus se poser jamais la question de l'identifiant.

On peut aussi faire plus compliqué, mais je n'en vois pas l'intérêt…

Link to comment
Share on other sites

  • 0
Le 04/02/2021 à 09:49, Sadlig a dit :

6374802454356013792

C'est bien.

Avec ma formule, tu aurais eu : 20210204-094901-000001

L'avantage est que c'est lisible ; on peut reconnaître la date et l'heure, et l'on voit bien à part le numéro d'enregistrement.

Le 04/02/2021 à 09:49, Sadlig a dit :

à priori Obtenir(IDEnreg) seul suffit a ne pas avoir de doublons

Une exception : si on fait de la synchronisation entre deux fichiers FileMaker non connectés entre eux, les mêmes numéros IDEnreg se créent des 2 côtés, ce qui rend cette formule non utilisable seule.

Link to comment
Share on other sites

  • 0
il y a 4 minutes, Jérémie Gimenez a dit :

C'est la raison pour laquelle j'ajoute :

La formule que j'ai donnée fonctionne. On peut la mettre en entrée automatique, recalculée et non modifiable, et ne plus se poser jamais la question de l'identifiant.

On peut aussi faire plus compliqué, mais je n'en vois pas l'intérêt…

OUi tout a fait, et je constate après essai d'importation de 6000 patients que Obtenir(IDenreg)en automatique suffit pour avoir un N° ID different pour chaque importation. J'ai créé un script qui détecte les doublons ID et il n'en a trouvé aucun...

Link to comment
Share on other sites

  • 0
Le 04/02/2021 à 09:06, David Julot a dit :

en horodatage un peu plus humain

Salut @David Julot

Nous disons donc la même chose 63748026184 est "non lisible" (moi) alors que 04/02/2021 09:03:04 est "plus humain" (toi)…

😎

il y a 3 minutes, Sadlig a dit :

J'ai créé un script qui détecte les doublons ID et il n'en a trouvé aucun

Il existe un opérateur de recherche pour trouver les doublons : le point d'exclamation.

Link to comment
Share on other sites

  • 0
il y a 1 minute, Jérémie Gimenez a dit :

C'est bien.

Avec ma formule, tu aurais eu : 20210204-094901-000001

L'avantage est que c'est lisible ; on peut reconnaître la date et l'heure, et l'on voit bien à part le numéro d'enregistrement.

Une exception : si on fait de la synchronisation entre deux fichiers FileMaker non connectés entre eux, les mêmes numéros IDEnreg se créent des 2 côtés, ce qui rend cette formule non utilisable seule.

J'ai essayé la formule mais elle ne donne que des 00000 a chaque enregistrement, j'ai compris le principe:, on définit h puis on créé la formule, mais à la fin...... ; Fin ( "00000" ; Obtenir ( IDEnreg ) ne me donne rien d'autre que des 00000

Cette fonction Fin affiche les X derniers caractères qu'il y a après le ; donc si Obtenir(IDEnreg) comporte 4 chiffre, elle devrait me les afficher après 00000, mais il ne se passe rien

il y a 5 minutes, Jérémie Gimenez a dit :

Salut @David Julot

Nous disons donc la même chose 63748026184 est "non lisible" (moi) alors que 04/02/2021 09:03:04 est "plus humain" (toi)…

😎

Il existe un opérateur de recherche pour trouver les doublons : le point d'exclamation.

donc on fait une Recherche sur le ID avec comme critère simplement ! : c'est ca ?

Link to comment
Share on other sites

  • 0
Le 03/02/2021 à 12:27, Jérémie Gimenez a dit :

& Fin ( "00000" ; Obtenir ( IDEnreg ) )

PARDON :

Fin ( "00000" & Obtenir ( IDEnreg ) ; 5 )

C'est la même logique dans toute la formule pour obtenir des longueurs fixes sur le mois, le jour, etc.

Link to comment
Share on other sites

  • 0
à l’instant, Jérémie Gimenez a dit :

PARDON :

Fin ( "00000" & Obtenir ( IDEnreg ) ; 5 )

C'est la même logique dans toute la formule pour obtenir des longueurs fixes sur le mois, le jour, etc.

Ah merci, la je comprend tout à fait maintenant!!! C'est pour voir si je suivais!!!😃

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...