- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ordenação de Relatorio
×
Linguagem de Programação ADVPL
Perguntas Ordenação de Relatorio
- alemaocar
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 8
- Obrigados Recebidos: 0
10 anos 1 mês atrás #25674
por alemaocar
Ordenação de Relatorio foi criado por alemaocar
Boa Tarde Pessoal, gostaria de tirar uma duvida com vocês.
É o seguinte, tenho um relatorio onde gostaria de ordenar o mesmo não pelo item mais sim pelo endereço de onde esta o produto no estoque tipo exemplo abaixo:
Item Codigo Endereço
01 1010 R873
02 2020 A132
03 3030 B343
04 4040 S123
05 5050 H232
Em vez de Ordenar pelo item, gostaria de ordenar pelo endereço, pois fica mais pratico para o pessoal do estoque pegar os itens pois o mesmo começa do menos para o maior, gostaria que ficasse assim:
Item Codigo Endereço
02 2020 A132
03 3030 B343
05 5050 H232
01 1010 R873
04 4040 S123
Gostaria que ficasse assim...abaixo o codigo que estou utilizando a rotina..
/* MODELO DE IMPRESSAO
// 1 2 3 4 5 6 7 8
li := 01
While !Eof( ) .and. SL2->L2_NUM == SL1->L1_NUM
If SL2->L2_VENDIDO == "S"
dbSkip()
Loop
EndIf
If li > 60
lCabec := .T.
EndIf
If lCabec
li := 01
@ li,00 PSAY "+
+"
If LjAnalisaLeg(17)[1]
li++
@ li,00 PSAY "| NÃO É DOCUMENTO FISCAL - NÃO VÁLIDO COMO GARANTIA |"
li++
@ li,00 PSAY "| |"
EndIf
li++
@ li,00 PSAY "|No. Orçamento: Emissão: Validade: |"
@ li,17 PSAY SL1->L1_NUM
@ li,38 PSAY SL1->L1_EMISSAO
@ li,64 PSAY SL1->L1_DTLIM
li++
@ li,00 PSAY "|Cliente: - |"
@ li,17 PSAY SL1->L1_CLIENTE
@ li,28 PSAY SA1->A1_NOME
li++
@ li,00 PSAY "|Vendedor - |"
@ li,17 PSAY SL1->L1_VEND
@ li,28 PSAY SA3->A3_NOME
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|It Código Qtde. Um Vlr.Unitário Vlr.Desconto Vlr.Total|"
lCabec := .F.
EndIf
li++
@ li,00 PSAY "| |"
@ li,01 PSAY SL2->L2_ITEM
@ li,04 PSAY SL2->L2_PRODUTO
@ li,36 PSAY SL2->L2_QUANT Picture "@E 999.9"
@ li,43 PSAY SL2->L2_UM
@ li,47 PSAY SL2->L2_VRUNIT + SL2->L2_DESCPRO + (SL2->L2_VALDESC / SL2->L2_QUANT) Picture "@E 9,999,999.99"
@ li,62 PSAY SL2->L2_VALDESC + SL2->L2_DESCPRO Picture "@E 9,999,999.99"
@ li,77 PSAY SL2->L2_VLRITEM Picture "@E 9,999,999.99"
li++
@ li,00 PSAY "| Des: |"
@ li,09 PSAY GetAdvFVal("SB1", "B1_ESPECIF", xFilial("SB1") + SL2->L2_PRODUTO, 1, "", .T.)
// @ li,09 PSAY SL2->L2_ESPECIF
li++
@ li,00 PSAY "| Partn: Endereço: |"
@ li,11 PSAY GetAdvFVal("SB1", "B1_PARTN", xFilial("SB1") + SL2->L2_PRODUTO, 1, "", .T.)
@ li,74 PSAY SL2->L2_LOCALIZ
nValDesc += SL2->L2_VALDESC
li++
dbSkip()
EndDo
If !lCabec
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|T O T A L .............................................................R$ |"
@ li,75 PSAY SL1->L1_VLRTOT + SL1->L1_DESCONT + nValDesc picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|D E S C O N T O .......................................................R$ |"
@ li,75 PSAY SL1->L1_DESCONT + nValDesc picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|V A L O R A P A G A R ...............................................R$ |"
@ li,75 PSAY SL1->L1_VLRLIQ picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|Condição Pagamento : |"
If Len(aCondicoes) == NIL
@ li,22 PSAY SubStr(aCondicoes[ SL1->L1_COND ], 1, 12)
EndIf
li++
@ li,00 PSAY "|Forma de Pagamento : |"
If Len(aFormaPgto) == NIL
@ li,22 PSAY SubStr( aFormaPgto[ SL1->L1_FORMA ] , 1, 13 )
EndIf
If !Empty( SL1->L1_CONDPG )
dbSelectArea( "SE4" )
dbSeek( xFilial("SE4")+SL1->L1_CONDPG)
@li, 37 PSAY "Condição de Pgto." + SL1->L1_CONDPG + " " + SE4->E4_DESCRI
dbSelectArea( "SL1" )
EndIf
li++
@ li,00 PSAY "|Seu Pedido No. : |"
@ li,22 PSAY SL1->L1_NROPCLI
li++
@ li,00 PSAY "+
+"
EndIf
É o seguinte, tenho um relatorio onde gostaria de ordenar o mesmo não pelo item mais sim pelo endereço de onde esta o produto no estoque tipo exemplo abaixo:
Item Codigo Endereço
01 1010 R873
02 2020 A132
03 3030 B343
04 4040 S123
05 5050 H232
Em vez de Ordenar pelo item, gostaria de ordenar pelo endereço, pois fica mais pratico para o pessoal do estoque pegar os itens pois o mesmo começa do menos para o maior, gostaria que ficasse assim:
Item Codigo Endereço
02 2020 A132
03 3030 B343
05 5050 H232
01 1010 R873
04 4040 S123
Gostaria que ficasse assim...abaixo o codigo que estou utilizando a rotina..
/* MODELO DE IMPRESSAO
// 1 2 3 4 5 6 7 8
li := 01
While !Eof( ) .and. SL2->L2_NUM == SL1->L1_NUM
If SL2->L2_VENDIDO == "S"
dbSkip()
Loop
EndIf
If li > 60
lCabec := .T.
EndIf
If lCabec
li := 01
@ li,00 PSAY "+
+"
If LjAnalisaLeg(17)[1]
li++
@ li,00 PSAY "| NÃO É DOCUMENTO FISCAL - NÃO VÁLIDO COMO GARANTIA |"
li++
@ li,00 PSAY "| |"
EndIf
li++
@ li,00 PSAY "|No. Orçamento: Emissão: Validade: |"
@ li,17 PSAY SL1->L1_NUM
@ li,38 PSAY SL1->L1_EMISSAO
@ li,64 PSAY SL1->L1_DTLIM
li++
@ li,00 PSAY "|Cliente: - |"
@ li,17 PSAY SL1->L1_CLIENTE
@ li,28 PSAY SA1->A1_NOME
li++
@ li,00 PSAY "|Vendedor - |"
@ li,17 PSAY SL1->L1_VEND
@ li,28 PSAY SA3->A3_NOME
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|It Código Qtde. Um Vlr.Unitário Vlr.Desconto Vlr.Total|"
lCabec := .F.
EndIf
li++
@ li,00 PSAY "| |"
@ li,01 PSAY SL2->L2_ITEM
@ li,04 PSAY SL2->L2_PRODUTO
@ li,36 PSAY SL2->L2_QUANT Picture "@E 999.9"
@ li,43 PSAY SL2->L2_UM
@ li,47 PSAY SL2->L2_VRUNIT + SL2->L2_DESCPRO + (SL2->L2_VALDESC / SL2->L2_QUANT) Picture "@E 9,999,999.99"
@ li,62 PSAY SL2->L2_VALDESC + SL2->L2_DESCPRO Picture "@E 9,999,999.99"
@ li,77 PSAY SL2->L2_VLRITEM Picture "@E 9,999,999.99"
li++
@ li,00 PSAY "| Des: |"
@ li,09 PSAY GetAdvFVal("SB1", "B1_ESPECIF", xFilial("SB1") + SL2->L2_PRODUTO, 1, "", .T.)
// @ li,09 PSAY SL2->L2_ESPECIF
li++
@ li,00 PSAY "| Partn: Endereço: |"
@ li,11 PSAY GetAdvFVal("SB1", "B1_PARTN", xFilial("SB1") + SL2->L2_PRODUTO, 1, "", .T.)
@ li,74 PSAY SL2->L2_LOCALIZ
nValDesc += SL2->L2_VALDESC
li++
dbSkip()
EndDo
If !lCabec
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|T O T A L .............................................................R$ |"
@ li,75 PSAY SL1->L1_VLRTOT + SL1->L1_DESCONT + nValDesc picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|D E S C O N T O .......................................................R$ |"
@ li,75 PSAY SL1->L1_DESCONT + nValDesc picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|V A L O R A P A G A R ...............................................R$ |"
@ li,75 PSAY SL1->L1_VLRLIQ picture "@E 999,999,999.99"
li++
@ li,00 PSAY "|
|"
li++
@ li,00 PSAY "|Condição Pagamento : |"
If Len(aCondicoes) == NIL
@ li,22 PSAY SubStr(aCondicoes[ SL1->L1_COND ], 1, 12)
EndIf
li++
@ li,00 PSAY "|Forma de Pagamento : |"
If Len(aFormaPgto) == NIL
@ li,22 PSAY SubStr( aFormaPgto[ SL1->L1_FORMA ] , 1, 13 )
EndIf
If !Empty( SL1->L1_CONDPG )
dbSelectArea( "SE4" )
dbSeek( xFilial("SE4")+SL1->L1_CONDPG)
@li, 37 PSAY "Condição de Pgto." + SL1->L1_CONDPG + " " + SE4->E4_DESCRI
dbSelectArea( "SL1" )
EndIf
li++
@ li,00 PSAY "|Seu Pedido No. : |"
@ li,22 PSAY SL1->L1_NROPCLI
li++
@ li,00 PSAY "+
+"
EndIf
Por favor Acessar ou Registrar para participar da conversa.
- mbrigagao
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 350
- Obrigados Recebidos: 1
10 anos 1 mês atrás #25677
por mbrigagao
Respondido por mbrigagao no tópico Ordenação de Relatorio
Michel,
Não consegui localizar no seu código o momento em que vc busca os itens na tabela, mas vc tem duas alternativas:
1) Criar um novo índice, via configurar, para a tabela e chave que vc precisa, assim ficaria disponível para ser usada a qualquer momento (exemplo : FILIAL+ENDEREÇO+ITEM+CODIGO);
2) Criar um índice temporário dentro da rotina de impressão utilizando ou 'order by' ou indregua... e utilizar esse novo índice para as buscas e ordenação do seu relatório.
Abrs
Não consegui localizar no seu código o momento em que vc busca os itens na tabela, mas vc tem duas alternativas:
1) Criar um novo índice, via configurar, para a tabela e chave que vc precisa, assim ficaria disponível para ser usada a qualquer momento (exemplo : FILIAL+ENDEREÇO+ITEM+CODIGO);
2) Criar um índice temporário dentro da rotina de impressão utilizando ou 'order by' ou indregua... e utilizar esse novo índice para as buscas e ordenação do seu relatório.
Abrs
Por favor Acessar ou Registrar para participar da conversa.
- alemaocar
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 8
- Obrigados Recebidos: 0
10 anos 1 mês atrás #25678
por alemaocar
Respondido por alemaocar no tópico Ordenação de Relatorio
Buenas Marcelo,
Cara valeu pelo retorno, consegui fazer o que precisava.
Acabei criando um novo indice na tabela, e dentro do relatorio onde realizava o dbsetorder(1), alterei o mesmo para utilizar o DbOrderNickName(NickName) e acabo resolvendo o meu problema que tinha...
Teoricamente é bem o que vc informo no item 1...
Valeu pela atenção
Abrs
Cara valeu pelo retorno, consegui fazer o que precisava.
Acabei criando um novo indice na tabela, e dentro do relatorio onde realizava o dbsetorder(1), alterei o mesmo para utilizar o DbOrderNickName(NickName) e acabo resolvendo o meu problema que tinha...
Teoricamente é bem o que vc informo no item 1...
Valeu pela atenção
Abrs
Por favor Acessar ou Registrar para participar da conversa.
- mbrigagao
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 350
- Obrigados Recebidos: 1
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ordenação de Relatorio
Tempo para a criação da página:0.088 segundos