You need to sign in to do that
Don't have an account?
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;
}
}
}
}
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 -
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
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 -
This should help in avoiding Apex governor limits as you will consume only 1 Insert DML opeation and not so many.
Hope this helps.
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;
}
}
}}
}}}
}
}
i have done with this small code and that works!!!!!!!!!!!!!!
thanksssssssssssss uuuuuuuuuuuuuuuuuuuu:smileyvery-happy:
im going to extend to all trigger!