ola pessoal, estou precisando de um Help no ACCUMULATE. Preciso listar as NFs agrupado por cidade totalizando o doc-fiscal.vl-cont-doc. Mas dessa forma que eu fiz o ACCUMULATE (TOTAL) ele sempre acumula o valor sempre somando as cidades Ex: Cidade A + B + C + D. preciso do: Valor total da Cidade A, Valor total da Cidade B, Valor total da Cidade C Valor total da Cidade D. Código: FOR EACH doc-fiscal NO-LOCK where doc-fiscal.dt-emis-doc >= DATE(02,01,2015) AND doc-fiscal.dt-emis-doc <= DATE(02,28,2015) AND doc-fiscal.cod-estabel = '202' AND (doc-fiscal.nat-operacao ='1101ca' OR doc-fiscal.nat-operacao = '1101ce') AND doc-fiscal.ind-sit-doc <> 2 BREAK BY doc-fiscal.cidade. FIND FIRST emitente NO-LOCK WHERE emitente.cod-emite = doc-fiscal.cod-emite. ACCUMULATE doc-fiscal.vl-cont-doc (TOTAL BY doc-fiscal.cidade). ACCUMULATE (doc-fiscal.vl-cont-doc) (COUNT BY doc-fiscal.cidade). /* ultima cidade agrupada entao disp na tela */ IF LAST-OF( doc-fiscal.cidade) THEN DO: DISP doc-fiscal.cidade ACCUM TOTAL doc-fiscal.vl-cont-doc ACCUMULATE COUNT doc-fiscal.vl-cont-doc. END. END.
eu prefiro criar uma temp-table e ir alimentando ela com os dados que me interessa quebrar, assim não preciso nem me preocupar no for each da tabela em ordenar por algum campo, ficando o for each mais rapido, selecionando um indice de tabela que seja mais rapido e tudo mais. Código: define temp-table ttCidade no-undo field cidade as character field valor as decimal index principal cidade. empty temp-table ttCidade. for each doc-fiscal no-lock where doc-fiscal.dt-emis-doc >= 02/01/2015 and doc-fiscal.dt-emis-doc <= 02/28/2015 and doc-fiscal.cod-estabel = '202' and (doc-fiscal.nat-operacao = '1101ca' or doc-fiscal.nat-operacao = '1101ce') and doc-fiscal.ind-sit-doc <> 2: find first ttCidade where ttCidade.cidade = doc-fiscal.cidade no-error. if not avail ttCidade then do: create ttCidade. assign ttCidade.cidade = doc-fiscal.cidade ttCidade.valor = 0. end. assign ttCidade.valor = ttCidade.valor + doc-fiscal.vl-cont-doc. end. for each ttCidade: disp ttCidade. end.