×
Linguagem de Programação ADVPL
Perguntas LEFT JOIN
- manoelcarlosjunior
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 116
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24144
por manoelcarlosjunior
LEFT JOIN foi criado por manoelcarlosjunior
Bom dia Galera !!
Sou bem novato em ADVPL pra ser sincero devo muito a esse blog pelo conhecimento adquirido até hoje. Mais em fim, fiz um relatório treport só pra intenderem. Confecciono primeiro a query no SQL rodando e exibindo os dados que quero tenho um modelo que substituo no código advpl. A principio achei que o relatório estava funcionando até aparecer uma condição em que o nome do vendedor não precisa ser preenchido ai na sexta feira fui apresentado ao LEFT JOIN. Um amigo aqui do trabalho me ajudou a montar a query no SQL deu trabalho mais deu certo e no ADVPL esta dando erro. Alguém poderia me ajudar ? Segue abaixo o código, abraço.
SELECT DA0_CODTAB, DA0_DESCRI, DA0_DATDE, DA0_ATIVO, DA0_XCLI, DA0_XLOJA, A1_NREDUZ,
A1_XCODEX, A1_MUN, A1_EST, A1_VEND, A3_NREDUZ,
DA1_ITEM,DA1_CODPRO, B1_DESC, B1_XCODEX, DA1_PRCVEN
FROM %Table:DA0% DA0, %Table:DA1% DA1, %Table:SB1% SB1, %Table:SA1% SA1
LEFT JOIN %Table:SA3% SA3 ON SA3.A3_COD = SA1.A1_VEND AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.D_E_L_E_T_ <>'*'
%Table:SA3% SA3, %Table:DA1% DA1, %Table:SB1% SB1
WHERE DA0_FILIAL = %xFilial:DA0% AND DA0.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
DA1_FILIAL = %xFilial:DA1% AND DA1.%NotDel% AND
B1_FILIAL = %xFilial:SB1% AND SB1.%NotDel% AND
DA0.DA0_FILIAL = DA1.DA1_FILIAL AND
DA0.DA0_CODTAB = DA1.DA1_CODTAB AND
DA0.DA0_FILIAL = SA1.A1_FILIAL AND
DA0.DA0_XCLI = SA1.A1_COD AND
DA0.DA0_XLOJA = SA1.A1_LOJA AND
DA1.DA1_FILIAL = SB1.B1_FILIAL AND
DA1.DA1_CODPRO = SB1.B1_COD AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.A3_COD = SA1.A1_VEND
%Exp:cSQL%
ORDER BY DA0_CODTAB, DA1_ITEM
Sou bem novato em ADVPL pra ser sincero devo muito a esse blog pelo conhecimento adquirido até hoje. Mais em fim, fiz um relatório treport só pra intenderem. Confecciono primeiro a query no SQL rodando e exibindo os dados que quero tenho um modelo que substituo no código advpl. A principio achei que o relatório estava funcionando até aparecer uma condição em que o nome do vendedor não precisa ser preenchido ai na sexta feira fui apresentado ao LEFT JOIN. Um amigo aqui do trabalho me ajudou a montar a query no SQL deu trabalho mais deu certo e no ADVPL esta dando erro. Alguém poderia me ajudar ? Segue abaixo o código, abraço.
SELECT DA0_CODTAB, DA0_DESCRI, DA0_DATDE, DA0_ATIVO, DA0_XCLI, DA0_XLOJA, A1_NREDUZ,
A1_XCODEX, A1_MUN, A1_EST, A1_VEND, A3_NREDUZ,
DA1_ITEM,DA1_CODPRO, B1_DESC, B1_XCODEX, DA1_PRCVEN
FROM %Table:DA0% DA0, %Table:DA1% DA1, %Table:SB1% SB1, %Table:SA1% SA1
LEFT JOIN %Table:SA3% SA3 ON SA3.A3_COD = SA1.A1_VEND AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.D_E_L_E_T_ <>'*'
%Table:SA3% SA3, %Table:DA1% DA1, %Table:SB1% SB1
WHERE DA0_FILIAL = %xFilial:DA0% AND DA0.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
DA1_FILIAL = %xFilial:DA1% AND DA1.%NotDel% AND
B1_FILIAL = %xFilial:SB1% AND SB1.%NotDel% AND
DA0.DA0_FILIAL = DA1.DA1_FILIAL AND
DA0.DA0_CODTAB = DA1.DA1_CODTAB AND
DA0.DA0_FILIAL = SA1.A1_FILIAL AND
DA0.DA0_XCLI = SA1.A1_COD AND
DA0.DA0_XLOJA = SA1.A1_LOJA AND
DA1.DA1_FILIAL = SB1.B1_FILIAL AND
DA1.DA1_CODPRO = SB1.B1_COD AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.A3_COD = SA1.A1_VEND
%Exp:cSQL%
ORDER BY DA0_CODTAB, DA1_ITEM
Por favor Acessar ou Registrar para participar da conversa.
- AndersonBR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 108
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24147
por AndersonBR
Respondido por AndersonBR no tópico LEFT JOIN
Bom Dia Manoel,
eu faria a select da forma como postei abaixo, no meu ponto de vista fica mais organizada e de mais fácil entendimento, com relação a não funcionar não sei o que pode ser até porque não foi postado o erro, mas teste dessa forma e se der erro poste o o log, aqui não tive como testar, pois não tenho os campos customizados que você tem.
Você usa o TDS?
Se sim? Já sabe que é possível fazer o teste das selects diretamente nele através da View TOTVS SQL COmmand?
Quer dúvida, posta aí, abraço
eu faria a select da forma como postei abaixo, no meu ponto de vista fica mais organizada e de mais fácil entendimento, com relação a não funcionar não sei o que pode ser até porque não foi postado o erro, mas teste dessa forma e se der erro poste o o log, aqui não tive como testar, pois não tenho os campos customizados que você tem.
Você usa o TDS?
Se sim? Já sabe que é possível fazer o teste das selects diretamente nele através da View TOTVS SQL COmmand?
Quer dúvida, posta aí, abraço
SELECT DA0_CODTAB, DA0_DESCRI, DA0_DATDE, DA0_ATIVO, DA0_XCLI, DA0_XLOJA,
A1_NREDUZ, A1_XCODEX, A1_MUN, A1_EST, A1_VEND,
A3_NREDUZ,
DA1_ITEM,DA1_CODPRO, B1_DESC, B1_XCODEX, DA1_PRCVEN
FROM %Table:DA0% DA0, %Table:SA1% SA1
INNER JOIN %Table:DA1% DA1 on DA0.DA0_FILIAL = DA1.DA1_FILIAL AND
DA0.DA0_CODTAB = DA1.DA1_CODTAB AND
DA1.%NotDel%
INNER JOIN %Table:SB1% SB1 on DA1.DA1_FILIAL = SB1.B1_FILIAL AND
DA1.DA1_CODPRO = SB1.B1_COD AND
SB1.%NotDel%
INNER JOIN %Table:SA1% SA1 on DA0.DA0_FILIAL = SA1.A1_FILIAL AND
DA0.DA0_XCLI = SA1.A1_COD AND
DA0.DA0_XLOJA = SA1.A1_LOJA AND
SA1.%NotDel%
LEFT JOIN %Table:SA3% SA3 ON SA3.A3_COD = SA1.A1_VEND AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.%NotDel%
WHERE DA0_FILIAL = %xFilial:DA0% AND DA0.%NotDel% AND
%Exp:cSQL%
ORDER BY DA0_CODTAB, DA1_ITEM
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 3 meses atrás #24169
por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico LEFT JOIN
Caro Anderson Barbosa, foi ótima a sua dica desculpe a identação desorganiza é que como disse estou aprendendo, brigado por esse toque tambem. Em fim o erro na minha query era a linha %Table:SA3% SA3, %Table:DA1% DA1, %Table:SB1% SB1 que era pra ficar só no from e a linha SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.A3_COD = SA1.A1_VEND que ja estava declarada no left join .... coloquei o seu código e deu uns erros na condição END vou analisar depois o relatório ficou pronto muito obrigado só uma duvida. Eu coloquei esse relatório de impressão em um menu da tabela de preço pra fazer uma graça para o usuário ai então digamos que eu abra ele e não queria mais filtrar e clik em fechar ele da um erro na função oReport:PrintDialog()
Debuguei e dei um print na tela esta em anexo ele menciona alias da SX4 mais nem to usando essa tabela...
Erro em anexo
Grato
SA3.A3_COD = SA1.A1_VEND que ja estava declarada no left join .... coloquei o seu código e deu uns erros na condição END vou analisar depois o relatório ficou pronto muito obrigado só uma duvida. Eu coloquei esse relatório de impressão em um menu da tabela de preço pra fazer uma graça para o usuário ai então digamos que eu abra ele e não queria mais filtrar e clik em fechar ele da um erro na função oReport:PrintDialog()
Debuguei e dei um print na tela esta em anexo ele menciona alias da SX4 mais nem to usando essa tabela...
Erro em anexo
Grato
Por favor Acessar ou Registrar para participar da conversa.
- AndersonBR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 108
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24172
por AndersonBR
Respondido por AndersonBR no tópico LEFT JOIN
Manoel, seguinte, com relação a select ainda não é nem a questão da identação, ela ajuda e muito, mas me referia a forma que você trabalhou os joins ele funciona perfeitamente da forma que você fez, mas eles não estão identificados e você deixa enorme a clausula where, mas fora isso não tem problema nenhum!
Com relação ao erro na X4, se você chamar direto pelo menu o relatório ele apresenta erro também?
Dei uma olhada na X4 e ela nem tem o campo que menciona no erro, vou dar uma procurada aqui se achar alguma coisa te aviso, mas sinceramente ainda não tinha pego esse erro.
Abraço e boa sorte aí na caminhada
Com relação ao erro na X4, se você chamar direto pelo menu o relatório ele apresenta erro também?
Dei uma olhada na X4 e ela nem tem o campo que menciona no erro, vou dar uma procurada aqui se achar alguma coisa te aviso, mas sinceramente ainda não tinha pego esse erro.
Abraço e boa sorte aí na caminhada
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 3 meses atrás #24174
por manoelcarlosjunior
Respondido por manoelcarlosjunior no tópico LEFT JOIN
Cara é alguma coisa no parâmetro
oReport:PrintDialog()
O que vi no TDN é que ele é verdadeiro se confirmamos a impressão mais o erro da quando eu não confirmo se eu abrir o relatório e desistir e fechar por exemplo.
Já olhei 10 vezes o código e comparei com outro que tava funcionando e não vi nada em fim to procurando quando souber o erro posto aqui. Haaa abaixo o código completo.:
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa º TABELAP º Autor ºManoel Carlos Juniorº Data ³31/07/2014 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Imprime Tabela de preço. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºModulo | SIGAFAT | USO | Especifico do SIGAFAT º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
#Include "PROTHEUS.CH"
#Include "REPORT.CH"
User Function TABELAP()
Local oReport
Local oSection1
Local oSection2
Local oBreak
Local cPerg := "TABELAP"
CriaSX1(cPerg)
Pergunte(cPerg, .F.)
DEFINE REPORT oReport NAME "TABELAP" TITLE "Tabela de Preços" PARAMETER cPerg ACTION {|oReport| PrintReport(oReport, cPerg)}
DEFINE SECTION oSection1 OF oReport TITLE "Cabeçalho" TABLES "DA0"
TRCell():New(oSection1,"DA0_CODTAB","DA0","Código",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "DA0_DESCRI" OF oSection1 ALIAS "DA0"
TRCell():New(oSection1,"DA0_DATDE","DA0","Data",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"DA0_ATIVO","DA0","Ativa",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "DA0_XCLI" OF oSection1 ALIAS "DA0"
TRCell():New(oSection1,"DA0_XLOJA","DA0","Lj",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "A1_NREDUZ" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "A1_XCODEX" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "A1_MUN" OF oSection1 ALIAS "SA1"
TRCell():New(oSection1,"A1_EST","SA1","Est",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"A1_VEND","SA1","Vend",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"A3_NREDUZ","SA3","Nome",,,,,,,,,,,,,,,.F.)
//DEFINE FUNCTION FROM oSection1:Cell("A1_NOME") OF oSection1 FUNCTION COUNT TITLE "Total de Clientes: " NO END SECTION
//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 "DA1"
DEFINE CELL NAME "DA1_ITEM" OF oSection2 ALIAS "DA1"
DEFINE CELL NAME "DA1_CODPRO" OF oSection2 ALIAS "DA1"
DEFINE CELL NAME "B1_DESC" OF oSection2 ALIAS "SB1"
DEFINE CELL NAME "B1_XCODEX" OF oSection2 ALIAS "SB1"
DEFINE CELL NAME "DA1_PRCVEN" OF oSection2 ALIAS "DA1"
//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:SetLandScape(.F.)
oReport:PrintDialog()
Return Nil
//
//
Static Function PrintReport(oReport, cPerg)
#IFDEF TOP
Local cAlias := GetNextAlias()
Local cSQL := ""
MakeSqlExp(cPerg)
If !Empty(mv_Par01)
cSQL += "AND DA0_CODTAB >= '" + mv_Par01 + "' "
EndIf
If !Empty(mv_Par02)
cSQL += "AND DA0_CODTAB <= '" + mv_Par02 + "' "
EndIf /*
If !Empty(mv_Par03)
cSQL += "AND C9_CLIENTE >= '" + mv_Par03 + "' "
EndIf
If !Empty(mv_Par04)
cSQL += "AND C9_CLIENTE <= '" + mv_Par04 + "' "
EndIf
If !Empty(mv_Par05)
cSQL += "AND DC_PRODUTO >= '" + mv_Par05 + "' "
EndIf
If !Empty(mv_Par06)
cSQL += "AND DC_PRODUTO <= '" + mv_Par06 + "' "
EndIf
If !Empty(mv_Par07)
cSQL += "AND DA0_DATDE = '" + DtoS(mv_Par07) + "' "
EndIf
/*If !Empty(mv_Par08)
cSQL += "AND C9_DATALIB <= '" + DtoS(mv_Par08) + "' "
EndIf */
cSQL := "%"+cSQL+"%"
BEGIN REPORT QUERY oReport:Section(1)
BeginSQL Alias cAlias
SELECT DA0_CODTAB, DA0_DESCRI, DA0_DATDE, DA0_ATIVO, DA0_XCLI, DA0_XLOJA, A1_NREDUZ,
A1_XCODEX, A1_MUN, A1_EST, A1_VEND, A3_NREDUZ,
DA1_ITEM,DA1_CODPRO, B1_DESC, B1_XCODEX, DA1_PRCVEN
FROM %Table:DA0% DA0, %Table:DA1% DA1, %Table:SB1% SB1, %Table:SA1% SA1
LEFT JOIN %Table:SA3% SA3 ON SA3.A3_COD = SA1.A1_VEND AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.%NotDel%
WHERE DA0_FILIAL = %xFilial:DA0% AND DA0.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
DA1_FILIAL = %xFilial:DA1% AND DA1.%NotDel% AND
B1_FILIAL = %xFilial:SB1% AND SB1.%NotDel% AND
DA0.DA0_FILIAL = DA1.DA1_FILIAL AND
DA0.DA0_CODTAB = DA1.DA1_CODTAB AND
DA0.DA0_FILIAL = SA1.A1_FILIAL AND
DA0.DA0_XCLI = SA1.A1_COD AND
DA0.DA0_XLOJA = SA1.A1_LOJA AND
DA1.DA1_FILIAL = SB1.B1_FILIAL AND
DA1.DA1_CODPRO = SB1.B1_COD
%Exp:cSQL%
ORDER BY DA0_CODTAB, DA1_ITEM
EndSQL
END REPORT QUERY oReport:Section(1)
oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):SetParentFilter({|cNum| (cAlias)->DA0_CODTAB == cNum}, {|| (cAlias)->DA0_CODTAB})
//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 Código da Tabela " }, {""}, {""}})
AAdd(aHelp, {{"Informe o Código da Tabela " }, {""}, {""}})
/*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","De Tabela" ,"","","mv_ch1","C",06,00,00,"G","","DA0","","","mv_Par01","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"02","Até Tabela" ,"","","mv_ch2","C",06,00,00,"G","","DA0","","","mv_Par02","","","","","","","","","","","","","","","","",aHelp[2,1],aHelp[2,2],aHelp[2,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 Inicial" ,"","","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
oReport:PrintDialog()
O que vi no TDN é que ele é verdadeiro se confirmamos a impressão mais o erro da quando eu não confirmo se eu abrir o relatório e desistir e fechar por exemplo.
Já olhei 10 vezes o código e comparei com outro que tava funcionando e não vi nada em fim to procurando quando souber o erro posto aqui. Haaa abaixo o código completo.:
/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±º Programa º TABELAP º Autor ºManoel Carlos Juniorº Data ³31/07/2014 º±±
±±ÌÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Imprime Tabela de preço. º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºModulo | SIGAFAT | USO | Especifico do SIGAFAT º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
#Include "PROTHEUS.CH"
#Include "REPORT.CH"
User Function TABELAP()
Local oReport
Local oSection1
Local oSection2
Local oBreak
Local cPerg := "TABELAP"
CriaSX1(cPerg)
Pergunte(cPerg, .F.)
DEFINE REPORT oReport NAME "TABELAP" TITLE "Tabela de Preços" PARAMETER cPerg ACTION {|oReport| PrintReport(oReport, cPerg)}
DEFINE SECTION oSection1 OF oReport TITLE "Cabeçalho" TABLES "DA0"
TRCell():New(oSection1,"DA0_CODTAB","DA0","Código",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "DA0_DESCRI" OF oSection1 ALIAS "DA0"
TRCell():New(oSection1,"DA0_DATDE","DA0","Data",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"DA0_ATIVO","DA0","Ativa",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "DA0_XCLI" OF oSection1 ALIAS "DA0"
TRCell():New(oSection1,"DA0_XLOJA","DA0","Lj",,,,,,,,,,,,,,,.F.)
DEFINE CELL NAME "A1_NREDUZ" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "A1_XCODEX" OF oSection1 ALIAS "SA1"
DEFINE CELL NAME "A1_MUN" OF oSection1 ALIAS "SA1"
TRCell():New(oSection1,"A1_EST","SA1","Est",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"A1_VEND","SA1","Vend",,,,,,,,,,,,,,,.F.)
TRCell():New(oSection1,"A3_NREDUZ","SA3","Nome",,,,,,,,,,,,,,,.F.)
//DEFINE FUNCTION FROM oSection1:Cell("A1_NOME") OF oSection1 FUNCTION COUNT TITLE "Total de Clientes: " NO END SECTION
//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 "DA1"
DEFINE CELL NAME "DA1_ITEM" OF oSection2 ALIAS "DA1"
DEFINE CELL NAME "DA1_CODPRO" OF oSection2 ALIAS "DA1"
DEFINE CELL NAME "B1_DESC" OF oSection2 ALIAS "SB1"
DEFINE CELL NAME "B1_XCODEX" OF oSection2 ALIAS "SB1"
DEFINE CELL NAME "DA1_PRCVEN" OF oSection2 ALIAS "DA1"
//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:SetLandScape(.F.)
oReport:PrintDialog()
Return Nil
//
//
Static Function PrintReport(oReport, cPerg)
#IFDEF TOP
Local cAlias := GetNextAlias()
Local cSQL := ""
MakeSqlExp(cPerg)
If !Empty(mv_Par01)
cSQL += "AND DA0_CODTAB >= '" + mv_Par01 + "' "
EndIf
If !Empty(mv_Par02)
cSQL += "AND DA0_CODTAB <= '" + mv_Par02 + "' "
EndIf /*
If !Empty(mv_Par03)
cSQL += "AND C9_CLIENTE >= '" + mv_Par03 + "' "
EndIf
If !Empty(mv_Par04)
cSQL += "AND C9_CLIENTE <= '" + mv_Par04 + "' "
EndIf
If !Empty(mv_Par05)
cSQL += "AND DC_PRODUTO >= '" + mv_Par05 + "' "
EndIf
If !Empty(mv_Par06)
cSQL += "AND DC_PRODUTO <= '" + mv_Par06 + "' "
EndIf
If !Empty(mv_Par07)
cSQL += "AND DA0_DATDE = '" + DtoS(mv_Par07) + "' "
EndIf
/*If !Empty(mv_Par08)
cSQL += "AND C9_DATALIB <= '" + DtoS(mv_Par08) + "' "
EndIf */
cSQL := "%"+cSQL+"%"
BEGIN REPORT QUERY oReport:Section(1)
BeginSQL Alias cAlias
SELECT DA0_CODTAB, DA0_DESCRI, DA0_DATDE, DA0_ATIVO, DA0_XCLI, DA0_XLOJA, A1_NREDUZ,
A1_XCODEX, A1_MUN, A1_EST, A1_VEND, A3_NREDUZ,
DA1_ITEM,DA1_CODPRO, B1_DESC, B1_XCODEX, DA1_PRCVEN
FROM %Table:DA0% DA0, %Table:DA1% DA1, %Table:SB1% SB1, %Table:SA1% SA1
LEFT JOIN %Table:SA3% SA3 ON SA3.A3_COD = SA1.A1_VEND AND
SA3.A3_FILIAL = SA1.A1_FILIAL AND
SA3.%NotDel%
WHERE DA0_FILIAL = %xFilial:DA0% AND DA0.%NotDel% AND
A1_FILIAL = %xFilial:SA1% AND SA1.%NotDel% AND
DA1_FILIAL = %xFilial:DA1% AND DA1.%NotDel% AND
B1_FILIAL = %xFilial:SB1% AND SB1.%NotDel% AND
DA0.DA0_FILIAL = DA1.DA1_FILIAL AND
DA0.DA0_CODTAB = DA1.DA1_CODTAB AND
DA0.DA0_FILIAL = SA1.A1_FILIAL AND
DA0.DA0_XCLI = SA1.A1_COD AND
DA0.DA0_XLOJA = SA1.A1_LOJA AND
DA1.DA1_FILIAL = SB1.B1_FILIAL AND
DA1.DA1_CODPRO = SB1.B1_COD
%Exp:cSQL%
ORDER BY DA0_CODTAB, DA1_ITEM
EndSQL
END REPORT QUERY oReport:Section(1)
oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):SetParentFilter({|cNum| (cAlias)->DA0_CODTAB == cNum}, {|| (cAlias)->DA0_CODTAB})
//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 Código da Tabela " }, {""}, {""}})
AAdd(aHelp, {{"Informe o Código da Tabela " }, {""}, {""}})
/*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","De Tabela" ,"","","mv_ch1","C",06,00,00,"G","","DA0","","","mv_Par01","","","","","","","","","","","","","","","","",aHelp[1,1],aHelp[1,2],aHelp[1,3],"")
PutSX1(cPerg,"02","Até Tabela" ,"","","mv_ch2","C",06,00,00,"G","","DA0","","","mv_Par02","","","","","","","","","","","","","","","","",aHelp[2,1],aHelp[2,2],aHelp[2,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 Inicial" ,"","","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.
- delsonfilho
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 2
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24178
por delsonfilho
Respondido por delsonfilho no tópico LEFT JOIN
Você já testou no SQL SERVER?
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.131 segundos