Parcourir une table et calculer les elements

bireumdione Messages postés 13 Date d'inscription samedi 19 août 2006 Statut Membre Dernière intervention 11 novembre 2020 - Modifié le 8 nov. 2020 à 14:30
bireumdione Messages postés 13 Date d'inscription samedi 19 août 2006 Statut Membre Dernière intervention 11 novembre 2020 - 8 nov. 2020 à 15:17
Bonjour,
j'ai un tableau
Date de debut Date de fin Salaire TauxSal TauxEmp Niveau Prime Nom rubrique Taux rubrique
1991-11-141995-12-319080,10,15cadre0Sujétion0,0
1996-01-012001-12-319080,120,15cadre30Sujétion0,2
2002-01-012005-09-309080,150,20cadre45Sujétion0,2
2005-10-012009-11-129080,150,20cadre52Sujétion0,4
1991-11-141995-12-319080,10,15cadre0HeureSup0,0
1996-01-012001-12-319080,120,15cadre30HeureSup0,2
2002-01-012005-09-309080,150,20cadre45HeureSup0,2
2005-10-012009-11-129080,150,20cadre52HeureSup0,14



Il s'agit de calculer un résultat selon la formule
Nbjour nombre de jour entre Date de debut et Date de fin
base=Salaire + somme( Nom rubrique X Taux rubrique) +prime
part salarié=base X TauxSal X Nbjour
part employeur = base X TauxEmp X Nbjour

resulta attendu:

enfin calculer total part employé =somme(part employé)
total part salarié =somme(part salarié )


j'ai mis le tableau dans un arraylist et je l'ai parcouru en faisant les calculs mais quand le TauxSal ou TauxEmp change il faut sauvegarder le resultat dans un autre tabeau et recommencer avec les nouvelle valeurs.Dons il faut detecter quand TauxSal et TauxEmp changent.
Exemple de code

ArrayList<tablecalcul> tablecalcullist = new ArrayList<>();
ArrayList<assiettecalcul> assiettecalcullist = new ArrayList<>();
// remplissage du tableau tablecalcullist
while (srs.next()) {
tablecalcul tbcal = new tablecalcul();
tbcal.setBegin_date2(srs.getDate("Date de debut"));
tbcal.setEnd_date2(srs.getDate("Date de fin"));
tbcal.setSal_base(srs.getInt("Salaire"));
tbcal.setTauxsal(srs.getFloat("TauxSal"));
tbcal.setTauxemp(srs.getFloat("TauxEmp"));
tbcal.setMontant(srs.getFloat("Prime"));
tbcal.setLblrubrique(srs.getString("Nom Rubrique"));
tbcal.setTauxrubrique(srs.getFloat("Taux rubrique"));

tablecalcullist.add(tbcal);

}

// initialisation des valeurs pour la comparaison

montant=tablecalcullist.get(0).getMontant();
tauxsal=tablecalcullist.get(0).getTauxsal();
tauxemp=tablecalcullist.get(0).getTauxemp();

// assiette=tablecalcullist.get(0).getSal_base();
// assiette de calcul (somme des rubrique)
assiette=0;
//si=tablecalcullist.get(0).getSal_base();

si=Integer.parseInt(txt_soldeindiciaire.getText().trim());
base=si;
// assiette de calcul (somme des assiettes)
calassiette=0;

ArrayList<AuraitDu> tableauraitdulist = new ArrayList<>();

for (i=0;i<tablecalcullist.size();i++) {
// on verifie si les taux salarié et employeur ont pas changé
if ((tauxsal == tablecalcullist.get(i).getTauxemp())&&(tauxemp == tablecalcullist.get(i).getTauxsal())) {

calassiette = (tablecalcullist.get(i).getSal_base()*tablecalcullist.get(i).getTauxrubrique());
assiette = assiette + calassiette;
date1a=tablecalcullist.get(0).getBegin_date2();
date2a=tablecalcullist.get(i).getEnd_date2();

} else {



jDateChooser1.setDate(tablecalcullist.get(i-1).getdatedebut());
jDateChooser2.setDate(tablecalcullist.get(i-1).getdatefin());

long millis1a = jDateChooser1.getCalendar().getTimeInMillis();
long millis2a = jDateChooser2.getCalendar().getTimeInMillis();
// Calculate difference in milliseconds
long diffa = millis2a - millis1a;

// Calculate difference in days
long diffDaysa = diffa / (24 * 60 * 60 * 1000);

base=(si+assiette+montant)*12;
partsalarie=(base*tauxsal*diffDaysa)/36000;
partemployeur=(base*tauxemp*diffDaysa)/36000;

//reinitialise les valeus de comparaison

tauxsal=tablecalcullist.get(i).getTauxsal();
tauxemp=tablecalcullist.get(i).getTauxemp();

AuraitDu tbad = new AuraitDu();

tbad.setDatedebutad(tablecalcullist.get(i-1).getdatedebut());
tbad.setDatefinad(tablecalcullist.get(i-1).getdatefin());
tbad.setNbjour(diffDaysa);
tbad.setSi(tablecalcullist.get(i-1).getSal_base());
tbad.setBase(base);
tbad.setAr(partsalarie);
tbad.setRr(partemployeur);
tbad.setTauxagad(tablecalcullist.get(i-1).getTauxsal());
tbad.setTauxempad(tablecalcullist.get(i-1).getTauxemp());


tableauraitdulist.add(tbad);



}

// insertion dans la base de donnée pour faciliter le calcul avec des intervalles sans variation de taux

String val = txt_matricule.getText();
// try{
for (i=0;i<tableauraitdulist.size();i++) {
//JOptionPane.showMessageDialog(null," "+val+ " "+date1+" "+date2+" "+diffDays+" "+si+" "+eb+" "+rr+" "+ar);
String reg= "insert into auraitdu (matricule,datedebutad,datefinad,nbjourad,tauxagad,tauxempad,si,eb,rr,ar) values ('"+val+"','"+tableauraitdulist.get(i).getDatedebutad()+"','"+tableauraitdulist.get(i).getDatefinad()+"','"+tableauraitdulist.get(i).getNbjour()+"','"+tableauraitdulist.get(i).getTauxagad()+"','"+tableauraitdulist.get(i).getTauxempad()+"','"+tableauraitdulist.get(i).getSi()+"','"+tableauraitdulist.get(i).getEb()+"','"+tableauraitdulist.get(i).getRr()+"','"+tableauraitdulist.get(i).getAr()+"' )";
//Days.daysBetween(new DateTime(date1), new DateTime(date2)).getDays()
pst1=conn.prepareStatement(reg);
pst1.execute();
}



Le code n'est pas complet mais je crois que l'idée y est .
Merci pour votre aide

2 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
8 nov. 2020 à 14:47
Bonjour

pour poster un code, voir cette procédure https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Ça n'est à la modération de corriger tous tes messages.

D'autre part, un tableau n'a pas de nom de champ, je pense que tu parles une fois de plus de tables.
Si tu persistes à appeler un chat "chien", ne soit pas étonné qu'on te réponde "os" alors que tu cherches "souris".
2
bireumdione Messages postés 13 Date d'inscription samedi 19 août 2006 Statut Membre Dernière intervention 11 novembre 2020
8 nov. 2020 à 15:17
Bonjour, je m’excuse
alors j'ai une table
Date de debutDate de finSalaireTauxSalTauxEmpNiveauPrimeNom rubrique Taux rubrique
1991-11-141995-12-319080,10,15cadre0Sujétion0,0
1996-01-012001-12-319080,120,15cadre30Sujétion0,2
2002-01-012005-09-309080,150,20cadre45Sujétion0,2
2005-10-012009-11-129080,150,20cadre52Sujétion0,4
1991-11-141995-12-319080,10,15cadre0HeureSup0,0
1996-01-012001-12-319080,120,15cadre30HeureSup0,2
2002-01-012005-09-309080,150,20cadre45HeureSup0,2
2005-10-012009-11-129080,150,20cadre52HeureSup0,14



Il s'agit de calculer un résultat selon la formule
Nbjour nombre de jour entre Date de debut et Date de fin
base=Salaire + somme( Nom rubrique X Taux rubrique) +prime
part salarié=base X TauxSal X Nbjour
part employeur = base X TauxEmp X Nbjour

resulta attendu:

enfin calculer total part employé =somme(part employé)
total part salarié =somme(part salarié )


j'ai mis le tableau dans un arraylist et je l'ai parcouru en faisant les calculs mais quand le TauxSal ou TauxEmp change il faut sauvegarder le resultat dans un autre tabeau et recommencer avec les nouvelle valeurs.Dons il faut detecter quand TauxSal et TauxEmp changent.
Exemple de code

ArrayList<tablecalcul> tablecalcullist = new ArrayList<>();
 ArrayList<assiettecalcul> assiettecalcullist = new ArrayList<>();
// remplissage du tableau tablecalcullist
while (srs.next()) {
                tablecalcul tbcal = new tablecalcul();
                tbcal.setBegin_date2(srs.getDate("Date de debut"));
                tbcal.setEnd_date2(srs.getDate("Date de fin"));
                tbcal.setSal_base(srs.getInt("Salaire"));
                tbcal.setTauxsal(srs.getFloat("TauxSal"));
                tbcal.setTauxemp(srs.getFloat("TauxEmp"));
                tbcal.setMontant(srs.getFloat("Prime"));
                tbcal.setLblrubrique(srs.getString("Nom Rubrique"));
                tbcal.setTauxrubrique(srs.getFloat("Taux rubrique"));
               
                tablecalcullist.add(tbcal);
                
            }

// initialisation  des valeurs pour la comparaison
           
             montant=tablecalcullist.get(0).getMontant();
             tauxsal=tablecalcullist.get(0).getTauxsal();
             tauxemp=tablecalcullist.get(0).getTauxemp();
          
            // assiette=tablecalcullist.get(0).getSal_base();
            // assiette de calcul (somme des rubrique)
             assiette=0;
             //si=tablecalcullist.get(0).getSal_base();

             si=Integer.parseInt(txt_soldeindiciaire.getText().trim());
             base=si;
       // assiette de calcul (somme des assiettes)
        calassiette=0; 

        ArrayList<AuraitDu> tableauraitdulist = new ArrayList<>();

for (i=0;i<tablecalcullist.size();i++)   { 
// on verifie si les taux salarié et employeur ont pas changé
if ((tauxsal == tablecalcullist.get(i).getTauxemp())&&(tauxemp == tablecalcullist.get(i).getTauxsal()))    {

  calassiette = (tablecalcullist.get(i).getSal_base()*tablecalcullist.get(i).getTauxrubrique());
  assiette = assiette + calassiette;
               date1a=tablecalcullist.get(0).getBegin_date2();
               date2a=tablecalcullist.get(i).getEnd_date2();

                                                          } else {
     

             
               jDateChooser1.setDate(tablecalcullist.get(i-1).getdatedebut());
               jDateChooser2.setDate(tablecalcullist.get(i-1).getdatefin());
          
           long millis1a = jDateChooser1.getCalendar().getTimeInMillis();
           long millis2a = jDateChooser2.getCalendar().getTimeInMillis();
                // Calculate difference in milliseconds
                long diffa = millis2a - millis1a;

               // Calculate difference in days
         long diffDaysa = diffa / (24 * 60 * 60 * 1000); 

            base=(si+assiette+montant)*12;
           partsalarie=(base*tauxsal*diffDaysa)/36000;
           partemployeur=(base*tauxemp*diffDaysa)/36000;

        //reinitialise les valeus de comparaison

           tauxsal=tablecalcullist.get(i).getTauxsal();
           tauxemp=tablecalcullist.get(i).getTauxemp(); 
              
                AuraitDu tbad = new AuraitDu();
            
                tbad.setDatedebutad(tablecalcullist.get(i-1).getdatedebut());
               tbad.setDatefinad(tablecalcullist.get(i-1).getdatefin());
               tbad.setNbjour(diffDaysa);
                tbad.setSi(tablecalcullist.get(i-1).getSal_base());
                tbad.setBase(base);
               tbad.setAr(partsalarie);
               tbad.setRr(partemployeur);
              tbad.setTauxagad(tablecalcullist.get(i-1).getTauxsal());
               tbad.setTauxempad(tablecalcullist.get(i-1).getTauxemp());
                
                
             tableauraitdulist.add(tbad);
                


                                                               }

// insertion dans la base de donnée pour faciliter le calcul avec des intervalles sans variation de taux

 String val = txt_matricule.getText();
               // try{
               for (i=0;i<tableauraitdulist.size();i++)   { 
                   //JOptionPane.showMessageDialog(null," "+val+ "  "+date1+" "+date2+" "+diffDays+" "+si+" "+eb+" "+rr+" "+ar);
                    String reg= "insert into auraitdu (matricule,datedebutad,datefinad,nbjourad,tauxagad,tauxempad,si,eb,rr,ar) values ('"+val+"','"+tableauraitdulist.get(i).getDatedebutad()+"','"+tableauraitdulist.get(i).getDatefinad()+"','"+tableauraitdulist.get(i).getNbjour()+"','"+tableauraitdulist.get(i).getTauxagad()+"','"+tableauraitdulist.get(i).getTauxempad()+"','"+tableauraitdulist.get(i).getSi()+"','"+tableauraitdulist.get(i).getEb()+"','"+tableauraitdulist.get(i).getRr()+"','"+tableauraitdulist.get(i).getAr()+"' )";
                    //Days.daysBetween(new DateTime(date1), new DateTime(date2)).getDays()
                    pst1=conn.prepareStatement(reg);
                    pst1.execute();
               }



Le code n'est pas complet mais je crois que l'idée y est .
Merci pour votre aide
Et encore mille excuses
--
0
Rejoignez-nous