Page 1 sur 2

Développez vos applications de gestions 10 fois plus vite

Publié : lun. 15/mai/2017 14:52
par microdevweb
PB_RAD

:arrow: Téléchargement ICI

Est une RAD développé en PureBasic et pour PureBasic.

Il est développé en Objet et se compose de

6 modules/class

Voici que l'on peut obtenir en moins de 10 minutes et moins de 100 de lignes de code (note le code est en dessous)
Image

Code : Tout sélectionner

; TUTO PB_RAB
; Gestion d'un fichier de client simple
;=======================================================================================================================
; NB: les class PB_RAD sont en version béta et non dépourvue de bug

; Nous allons ici créer un fichier client simple
; Ce fichier aura une table liée (localité) qui aura elle même une table liée (pays)
; Le rad va s'occuper de tout
;
; Etape 1:
; Inclusion des fichiers nécessaires
; NB: le projet et le RAD sont dans 2 répertoires RAD et TUTO qui sont eux même dans un répertoire
; pour atteindre le répertoire RAD je vais donc devoir sortir du répertoire TUTO avec ..\  
; a vous de modifier IncludePath selon votre configuration
IncludePath "..\RAD"
XIncludeFile "DB.pbi"       ; Class nécessaire à l'analyse et la gestion de base de données
XIncludeFile "RAD.pbi"      ; Class commune à FicForm et TabForm
XIncludeFile "TBL.pbi"      ; Class pour l'affichage de table exigée par TabForm
XIncludeFile "FicForm.pbi"  ; Gestion des fenêtres de type fiche
XIncludeFile "TabForm.pbi"  ; Gestion  des fenêtre de type table

; Ici on créer l'analyse de notre base de données
; 1) On initialise
DB::Init("DATA","Client.sqlite","","") 
; libre à vous d'utiliser une autre exention que sqlite :)

; 2) Le fichier pays
DB::AddTable("pays","id")
DB::AddColumn("nom","pays",DB::#Type_Text,DB::#Not_Null|DB::#Unique)
; Je veux que le nom soit remplit et un seule pays du même nom

; 2) Localité
DB::AddTable("localite","id")
DB::AddColumn("nom","Localité",DB::#Type_Text,DB::#Not_Null)
DB::AddColumn("code","Code postal",DB::#Type_Text,DB::#Not_Null)
DB::AddColumn("id_pays","Pays",DB::#Type_Link,DB::#Not_Null,"pays","id","nom")
; Je veux une seule localité avec le même pays et le même code postal
; je vais donc ajouté une clé composée
DB::AddCompositeKey("nom"+Chr(10)+"code"+Chr(10)+"id_pays")
; 3) Client
DB::AddTable("client","id")
DB::AddColumn("nom","Nom",DB::#Type_Text,DB::#Not_Null)
DB::AddColumn("adresse","Adresse",DB::#Type_Text,DB::#Not_Null)
DB::AddColumn("id_localite","Localité",DB::#Type_Link,DB::#Not_Null,"localite","id","nom")
DB::AddColumn("telephone","Téléphone",DB::#Type_Phone)
DB::AddColumn("gsm","GSM",DB::#Type_Phone)
DB::AddColumn("remarque","Remarque",DB::#Type_Note)
; Je veux un seul client pour une même localité
; je vais donc ajouté une clé composée
DB::AddCompositeKey("nom"+Chr(10)+"id_localite")

;Je génère maintenant la base de données
DB::Build()

; Création des fenêtres
; Etape 1 : Création des objets 
; --> FicForm
Global.RAD::_FicForm paysFic,localiteFic,clientFic
; --> TabForm
Global.RAD::_TabForm paysTab,LocaliteTab,clientTab
; Etape 2 : Instanciation des objets et création des fenêtres
; ATTENTION l'ordre peut être important en effet les fenêtres de type fiche peuvent
; faire appel à des objet de type table donc ces derniers doivent être créé avant

; Les pays
paysFic=FicForm::New("pays","Nouveau pays","Edition d'un pays")
paysFic\AddGadget("nom")
paysFic\SetSize(300,0,0,0)

paysTab=TabForm::New("pays","Liste des pays",800,600,paysFic)
paysTab\AddColumn("nom",1,TabForm::#ShearchOn)
; Note : la taille de la colonne est en pourcentage
;        les divers flag permette l'affichage d'un bouton de recherche ou filtre (pour les colonne liée)
paysTab\SetOrder("pays.nom")

; Les localités
localiteFic=FicForm::New("localite","Nouvelle localité","Edition d'une localité")
localiteFic\AddGadget("id_pays",0,paysTab)
; paysTab est la fenêztre qui sera ouverte lord du clic sur le bouton
localiteFic\AddGadget("nom")
localiteFic\AddGadget("code")
localiteFic\SetSize(300,0,0,0)

LocaliteTab=TabForm::New("localite","Liste des localités",800,600,localiteFic)
LocaliteTab\AddColumn("id_pays",0.5,TabForm::#FiltersOn)
LocaliteTab\AddColumn("nom",0.5,TabForm::#ShearchOn)
LocaliteTab\SetOrder("pays.nom,localite.nom")

; Les clients
clientFic=FicForm::New("client","Nouveau client","Edition d'un client",2)

; ICI je place 2 colonnes car les téléphones seront l'un  à coté de l'autre
clientFic\AddGadget("nom",2)
clientFic\AddGadget("adresse",2)
clientFic\AddGadget("id_localite",2,LocaliteTab)
clientFic\AddGadget("telephone")
clientFic\AddGadget("gsm")
clientFic\AddGadget("remarque",2)
clientFic\SetSize(300,0,0,0)

clientTab=TabForm::New("client","Liste des clients",800,600,clientFic)
clientTab\AddColumn("id_localite",0.5,TabForm::#FiltersOn)
clientTab\AddColumn("nom",0.5,TabForm::#ShearchOn)
clientTab\SetOrder("localite.nom,client.nom")

; On teste tout ca
; j'ouvre une fenêtre principale
Procedure Exit()
  CloseWindow(0)
  End
EndProcedure
OpenWindow(0,0,0,800,600,"Tuto PB_RAD une simple fichier client",
           #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MaximizeGadget)
BindEvent(#PB_Event_CloseWindow,@Exit(),0)

clientTab\Open(0)

Repeat
  WaitWindowEvent()
ForEver 

Re: Développez vos applications de gestions 10 fois plus vit

Publié : lun. 15/mai/2017 15:50
par SPH
Bug : quand on clique sur une ligne vierge, ca plante (je suis sur que ce n'est qu'un bug temporaire) :idea:

Re: Développez vos applications de gestions 10 fois plus vit

Publié : lun. 15/mai/2017 17:18
par microdevweb
Merci pour cete info SPH, je regarderais à cela

Re: Développez vos applications de gestions 10 fois plus vit

Publié : mar. 16/mai/2017 11:06
par microdevweb
Une nouvelle version est en ligne.
Elle reprend
  • des corrections de bugs
  • la gestion presque complète des fichiers annexes
    • Pays
    • Localité
    • catégories
    • sous-catégories
    • Tva
    • Produits
Je suis moi même étonné de la rapidité de développement (une fois RAD opérationnel) pour crée les deux fenêtres nécessaires à la gestion d'un fichier.

Reste à faire
  • Ajout édition de facture (ne pourra être fait que partiellement avec le RAD) qui devra évoluer dans ce sens
  • Les impressions, qui vont demandé la conception d'un nouveau module
  • Vérification et corrections de bugs

Re: Développez vos applications de gestions 10 fois plus vit

Publié : mer. 17/mai/2017 13:25
par microdevweb
Voici une nouvelle version, j'ai tout passé en Objet et au final pour l'appli final c'est encore moins de code

Re: Développez vos applications de gestions 10 fois plus vit

Publié : mer. 17/mai/2017 14:08
par Ar-S
Je suis ton topic d'assez loin mais c'est intéressant, merci pour ce boulot.

Re: Développez vos applications de gestions 10 fois plus vit

Publié : mer. 17/mai/2017 15:41
par microdevweb
Merci Ar-S

Note: nouvelle version

Re: Développez vos applications de gestions 10 fois plus vit

Publié : ven. 19/mai/2017 10:20
par microdevweb
Voila le développement de l'application de facturation est presque terminée, il reste les impressions et un gros débogage.

Re: Développez vos applications de gestions 10 fois plus vit

Publié : ven. 19/mai/2017 11:14
par microdevweb
Voila le développement de la gestion proprement dite est terminé, reste les impressions

Re: Développez vos applications de gestions 10 fois plus vit

Publié : ven. 19/mai/2017 21:15
par Kwai chang caine
Je ne pense pas que cette application me soit utile un jour, quoi qu'on ne sache jamais vraiment
Mais en tout cas ça commence à ressembler à un giciel de pro
Merci pour le partage 8)

Re: Développez vos applications de gestions 10 fois plus vit

Publié : sam. 20/mai/2017 7:39
par microdevweb
@Kwai chang caine,

Evidemment si tu ne développe jamais aucun logiciel de gestion cela ne te sera pas très utile. Mais merci pour le compliment.

Re: Développez vos applications de gestions 10 fois plus vit

Publié : sam. 20/mai/2017 8:52
par microdevweb
J'ai modifié le post avec un exemple plus simple

Re: Développez vos applications de gestions 10 fois plus vit

Publié : sam. 20/mai/2017 11:31
par Ar-S
Je viens de tester vite fais. ça tiens la route mais je trouve étrange le fait d'ouvrir N fenêtres pour configurer Pays, Localisation etc..
Je verrai plus une seule fenêtre soit via panel soit via combogadget que tu affiches/caches.

Re: Développez vos applications de gestions 10 fois plus vit

Publié : sam. 20/mai/2017 12:19
par ChrisR
Je viens de tester rapidement, c'est très intéressant,
Peut-être lié à la réponse d'Ar-S!
je verrai bien les fenêtres pays, localisations,... comme sous-fenêtres MDI ouvertes dans des onglets d'un Panel ou d'un TabBarGadget.

Re: Développez vos applications de gestions 10 fois plus vit

Publié : sam. 20/mai/2017 13:20
par microdevweb
Bonjour Ar-S,

En temps normal on crée un menu pour la gestion des fichiers annexes. Dans ce cas j'ai juste voulu démontré que les modules (class) s'occupe de tout.

Maintenant il est normal que l'ors de l création de par exemple client l'opérateur puisse ajouté une localité, voir un pays etc

Ce qui serait possible de faire, un combo avec saisie l'opérateur rentre le nom (exemple pays) et s'il n'existe pas il est créé automatiquement avec ouverture d'une fenêtre si nécessaire. Mais ça ce ne sera pas pour tout de suite je dois m'attaquer à une class pour l'impression et c'est pas du gâteau