Siga-nos no Facebook Siga-nos no Instagram Siga-nos no LinkedIn Venha estudar Protheus
 
Bem Vindo Visitante Lista de Usuários

 Todos os Fórums
  Diversos

Enviar para a impressoraImprimir   

Subject [iReport] Conversão String to Data
Mensagem do Enviar e-mail Abrir o Perfil do usu�rio DEDP1203 DEDP1203 em 23/04/2015 as 16:06 hs
Local: MG   Membro desde: 31/03/2015  Postagem: 11
Pessoal, Boa Tarde

Estou usando o ireport para criar um relatório o qual os dados se encontra em uma base SQL Server. Como sou novo no assunto estou com grande dificuldade em dois pontos.

1) Tenho um campo que será apresentado como Data no relatório, porém o mesmo vêm do banco em String.

Exemplo : O campo vem com o valor 20150408 , em string mas preciso apresentá-lo como 08/04/2015.

Portanto, preciso fazer essa conversão. É possivel? Como proceder?

2) Meu segundo problema também está relacionado á data. Preciso criar alguns parâmetros para filtrar por data os dados. Porém é necessário que o usuário digite no formato Data ( dddd-mm-yyyy), mas no meu banco de dados está gravado como string ( 2015040. Existe possibilidade de fazer a conversão no parâmetro? Da forma de data , para string , como esta no Banco? Seria ao contrário do problema acima, porem trata-se de um parametro.

Conto com a compreensão de todos.

At. Douglas Eduardo

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio FBCARA FBCARA em 23/04/2015 as 16:13 hs
Local: SP   Membro desde: 24/10/2005  Postagem: 271
Comandos Stod, Ctod, Dtoc, e Dtos


http://tdn.totvs.com/display/tec/SToD

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio BINDO BINDO em 23/04/2015 as 16:40 hs
Local: SP   Membro desde: 13/08/2005  Postagem: 5707
1)
cQuery := " SELECT * FROM SF2010 WHERE F2_FILIAL = '01' AND D_E_L_E_T_ <> '*'"
cQuery += " ORDER BY F2_CLIENTE,F2_EMISSAO"

MemoWrite("AJUSTANFA.SQL",cQuery)
dbUseArea(.T.,"TOPCONN", TCGenQry(,,cQuery),"TRB1", .F., .T.)
TcSetField("TRB1","F2_EMISSAO","D")

2)
     cQuery := " SELECT D2_COD AS CB8_PROD , B1_DESC, SUM(D2_QUANT) PECAS    ,'' CB1_NOME, B1_UM2TO1
     cQuery += " FROM "+RetSqlName("SD2")+" D2
     cQuery += " INNER JOIN "+RetSqlName("SF4")+" F4 ON F4_FILIAL = D2_FILIAL AND F4_CODIGO = D2_TES
     cQuery += " INNER JOIN "+RetSqlName("SB1")+" B1 ON B1_COD = D2_COD
     cQuery += " WHERE D2_FILIAL = '"+cFilAnt+"'
     cQuery += " AND D2_EMISSAO = '"+Dtos(dDataBase)+"'
     cQuery += " AND D2.D_E_L_E_T_ <> '*' AND F4.D_E_L_E_T_ <> '*' AND B1.D_E_L_E_T_ <> '*'
     cQuery += " AND B1_TIPCAR IN ('000001')AND B1_UM2TO1 > 0
     cQuery += " AND F4_ESTOQUE = 'S'
     cQuery += " AND D2_TIPO = 'N'
     cQuery += " AND D2_DOC NOT IN (SELECT ZD_NOTA FROM "+RetSqlName("SZD")+" WHERE ZD_FILIAL = D2_FILIAL AND ZD_NOTA = D2_DOC AND ZD_SERIE = D2_SERIE AND D_E_L_E_T_ <> '*' AND ZD_TIPO <> '2')     "
     cQuery += " GROUP BY D2_COD , B1_DESC ,B1_UM2TO1

Paulo Roberto Bindo
bindo@globo.com


Mensagem do Enviar e-mail Abrir o Perfil do usu�rio MARCIO.LUZ MARCIO.LUZ em 23/04/2015 as 17:00 hs
Local: DF   Membro desde: 10/12/2010  Postagem: 11
você pode usar a função no próprio SQL SERVER para usar como data, pode ser CAST(campo AS DATE) ou CONVERT(DATE, campo, 12) que ele converte em data.
Depois no IReport você escolhe o campo, vê em propriedades o item pattern, e formata na forma que quiser.
Outra forma é deixar o campo data como string mesmo e no item, usar como valor do campo a fórmula
$F{campo}.substring(6,8) + "/" + $F{campo}.substring(4,6) + "/" $F{campo}.substring(0,4)

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio DEDP1203 DEDP1203 em 24/04/2015 as 08:55 hs
Local: MG   Membro desde: 31/03/2015  Postagem: 11
Pessoal, Bom Dia

BINDO

Estou fazendo esse relatório pelo Ireport, esses comandos são em ADVPL, eu consigo inseri-los? Se sim , onde? Pois eu tenho somente a query em SQL.

MARCIO LUIZ

Tentei fazer das formas que você citou, porém usando a primeira dica sua , com o CAST ele não está convertendo o campo de string pra data apesar de pelo menos ja está apresentando da seguinte forma 2015-04-10 , mas como o campo nao esta ficando no tipo date eu nao consigo usar o pattern, e usando a fórmula o relatorio da erro de compilação.

Seguem prints para averiguação.

Atenciosamente , Douglas Eduardo

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio BINDO BINDO em 24/04/2015 as 09:11 hs
Local: SP   Membro desde: 13/08/2005  Postagem: 5707
crie esta function e use na sua query:

USE [DADOSADV]
GO

/****** Object: UserDefinedFunction [dbo].[CONVERTEDATA]    Script Date: 04/24/2015 09:10:23 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE function [dbo].[CONVERTEDATA](@user varchar(8))
returns VARCHAR(10)

as
begin
declare @retorno varchar(10)
if(len(@user)<8) begin set @retorno = '' end
else begin set @retorno = CONVERT(VARCHAR(10),CONVERT(DATETIME,(SUBSTRING(@user,7,2)+'/'+SUBSTRING(@user,5,2)+'/'+SUBSTRING(@user,1,4)),103),103) end
return @retorno
end

GO


Paulo Roberto Bindo
bindo@globo.com


Mensagem do Enviar e-mail Abrir o Perfil do usu�rio DEDP1203 DEDP1203 em 24/04/2015 as 11:29 hs
Local: MG   Membro desde: 31/03/2015  Postagem: 11
Eu vou compilar isso no RPO? E depois como ficara a sintaxe na conversão do meu campo? Perdão , to meio perdido ainda.

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio DEDP1203 DEDP1203 em 24/04/2015 as 14:29 hs
Local: MG   Membro desde: 31/03/2015  Postagem: 11
Pessoal, Fiz das seguintes formas e não funcionou. È algo na sintaxe que está errada? Ou dessa forma via Somente SQL nao vai dar certo mesmo? Preciso converter de string pra data para apresentar na máscara certa , e de data to string para filtrar usando os parametros. Ressalto que não estou usando advpl , e sim o ireport.

SELECT
     SE2010."E2_FORNECE",
     SE2010."E2_PREFIXO",
     SE2010."E2_NUM",
     SE2010."E2_PARCELA",
     SE2010."E2_TIPO",
     SE2010."E2_NOMFOR",
     CAST(SE2010."E2_EMISSAO" AS DATE)"E2_EMISSAO",
     CAST(SE2010."E2_VENCTO" AS DATE)"E2_VENCTO",
     CAST(SE2010."E2_VENCREA" AS DATE)"E2_VENCREA",
     SE2010."E2_VALOR",
     SE2010."E2_HIST"
FROM
     "SE2010" SE2010
WHERE
     E2_FILIAL = '0101'
AND E2_FORNECE >= $P{tpagar-01}
AND E2_FORNECE <= $P{tpagar-02}
AND E2_EMISSAO >= CAST($P{tpagar-03} AS VARCHAR(8))
AND E2_EMISSAO <= CAST($P{tpagar-04} AS VARCHAR(8))
AND E2_VENCTO >= CAST($P{tpagar-05} AS VARCHAR(8))
AND E2_VENCTO <= CAST($P{tpagar-06} AS VARCHAR(8))
ORDER BY E2_NOMFOR ASC

============================================================

SELECT
     SE2010."E2_FORNECE",
     SE2010."E2_PREFIXO",
     SE2010."E2_NUM",
     SE2010."E2_PARCELA",
     SE2010."E2_TIPO",
     SE2010."E2_NOMFOR",
     CONVERT(DATE,SE2010."E2_EMISSAO",12)"E2_EMISSAO",
     CONVERT(DATE,SE2010."E2_VENCTO",12)"E2_VENCTO",
     CONVERT(DATE,SE2010."E2_VENCREA",12)"E2_VENCREA",
     SE2010."E2_VALOR",
     SE2010."E2_HIST"
FROM
     "SE2010" SE2010
WHERE
     E2_FILIAL = '0101'
AND E2_FORNECE >= $P{tpagar-01}
AND E2_FORNECE <= $P{tpagar-02}
AND E2_EMISSAO >= CONVERT(VARCHAR(8),$P{tpagar-03})
AND E2_EMISSAO <= CONVERT(VARCHAR(8),$P{tpagar-04})
AND E2_VENCTO >= CONVERT(VARCHAR(8),$P{tpagar-05})
AND E2_VENCTO <= CONVERT(VARCHAR(8),$P{tpagar-06})
ORDER BY E2_NOMFOR ASC

Mensagem do Enviar e-mail Abrir o Perfil do usu�rio DEDP1203 DEDP1203 em 24/04/2015 as 15:52 hs
Local: MG   Membro desde: 31/03/2015  Postagem: 11
Pessoal , Consegui resolver , usei o campo como String mesmo e usando a fórmula $F{campo}.substring(6,8) + "/" + $F{campo}.substring(4,6) + "/"+ $F{campo}.substring(0,4) citada pelo nosso amigo MARCIO.LUIZ. Não tinha dado certo antes pois a fórmula estava faltando um carácter +.

Obrigado a todos.

At.

Douglas Eduardo

Para participar do Fórum você precisa efetuar login primeiro
Caso você não esteja registrado registre-se para participar do fórum

 Mudar para Fórum