Page 1 sur 1

Le compte (bancaire) est bon

Publié : jeu. 27/nov./2008 12:58
par Claude OI
Bonjour à tous,
débutant en PB je me suis dis que le plus simple (!!) serait peut être d'adapter un petit programme de ceux que j'ai déjà en PHP.
Voici donc ma toute première réalisation qui sert uniquement à vérifier les comptes bancaires entrés dans les formulaires divers.

J'aimerais juste avoir qq retours pour savoir si je suis dans le vrai en matière de PB ou si je dois me convertir à la couture.

A bientôt

Code : Tout sélectionner

Enumeration
#WindowMain

#GAD_TEXT_code_banque
#GAD_TEXT_code_guichet
#GAD_TEXT_compte
#GAD_TEXT_rib
#GAD_TEXT_message

#GAD_STR_code_banque
#GAD_STR_code_guichet
#GAD_STR_compte
#GAD_STR_rib

#GAD_BOUT_validation
#GAD_BOUT_abandon

EndEnumeration

Declare controlerib()



OpenWindow(#WindowMain, 0, 0, 550, 160, "Contrôle des comptes bancaires", #PB_Window_ScreenCentered )
CreateGadgetList(WindowID(#WindowMain))

ButtonGadget(#GAD_BOUT_validation, 20,20, 150, 20, "controle du compte")
ButtonGadget(#GAD_BOUT_abandon, 20, 110, 150, 20, "Abandon")

TextGadget(#GAD_TEXT_code_banque, 200, 20, 120, 20, "Code banque")
TextGadget(#GAD_TEXT_code_guichet, 200, 50, 120, 20, "Code guichet")
TextGadget(#GAD_TEXT_compte, 200, 80, 120, 20, "Numéro de compte")
TextGadget(#GAD_TEXT_rib, 200, 110, 120, 20, "Clé RIB")

TextGadget(#GAD_TEXT_message, 200, 140, 330, 15, "", #PB_Text_Center)
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_FrontColor, $0000FD )
HideGadget(#GAD_TEXT_message, 1)

StringGadget(#GAD_STR_code_banque, 350, 20, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_code_guichet, 350, 50, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_compte, 350, 80, 180, 20, "", #PB_String_UpperCase)
StringGadget(#GAD_STR_rib, 350, 110, 50, 20, "",#PB_String_Numeric)

Repeat 
	event = WaitWindowEvent()
		If event = #PB_Event_Gadget 
			Select EventGadget()
				Case #GAD_BOUT_validation
					;déclenche le controle du compte bancaire
					controlerib()
			EndSelect		
		EndIf
Until EventGadget() = #GAD_BOUT_abandon



Procedure controlerib()
	;Réinitialise l'affichage préalablement au contrôle
	SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $000000 )
    HideGadget(#GAD_TEXT_message, 1)

	;Certain comptes comme ceux de la Poste comporte des lettres dans le numéro de compte
	;Il est nécéssaire de remplacer ces lettres par un caractère numérique selon l'algorithme suivant
     compte.s = ""
     For compteur = 1 To 11 ;Les 11 caractères du compte sont lus les un après les autres
        caractere.s = Mid(GetGadgetText(#GAD_STR_compte), compteur, 1) ; on extrait le caractère
        ascode.b = Asc(caractere) ; et on lit son code ASCII
        
        If ascode > 82 ;soit [S-Z]									;
            compte + Str((Asc(caractere) -81)%10)			;
        ElseIf ascode >73 ; soit [J-R]							;
            compte + Str((Asc(caractere)-73)%10)			; si le code ASCII représente une lettre il est transformé selon son rang
        ElseIf ascode >57 ; soit [A-I]							; et ajouté en fin de chaine "compte"
            compte + Str((Asc(caractere)-64)%10)			;
        Else
            compte + caractere										; si c'est un chiffre il est conservé tel quel et ajouté à la chaine
        EndIf       
     Next
     
     ;par exemple, le compte 00915078A24 sera remplacé par 00915078124
     ;code ASCII de A = 65 soit 65-64=1     1%10=1
     ;ou encore le compte Z0915078A24 sera remplacé par 90915078124
     ;code ASCII de Z = 90 soit 90-81=9   9%10=9
     
	 ; ensuite le calcul de la clé est le suivant que je vous laisse découvrir. Un petit conseil, surlignez bien les parenthèses pour suivre les calculs     
     cle.s = Str(Val(GetGadgetText(#GAD_STR_code_banque))%97)
     cle = Str((Val(cle) * 100000 + (Val(GetGadgetText(#GAD_STR_code_guichet))))%97)
     cle = Str((Val(cle) * 1000000 + (Val(Left(compte , 6))))%97)
     cle = Str((Val(cle) * 100000 + (Val(Right(compte , 5))))%97)
     cle = Str(((97 - Val(cle)) * 100)%97)
     If Len(cle) < 2 : cle = "0" + cle : EndIf
 
 	 ;et une simple comparaison permet de modifier l'affichage pour attirer l'attention en cas d'erreur     
     If cle <> GetGadgetText(#GAD_STR_rib)
            SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetText(#GAD_TEXT_message, "Pour ce compte la clé RIB devrait être: " + cle + ". A vous de voir  !!!")
            HideGadget(#GAD_TEXT_message, 0)
     EndIf

EndProcedure

Publié : jeu. 27/nov./2008 13:42
par Kwai chang caine
Tout d'abord, je suis super content d'accueillir un "petit nouveau" dans notre famille 8)

Pour ton premier code, je suis dans le regret de te dire franchement et sans détour, le fond interne de ma pensée..........

Et cela meme si ça doit te décevoir profondément, voir meme te blesser dans ton fond le plus interne.........

Car il est des moments ou une bonne vérité, vaut mieux que beaucoup d'années de dur labeur, et de faux espoirs


ABANDONNE LA COUTURE !!! :lol: :lol:


Tu commence a peu pres ou j'en suis en bossant depuis 4 ans :oops:

Encore une fois bienvenue à toi
Et a bientot :wink:

Publié : ven. 28/nov./2008 7:51
par Stefou
Salut et bienvenue

Je viens de lire ton code, il est propre est bien commenté.
Kcc à raison, laisse tombé la couture !


a+ et bonne continuation
Stef

Publié : sam. 29/nov./2008 16:29
par comtois
Bienvenue

Très sympa ton code, puis-je le copier sur le site DVP ?

Publié : lun. 01/déc./2008 9:39
par Claude OI
Bonjour à tous

Kcc et Stephou, arrêtez les compliments la tête ne passe plus par la porte. :oops:

Pour comtois, bien sûr que tu peux le copier et le diffuser autant que tu voudra. Tant mieux si cela peut servir à quelqu'un.

Ce n'est qu'une petite partie d'un gestionnaire de répertoire que je suis en train d'écrire (les pros diront: développer) mais dont je ne sais pas quand j'en verrai la fin.
Cela commence bien, rien que pour la partie graphique, j'ai plus de 200 gadgets, un panel de 10 onglets et chaque champs de saisie est vérifié et modifié dans sa présentation, si une erreur est détectée dans la saisie. Sans compter l'affichage des messages.

Juste en hors d'œuvre, je vous livre ma solution d'énumération pliable.

Code : Tout sélectionner

Enumeration

;{ Les styles
	;{ Les polices
		#POLICE_standard
		#POLICE_gras
	;} fin des polices
;} fin des styles
;{ Les images
	#BOUTON_fleche
;} fin des images

;{ Fenêtre principale

	;{ La fenêtre
		#WindowMain
	;}
	
	;{ Les boutons
		#GAD_BOUT_creation
		#GAD_BOUT_consultation
		#GAD_BOUT_modification
		#GAD_BOUT_suppression
		#GAD_BOUT_validation
		#GAD_BOUT_abandon
		#GAD_BOUT_sqlite
		#GAD_BOUT_supfiche
	;}
	
	;{ Les frames
		#GAD_FR3D_exterieur
		#GAD_FR3D_interieur
	;}
	
	;{ Les zones de saisie texte
		#GAD_TEXT_msg_nom
		#GAD_TEXT_msg_divers
	;}
		
;}

;{ Panel de gestion des fiches
	#GAD_PANL_fiche
	;{ Les onglets du panel de création de fiche
		; L'onglet des civilités
			;{ Les labels
				#GAD_TEXT_civilite
				#GAD_TEXT_nom
				#GAD_TEXT_prenom
				#GAD_TEXT_nomjf
				#GAD_TEXT_ss
				#GAD_TEXT_motif
				#GAD_TEXT_enseigne
				#GAD_TEXT_type_entreprise                                
				#GAD_TEXT_registre_commerce
				#GAD_TEXT_ape
				#GAD_TEXT_siret
				#GAD_TEXT_siren
			;} fin des labels
			;{ Les listes de choix
			 	#GAD_CBX_civilite                                                      
			    #GAD_CBX_motif
			    #GAD_CBX_type_entreprise
			;} fin des listes de choix
			;{ les zones saisie texte
			    #GAD_STR_nom 
			    #GAD_STR_prenom
			    #GAD_STR_nom_jf
			    #GAD_STR_securite_sociale
			    #GAD_STR_enseigne
			    #GAD_STR_registre_commerce
			    #GAD_STR_ape
			    #GAD_STR_siret
			    #GAD_STR_siren
			;} fin des zones saisie texte
			;{ les boutons
			 	#GAD_BIMG_motif
			 	#GAD_BIMG_type_entreprise
		 		#GAD_BOUT_fiches_liees
		 		#GAD_IMG_fleche_droite
			;} fin des boutons
		; L'onglet de l'adresse
			;{ Les labels
				#GAD_TEXTresse1
				#GAD_TEXTresse2
				#GAD_TEXTresse3
				#GAD_TEXT_village
				#GAD_TEXT_code_postal
				#GAD_TEXT_commune
				#GAD_TEXT_pays
			;} fin des labels
			;{ Les frames
				#GAD_FR3Dresse
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STRresse1
				#GAD_STRresse2
				#GAD_STRresse3
				#GAD_STR_village
				#GAD_STR_code_postal
				#GAD_STR_commune
				#GAD_STR_pays
			;} fin des zones de saisie texte
		; L'onglet de la naissance
			;{ Les labels
				#GAD_TEXT_date_naissance
				#GAD_TEXT_date_creation_entreprise
				#GAD_TEXT_code_postal_naissance
				#GAD_TEXT_ville_naissance
				#GAD_TEXT_pays_naissance
				#GAD_TEXT_nationalite
				#GAD_TEXT_date_deces
				#GAD_TEXT_date_fermeture_entreprise
			;} fin des labels
			;{ Les frames
				#GAD_FR3D_naissance
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_date_naissance
				#GAD_STR_code_postal_naissance
				#GAD_STR_ville_naissance
				#GAD_STR_pays_naissance
				#GAD_STR_nationalite
				#GAD_STR_date_deces
			;} fin des zones de saisie texte
			;{ Les messages tooltip
				#GAD_STR__date_naissance
			;} fin des messages tooltip
		; L'onglet des communications personnelles
			;{ Les labels
				#GAD_TEXT_phone_perso1
				#GAD_TEXT_phone_perso2
				#GAD_TEXT_phone_perso3
				#GAD_TEXT_gsm_perso1
				#GAD_TEXT_gsm_perso2
				#GAD_TEXT_gsm_perso3
				#GAD_TEXT_fax_perso1
				#GAD_TEXT_fax_perso2
				#GAD_TEXT_fax_perso3
				#GAD_TEXT_mail_perso1
				#GAD_TEXT_mail_perso2
				#GAD_TEXT_web_perso1
				#GAD_TEXT_web_perso2
			;} fin des labels
			;{ Les zones de saisie texte
				#GAD_STR_phone_perso1
				#GAD_STR_phone_perso2
				#GAD_STR_phone_perso3
				#GAD_STR_gsm_perso1
				#GAD_STR_gsm_perso2
				#GAD_STR_gsm_perso3
				#GAD_STR_fax_perso1
				#GAD_STR_fax_perso2
				#GAD_STR_fax_perso3
				#GAD_STR_mail_perso1
				#GAD_STR_mail_perso2
				#GAD_STR_web_perso1
				#GAD_STR_web_perso2
			;} fin des zones de saisie texte
		; L'onglet des communications professionnelles
			;{ Les labels
				#GAD_TEXT_phone_prof1
				#GAD_TEXT_phone_prof2
				#GAD_TEXT_phone_prof3
				#GAD_TEXT_gsm_prof1
				#GAD_TEXT_gsm_prof2
				#GAD_TEXT_gsm_prof3
				#GAD_TEXT_fax_prof1
				#GAD_TEXT_fax_prof2
				#GAD_TEXT_fax_prof3
				#GAD_TEXT_mail_prof1
				#GAD_TEXT_mail_prof2
				#GAD_TEXT_web_prof1
				#GAD_TEXT_web_prof2
			;} fin des labels
			;{ Les zones de saisie texte
				#GAD_STR_phone_prof1
				#GAD_STR_phone_prof2
				#GAD_STR_phone_prof3
				#GAD_STR_gsm_prof1
				#GAD_STR_gsm_prof2
				#GAD_STR_gsm_prof3
				#GAD_STR_fax_prof1
				#GAD_STR_fax_prof2
				#GAD_STR_fax_prof3
				#GAD_STR_mail_prof1
				#GAD_STR_mail_prof2
				#GAD_STR_web_prof1
				#GAD_STR_web_prof2
			;} fin des zones de saisie texte
		; L'onglet de la banque
			;{ Les labels
				#GAD_TEXT_nom_banque
				#GAD_TEXT_code_banque
				#GAD_TEXT_code_guichet
				#GAD_TEXT_compte
				#GAD_TEXT_rib
			;} fin des labels
			;{ Les frames
				#GAD_FR3D_banque1
				#GAD_FR3D_banque2
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_nom_banque1
				#GAD_STR_code_banque1
				#GAD_STR_code_guichet1
				#GAD_STR_compte1
				#GAD_STR_rib1
				#GAD_STR_nom_banque2
				#GAD_STR_code_banque2
				#GAD_STR_code_guichet2
				#GAD_STR_compte2
				#GAD_STR_rib2
			;} fin des zones de saisie texte
		; L'onglet du contact
			;{ Les labels
				#GAD_TEXT_civilite_contact
				#GAD_TEXT_nom_contact
				#GAD_TEXT_prenom_contact
				#GAD_TEXTresse1_contact
				#GAD_TEXTresse2_contact
				#GAD_TEXTresse3_contact
				#GAD_TEXT_village_contact
				#GAD_TEXT_code_postal_contact
				#GAD_TEXT_commune_contact
				#GAD_TEXT_phone_contact
				#GAD_TEXT_gsm_contact
				#GAD_TEXT_fax_contact
				#GAD_TEXT_mail_contact
			;} fin des labels
			;{ Les listes de choix
				#GAD_COBO_civilite_contact
			;} fin des listes de choix
			;{ Les zones de saisie texte
				#GAD_STR_nom_contact
				#GAD_STR_prenom_contact
				#GAD_STRresse1_contact
				#GAD_STRresse2_contact
				#GAD_STRresse3_contact
				#GAD_STR_village_contact
				#GAD_STR_code_postal_contact
				#GAD_STR_commune_contact
				#GAD_STR_phone_contact
				#GAD_STR_gsm_contact
				#GAD_STR_fax_contact
				#GAD_STR_mail_contact
				#GAD_STR_web_contact
			;} fin des zones de saisie texte
		; L'onglet des papiers
			;{ Les labels
				#GAD_TEXT_numero_document
				#GAD_TEXT_delivrance_document
				#GAD_TEXT_lieu_document
				#GAD_TEXT_expiration_document
			;} Fin des labels			
			;{ Les frames
				#GAD_FR3D_carte_identite
				#GAD_FR3D_passeport
				#GAD_FR3D_carte_sejour
			;} Fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_carte_identite_numero
				#GAD_STR_carte_identite_delivrance
				#GAD_STR_carte_identite_lieu
				#GAD_STR_carte_identite_expiration
				#GAD_STR_passeport_numero
				#GAD_STR_passeport_delivrance
				#GAD_STR_passeport_lieu
				#GAD_STR_passeport_expiration
				#GAD_STR_carte_sejour_numero
				#GAD_STR_carte_sejour_delivrance
				#GAD_STR_carte_sejour_lieu
				#GAD_STR_carte_sejour_expiration
			;} Fin des zones de saisie texte
		; L'onglet photo
			;{ Les labels
				#GAD_TEXT_photo
			;} fin des labels
			;{ Les listes exploratoires
				#GAD_EXPL_photo
			;} fin des listes exploratoires		
		; L'onglet des commentaires
			;{ Les labels
				#GAD_TEXT_commentaire
			;} fin des labels
			;{ Les editeurs
				#GAD_EDIT_commentaire
			;} fin des editeurs
	;} fin des onglets du panel
;} Fin du panel

EndEnumeration	
Je n'avais pas encore vu cela dans aucun des exemples que j'ai parcouru mais je trouve que c'est bien pratique. Comme dirai l'autre, une fois plié cela tiens dans la poche.

Pour l'archivage, j'ai choisi de créer une base sqlite car j'en avait déjà tâté un peu en Php et je trouve que c'est simple à utiliser et portable facilement.

Enfin bref, j'ai des "proc in the ram" (traduction improbable de "du pain sur la planche" et je mettrai tout cela en ligne au fur et à mesure.

Bon courage à tous et à bientôt