function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
hmoh1920hmoh1920 

First error: Too many SOQL queries: 201

Hi,

 

i have this batch code:

 

 

global class BalanceCalculBatch implements Database.Batchable<sObject>{
String IDVar;
decimal var1=0, var2=0;
date dateEcheance;


String email;
Id toUserId;
Id fromUserId;

        
global final String query ='SELECT id,name FROM Opportunity limit 1';        

global Database.querylocator start(Database.BatchableContext BC){
            return Database.getQueryLocator(query);}

global void execute(Database.BatchableContext BC, List<Sobject> scope){

  List<Opportunity> opps = [select id,  Date_d_ech_ance_de_la_police__c, Total_montant_pay__c
                            from Opportunity where Date_d_effet__c > 2011-12-31];
   
   
    Integer l;
    l = opps.size();
if(l!=Null) {                       
    for (Integer i = 0; i<l; i++)
              {
                  IDVar=opps[i].Id;
/******************************************************************************************************************************/
         
          List<paiement__c> paiement = [SELECT Id, CreatedDate, montant_pay__c ,Encaissement_remboursement__c, Montant_rem__c,
                                        Opportunit__c FROM paiement__c where Opportunit__c=:IDVar];
                                        
             Integer m;
             m = paiement.size();
if(m!=Null) {                      
         for (Integer s = 0; s<m; s++)
              {
                  
                         if(paiement[s].Encaissement_remboursement__c=='Encaissement')
                           {
                                var1 += paiement[s].montant_pay__c;
                           }
                         if(paiement[s].Encaissement_remboursement__c=='Remboursement')
                           {
                                var1 -= paiement[s].Montant_rem__c;
                           }
               }
           }                                       
/******************************************************************************************************************************/                  
    dateEcheance=opps[i].Date_d_ech_ance_de_la_police__c;      
    List<Quittance__c> quittance = [SELECT Id, Date_due1__c, Date_due10__c, Date_due11__c, Date_due12__c, Date_due2__c,
                                   Date_due3__c, Date_due4__c, Date_due5__c, Date_due6__c, Date_due7__c, Date_due8__c,
                                   Date_due9__c, Date_pay_del__c, DateDue__c, Echeance_paiement__c, Echeance1__c,
                                   Echeance10__c, Echeance11__c, Echeance12__c, Echeance2__c, Echeance3__c, Echeance4__c,
                                   Echeance5__c, Echeance6__c, Echeance7__c, Echeance8__c, Echeance9__c, Opportunit__c,
                                   Facturation_Avoir__c, Montant_d_avoir__c
                                   FROM Quittance__c where Opportunit__c =:IDVar];
          
/******************************************************************************************************************************/                   
//calcul au niveau de la quittance.
Integer h;
h = quittance.size();     
if(h!=null)
{
     for (Integer n = 0; n<h; n++)
         {                         
           if(quittance[n].Facturation_Avoir__c=='Avoir')
             {
               var2 -= quittance[n].Montant_d_avoir__c;
             }
           if(quittance[n].Facturation_Avoir__c=='Facturation')
             {
/****************************************En fonction des 4 modes de paiement*****************************************/
/*******************************************Paiement annuel*********************************************************/

               if (quittance[n].Echeance_paiement__c =='Annuel' && quittance[n].Date_due1__c<=datetime.now())
                {
                      var2+=quittance[n].Echeance1__c;
                }

/******************************************Paiement Semestriel*******************************************************/

         if (quittance[n].Echeance_paiement__c =='Semestriel' && quittance[n].Date_due1__c<=datetime.now())
          {
              if(quittance[n].Date_due2__c<=datetime.now())
               {
                var2+=quittance[n].Echeance1__c+quittance[n].Echeance2__c;
               }else
               {
                var2+=quittance[n].Echeance1__c;
               }
          }
                  
                          }                    
                    }
}
//calcul du montant final
opps[i].Total_montant_pay__c = var1-var2;  
 
                           
/****************************************************************************************************************/                  
                  update opps[i];
var1=0;
var2=0;
              }
}  
    
}
global void finish(Database.BatchableContext BC){
    
   AsyncApexJob a = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed,
      TotalJobItems, CreatedBy.Email
      FROM AsyncApexJob WHERE Id =
      :BC.getJobId()];
   // Send an email to the Apex job's submitter notifying of job completion.
    
   Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
   String[] toAddresses = new String[] {a.CreatedBy.Email};
   mail.setToAddresses(toAddresses);
   mail.setSubject('Apex Sharing Recalculation ' + a.Status);
   mail.setPlainTextBody
   ('The batch Apex job processed ' + a.TotalJobItems +
   ' batches with '+ a.NumberOfErrors + ' failures.');
   Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
   
}



}

 

when I execute, I have a this error:

First error: Too many SOQL queries: 201

 

plese helpe me; there's a means to force the execution?

 

 

 

thanks


 

 

Damien_Damien_

You have a bunch of queries inside of loops.  You need to pull them outside of the loops and execute them there.  Maps are used to do this.

 

http://wiki.developerforce.com/page/Apex_Code_Best_Practices

 

Look at Best Practice #2.  It will solve your problems.