×
Linguagem de Programação ADVPL
Perguntas TREPORT
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
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 !!
Abraço !!
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
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
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
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 4 meses atrás #23790
por kanaamlrr
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:
Você faz um Loop mandando imprimir as linhas da seguinte forma:
Não cheguei a testar, mas acho que funciona.
Abraço!
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.
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
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
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 4 meses atrás #23820
por kanaamlrr
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:
Isso já tratará a duplicação.
Abraço!
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