× Linguagem de Programação ADVPL

Perguntas TREPORT

Mais
10 anos 4 meses atrás #23768 por manoelcarlosjunior
TREPORT foi criado por manoelcarlosjunior
Boa tarde pessoal estou apanhando pra fazer o TReport com 3 seções alguém tem algum exemplo ?

Abraço !!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #23772 por kanaamlrr
Respondido por kanaamlrr no tópico TREPORT
Cara, não tenho nenhum exemplo aqui, mas qual a dúvida?
Qual sua necessidade?
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #23776 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico TREPORT
Cara vc é fera tenho acompanhado no fórum suas respostas desde já agradeço pelo tempo.
Bom sou novo em advpl e estou fazendo um relatório TReport peguei um exemplo muito bom de um amigo é um relatório de pedido de venda vou adapta-lo pra galera do estoque localizar o roduto no armazem ai to apanhando pra colocar uma observação de separação gostaria que ficasse abaixo ele até fica mais não ta vindo a informação quando eu coloco ao lado na seção 1 aparece normal.

Código

#Include "PROTHEUS.CH"
#Include "REPORT.CH"

User Function RelSC5a()

Local oReport
Local oSection1
Local oSection2
Local oSection3
Local oBreak
Local cPerg := "RelSC5a"

CriaSX1(cPerg)
Pergunte(cPerg, .F.)

DEFINE REPORT oReport NAME "RelSC5a" TITLE "Relatório de Pedidos - RelSC5a" PARAMETER cPerg ACTION {|oReport| PrintReport(oReport, cPerg)}

DEFINE SECTION oSection1 OF oReport TITLE "Pedidos" TABLES "SC5"

DEFINE CELL NAME "C5_NUM" OF oSection1 ALIAS "SC5" //SIZE 15
DEFINE CELL NAME "A1_NOME" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "C5_TIPOCLI" OF oSection1 ALIAS "SC5"
DEFINE CELL NAME "C5_EMISSAO" OF oSection1 ALIAS "SC5"
DEFINE CELL NAME "C5_NOTA" OF oSection1 ALIAS "SC5"

//DEFINE FUNCTION FROM oSection1:Cell("A1_NOME") OF oSection1 FUNCTION COUNT TITLE "Total de Clientes: " NO END SECTION

DEFINE SECTION oSection2 OF oSection1 TITLE "Ítens" TABLE "SC6"

DEFINE CELL NAME "C6_ITEM" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_PRODUTO" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_DESCRI" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_QTDVEN" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_VALOR" OF oSection2 ALIAS "SC6"


DEFINE SECTION oSection3 OF oSection1 TITLE "Observação" TABLE "SC5"
DEFINE CELL NAME "C5_XSEP" OF oSection3 ALIAS "SC5"


// DEFINE BREAK oBreak OF oSection1 WHEN oSection1:Cell("C5_NUM")

// DEFINE FUNCTION FROM oSection2:Cell("C6_ITEM") OF oSection2 FUNCTION COUNT TITLE "Total de Ítens"
// DEFINE FUNCTION FROM oSection2:Cell("C6_VALOR")OF oSection2 FUNCTION SUM TITLE "Valor Total"

oReport:PrintDialog()

Return Nil

//
//
Static Function PrintReport(oReport, cPerg)

#IFDEF TOP

Local cAlias := GetNextAlias()
Local cSQL := ""

MakeSqlExp(cPerg)

If !Empty(mv_Par01)
cSQL += "AND C5_NUM >= '" + mv_Par01 + "' "
EndIf
If !Empty(mv_Par02)
cSQL += "AND C5_NUM <= '" + mv_Par02 + "' "
EndIf

If !Empty(mv_Par03)
cSQL += "AND A1_COD >= '" + mv_Par03 + "' "
EndIf
If !Empty(mv_Par04)
cSQL += "AND A1_COD <= '" + mv_Par04 + "' "
EndIf

If !Empty(mv_Par05)
cSQL += "AND C6_PRODUTO >= '" + mv_Par05 + "' "
EndIf
If !Empty(mv_Par06)
cSQL += "AND C6_PRODUTO <= '" + mv_Par06 + "' "
EndIf

If !Empty(mv_Par07)
cSQL += "AND C5_EMISSAO >= '" + DtoS(mv_Par07) + "' "
EndIf
If !Empty(mv_Par08)
cSQL += "AND C5_EMISSAO <= '" + DtoS(mv_Par08) + "' "
EndIf

cSQL := "%"+cSQL+"%"

BEGIN REPORT QUERY oReport:Section(1)

BeginSQL Alias cAlias

SELECT C5_FILIAL, C5_NUM, A1_COD, A1_NOME, C5_TIPOCLI, C5_CONDPAG, C5_EMISSAO, C5_NOTA, C5_XSEP,
C6_NUM, C6_ITEM, C6_PRODUTO, C6_DESCRI, C6_QTDVEN, C6_VALOR

FROM %Table:SC5% SC5, %Table:SC6% SC6, %Table:SA1% SA1

WHERE C5_FILIAL = %xFilial:SC5% AND SC5.%NotDel% AND
C6_FILIAL = %xFilial:SC6% AND SC6.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
C5_NUM = C6_NUM AND C5_CLIENTE = A1_COD
%Exp:cSQL%

ORDER BY C5_FILIAL, C5_NUM

EndSQL

END REPORT QUERY oReport:Section(1)

oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):SetParentFilter({|cNum| (cAlias)->C6_NUM == cNum}, {|| (cAlias)->C5_NUM})
//oReport:Section(1):Section(1):SetParentFilter({|cNome| (cAlias)->Z2_NOME == cNome}, {|| (cAlias)->Z1_NOME})

oReport:Section(1):Print()

#ELSE

MakeAdvplExpr(cPerg)

dbSelectArea("SZ1")
dbSetOrder(1)

If !Empty(mv_Par01)
oReport:Section(1):SetFilter(mv_Par01) // mv_Par01 contém a range de Contas.
EndIf

//oReport:Section(1):Section(1):SetRelation({|| xFilial("SZ2")+SZ1->Z1_NOME}, "SZ2", 2, .T.)
//oReport:Section(1):Section(1):SetRelation({|| xFilial("SZ2")+SZ1->Z1_CODIGO}, "SZ2", 2, .T.)
//oReport:Section(1):Section(1):SetParentFilter({|cNome| SZ2->Z2_NOME == cNome}, {|| SZ1->Z1_NOME})
oReport:Section(1):Section(1):SetParentFilter({|cCodigo| SZ2->Z2_CODCOR == cCodigo}, {|| SZ1->Z1_CODIGO})
oReport:Section(1):Section(1):SetLineCondition({|| SZ2->Z2_Data >= mv_Par02 .And. SZ2->Z2_Data <= mv_Par03 .And. Z2_Tipo $ IIf(mv_Par04==1,"12",If(mv_Par04==2,"1","2"))})

oReport:Section(1):Print()

#ENDIF

Return Nil

//
//
// Parametros que devem ser passados para a função de criação das perguntas no arquivo SX1.
//
//
// 1o. Parametro -> Nome do grupo
// 2o. Parametro -> Numero da ordem
// 3o. Parametro -> Texto da pergunta em portugues
// 4o. Parametro -> Texto da pergunta em espanhol
// 5o. Parametro -> Texto da pergunta em ingles
// 6o. Parametro -> Nome da variavel
// 7o. Parametro -> Tipo do dado C=caractere, D=Data, N=Numerico
// 8o. Parametro -> Tamanho do dado
// 9o. Parametro -> Quantidade de casas decimais para o dado
// 10o. Parametro -> Numero da pre-selecao
// 11o. Parametro -> O tipo do dado sera G=get, S=scroll, C=choice, R=Range
// 12o. Parametro -> Sintaxe em advpl, ou funcao para validacao
// 13o. Parametro -> Consistencia com alguma tabela do sistema via <F3>
// 14o. Parametro -> Nome do grupo para SXG
// 15o. Parametro -> Pyme
// 16o. Parametro -> Nome da variavel que será utilizada no programa
// 17o. Parametro -> Primeira definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 18o. Parametro -> Primeira definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 19o. Parametro -> Primeira definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 20o. Parametro -> Conteudo da ultima resposta informada no parametro se caso o tipo do dados for get
// 21o. Parametro -> Segunda definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 22o. Parametro -> Segunda definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 23o. Parametro -> Segunda definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 24o. Parametro -> Terceira definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 25o. Parametro -> Terceira definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 26o. Parametro -> Terceira definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 27o. Parametro -> Quarta definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 28o. Parametro -> Quarta definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 29o. Parametro -> Quarta definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 30o. Parametro -> Quinta definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 31o. Parametro -> Quinta definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 32o. Parametro -> Quinta definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 33o. Parametro -> Vetor com o texto do help em portugues
// 34o. Parametro -> Vetor com o texto do help em espanhol
// 35o. Parametro -> Vetor com o texto do help em ingles
// 36o. Parametro -> Nome do grupo do help

Static Function CriaSX1(cPerg)

Local aHelp := {}

// Texto do help em português , inglês, espanhol
AAdd(aHelp, {{"Informe o nome da conta inicial e final"}, {""}, {""}})
AAdd(aHelp, {{"Informe a data inicial" }, {""}, {""}})
AAdd(aHelp, {{"Informe a data final" }, {""}, {""}})
AAdd(aHelp, {{"Informe o tipo de transação" }, {""}, {""}})

// 1o 2o 3o 4 5 6o 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
PutSX1(cPerg,"01","Pedido de?" ,"","","mv_ch1","C",06,00,00,"G","","SC5","","","mv_Par01","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"02","Pedido até" ,"","","mv_ch2","C",06,00,00,"G","","SC5","","","mv_Par02","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"03","Cliente de?" ,"","","mv_ch3","C",06,00,00,"G","","SA1","","","mv_Par03","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"04","Cliente até" ,"","","mv_ch4","C",06,00,00,"G","","SA1","","","mv_Par04","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"05","Produto de?" ,"","","mv_ch5","C",15,00,00,"G","","SB1ATF","","","mv_Par05","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"06","Produto até" ,"","","mv_ch6","C",15,00,00,"G","","SB1ATF","","","mv_Par06","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"07","Data de?" ,"","","mv_ch7","D",08,00,00,"G",""," ","","","mv_Par07","","","","","","","","","","","","","","","","",aHelp[4,1],aHelp[4,2],aHelp[4,3],"")
PutSX1(cPerg,"08","Data ate?" ,"","","mv_ch8","D",08,00,00,"G",""," ","","","mv_Par08","","","","","","","","","","","","","","","","",aHelp[4,1],aHelp[4,2],aHelp[4,3],"")

Return
Em anexo o Relatório.
Abraço
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #23790 por kanaamlrr
Respondido por kanaamlrr no tópico TREPORT
Então cara,
dei uma olhada aqui, e a Seção 3 utiliza apenas um campo da SC5.
Se você utilizar a função para utilizar a mesma query, ele vai acabar duplicando a informação várias vezes e ficaria errado.
Acho que nesse caso, seria melhor utilizar um Loop controlado ao invés de um Loop automático com a função SetParentQuery()

Ficaria algo mais ou menos assim:

No lugar do:
oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):SetParentFilter({|cNum| (cAlias)->C6_NUM == cNum}, {|| (cAlias)->C5_NUM})

Você faz um Loop mandando imprimir as linhas da seguinte forma:
While (cAlias)->(!Eof())
   oSection1:Init()
   oSection1:PrintLine()   
   cNum := (cAlias)->C5_NUM
   While (cAlias)->C6_NUM == cNum
      oSection2:Init()
      oSection2:PrintLine()
      (cAlias)->(dbSkip())      
   EndDo
   oSection2:Finish()
   oSection3:Init()
   oSection3:PrintLine()
   oSection3:Finish
   (cAlias)->(dbSkip())
EndDo
oSection1:Finish()

Não cheguei a testar, mas acho que funciona.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #23818 por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico TREPORT
Bom dia meu caro Kanaãm, vi seu post muito legal, quando você postou ja estava alinhado com minha chefia de colocar o Observação ao lado não abaixo como queriam antes mais ai arrumaram-me mais um problema, um outro campo. Só que esse campo é em outra tabela a SBZ, esse relatório é para o cara do estoque imprimir e separar as peças para o cliente então ele precisa do endereçamento. eu coloquei o campo da SBZ sem esse campo por exemplo o pedido que estou imprimindo dai normal até com a observação unica quera o erro que estávamos discutindo anteriormente mais quando coloco o campo ele multiplica a informação to pesquisando mas se alguém puder me dar uma ajuda segue o código abaixo com o campo SBZ.

Obs.: Cara as query´s para usarmos no ADVPL é meio complicado né ?
Vou me aprofundar prender e montar um material.

Abraço,

Manoel Carlos Júnior

#Include "PROTHEUS.CH"
#Include "REPORT.CH"

User Function RelSC5a()

Local oReport
Local oSection1
Local oSection2
Local oSection3
Local oBreak
Local cPerg := "RelSC5a"

CriaSX1(cPerg)
Pergunte(cPerg, .F.)

DEFINE REPORT oReport NAME "RelSC5a" TITLE "Pedido de Venda Para Separação" PARAMETER cPerg ACTION {|oReport| PrintReport(oReport, cPerg)}

DEFINE SECTION oSection1 OF oReport TITLE "Pedidos" TABLES "SC5"

DEFINE CELL NAME "C5_NUM" OF oSection1 ALIAS "SC5" //SIZE 15
DEFINE CELL NAME "A1_NOME" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "C5_EMISSAO" OF oSection1 ALIAS "SC5"
DEFINE CELL NAME "C5_XUSRINC" OF oSection1 ALIAS "SC5"
DEFINE CELL NAME "C5_XSEP" OF oSection1 ALIAS "SC5"
//DEFINE FUNCTION FROM oSection1:Cell("A1_NOME") OF oSection1 FUNCTION COUNT TITLE "Total de Clientes: " NO END SECTION

DEFINE SECTION oSection2 OF oSection1 TITLE "Ítens" TABLE "SC6"

DEFINE CELL NAME "C6_ITEM" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_PRODUTO" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_DESCRI" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_QTDVEN" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "C6_LOCAL" OF oSection2 ALIAS "SC6"
DEFINE CELL NAME "BZ_XENDPAD" OF oSection2 ALIAS "SBZ"

/*DEFINE SECTION oSection3 OF oSection1 TITLE "Observação" TABLE "SC5"

DEFINE CELL NAME "C5_XSEP" OF oSection3 ALIAS "SC5"*/


//DEFINE BREAK oBreak OF oSection1 WHEN oSection1:Cell("C5_NUM")

//DEFINE FUNCTION FROM oSection2:Cell("C6_ITEM") OF oSection2 FUNCTION COUNT TITLE "Total de Ítens"
//DEFINE FUNCTION FROM oSection2:Cell("C6_VALOR")OF oSection2 FUNCTION SUM TITLE "Valor Total"

oReport:PrintDialog()

Return Nil

//
//
Static Function PrintReport(oReport, cPerg)

#IFDEF TOP

Local cAlias := GetNextAlias()
Local cSQL := ""

MakeSqlExp(cPerg)

If !Empty(mv_Par01)
cSQL += "AND C5_NUM >= '" + mv_Par01 + "' "
EndIf
If !Empty(mv_Par02)
cSQL += "AND C5_NUM <= '" + mv_Par02 + "' "
EndIf

If !Empty(mv_Par03)
cSQL += "AND A1_COD >= '" + mv_Par03 + "' "
EndIf
If !Empty(mv_Par04)
cSQL += "AND A1_COD <= '" + mv_Par04 + "' "
EndIf

If !Empty(mv_Par05)
cSQL += "AND C6_PRODUTO >= '" + mv_Par05 + "' "
EndIf
If !Empty(mv_Par06)
cSQL += "AND C6_PRODUTO <= '" + mv_Par06 + "' "
EndIf

If !Empty(mv_Par07)
cSQL += "AND C5_EMISSAO >= '" + DtoS(mv_Par07) + "' "
EndIf
If !Empty(mv_Par08)
cSQL += "AND C5_EMISSAO <= '" + DtoS(mv_Par08) + "' "
EndIf

cSQL := "%"+cSQL+"%"

BEGIN REPORT QUERY oReport:Section(1)

BeginSQL Alias cAlias

SELECT C5_FILIAL, C5_NUM, A1_COD, A1_NOME, C5_EMISSAO, C5_XUSRINC, C5_XSEP,
C6_NUM, C6_ITEM, C6_PRODUTO, C6_DESCRI, C6_QTDVEN, C6_LOCAL, BZ_XENDPAD


FROM %Table:SC5% SC5, %Table:SC6% SC6, %Table:SA1% SA1, %Table:SBZ% SBZ

WHERE C5_FILIAL = %xFilial:SC5% AND SC5.%NotDel% AND
C6_FILIAL = %xFilial:SC6% AND SC6.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
C5_NUM = C6_NUM AND C5_CLIENTE = A1_COD

%Exp:cSQL%

ORDER BY C5_FILIAL, C5_NUM

EndSQL

END REPORT QUERY oReport:Section(1)

oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):SetParentFilter({|cNum| (cAlias)->C6_NUM == cNum}, {|| (cAlias)->C5_NUM})
//oReport:Section(1):Section(1):SetParentFilter({|cNome| (cAlias)->Z2_NOME == cNome}, {|| (cAlias)->Z1_NOME})

oReport:Section(1):Print()

#ELSE

MakeAdvplExpr(cPerg)

dbSelectAreaSZ1")
dbSetOrder(1)

If !Empty(mv_Par01)
oReport:Section(1):SetFilter(mv_Par01) // mv_Par01 contém a range de Contas.
EndIf

//oReport:Section(1):Section(1):SetRelation({|| xFilial("SZ2")+SZ1->Z1_NOME}, "SZ2", 2, .T.)
//oReport:Section(1):Section(1):SetRelation({|| xFilial("SZ2")+SZ1->Z1_CODIGO}, "SZ2", 2, .T.)
//oReport:Section(1):Section(1):SetParentFilter({|cNome| SZ2->Z2_NOME == cNome}, {|| SZ1->Z1_NOME})
oReport:Section(1):Section(1):SetParentFilter({|cCodigo| SZ2->Z2_CODCOR == cCodigo}, {|| SZ1->Z1_CODIGO})
oReport:Section(1):Section(1):SetLineCondition({|| SZ2->Z2_Data >= mv_Par02 .And. SZ2->Z2_Data <= mv_Par03 .And. Z2_Tipo $ IIf(mv_Par04==1,"12",If(mv_Par04==2,"1","2"))})

oReport:Section(1):Print()

#ENDIF

Return Nil

//
//
// Parametros que devem ser passados para a função de criação das perguntas no arquivo SX1.
//
//
// 1o. Parametro -> Nome do grupo
// 2o. Parametro -> Numero da ordem
// 3o. Parametro -> Texto da pergunta em portugues
// 4o. Parametro -> Texto da pergunta em espanhol
// 5o. Parametro -> Texto da pergunta em ingles
// 6o. Parametro -> Nome da variavel
// 7o. Parametro -> Tipo do dado C=caractere, D=Data, N=Numerico
// 8o. Parametro -> Tamanho do dado
// 9o. Parametro -> Quantidade de casas decimais para o dado
// 10o. Parametro -> Numero da pre-selecao
// 11o. Parametro -> O tipo do dado sera G=get, S=scroll, C=choice, R=Range
// 12o. Parametro -> Sintaxe em advpl, ou funcao para validacao
// 13o. Parametro -> Consistencia com alguma tabela do sistema via <F3>
// 14o. Parametro -> Nome do grupo para SXG
// 15o. Parametro -> Pyme
// 16o. Parametro -> Nome da variavel que será utilizada no programa
// 17o. Parametro -> Primeira definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 18o. Parametro -> Primeira definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 19o. Parametro -> Primeira definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 20o. Parametro -> Conteudo da ultima resposta informada no parametro se caso o tipo do dados for get
// 21o. Parametro -> Segunda definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 22o. Parametro -> Segunda definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 23o. Parametro -> Segunda definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 24o. Parametro -> Terceira definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 25o. Parametro -> Terceira definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 26o. Parametro -> Terceira definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 27o. Parametro -> Quarta definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 28o. Parametro -> Quarta definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 29o. Parametro -> Quarta definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 30o. Parametro -> Quinta definicao do texto em portugues se caso o tipo do dado for choice, exemplo: SIM ou Nao
// 31o. Parametro -> Quinta definicao do texto em espanhol se caso o tipo do dado for choice, exemplo: Si o No
// 32o. Parametro -> Quinta definicao do texto em ingles se caso o tipo do dado for choice, exemplo: Yes or No
// 33o. Parametro -> Vetor com o texto do help em portugues
// 34o. Parametro -> Vetor com o texto do help em espanhol
// 35o. Parametro -> Vetor com o texto do help em ingles
// 36o. Parametro -> Nome do grupo do help

Static Function CriaSX1(cPerg)

Local aHelp := {}

// Texto do help em português , inglês, espanhol
AAdd(aHelp, {{"Informe o nome da conta inicial e final"}, {""}, {""}})
AAdd(aHelp, {{"Informe a data inicial" }, {""}, {""}})
AAdd(aHelp, {{"Informe a data final" }, {""}, {""}})
AAdd(aHelp, {{"Informe o tipo de transação" }, {""}, {""}})

// 1o 2o 3o 4 5 6o 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
PutSX1(cPerg,"01","Pedido de?" ,"","","mv_ch1","C",06,00,00,"G","","SC5","","","mv_Par01","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"02","Pedido até" ,"","","mv_ch2","C",06,00,00,"G","","SC5","","","mv_Par02","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"03","Cliente de?" ,"","","mv_ch3","C",06,00,00,"G","","SA1","","","mv_Par03","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"04","Cliente até" ,"","","mv_ch4","C",06,00,00,"G","","SA1","","","mv_Par04","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"05","Produto de?" ,"","","mv_ch5","C",15,00,00,"G","","SB1ATF","","","mv_Par05","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"06","Produto até" ,"","","mv_ch6","C",15,00,00,"G","","SB1ATF","","","mv_Par06","","","","","","","","","","","","","","","","",aHelp[3,1],aHelp[3,2],aHelp[3,3],"")
PutSX1(cPerg,"07","Data de?" ,"","","mv_ch7","D",08,00,00,"G",""," ","","","mv_Par07","","","","","","","","","","","","","","","","",aHelp[4,1],aHelp[4,2],aHelp[4,3],"")
PutSX1(cPerg,"08","Data ate?" ,"","","mv_ch8","D",08,00,00,"G",""," ","","","mv_Par08","","","","","","","","","","","","","","","","",aHelp[4,1],aHelp[4,2],aHelp[4,3],"")

Return

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #23820 por kanaamlrr
Respondido por kanaamlrr no tópico TREPORT
Manoel,
Nesse caso está duplicando pois você adicionou a tabela SBZ porém não fez o relacionamento dela com nenhuma outra tabela, dessa forma ele entende como um FULL OUTER JOIN, o que seria como uma multiplicação dos dois universos.
As querys em si são da mesma forma que no MSSQL, só muda a forma de escrita.

tente adicionar o relacionamento (eu não sei quais campos são da SBZ com alguma das que já estão na query)
mas seria algo do tipo:

SELECT C5_FILIAL, C5_NUM, A1_COD, A1_NOME, C5_EMISSAO, C5_XUSRINC, C5_XSEP,
C6_NUM, C6_ITEM, C6_PRODUTO, C6_DESCRI, C6_QTDVEN, C6_LOCAL, BZ_XENDPAD


FROM %Table:SC5% SC5, %Table:SC6% SC6, %Table:SA1% SA1, %Table:SBZ% SBZ

WHERE C5_FILIAL = %xFilial:SC5% AND SC5.%NotDel% AND
C6_FILIAL = %xFilial:SC6% AND SC6.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
BZ_FILIAL = %xFilial:SBZ% AND SBZ.%NotDel% AND
SBZ.BZ_CHAVE = SC5.C5_CHAVE (SE O RELACIONAMENTO FOR AQUI, SENÃO COLOCAR A TABELA CORRETA)
C5_NUM = C6_NUM AND C5_CLIENTE = A1_COD

Isso já tratará a duplicação.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.113 segundos
Joomla templates by a4joomla