IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Gestion de date de peremption : champs récalcitrants


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut Gestion de date de peremption : champs récalcitrants
    Bonjour!
    j'ai un code qui me tape sur les nerfs car je ne sais pas ou se trouve le problème.
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    q est un entier
     
    HLitRecherche(Comporte,Comporte.Designation,FEN_Fiche_Contient.SC_Fiche.COMBO_Designation)
    SI HTrouve(Comporte) ALORS
    	FEN_Fiche_Contient.SC_Fiche.COMBO_Nom_magasin=Comporte.Nom_magasin
    	FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité=Comporte.Qte_Unité
    FIN
    HLitPremier(Comporte)
    TANTQUE PAS HEnDehors(Comporte)
    	SI Comporte.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    		SI Comporte.Date_peremption<>"" ALORS			
     
    			SI (DateVersEntier(Comporte.Date_peremption)-DateVersEntier(DateSys()))<Dureperemption.Dure ALORS
    				HLitPremier(Contient)
    				TANTQUE PAS HEnDehors(Contient)
    					SI Contient.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    						SI Contient.Date_peremption=Comporte.Date_peremption ALORS
    							q+=Contient.Qte
    						FIN
    					FIN
    					HLitSuivant(Contient)
    				FIN
    				SI Comporte.Qte>q ALORS
    					Info(Comporte.Designation+RC+"sera perimé dans "+RC+d+RC+"jour(s)"+RC+"date de peremption:"+RC+Comporte.Date_peremption)
    				FIN
     
    			FIN
    			Contient.Date_peremption=Comporte.Date_peremption	
    			Contient.Qte_Unité=Comporte.Qte_Unité
    		FIN
    		FIN
    	HLitSuivant(Comporte)
    FIN
    et voici le code d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur à la ligne 14 du traitement A chaque modification de FEN_Fiche_Contient.
    Vous avez appelé la fonction DateVersEntier.
    Une date doit être représentée par une chaîne de huit caractères au format AAAAMMJJ.
    dans les fichiers Contient et Comporte les champs Date_peremption ont le type Date.
    donc je ne comprend pas.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    je précise que quand on enlève la ligne:si Comporte.Date_peremption<>"" ALORS qu'il affiche cette erreur.
    si on remet la ligne il ne fait rien.
    merci et bonne compréhension.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    D'après le message, le code et les explications, je dirai que la rubrique "Date_Peremption" de certains enregistrements de "Comporte" est vide.
    Tu peux le vérifier avec le débogueur de WinDev.

    Tatayo.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Bonjour
    Utilises Sansespace () pour comparer avec =""

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ta variable comporte.datePeremption, est de type DATE. Ok. Mais si je me souviens bien, dans le type DATE, il y a 2 variantes DATE et DATE+HEURE.
    Peut-être que tu as la variante DATE+HEURE.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2012
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 144
    Points : 88
    Points
    88
    Par défaut trace ?
    Salut

    Pour la ligne : SI Comporte.Date_peremption<>"" ALORSje mettrais plutôt : Si dateValide( Comporte.Date_peremption) alorsPour ton problème : mets en ligne 12 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trace(Comporte.Date_peremption)
    et tu verras tout de suite ce qui ne va pas...

    LepatantPato

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    je précise que quand on enlève la ligne:si Comporte.Date_peremption<>"" ALORS qu'il affiche cette erreur.
    si on remet la ligne il ne fait rien.
    Donc, la ligne 11 détecte bien comme le suggère tatayo que la date est vide.
    Lorsque la date est vide, le programme saute le code conditionnel (lignes 12à 29) qui déclenche l'erreur ET ... l'erreur ne se produit pas, puisque le code n'est pas exécuté.

    Donc, vérifiez le contenu de votre variable ou de votre rubrique (trace, debug ou wdmap).
    Vérifiez aussi que votre date est bien de la forme attendue AAAAMMJJ, càd inversée par rapport au format usuel.
    Ce conseil n'a rien à voir avec l'erreur actuelle, mais vise à éviter une erreur supplémentaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SI (DateVersEntier(Comporte.Date_peremption)-DateVersEntier(DateSys()))<Dureperemption.Dure ALORS
    Revoyez ce code et utilisez, la fonction DateDiff dont c'est justement la destination spécifique.

    Enfin, tcb92 évoque l'hypothèse où vous auriez confondu le type DATE et la type DATEHEURE, ce qui ne semble pas le cas à vous lire.
    Néanmoins, si vous travaillez avec un type DATEHEURE, utilisez la propriété ..PartieDate dans la fonction DateDiff.

    Pour le reste, j'ai le sentiment que votre balayage defichier pourrait être optimisé.

    Bon travail.

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Comme dit Hemgé à la fin de son message, il y a des trucs suspects dans ce code, indépendamment de ce bug sur la date.

    Un HLitRecherche(), puis ensuite un HLitPremier() sur ce même fichier, et une boucle sur tout ce fichier Comporte... c'est bizarre.

    Il ne manquerait pas un HFiltre() ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    merci à tous! c'est ok

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut ET ?????
    Citation Envoyé par sandaff Voir le message
    merci à tous! c'est ok
    ET quelle était l'erreur ?
    Comme cela ceux qui liront ce billet plus tard, en sauront un peu plus et pourront mieux profiter de cette discussion.

    Hemgé

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    je crois c'est les deux code datevalide car il retournait une date vide qui n'est ni entier ni chaîne donc représenté par ! et la déclaration de la variable d.
    voici le code entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    // GESTION DE PEREMPTION
    q est un entier
    r est un entier=0
    s est un entier=0
    t est un entier=0
    u est un entier=0
    d est un entier
    HLitRecherche(Comporte,Comporte.Designation,FEN_Fiche_Contient.SC_Fiche.COMBO_Designation)
    SI HTrouve(Comporte) ALORS
    	FEN_Fiche_Contient.SC_Fiche.COMBO_Nom_magasin=Comporte.Nom_magasin
    	FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité=Comporte.Qte_Unité
    FIN
    HLitPremier(Comporte)
    TANTQUE PAS HEnDehors(Comporte)
    	SI Comporte.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    		t+=Comporte.Qte_Unite_Achete
    		HLitDernier(COPIEDATE)
    		COPIEDATE.Dateperemption=Comporte.Date_peremption
    		SI DateValide( Comporte.Date_peremption) ALORS
    			//trace(Comporte.Date_peremption) 
    			HLitPremier(Dureperemption)
    			TANTQUE PAS HEnDehors(Dureperemption)
    				//Info(Dureperemption.Dure)
    				HLitSuivant(Dureperemption)
    			FIN
     
    			d=DateVersEntier(Comporte.Date_peremption)-DateVersEntier(DateSys())
     
    			SI d<Dureperemption.Dure ALORS
    				HLitPremier(Contient)
    				TANTQUE PAS HEnDehors(Contient)
    					SI Contient.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    						SI Contient.Date_peremption=Comporte.Date_peremption ALORS
    							q+=Contient.Qte
    							r+=Contient.Qte_Unite_Vendu
    						FIN
    					FIN
    					HLitSuivant(Contient)
    				FIN
    				s=r/Comporte.Qte_Unité
    				q+=s
    				r=r-s*Comporte.Qte_Unité
    				SI Comporte.Qte>q ALORS
    					Info((Comporte.Qte-q)+RC+"quantite(s) de"+RC+Comporte.Designation+RC+"sera perimé dans "+RC+d+RC+"jour(s)"+RC+"date de peremption:"+RC+Comporte.Date_peremption)
    			SINON SI q>Comporte.Qte ALORS
    				HLitPremier(COPIEDATE)
    				TANTQUE PAS HEnDehors(COPIEDATE)
    					SI COPIEDATE.Dateperemption=Comporte.Date_peremption ALORS
    						COPIEDATE.Qte_comporte+=Comporte.Qte
    						COPIEDATE.Qte_contient=q
    					FIN
    					HLitSuivant(COPIEDATE)
    				FIN
     
    				FIN
     
    			FIN
     
    			FEN_Fiche_Contient.SC_Fiche.SAI_Date_peremption=Comporte.Date_peremption	
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité=Comporte.Qte_Unité
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unite_Vendu=Comporte.Qte_Unité
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité..Etat=Inactif
    			HSupprimeTout(COPIECOMPORTE)
    			HLitPremier(COPIECOMPORTE)
    			COPIECOMPORTE.CopieUnite=Comporte.Qte_Unité
    			HAjoute(COPIECOMPORTE)
     
    		FIN
    	FIN
    	HLitSuivant(Comporte)
    FIN
    u=t/Comporte.Qte_Unité
    t=t-u*Comporte.Qte_Unité
    HLitPremier(COPIEDATE)
    TANTQUE PAS HEnDehors(COPIEDATE)
    	SI COPIEDATE.Qte_comporte<>0 ALORS
     
    		SI (COPIEDATE.Qte_comporte+u)>COPIEDATE.Qte_contient ET t<>r ALORS
    			Info((COPIEDATE.Qte_comporte-COPIEDATE.Qte_contient)+RC+"Qte et"+RC+(t-r)+RC+"Unite de"+RC+Comporte.Designation+RC+"sera perimé dans "+RC+d+RC+"jour(s)"+RC+"date de peremption:"+RC+Comporte.Date_peremption)
    		FIN
    	FIN
    	HLitSuivant(COPIEDATE)
    FIN
    HSupprimeTout(COPIEDATE)

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut Ouh là là là !!
    Bonjour,

    Vous êtes certain que ce code fonctionne ?
    Peut-être dans certains cas bien conformes à ce que vous souhaitez ... mais au-delà, certainement pas.
    En plus, il n'y a aucune gestion des erreurs.

    Lignes 9 à 12 : SI HTrouve() Que se passe-t-il si cela échoue ?
    Lignes 13 à 71 : HLitPremier - TANT QUE Que se passe-t-il avec les entiers u et t en lignes 72 et 73, et plus bas, si votre recherche a échoué ?
    Ligne 63 : HSupprimeTout supprime physiquement tous les enregistrements et vous n'avez pas de problème avec la ligne 64 (qui ne peut plus rien trouver) ? Ah oui, vous ne testez pas l'erreur.
    Lignes 40 à 42 : en 40, vous ne gérez pas les arrondis dans votre division et WD va faire une conversion automatique vers un décimal quelconque, puis vous effectuez la multiplication en 42 et vous espérez trouver quoi exactement ? le vrai reste ?

    Pour votre parcours :
    Ligne 8 : HlitRecherche selon une clé et une valeur
    Ligne 9 : vous avez trouvé (enfin, vous partez de ce principe)
    Ligne 13 : vous repartez du début du fichier alors que vous aviez trouvé le premier enregistrement souhaité et puis vous parcourez tous les enregistrements du fichier (ligne 14 TANT QUE et Ligne 15 Si ... = ....) sans utiliser les instructions de parcours !!
    Il faut utiliser HLitRecherchePremier en ligne 8, tester l'erreur, puis HLitSuivant.
    Enfin, il faut surtout relire toute la doc sur les HLit..., HLitRecherche... et la gestion des recherches génériques ou à l'identique.

    En plus, vous ne renseignez jamais la rubrique de parcours que vous utilisez sur un fichier. Ça ne vas pas être aisé à relire et vous risquez d'avoir des surprises.

    Vous avez déjà beaucoup de travail pour corriger tout cela et j'ai sans doute sauté quelques autres problèmes.
    Si vous laissez cela en l'état, vous courrez à la catastrophe.

    Juste pour rappel, la fonction DateDifférence existe !

    Bon courage

    Hemgé

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Merci Monsieur hemgé pour vos remarque!
    Seulement je vois pas de problème chez moi ici et je serrai étonnée des buggs sur mon code car mon MCD et mon écran de saisie sont conforme à mon traitement.

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Seulement je vois pas de problème chez moi ici et je serrai étonnée des buggs sur mon code ...
    C'est votre application et votre code.
    Nous n'allons certainement pas vous forcer.
    Tenter raisonnablement de vous convaincre qu'un peu de modestie et de doute peuvent être salutaires, oui, mais pas nous épuiser à une tâche apparemment impossible.

    Une dernière tentative quand même.
    Perdez un peu de votre temps à tester le résultat de votre ligne 64
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitPremier(COPIECOMPORTE)
    Elle renvoie Vrai ou Faux ? Et si elle renvoie Vrai, quelle est la valeur de HTrouve ?
    Et que valent les rubriques de l'enregistrement de COPIECOMPORTE ?
    Et si elles ne sont pas vides, prenez la précaution de faire un HRAZ(COPIECOMPORTE ) entre les lignes 63 (HSupprimeTout) et 64 (HLitPremeir).

    Eh oui, j'espère encore vous étonner !

  15. #15
    Membre habitué
    Homme Profil pro
    Mis a la retraite forcée
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Mis a la retraite forcée
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par sandaff Voir le message
    Merci Monsieur hemgé pour vos remarque!
    Seulement je vois pas de problème chez moi ici et je serrai étonnée des bugs sur mon code car mon MCD et mon écran de saisie sont conforme à mon traitement.
    On sait tous programmer, mais il y a des erreurs a éviter, des mauvaises habitudes a ne pas prendre, donc il faut se forcer a se corriger tout de suite avant de prendre le mauvais plis.
    J'étais comme vous au début, je refusais d'écouter et de voir mes erreurs. Mes programmes fonctionnaient, mais j'avais souvent des erreurs.
    Une reprise en main a fait que je reviens de moins en moins sur la ré écriture du code, qu'il est beaucoup plus lisible et que même des années plus tard, si je reviens dessus, je sais qui fait quoi, sans a avoir a me décortiquer la tête.

    Vous avez la chance d'avoir sur ce forum des gens compétents qui mettent leurs savoir et conseils a votre service.
    Soyez humble et suivez leurs conseils, cela ne peut vous être que profitable. Suivez les conseils de "Hemgé" !

    Cordialement.
    On trouve des chercheurs qui cherchent, mais on cherche des chercheurs qui trouvent !

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2015
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 405
    Points : 0
    Points
    0
    Par défaut
    Bonjour!
    Merci pour votre coup de main sur tout vous m’excuserez du retard de la réponse.
    Je suis entrain de me mettre à jour sur des appi android.
    je crois que je suis pris quelque part comme responsable de projets de développement sur les appi mobile.
    Pour revenir à nos moutons:
    J'ai mis le code dans l’événement: A chaque sélection d'une ligne(dans le champ désignation de la fiche_Contient).
    et COPIECOMPORTE.CopieUnite=Comporte.Qte_Unité permet de calculer le détail après le traitement mis dans la discussion.
    mais tout le code entier est en bas pour vous édifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    // GESTION DE PEREMPTION
    q est un entier
    r est un entier=0
    s est un entier=0
    t est un entier=0
    u est un entier=0
    d est un entier
    HLitRecherche(Comporte,Comporte.Designation,FEN_Fiche_Contient.SC_Fiche.COMBO_Designation)
    SI HTrouve(Comporte) ALORS
    	FEN_Fiche_Contient.SC_Fiche.COMBO_Nom_magasin=Comporte.Nom_magasin
    	FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité=Comporte.Qte_Unité
    FIN
    HLitPremier(Comporte)
    TANTQUE PAS HEnDehors(Comporte)
    	SI Comporte.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    		t+=Comporte.Qte_Unite_Achete
    		HLitDernier(COPIEDATE)
    		COPIEDATE.Dateperemption=Comporte.Date_peremption
    		SI DateValide( Comporte.Date_peremption) ALORS
    			//trace(Comporte.Date_peremption) 
    			HLitPremier(Dureperemption)
    			TANTQUE PAS HEnDehors(Dureperemption)
    				//Info(Dureperemption.Dure)
    				HLitSuivant(Dureperemption)
    			FIN
     
    			d=DateVersEntier(Comporte.Date_peremption)-DateVersEntier(DateSys())
     
    			SI d<Dureperemption.Dure ET d>0 ALORS
    				HLitPremier(Contient)
    				TANTQUE PAS HEnDehors(Contient)
    					SI Contient.Designation=FEN_Fiche_Contient.SC_Fiche.COMBO_Designation ALORS
    						SI Contient.Date_peremption=Comporte.Date_peremption ALORS
    							q+=Contient.Qte
    							r+=Contient.Qte_Unite_Vendu
    						FIN
    					FIN
    					HLitSuivant(Contient)
    				FIN
    				SI Comporte.Qte_Unité<>0 ALORS
    				s=r/Comporte.Qte_Unité
    				q+=s
    				r=r-s*Comporte.Qte_Unité
    				FIN
    				SI Comporte.Qte>q ALORS
    					Info((Comporte.Qte-q)+RC+"quantite(s) de"+RC+Comporte.Designation+RC+"sera perimé dans "+RC+d+RC+"jour(s)"+RC+"date de peremption:"+RC+Comporte.Date_peremption)
    			SINON SI q>Comporte.Qte ALORS
    				HLitPremier(COPIEDATE)
    				TANTQUE PAS HEnDehors(COPIEDATE)
    					SI COPIEDATE.Dateperemption=Comporte.Date_peremption ALORS
    						COPIEDATE.Qte_comporte+=Comporte.Qte
    						COPIEDATE.Qte_contient=q
    					FIN
    					HLitSuivant(COPIEDATE)
    				FIN
     
    				FIN
     
    			FIN
     
    			FEN_Fiche_Contient.SC_Fiche.SAI_Date_peremption=Comporte.Date_peremption	
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité=Comporte.Qte_Unité
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unite_Vendu=Comporte.Qte_Unité
    			FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unité..Etat=Inactif
    			HSupprimeTout(COPIECOMPORTE)
    			HLitPremier(COPIECOMPORTE)
    			COPIECOMPORTE.CopieUnite=Comporte.Qte_Unité
    			HAjoute(COPIECOMPORTE)
     
    		FIN
    	FIN
    	HLitSuivant(Comporte)
    FIN
    SI Comporte.Qte_Unité<>0 ALORS
    u=t/Comporte.Qte_Unité
    t=t-u*Comporte.Qte_Unité
    FIN
    HLitPremier(COPIEDATE)
    TANTQUE PAS HEnDehors(COPIEDATE)
    	//DateVersEntier(Comporte.Date_peremption)-DateVersEntier(DateSys())
    	SI COPIEDATE.Qte_comporte<>0 ALORS
     
    		SI (COPIEDATE.Qte_comporte+u)>COPIEDATE.Qte_contient ET t<>r ALORS
    			Info((COPIEDATE.Qte_comporte-COPIEDATE.Qte_contient)+RC+"Qte et"+RC+(t-r)+RC+"Unite de"+RC+Comporte.Designation+RC+"sera perimé dans "+RC+d+RC+"jour(s)"+RC+"date de peremption:"+RC+Comporte.Date_peremption)
    		FIN
    	FIN
    	HLitSuivant(COPIEDATE)
    FIN
    HSupprimeTout(COPIEDATE)
     
     
    // FIN DE GESTION DE PEREMPTION
     
    HLitPremier(PRODUIT)
    TANTQUE PAS HEnDehors(PRODUIT)
    	SI FEN_Fiche_Contient.SC_Fiche.COMBO_Designation=PRODUIT.Designation ALORS
    		FEN_Fiche_Contient.SC_Fiche.SAI_Pv=PRODUIT.Pv
    		FEN_Fiche_Contient.SC_Fiche.SAI_TVA=PRODUIT.Pv*PRODUIT.Taux_TVA
    		FEN_Fiche_Contient.SC_Fiche.SAI_TPvHT=PRODUIT.Pv*FEN_Fiche_Contient.SC_Fiche.SAI_Qte
    		FEN_Fiche_Contient.SC_Fiche.SAI_TPvTTC=FEN_Fiche_Contient.SC_Fiche.SAI_TPvHT+FEN_Fiche_Contient.SC_Fiche.SAI_TVA
    		FEN_Fiche_Contient.SC_Fiche.SAI_Remise=FEN_Fiche_Contient.SC_Fiche.SAI_TPvTTC*PRODUIT.Taux_remise
    		HLitPremier(COPIECOMPORTE)
    		SI COPIECOMPORTE.CopieUnite=0 ALORS
    			FEN_Fiche_Contient.SC_Fiche.SAI_PVT_Unite=0
    		SINON
    		FEN_Fiche_Contient.SC_Fiche.SAI_PVT_Unite=FEN_Fiche_Contient.SC_Fiche.SAI_Pv*FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unite_Vendu/COPIECOMPORTE.CopieUnite+PRODUIT.Pv*PRODUIT.Taux_TVA*FEN_Fiche_Contient.SC_Fiche.SAI_Qte_Unite_Vendu/COPIECOMPORTE.CopieUnite
    		FIN
     
    	FIN
    	HLitSuivant(PRODUIT)
     
    FIN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] probléme de gestion des dates
    Par nedalnedal dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/04/2012, 14h12
  2. Problème de gestion de date
    Par bruce207 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/05/2008, 12h26
  3. Petit problème de gestion de Date et de TimeZone
    Par Remi Masson dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 19/03/2008, 00h25
  4. Problème de gestion de champ Date
    Par habasque dans le forum JSF
    Réponses: 2
    Dernier message: 10/12/2007, 18h15
  5. Réponses: 6
    Dernier message: 12/07/2006, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo