+ Start a Discussion
Vanessa BarrosVanessa Barros 

System.LimitException: Too many DML statements: 21

hi . someone can help me?

 

This is my trigger!

 

trigger preencherResumoPricing on Input_Resumo_Pricing__c (before insert) {

List<Pricing_Produto_Final__c> ppfCNCPC = [select produto__c, preco_de_compra__c,valido_de__c, valido_ate__c,
            Centro_de_Carga2__c from Pricing_Produto_Final__c
            where Tr_background__c = 'Pricing PC Prod Final'];
 
List <Pricing_Produto_Final__c> ppfCNCPV = [select produto__c, PVP_Ref__c, valido_de__c, valido_ate__c
            from Pricing_Produto_Final__c
            where Tr_background__c = 'Pricing PVP Prod Final'];
//buscar a Margem PRIO consoante o produto
List<Parametros_fixos_Pricing__c> pfp_margem =
                    [select produto__c ,margem_prio__c,Valido_ate__c,Valido_de__c,Centro_de_Carga2__c
                    from Parametros_fixos_Pricing__c
                    where tr_background__c = 'Margens PRIO'
                    ];
                        
    for( Input_Resumo_Pricing__c irp : Trigger.new)
    {
        if(irp.tr_background__c == 'Combustíveis não Compostos'){
            for(Pricing_Produto_Final__c ppf : ppfCNCPC ){
                if(irp.valido_de__c ==ppf.valido_de__c && irp.valido_ate__c == ppf.valido_ate__c){
                for(Pricing_Produto_Final__c ppf2 : ppfCNCPV){
                    if(ppf2.produto__c == ppf.produto__c && ppf2.valido_de__c == irp.valido_de__c
                        &&  ppf2.valido_ate__c == irp.valido_ate__c  ){
                        for(Parametros_fixos_Pricing__c margem : pfp_margem){
                        if(margem.produto__c==ppf2.produto__c  && margem.valido_de__c ==irp.valido_de__c
                            &&margem.valido_ate__c== irp.valido_ate__c  &&margem.Centro_de_Carga2__c ==
                            ppf.Centro_de_Carga2__c){
                
           
          
           
           Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
          resumopricing.produto__c =ppf.produto__c;
          resumopricing.Centro_de_Carga__c =ppf.Centro_de_Carga2__c;
          resumopricing.preco_de_compra__c =ppf.preco_de_compra__c;
          resumopricing.margem_prio__c =margem.margem_prio__c;
          resumopricing.PVP_Referencia_s_Iva__c = ppf2.PVP_Ref__c;
          resumopricing.valido_de__c =irp.valido_de__c;
          resumopricing.valido_ate__c =irp.valido_de__c;
          
          insert resumopricing;
            }}}}}}
           
            
            
            
            
            //Produtos Pricing Manual
           /* List<Pricing_Produto_Final__c> ppfPricManual = [select produto__c, preco_de_compra__c,
            Centro_de_Carga2__c from Pricing_Produto_Final__c
            where Tr_background__c = 'Pricing PC Manual Produto' AND
            valido_de__c = :irp.valido_de__c AND
            Valido_ate__c = :irp.valido_ate__c];
            
          for (Pricing_Produto_Final__c pm : ppfPricManual){
          //buscar a Margem PRIO consoante o produto
                Parametros_fixos_Pricing__c pfp_margem =
                [select margem_prio__c
                from Parametros_fixos_Pricing__c
                where
                tr_background__c = 'Margens PRIO' AND
                produto__c = :pm.produto__c AND
                Centro_de_Carga2__c = :pm.Centro_de_Carga2__c AND
                Valido_ate__c >= :irp.valido_ate__c AND
                Valido_de__c <= :irp.valido_de__c ];
                
          Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
          resumopricing.produto__c =pm.produto__c;
          resumopricing.Centro_de_Carga__c =pm.Centro_de_Carga2__c;
          resumopricing.preco_de_compra__c =pm.preco_de_compra__c;
          resumopricing.margem_prio__c =pfp_margem.margem_prio__c;
          resumopricing.valido_de__c =irp.valido_de__c;
          resumopricing.valido_ate__c =irp.valido_de__c;
          
          insert resumopricing;
          
          }*/
            
        }else{
            List<Pricing_Produto_Final__c> ppfCCPC = [select produto__c, preco_de_compra__c,
            Centro_de_Carga2__c from Pricing_Produto_Final__c
            where tr_background__c = 'Pricing PC Prod.Final Composto' AND
            valido_de__c = :irp.valido_de__c AND
            Valido_ate__c = :irp.valido_ate__c];
            
            for(Pricing_Produto_Final__c ppf : ppfCCPC ){
            //buscar a Margem PRIO consoante o produto
                Parametros_fixos_Pricing__c pfp_margem2 =
                [select margem_prio__c
                from Parametros_fixos_Pricing__c
                where
                tr_background__c = 'Margens PRIO' AND
                produto__c = :ppf.produto__c AND
                Centro_de_Carga2__c = :ppf.Centro_de_Carga2__c AND
                Valido_ate__c >= :irp.valido_ate__c AND
                Valido_de__c <= :irp.valido_de__c ];
                
           Pricing_Produto_Final__c ppfCC = [select produto__c, PVP_Ref__c from Pricing_Produto_Final__c
            where tr_background__c = 'Pricing PVP Prod.Final Composto' AND
            produto__c = :ppf.produto__c AND
            valido_de__c = :irp.valido_de__c AND
            Valido_ate__c = :irp.valido_ate__c];
            
           Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
          resumopricing.produto__c =ppf.produto__c;
          resumopricing.Centro_de_Carga__c =ppf.Centro_de_Carga2__c;
          resumopricing.preco_de_compra__c =ppf.preco_de_compra__c;
          resumopricing.margem_prio__c =pfp_margem2.margem_prio__c;
          resumopricing.PVP_Referencia_s_Iva__c =ppfCC.PVP_Ref__c;
          resumopricing.valido_de__c =irp.valido_de__c;
          resumopricing.valido_ate__c =irp.valido_ate__c;
          
          insert resumopricing;
            }
        }

    }
}

Best Answer chosen by Admin (Salesforce Developers) 
SatgurSatgur

You need to bulkify your trigger code.

 

As of now you are looping through the records inside a for loop, and then firing INSERT DML operation on Single record one by one.

 

Instead declare a LIST variable outside for loop and keep adding individual records into the list inside for loop as indicated below -  

 

 

List<Resumo_Pricing__c> Lst_Resumopricing = new List<Resumo_Pricing__c>();
   for(    )  {

     //inside for loop, create Resumo_Pricing__c record
     // and insert into the List variable

     Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
     //populate all attributes

     //now add the resumopricing into list
     Lst_Resumopricing.add(resumopricing) ;
     
    }

    //perform bulk Insert outside for loop
    insert Lst_Resumopricing ;

 

This should help in avoiding Apex governor limits as you will consume only 1 Insert DML opeation and not so many.

 

Hope this helps.

 

All Answers

SatgurSatgur

You need to bulkify your trigger code.

 

As of now you are looping through the records inside a for loop, and then firing INSERT DML operation on Single record one by one.

 

Instead declare a LIST variable outside for loop and keep adding individual records into the list inside for loop as indicated below -  

 

 

List<Resumo_Pricing__c> Lst_Resumopricing = new List<Resumo_Pricing__c>();
   for(    )  {

     //inside for loop, create Resumo_Pricing__c record
     // and insert into the List variable

     Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
     //populate all attributes

     //now add the resumopricing into list
     Lst_Resumopricing.add(resumopricing) ;
     
    }

    //perform bulk Insert outside for loop
    insert Lst_Resumopricing ;

 

This should help in avoiding Apex governor limits as you will consume only 1 Insert DML opeation and not so many.

 

Hope this helps.

 

This was selected as the best answer
Vanessa BarrosVanessa Barros

i understand your idea.. Can u help with some of my trigger then i do the rest?

 

trigger preencherResumoPricing on Input_Resumo_Pricing__c (before insert) {

List<Pricing_Produto_Final__c> ppfCNCPC = [select produto__c, preco_de_compra__c,valido_de__c, valido_ate__c,
            Centro_de_Carga2__c from Pricing_Produto_Final__c
            where Tr_background__c = 'Pricing PC Prod Final'];
 
List <Pricing_Produto_Final__c> ppfCNCPV = [select produto__c, PVP_Ref__c, valido_de__c, valido_ate__c
            from Pricing_Produto_Final__c
            where Tr_background__c = 'Pricing PVP Prod Final'];
//buscar a Margem PRIO consoante o produto
List<Parametros_fixos_Pricing__c> pfp_margem =
                    [select produto__c ,margem_prio__c,Valido_ate__c,Valido_de__c,Centro_de_Carga2__c
                    from Parametros_fixos_Pricing__c
                    where tr_background__c = 'Margens PRIO'
                    ];
                        
    for( Input_Resumo_Pricing__c irp : Trigger.new)
    {
        if(irp.tr_background__c == 'Combustíveis não Compostos'){
            for(Pricing_Produto_Final__c ppf : ppfCNCPC ){
                if(irp.valido_de__c ==ppf.valido_de__c && irp.valido_ate__c == ppf.valido_ate__c){
                for(Pricing_Produto_Final__c ppf2 : ppfCNCPV){
                    if(ppf2.produto__c == ppf.produto__c && ppf2.valido_de__c == irp.valido_de__c
                        &&  ppf2.valido_ate__c == irp.valido_ate__c  ){
                        for(Parametros_fixos_Pricing__c margem : pfp_margem){
                        if(margem.produto__c==ppf2.produto__c  && margem.valido_de__c ==irp.valido_de__c
                            &&margem.valido_ate__c== irp.valido_ate__c  &&margem.Centro_de_Carga2__c ==
                            ppf.Centro_de_Carga2__c){
                
           
          
           
           Resumo_Pricing__c resumopricing = new Resumo_Pricing__c();
          resumopricing.produto__c =ppf.produto__c;
          resumopricing.Centro_de_Carga__c =ppf.Centro_de_Carga2__c;
          resumopricing.preco_de_compra__c =ppf.preco_de_compra__c;
          resumopricing.margem_prio__c =margem.margem_prio__c;
          resumopricing.PVP_Referencia_s_Iva__c = ppf2.PVP_Ref__c;
          resumopricing.valido_de__c =irp.valido_de__c;
          resumopricing.valido_ate__c =irp.valido_de__c;
          
          insert resumopricing;
            }

}

}}

}}}

    }
}

Vanessa BarrosVanessa Barros

i have done with this small code and that works!!!!!!!!!!!!!!

thanksssssssssssss uuuuuuuuuuuuuuuuuuuu:smileyvery-happy:

 

im going to extend to all trigger!