DLG DEVELOPPEMENT LOGICIELS DE GESTION
Cité 1406 Lgts Bat 86 No 2 BOUMERDES 35000 Tél : (01)-81-97-68 / 81-61-30
PCPAIE 6/Win
STRUCTURE DES FICHIERS DE LA BASE DE DONNEES
* Ce document est adressé aux informaticiens désirant accéder aux données PCPAIE pour en pouvoir tirer des états spécifiques.
Ce fichier contient tous les codes-Intitulés des différentes tables Fonctions, Sections, Banques, etc. le champs TABLE contient l’indicatif de la table. Le couple TABLE-CODE est une clé unique.
Les noms des tables : Section, unité, etc. sont modifiables « Annexes/Paramètres/intitulés des tables », ainsi , par exemple, la table Section peut devenir service. Les tables dont les noms sont modifiables sont numérotées de 1 à 9.
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
COMMENTAIRE |
TABLE |
C |
3 |
0 |
CODE VALEURS :FNC Fonctions SEC sections (1) BNQ banques MTF motifs de sortie CON contrat DAS code CNAS UNT unité (2) AFF affectation (3) DIP diplôme (4) CAT catégorie (5) EMP code emploi (6) AT1 attribution 1 (7) AT2 attribution 2 (8) AT3 attribution 3 (9) |
CODE |
C |
30 |
0 |
CODE DE L’ELEMENT |
LIBELLE |
C |
30 |
0 |
LIBELLE |
AUX_NOM |
C |
14 |
0 |
CODE COMPTABLE |
COMPTE |
C |
20 |
0 |
N° COMPTE ENTREPRISE( POUR LES CODES BANQUES UNIQUEMENT) |
COMPTE_CCP |
C |
20 |
0 |
N° COMPTE CCP DE LA BANQUE DE L’ENTREPRISE ( POUR LES CODES BANQUES UNIQUEMENT) |
NO_AGENCE |
C |
15 |
|
N° AGENCE (POUR LES CODES BANQUES UNIQUEMENT) |
FICHIER SALARIES : LES RENSEIGNEMENTS D’UN SALARIE SONT ECLATES SUR 3 FICHIERS PERS0.DTA, PERS1.DTA et PERS2.DTA
FICHIER SALARIEàECRAN « 3-FIXE »
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
OBS. |
MATRICULE |
PERS0 PERS1 PERS2 |
MATRICULE |
C |
14 |
|
NOM |
PERS0 |
NOM |
C |
20 |
|
PRENOM |
PERS0 |
PRENOM |
C |
20 |
|
ADRESSE |
PERS2 |
ADRESSE ADRESSE2 |
C C |
42 42 |
|
SEXE M/F |
PERS0 |
SEXE |
C |
1 |
|
SIT. FAMILLE M/C/V |
PERS0 |
SIT_FAM |
C |
1 |
|
NBRE PERSONNES A CHARGE |
PERS0 |
NBR_PRS_CH |
N |
2 |
|
DATE D’ENTREE |
PERS0 |
DTE_ENTREE |
D |
8 |
|
N° SECU. SOCIALE |
PERS0 |
N_SECU_SLE |
C |
20 |
|
FONCTION |
PERS0 |
SECT1 |
C |
8 |
àVALEURS.DTA préfixe FNC |
SECTION (1) |
PERS0 |
STRUCTURE |
C |
8 |
àVALEURS.DTA préfixe SEC |
N° GRILLE |
PERS0 |
NO_GRILLE |
C |
2 |
|
CODE GRILLE |
PERS0 |
CODE_GRILL |
C |
8 |
+NO_GRILLEàGRILLE.DTA |
MODE DE REGLEMENT : 0-Espèce 1-CCP 2-BANQUE 3-CHEQUE |
PERS0 |
COD_REGL |
N |
1 |
|
N° COMPTE |
PERS0 |
NO_COMPTE |
C |
20 |
|
DOMICILIATION SALARIE |
PERS0 |
ORG_PEMPLY |
C |
8 |
àVALEURS.DTA préfixe BNQ |
DOMICILIATION ENTREPRISE |
PERS0 |
ORG_PAYEUR |
C |
8 |
àVALEURS.DTA préfixe BNQ |
DATE DE SORTIE |
PERS0 |
DTE_SORTIE |
D |
8 |
|
MOTIF DE SORTIE |
PERS0 |
MOTIF_SORT |
C |
8 |
àVALEURS.DTA préfixe MTF |
FICHIER SALARIEàECRAN « 4-AFFECTATION »
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
OBS. |
CODE CNAS |
PERS0 |
CODE_CAISS |
C |
8 |
àVALEURS.DTA préfixe DAS |
2-UNITE (2) |
PERS0 |
UNITE |
C |
8 |
àVALEURS.DTA préfixe UNT |
3-AFFECTATION (3) |
PERS0 |
AFFECTATIO |
C |
8 |
àVALEURS.DTA préfixe AFF |
4-DIPLOME (4) |
PERS0 |
DIPLOME |
C |
8 |
àVALEURS.DTA préfixe DIP |
5-CATEGORIE (5) |
PERS0 |
CATEG_SP |
C |
8 |
àVALEURS.DTA préfixe CAT |
TYPE CONTRAT |
PERS0 |
CONTRAT |
C |
8 |
|
CONTRAT DATE DEBUT |
PERS0 |
DTE_CONT_D |
D |
8 |
|
CONTRAT DATE FIN |
PERS0 |
DTE_CONT_F |
D |
8 |
|
Congé acquis sur période Antérieure dont les paies Ne figurent pas sur écran « 1-Paies » - Jours -Brut cotisable -Brut non cotisable |
PERS1 PERS1 PERS1 |
CONGE_AD_J CONGE_AD_C CONGE_AD_I |
N N N |
6.2 12.2 12.2 |
|
Mode de calcul de l’IRG 0-IRG NORMAL 1-IRG SUD ABAT. 25% 2-IRG SUD ABAT. 50% 3-Exonéré IRG |
PERS0 |
CODE_IRG |
N |
1 |
|
Nombre de jours ouvrables |
PERS1 |
NBR_JR_OUV |
N |
2 |
|
Nombre d’heures ouvrables |
PERS1 |
NBR_HR_OUV |
N |
2 |
|
N° Mutuelle |
PERS0 |
NO_MUTUEL |
C |
20 |
|
FICHIER SALARIEàECRAN « 5-MEMO »
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
CODE EMPLOI (6) |
PERS0 |
CLASSE |
C |
8 |
àVALEURS.DTA préfixe MTF |
ATTRIBUTION 1 (7) |
PERS0 |
ATTRIB1 |
C |
8 |
àVALEURS.DTA préfixe AT1 |
ATTRIBUTION 2 (8) |
PERS0 |
ATTRIB2 |
C |
8 |
àVALEURS.DTA préfixe AT2 |
ATTRIBUTION 3 (9) |
PERS0 |
ATTRIB3 |
C |
8 |
àVALEURS.DTA préfixe AT3 |
TABLEAU DES EVENEMENTS : Fichier EVENTS.DTA
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
COMMENTAIRE |
MATRICULE |
C |
14 |
0 |
MATRICULE SALARIE |
DATE |
D |
8 |
0 |
DATE D’EVENEMENT |
LIBELLE |
C |
40 |
0 |
LIBELLE EVENEMENT |
FICHIER SALARIEàECRAN «6-CIVIL »
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
DATE NAISSANCE |
PERS0 |
NAISS_DATE |
C |
10 |
|
LIEU DE NAISSANCE |
PERS2 |
NAISS_LIEU |
C |
40 |
|
FILIATION |
PERS2 |
FILIATION |
C |
42 |
|
NOM CONJOINT |
PERS2 |
CONJ_NOM |
C |
15 |
|
DATE MARIAGE |
PERS2 |
CONJ_DATEM |
D |
8 |
|
CONJOINT TRAVAIL Oui/Non |
PERS0 |
CONJ_TRAV |
C |
1 |
|
TABLEAU DES ENFANTS : Fichier ENFANTS.DTA
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
COMMENTAIRE |
MATRICULE |
C |
14 |
0 |
MATRICULE SALARIE |
PRENOM |
C |
20 |
0 |
PRENOM |
DATE_NAISS |
D |
8 |
0 |
DATE DE NAISSANCE |
SCOLARISE |
C |
40 |
0 |
SCOLARISE OUI/NON |
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
NBR_ENFANT (Total) |
PERS0 |
NBRE_ENF |
N |
2 |
|
NBR_ENF_AF |
PERS0 |
NBR_ENF_AF |
N |
2 |
|
NBR_ENF_P10 |
PERS0 |
NBR_ENFP10 |
N |
2 |
|
NBR_ENF_M10 |
PERS0 |
NBR_ENFM10 |
N |
2 |
|
FICHIER SALARIEàECRAN 2-VALEURS
RENSEIGNEMENT |
FICHIER |
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
OBSERVATION (F3) |
PERS1 |
NOTEP |
C |
60 |
|
|
|
|
|
|
|
LIGNE 01 CODE RUBRIQUE |
PERS1 |
COD_RUB01 |
C |
3 |
|
LIGNE 01 VALEUR RUBRIQUE |
PERS1 |
VAL_RUB01 |
N |
16 |
5 |
… |
… |
… |
…. |
|
|
LIGNE nn CODE RUBRIQUE |
PERS1 |
COD_RUBnn |
C |
3 |
|
LIGNE nn VALEUR RUBRIQUE |
PERS1 |
VAL_RUBnn |
N |
16 |
5 |
… |
… |
... |
.... |
|
|
LIGNE 54 CODE RUBRIQUE |
PERS1 |
COD_RUB54 |
C |
3 |
|
LIGNE 54 VALEUR RUBRIQUE |
PERS1 |
VAL_RUB54 |
N |
16 |
5 |
|
|
|
|
|
|
NOTE EN BAS (F7) |
PERS1 |
PRET_OBS1 |
C |
54 |
|
FICHIER PRETS.DTA
ECRAN 2-VALEURS accessible par la touche F2.
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
OBSERVATION |
MATRICULE |
C |
14 |
|
MATRICULE DU SALARIE |
MOIS |
C |
8 |
|
MOIS 06-2000 (Pour les remboursements) |
CODE_RUB |
N |
3 |
|
CODE RUBRIQUE DE REMBOURSEMENT |
DATE |
D |
8 |
|
DATE DE PRET/REMBOURSEMENT |
LIBELLE |
C |
30 |
|
LIBELLE DE PRET |
MONTANT |
N |
10 |
2 |
MONTANT DE PRET/REMBOURSEMENT |
SENS |
C |
1 |
|
P=prêt/ R=remboursement |
NO_PRET |
N |
1 |
|
N° PRET 1..9 |
FICHIER PAIES.DTA
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
FIELD_DEC |
OBSERVATION |
MATRICULE |
C |
14 |
|
MATRICULE DU SALARIE |
MOIS |
C |
8 |
|
MOIS 06-2000 |
C_DATE |
D |
8 |
|
DATE DE CALCUL DE LA PAIE(DATE SYSTEME) |
C_TIME |
C |
5 |
|
HEURE DE CALCUL (HEURE SYSTEME) |
MONTANTS |
MEMO |
|
|
Codes et Montants des rubriques dans le champs mémo. (Voir ci-dessous) |
CANRESTORE |
L |
1 |
|
Lors de calcul normal d’une paie, la plupart des données variables sont sauvegardées et elles peuvent être restaurées ultérieurement. Si Faux, les données ne peuvent pas être réstaurées |
DONNEES SAUVEGARDEES AUTOMATIQUEMENT (A PARTIR DES FICHIERS PERS0.DTA, PERS1.DTA et PERS2.DTA) AU MOMENT DE CALCUL DE LA PAIE:
Si CANRESTORE=Faux les champs suivants ne sont pas utiles.
FIELD_NAME |
FIELD_TYPE |
FIELD_LEN |
NO_PROFIL |
N |
1 |
CONGE |
L |
1 |
SIT_FAM |
C |
1 |
NBRE_ENF |
N |
2 |
NBR_ENF_AF |
N |
2 |
NBR_ENFP10 |
N |
2 |
NBR_ENFM10 |
N |
2 |
NBR_PRS_CH |
N |
2 |
CONJ_TRAV |
C |
1 |
CODE_IRG |
N |
1 |
NBR_JR_OUV |
N |
5.2 |
NBR_HR_OUV |
N |
6.2 |
NO_GRILLE |
C |
2 |
CODE_GRILLE |
C |
8 |
ORG_PAYEUR |
C |
8 |
ORG_PEMPLY |
C |
8 |
SECT1 |
C |
8 |
CODE_CAISS |
C |
8 |
CLASSE |
C |
8 |
STRUCTURE |
C |
8 |
UNITE |
C |
8 |
AFFECTATIO |
C |
8 |
CONTRAT |
C |
8 |
ATTRIB1 |
C |
8 |
ATTRIB2 |
C |
8 |
ATTRIB3 |
C |
8 |
STRUCTURE DU CHAMPS MONTANTS.
Procédure de lecture du champs montants dans un tableau sous clipper :
Uses Paies.Dta Index Paie.Tri // ouvrir le fichier
Seek ‘…………..24502-2000’ //se positionner sur la paie 02-2000 du salarié N° 245
Public TAB_VALEURS[800]
LirePaieMontants () // Toutes les valeurs sont lues dans le tableau TAB_VALEURS
//La valeur de la rubrique R500 est dans TAB_VALEURS[500]
Procedure LirePaieMontants()
Local MemoLen, PosCR, MemoStr, I, Rud_Code, Rub_Val
Afill(TAB_VALEURS,0)
** éliminer la première ligne et mémoriser le résultat dans MemoStr.
MemoLen= len(paies->MONTANTS)
PosCR = At( chr(13)+chr(10),paies->MONTANTS)
MemoStr = right(paies->MONTANTS , MemoLen - PosCR + 1)
** décoder MemoStr
for i:=1 to Mlcount(MemoStr,20,4,.f.)
MemoLine := alltrim(memoline(MemoStr , 20 , i , 4 , .f. ))
Rub_Code:=Val(left(MemoLine,3))
Rub_Val := val(right( MemoLine , Len(MemoLine)-3 ))
TAB_VALEURS[RUB_CODE]:= RUB_VAL
next
return // fin de procedure LirePaieCourante()
Procédure d’écriture du champs montants depuis un tableau sous clipper :
TAB_VALEURS[800] // Tableau des valeurs des rubriques.
Replace PAIES->MONTANTS with MemoPaieMontants()
function MemoPaieMontants()
Local MemoVal, I
MemoVal:=chr(13)+chr(10) // première ligne vide
For i:=1 to 800
If Abs(TAB_VALEURS[I])>0
MemoVal:=MemoVal+Strzero(i,3)+Alltrim(Str(TAB_VALEURS[I]))+chr(13)+chr(10)
Endif
Next
Return MemoVal
Procédure de lecture du champs montants dans un tableau sous delphi
Un projet, sous delphi, permet à titre d’exemple d’utiliser l’unité PCPAIE_procs.Pas. Vous pouvez le télécharger Ici.
unit PCPAIE_procs;
interface
(************************************************************************************)
(*******UNITE DEVELOPPEE PAR DLG-BOUMERDES LE 18/01/2009*****************************)
(*******LIRE LES MONTANTS D'UNE PAIES DANS UN TABLEAU *******************************)
(*******CHAMPS MEMO MONTANTS DE LA TABLE PAIES.DTA EN FORMAT XBASE*******************)
(*******TESTEE SOUS DELPHI 6 ADAPTABLE FACILEMENT AUX AUTRES VERSIONS DE DELPHI******)
(************************************************************************************)
uses SysUtils, Classes;
Const
MaxRubriques=899;
Type
TTAB_VALEURS= array [1..MaxRubriques] of Extended;
var
TAB_VAL_RUB:TTAB_VALEURS; // TAB_VAL_RUB[xxx] contient la valeur de la rubrique Rxxx
procedure Memo_Montants_Decoder(MemoMontants:string); // Décoder les valeurs d'une paie dans TAB_VAL_RUB
function Memo_Montants_Coder:string; // Coder les valeurs d'une paie TAB_VAL_RUB dans une chaine Mémo
// Structure de MemoMontants:
//Première Ligne: divers renseignements
//Autres ligne: chaque ligne contient le code de la rubrique (sur 3 positions) suivi de la valeur de la rubrique.
//Exemple 01412545.225 signifie que la rubrique R014 a comme valeur 12545.225.
implementation
(*********************************************************************************************)
procedure Decoder_Ligne(cMontant:string);
var iLenMontant, nCodeRub:integer;
CurMontant:Extended;
begin
iLenMontant:=Length(cMontant);
if iLenMontant<4 then Exit;
nCodeRub:=StrToInt(Copy(cMontant,1,3));
CurMontant:=StrToCurr(Copy(cMontant,4,iLenMontant-3));
if (nCodeRub=0) or (Abs(CurMontant)<0.009) then Exit;
TAB_VAL_RUB[nCodeRub]:=CurMontant;
end;
(*********************************************************************************************)
var OldDecimalSeparator, OldThousandSeparator:Char;
procedure Save_And_Set_Point_Decimal_Separateur;
begin
OldDecimalSeparator:=DecimalSeparator; // sauvegarder les valeurs actuelles
OldThousandSeparator:=ThousandSeparator;
// La fonction de conversion StrToCurr doit utiliser le . comme sépareur décimale
DecimalSeparator:='.';
ThousandSeparator:=' ';
end;
procedure Restore_Old_Separateurs;
begin
DecimalSeparator:=OldDecimalSeparator; // restaurer les valeurs sauvegardeés
ThousandSeparator:=OldThousandSeparator;
end;
(*********************************************************************************************)
procedure Memo_Montants_Decoder(MemoMontants:string);
var ListMontants:TStringList;
iLengthStr,i:integer;
begin
FillChar(TAB_VAL_RUB ,Sizeof(TAB_VAL_RUB), 0); // Remise à zéro
// Supprimer la première ligne de MemoMontants de cette manière
iLengthStr:=Length(MemoMontants);
i:=1;
while (i<=iLengthStr) and Not (MemoMontants[i] in [#13]) do Inc(i);
while (i<=iLengthStr) and (MemoMontants[i] in [#13,#10,#26]) do Inc(i);
if (i<=iLengthStr) then MemoMontants:=Copy(MemoMontants,i,iLengthStr-i)
else Exit;
Save_And_Set_Point_Decimal_Separateur;
ListMontants:=TStringList.Create;
ListMontants.Text:=MemoMontants; // MemoMontants sera traitée comme tableau de lignes ListMontants[0..n]
for i:=0 to ListMontants.Count-1 do Decoder_Ligne(ListMontants[i]);
ListMontants.Free;
Restore_Old_Separateurs;
end;
(*********************************************************************************************)
function Memo_Montants_Coder:string; // Coder les valeurs d'une paie TAB_VAL_RUB dans une chaine Mémo
var i:integer; cStr:string;
function Str_i_3pos:string;
begin // 1-->'001' 25-->'025' 200->'200'
if i<10 then Result:='00'+IntToStr(i)
else if i<100 then Result:='0'+IntToStr(i)
else Result:=IntToStr(i);
end;
begin
Save_And_Set_Point_Decimal_Separateur;
Result:=#13#10; // première ligne vide
For i:=1 to MaxRubriques do if Abs(TAB_VAL_RUB[i])>0.009 then
Result:=Result+Str_i_3pos+FormatFloat('###0.0000',TAB_VAL_RUB[i])+#13#10;
Restore_Old_Separateurs
end;
end.