- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Relatórios Customizados
×
Linguagem de Programação ADVPL
Perguntas Relatórios Customizados
- flagsantos
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 14
- Obrigados Recebidos: 0
11 anos 5 meses atrás #14379
por flagsantos
Relatórios Customizados foi criado por flagsantos
Olá Pessoal,
Está é minha primeira vez no Forúm e gostaria de uma ajuda de vocês.
Pois vi que o retorno é bem rápido.
Estou customizando um relatório para minha empresa e estou com problema e não acho solução.
Neste relatório montei um query onde eu irei fazer uma concatenação de linhas. Já que eu quero que as informações que estão em linhas se transforme em uma única coluna.
Pois bem, no SQL fiz sem problemas. Mas quando eu coloco no TOTVS dá um erro de select.
O TOTVS tem alguma limitação em relação aos comandos em SQL?
Ou, para fazer o tratamento para transformar linhas em colunas no ADVPL é diferente do que estou fazendo?
Segue o pedaço do código para vocês me ajudarem:
cQuery+= "SELECT US_COD, US_NOME, US_NREDUZ, US_DDI, US_DDD, US_TEL, UPPER(US_END) US_END, UPPER(US_BAIRRO) US_BAIRRO, US_CEP, US_MUN, US_EST, US_PAIS, YA_DESCR, US_URL, US_SATIV, X5_DESCRI, US_FATANU,"
cQuery+= " CASE"
cQuery+= " WHEN US_QTFUNC = 0 THEN '< 150'"
cQuery+= " WHEN US_QTFUNC = 1 THEN '151 a 200'"
cQuery+= " WHEN US_QTFUNC = 2 THEN '250 a 300'"
cQuery+= " WHEN US_QTFUNC = 3 THEN '301 a 400'"
cQuery+= " WHEN US_QTFUNC = 4 THEN '401 a 500'"
cQuery+= " WHEN US_QTFUNC = 5 THEN '501 a 700'"
cQuery+= " WHEN US_QTFUNC = 6 THEN '701 a 1000'"
cQuery+= " WHEN US_QTFUNC = 7 THEN '1001 a 1500'"
cQuery+= " WHEN US_QTFUNC = 8 THEN '> 1501'"
cQuery+= " END US_QTFUNC "
cQuery+= ", U5_CONTAT, AC8_CARGO, U5_FONE, U5_EMAIL, AD7_DATA, YP_SEQ,"
cQuery+= " STUFF((SELECT ''+ RTRIM(YP_TEXTO) FROM SYP150 WHERE YP_CHAVE=AD7_CODMEM FOR XML PATH('')),1,3,'') YP_TEXTO[/b][/color]," // Neste pedaço que estou tendo problemas
cQuery+= " AD7_CONTAT, AD7_VEND, A3_NREDUZ"
cQuery+= " FROM" + RetSQLName("SUS")+ " SUS"
cQuery+= " INNER JOIN " + RetSQLName("SX5")+ " SX5"
cQuery+= " ON US_SATIV = X5_CHAVE"
cQuery+= " AND X5_TABELA = 'T3'"
cQuery+= " INNER JOIN " + RetSqlName("SYA")+ " SYA"
cQuery+= " ON US_PAIS = YA_CODGI"
cQuery+= " INNER JOIN " + RetSqlName("AC8")+ " AC8"
cQuery+= " ON US_COD = LEFT(AC8_CODENT,6)"
cQuery+= " AND AC8_ENTIDA = 'SUS'"
cQuery+= " AND AC8.D_E_L_E_T_= ''"
cQuery+= " INNER JOIN " + RetSqlName("SU5")+ " SU5"
cQuery+= " ON U5_CODCONT = AC8_CODCON"
cQuery+= " AND SU5.D_E_L_E_T_ = ''"
cQuery+= " INNER JOIN " + RetSqlName("AD7")+ " AD7"
cQuery+= " ON US_COD = AD7_PROSPE"
cQuery+= " INNER JOIN " + RetSQLName("SYP")+ " SYP"
cQuery+= " ON YP_CHAVE = AD7_CODMEM"
cQuery+= " AND YP_CAMPO = 'AD7_CODMEM'"
cQuery+= " AND YP_SEQ = '001'"
cQuery+= " INNER JOIN " + RetSqlName("SA3")+ " SA3"
cQuery+= " ON US_VEND = A3_COD"
cQuery+= " WHERE SUS.D_E_L_E_T_ = ''"
Alguém saberia me dar alguma dica.
Vlw
Está é minha primeira vez no Forúm e gostaria de uma ajuda de vocês.
Pois vi que o retorno é bem rápido.
Estou customizando um relatório para minha empresa e estou com problema e não acho solução.
Neste relatório montei um query onde eu irei fazer uma concatenação de linhas. Já que eu quero que as informações que estão em linhas se transforme em uma única coluna.
Pois bem, no SQL fiz sem problemas. Mas quando eu coloco no TOTVS dá um erro de select.
O TOTVS tem alguma limitação em relação aos comandos em SQL?
Ou, para fazer o tratamento para transformar linhas em colunas no ADVPL é diferente do que estou fazendo?
Segue o pedaço do código para vocês me ajudarem:
cQuery+= "SELECT US_COD, US_NOME, US_NREDUZ, US_DDI, US_DDD, US_TEL, UPPER(US_END) US_END, UPPER(US_BAIRRO) US_BAIRRO, US_CEP, US_MUN, US_EST, US_PAIS, YA_DESCR, US_URL, US_SATIV, X5_DESCRI, US_FATANU,"
cQuery+= " CASE"
cQuery+= " WHEN US_QTFUNC = 0 THEN '< 150'"
cQuery+= " WHEN US_QTFUNC = 1 THEN '151 a 200'"
cQuery+= " WHEN US_QTFUNC = 2 THEN '250 a 300'"
cQuery+= " WHEN US_QTFUNC = 3 THEN '301 a 400'"
cQuery+= " WHEN US_QTFUNC = 4 THEN '401 a 500'"
cQuery+= " WHEN US_QTFUNC = 5 THEN '501 a 700'"
cQuery+= " WHEN US_QTFUNC = 6 THEN '701 a 1000'"
cQuery+= " WHEN US_QTFUNC = 7 THEN '1001 a 1500'"
cQuery+= " WHEN US_QTFUNC = 8 THEN '> 1501'"
cQuery+= " END US_QTFUNC "
cQuery+= ", U5_CONTAT, AC8_CARGO, U5_FONE, U5_EMAIL, AD7_DATA, YP_SEQ,"
cQuery+= " STUFF((SELECT ''+ RTRIM(YP_TEXTO) FROM SYP150 WHERE YP_CHAVE=AD7_CODMEM FOR XML PATH('')),1,3,'') YP_TEXTO[/b][/color]," // Neste pedaço que estou tendo problemas
cQuery+= " AD7_CONTAT, AD7_VEND, A3_NREDUZ"
cQuery+= " FROM" + RetSQLName("SUS")+ " SUS"
cQuery+= " INNER JOIN " + RetSQLName("SX5")+ " SX5"
cQuery+= " ON US_SATIV = X5_CHAVE"
cQuery+= " AND X5_TABELA = 'T3'"
cQuery+= " INNER JOIN " + RetSqlName("SYA")+ " SYA"
cQuery+= " ON US_PAIS = YA_CODGI"
cQuery+= " INNER JOIN " + RetSqlName("AC8")+ " AC8"
cQuery+= " ON US_COD = LEFT(AC8_CODENT,6)"
cQuery+= " AND AC8_ENTIDA = 'SUS'"
cQuery+= " AND AC8.D_E_L_E_T_= ''"
cQuery+= " INNER JOIN " + RetSqlName("SU5")+ " SU5"
cQuery+= " ON U5_CODCONT = AC8_CODCON"
cQuery+= " AND SU5.D_E_L_E_T_ = ''"
cQuery+= " INNER JOIN " + RetSqlName("AD7")+ " AD7"
cQuery+= " ON US_COD = AD7_PROSPE"
cQuery+= " INNER JOIN " + RetSQLName("SYP")+ " SYP"
cQuery+= " ON YP_CHAVE = AD7_CODMEM"
cQuery+= " AND YP_CAMPO = 'AD7_CODMEM'"
cQuery+= " AND YP_SEQ = '001'"
cQuery+= " INNER JOIN " + RetSqlName("SA3")+ " SA3"
cQuery+= " ON US_VEND = A3_COD"
cQuery+= " WHERE SUS.D_E_L_E_T_ = ''"
Alguém saberia me dar alguma dica.
Vlw
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 5 meses atrás #14381
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Relatórios Customizados
Olá Flavia seja bem vinda ao MasterAdvpl,
poderia mandar a query pronta direto no sql para eu analisar ? e se possível anexa o fonte compactado-o.
poderia mandar a query pronta direto no sql para eu analisar ? e se possível anexa o fonte compactado-o.
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 5 meses atrás #14383
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Relatórios Customizados
Pode ser também o tamanho da coluna que esta sendo gerada, o protheus tem limite de 255 caracteres por campo caracter, a não ser que seja campo memo.
o idela seria vc eliminar esta coluna e na impressão tratar a tabela SYP para imprimir o texto.
Tipo
nLin := 100
Seek(xFilial("SYP")+CODIGO)
While SYP->(!Eof()) .And. SYP->CODIGO = cCODIGO
@nLin,080 PSAY SYP->YP_TEXTO
dbSkip(1)
nLin++
Enddo
Um dica
o idela seria vc eliminar esta coluna e na impressão tratar a tabela SYP para imprimir o texto.
Tipo
nLin := 100
Seek(xFilial("SYP")+CODIGO)
While SYP->(!Eof()) .And. SYP->CODIGO = cCODIGO
@nLin,080 PSAY SYP->YP_TEXTO
dbSkip(1)
nLin++
Enddo
Um dica
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- flagsantos
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 14
- Obrigados Recebidos: 0
11 anos 5 meses atrás #14387
por flagsantos
Respondido por flagsantos no tópico Relatórios Customizados
Oi Luiz,
Muito Obrigado pelo retorno.
Segue a query que eu rodo no SQL:
SELECT US_COD, US_NOME, US_NREDUZ, US_DDI, US_DDD, US_TEL, UPPER(US_END) AS US_END, UPPER(US_BAIRRO) AS US_BAIRRO, US_CEP, US_MUN, US_EST, US_PAIS, YA_DESCR, US_URL, US_SATIV, X5_DESCRI, US_FATANU,
CASE
WHEN US_QTFUNC = 0 THEN '< 150'
WHEN US_QTFUNC = 1 THEN '151 a 200'
WHEN US_QTFUNC = 2 THEN '250 a 300'
WHEN US_QTFUNC = 3 THEN '301 a 400'
WHEN US_QTFUNC = 4 THEN '401 a 500'
WHEN US_QTFUNC = 5 THEN '501 a 700'
WHEN US_QTFUNC = 6 THEN '701 a 1000'
WHEN US_QTFUNC = 7 THEN '1001 a 1500'
WHEN US_QTFUNC = 8 THEN '> 1501'
END AS US_QTFUNC
, U5_CONTAT, AC8_CARGO, U5_FONE, U5_EMAIL, AD7_DATA, YP_SEQ, YP_TEXTO=STUFF((SELECT ''+ RTRIM(YP_TEXTO) FROM SYP150 WHERE YP_CHAVE=AD7_CODMEM FOR XML PATH('')) , 1 , 0 , '' ), AD7_CONTAT, AD7_VEND, A3_NREDUZ
FROM SUS150 SUS
INNER JOIN SX5150 SX5
ON US_SATIV = X5_CHAVE
AND X5_TABELA = 'T3'
INNER JOIN SYA150 SYA
ON US_PAIS = YA_CODGI
INNER JOIN AC8150 AC8
ON US_COD = LEFT(AC8_CODENT,6)
AND AC8_ENTIDA = 'SUS'
AND AC8.D_E_L_E_T_= ''
INNER JOIN SU5150 SU5
ON U5_CODCONT = AC8_CODCON
AND SU5.D_E_L_E_T_ = ''
INNER JOIN AD7150 AD7
ON US_COD = AD7_PROSPE
INNER JOIN SYP150 SYP
ON YP_CHAVE = AD7_CODMEM
AND YP_CAMPO = 'AD7_CODMEM'
AND YP_SEQ = '001'
INNER JOIN SA3150 SA3
ON US_VEND = A3_COD
WHERE SUS.D_E_L_E_T_ = ''
Logo abaixo segue meu fonte até então.
Muito Obrigado pelo retorno.
Segue a query que eu rodo no SQL:
SELECT US_COD, US_NOME, US_NREDUZ, US_DDI, US_DDD, US_TEL, UPPER(US_END) AS US_END, UPPER(US_BAIRRO) AS US_BAIRRO, US_CEP, US_MUN, US_EST, US_PAIS, YA_DESCR, US_URL, US_SATIV, X5_DESCRI, US_FATANU,
CASE
WHEN US_QTFUNC = 0 THEN '< 150'
WHEN US_QTFUNC = 1 THEN '151 a 200'
WHEN US_QTFUNC = 2 THEN '250 a 300'
WHEN US_QTFUNC = 3 THEN '301 a 400'
WHEN US_QTFUNC = 4 THEN '401 a 500'
WHEN US_QTFUNC = 5 THEN '501 a 700'
WHEN US_QTFUNC = 6 THEN '701 a 1000'
WHEN US_QTFUNC = 7 THEN '1001 a 1500'
WHEN US_QTFUNC = 8 THEN '> 1501'
END AS US_QTFUNC
, U5_CONTAT, AC8_CARGO, U5_FONE, U5_EMAIL, AD7_DATA, YP_SEQ, YP_TEXTO=STUFF((SELECT ''+ RTRIM(YP_TEXTO) FROM SYP150 WHERE YP_CHAVE=AD7_CODMEM FOR XML PATH('')) , 1 , 0 , '' ), AD7_CONTAT, AD7_VEND, A3_NREDUZ
FROM SUS150 SUS
INNER JOIN SX5150 SX5
ON US_SATIV = X5_CHAVE
AND X5_TABELA = 'T3'
INNER JOIN SYA150 SYA
ON US_PAIS = YA_CODGI
INNER JOIN AC8150 AC8
ON US_COD = LEFT(AC8_CODENT,6)
AND AC8_ENTIDA = 'SUS'
AND AC8.D_E_L_E_T_= ''
INNER JOIN SU5150 SU5
ON U5_CODCONT = AC8_CODCON
AND SU5.D_E_L_E_T_ = ''
INNER JOIN AD7150 AD7
ON US_COD = AD7_PROSPE
INNER JOIN SYP150 SYP
ON YP_CHAVE = AD7_CODMEM
AND YP_CAMPO = 'AD7_CODMEM'
AND YP_SEQ = '001'
INNER JOIN SA3150 SA3
ON US_VEND = A3_COD
WHERE SUS.D_E_L_E_T_ = ''
Logo abaixo segue meu fonte até então.
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
11 anos 5 meses atrás #14388
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico Relatórios Customizados
Olha só fiz duas alterações, uma, alterei o nome da tabela temporária TRB para TRB1 pois pode haver um alias com este nome, e também eliminei a SYP da sua query e acrescentei dentro do seu IF na impressão a busca pela tabela SYP, não testei por isso será bom vc compilar e debugar ok.
espero ter ajudado.
espero ter ajudado.
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
- flagsantos
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 14
- Obrigados Recebidos: 0
11 anos 5 meses atrás #14390
por flagsantos
Respondido por flagsantos no tópico Relatórios Customizados
Luiz,
Muito obrigado...
Você me ajudou muito.
Abs
Muito obrigado...
Você me ajudou muito.
Abs
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Relatórios Customizados
Tempo para a criação da página:0.142 segundos