MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Limitar Caracteres nos dados importados

    Compartilhe
    avatar
    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 03/05/2014

    [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Sab 12 Nov - 10:25

    Tópico dívidido, origem: [Você precisa estar registrado e conectado para ver este link.]

    Boa tarde Teixeira,

    Teixeira utilizei teu exemplo e funcionou perfeitamente. Entretanto estou diante de uma situação diferente e preciso adapta-lo. Preciso gerar um arquivo txt para um dos registros do Sped Fiscal e o formato do arquivo a ser exportado esta no primeiro exemplo abaixo. São duas as dificuldades, a primeira não consegui formatar o exemplo disponibilizado por te para que os campos não possuíssem valor padrão, "TamanhoD(rst!reg, 0)", o que preciso é ao gerar o arquivo txt, ele encontre exatamente os dados que constam na consulta, sem definir o valor previamente. A segunda dificuldade esta em uma das células chamadas "dataEmissao" nela o padrão gerado pelo arquivo é o 00/00/0000, mas o padrão exigido é sem as barras 00000000, nesta ultima dificuldade alterei a consulta para informar os valores no padrão exigido, contudo não funcionou. Peço - lhe a gentileza de uma ajuda neste caso. Para melhor visualização apontei a diferença das datas nos dois arquivos.

    1. Padrão do arquivo o qual preciso gerar:

    Código:

    |E113|3310|55|||126687|27052016|7897451468632|63,42|
    |E113|3310|55|||126687|27052016|7897451466973|20,72|
    |E113|3310|55|||126687|27052016|7897451465983|16,80|
    |E113|3310|55|||126687|27052016|7897451465990|19,88|
    |E113|3310|55|||126687|27052016|7897451469738|19,88|
    |E113|3310|55|||126687|27052016|7897451468649|20,72|
    |E113|3310|55|||126687|27052016|7897451468793|14,84|


    2. O arquivo modificado:
    Código:

    |E113|1523|55|1   |1  |123      |01/10/20|                                                          1|        60|11111111111111111111111111111111111111111111|

    3. O script modificado:

    Código:

    Private Sub btnGerarTxt_Click()
    Dim rst As Recordset, varRecCount As Integer, varCount As Integer
    Dim varArq As String
    Dim DB As Database

    'Set DB = OpenDatabase(CurrentProject.Path & "\Gestor_be.accdb", False, False)
    'Set DB = OpenDatabase("\Gestor_be.accdb")
    Set DB = CurrentDb()
    'Set rst = DB.OpenRecordset("tblNotaFiscalIcmsAntecipacaoParcialSpedFiscal", dbOpenTable) 'se for tabelas
    Set rst = DB.OpenRecordset("SELECT * FROM cstNotaFiscalIcmsAntecipacaoParcialSpedFiscal WHERE filial=" & Me.txtfilial.Value & " and mes=" & Me.txtMes.Value & " and ano=" & Me.txtAno.Value)  'se for consultas
    'Set rst = DB.OpenRecordset("SELECT * FROM cstNotaFiscalIcmsAntecipacaoParcialSpedFiscal WHERE filial=" & Me.txtfilial.Value)  'se for consultas
    rst.MoveLast
    varRecCount = rst.RecordCount
    rst.MoveFirst

    varArq = Application.CurrentProject.Path & "\icmsantecipacaoparcial.txt"
    'Tenta abrir o arquivo em caso de erro GerenErro
    Open varArq For Output As #1

    For varCount = 1 To varRecCount

    Print #1, TamanhoD(rst!reg, 0) & TamanhoD(rst!reg, 4) & TamanhoD(rst!codigoInternoColaborador, 4) & TamanhoD(rst!Modelo, 2) & TamanhoD(rst!serie, 4) & TamanhoD(rst!subserie, 3) & TamanhoD(rst!numeroNotaFiscal, 9) & TamanhoD(rst!dataEmissao,  & TamanhoE(rst!codigoProduto, 60) & TamanhoE(rst!icmsAntecipacaoParcialRecolher, 10) & TamanhoE(rst!chaveDocumento, 44) '& TamanhoE(rst!chaveDocumento, 0) & TamanhoE(rst!chaveDocumento, 0)

    rst.MoveNext
    Next varCount
    Close #1
    rst.Close
    Set DB = Nothing
    MsgBox "Arquivo TXT foi criado em: " & varArq, vbInformation, "Atenção"
    Exit Sub
    End Sub


    Function LPad_E(s, ByVal c As String, n As Integer) As String
    If Len(c) = 0 Then c = ""
    If n < 1 Then
    LPad_E = ""
    Else
    LPad_E = Right$(String$(n, Left$(c, 1)) & s, n)
    End If '
    End Function

    Function LPad_D(s, ByVal c As String, n As Integer) As String
    If Len(c) = 0 Then c = " "
    If n < 1 Then
    LPad_D = "|"
    Else
    LPad_D = Left$(s & String$(n, Left$(c, 1)), n)
    End If
    End Function

    Function TamanhoD(ByVal c As String, n As Integer) As String
        If Len(c & "") <= n Then
            TamanhoD = c & String(n - Len(c & ""), " ")
        Else
            TamanhoD = Left(c, n)
        End If
        TamanhoD = TamanhoD & "|"
    End Function

    Function TamanhoE(ByVal c As String, n As Integer) As String
        If Len(c & "") <= n Then
            TamanhoE = String(n - Len(c & ""), " ") & c
        Else
            TamanhoE = Right(c, n)
        End If
        TamanhoE = TamanhoE & "|"
    End Function


    Grato,
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4280
    Registrado : 15/03/2013

    Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Dom 13 Nov - 6:39

    Olá Darlan Sandro,
    Quanto à primeira dúvida não compreendi bem a questão "campos não possuíssem valor padrão", explique melhor.
    Quanto à data use o format, exemplo:

    Código:
    Format(NomeDoCampoComData,"ddmmyyyy")

    Se possível, monte uma base de dados com alguns dados demonstrativos e o codigo que tem.
    Assim fica mais fácil para compreender e poder testar.
    Abraço
    avatar
    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 03/05/2014

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qua 16 Nov - 13:30

    Olá Teixeira,

    Desculpe-me a demora na resposta da questão, estava em viagem e cheguei hoje, agradeço inicialmente sua gentileza e atenção. Na pratica são quatro questões. Na primeira questão a consulta origem para geração do arquivo txt. possui um campo data e um campo valor, "dataEmissao" e "icmsAntecipacaoParcialRecolher", respectivamente. No primeiro o formato que deve ser exportado é l15112016l e já tentei de tudo no script mas ele somente exporta no formato l15/11/2016l. No segundo quando da exportação de um valor sem casas decimais ele apresenta o numeral como 10000 e formato ao qual preciso é l10000,00l. Na terceira situação, preciso que o script receba informação de acordo com os caracteres importados da origem, ou seja, se não houver carácter na consulta ele apresente a informação somente com as barras, sem espaços em branco "l l " (Incorreto), a forma correta "ll". A questão esta na função tamanho do campo que é obrigatória "TamanhoD(rst!codigoInternoColaborador, 4)", preciso que carregue a informação de acordo com o numero de carácteres existentes no campo da consulta e quando não houver informação apresente o espaço vazio entre as barras "ll". Por ultimo o script apresenta erro 94 na execução e aponta para o "print". Abaixo segue link com o banco e vídeo explicativo do problema.

    [Você precisa estar registrado e conectado para ver este link.]


    Grato pela ajuda desde de já.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4280
    Registrado : 15/03/2013

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Qua 16 Nov - 13:36

    Olá, estou no celular.
    Já experimentou o format?
    Deve alterar a condição if onde verifica o tamanho que é igual a zero.
    Assim que esteja num pc tento ver se posso ajudar.

    Abraço
    avatar
    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 03/05/2014

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qua 16 Nov - 14:01

    Obrigado mais uma vez Teixeira pela velocidade da resposta. Sim tentei usar a função format como dito anteriormente, entretanto apresentou o erro de execução 94. Abaixo, segue um exemplo de qual o formato final do arquivo, depois de exportado, está correto.

    Código:


    |E113|3310|55|||126687|27052016|7897451468632|63,42|
    |E113|3310|55|||126687|27052016|7897451466973|20,72|
    |E113|3310|55|||126687|27052016|7897451465983|16,80|
    |E113|3310|55|||126687|27052016|7897451465990|19,88|
    |E113|3310|55|||126687|27052016|7897451469738|19,88|
    |E113|3310|55|||126687|27052016|7897451468649|20,72|
    |E113|3310|55|||126687|27052016|7897451468793|14,84|
    |E113|84|55|||711176|08062016|7896039718053|42,52|
    |E113|84|55|||711176|08062016|7896039717902|29,79|
    |E113|84|55|||711176|08062016|7896039725105|29,79|
    |E113|84|55|||711176|08062016|7896039709228|30,94|
    |E113|84|55|||711176|08062016|7896039732974|57,23|
    |E113|84|55|||711176|08062016|7896039701444|5,05|
    |E113|84|55|||711176|08062016|7896039713492|16,54|
    |E113|84|55|||711176|08062016|7896039713508|8,27|
    |E113|84|55|||711176|08062016|7896039713539|14,05|
    |E113|84|55|||711176|08062016|7896039713577|72,61|
    |E113|84|55|||711176|08062016|7896039714307|10,03|
    |E113|84|55|||711176|08062016|7896039714338|17,01|
    |E113|84|55|||711176|08062016|7896039720612|25,72|
    |E113|84|55|||711176|08062016|7896039720971|33,04|
    |E113|84|55|||711176|08062016|7896039720988|11,01|
    |E113|84|55|||711176|08062016|7896039722258|6,45|
    |E113|84|55|||711176|08062016|7896039721008|19,34|
    |E113|84|55|||711176|08062016|7896039714062|11,06|
    |E113|84|55|||711176|08062016|7896039714079|16,49|
    |E113|84|55|||711176|08062016|7896039714178|15,13|
    |E113|84|55|||711176|08062016|7896039714192|11,02|
    |E113|84|55|||711176|08062016|7896039717278|18,08|
    |E113|84|55|||711176|08062016|7896039717292|13,97|
    |E113|84|55|||711176|08062016|7896039717308|7,77|
    |E113|84|55|||711176|08062016|7896039722401|5,96|
    |E113|84|55|||711176|08062016|7896039722593|18,71|
    |E113|84|55|||711176|08062016|7896039722609|19,34|

    Aguardo com ansiedade a resposta e mais uma vez obrigado.
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4280
    Registrado : 15/03/2013

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Qui 17 Nov - 6:45

    Olá Darlan Sandro,

    O erro é devido ao campo SubSerie que é nulo.
    Para evitar a sitação, é suficiente alterar de:
    Código:
    TamanhoD(rst!subserie, 3)
    por:
    Código:
    TamanhoD(rst!subserie & "", 3)


    Quanto à questão da data, usando o format, onde está:
    Código:
    TamanhoD(rst!dataEmissao,
    alterar por:
    Código:
    TamanhoD(Format(rst!dataEmissao, "yyyymmdd"),


    No entanto acho que a função que está a usar "TamanhoD e E", não foi criada para esse proposito.
    Pois você não que espaços brancos e essa função é precisamente para acrescentar à Direita ou Esquerda espaço.
    Portanto se não é este o caso dever retirar a chamada da função.
    Caso um campo texto tenha espaços para retirar podemos usar a função Trim, nativa do Access.
    Quanto à questão do valor é como na data, usar o Format

    Veja como ficou no meu teste:
    Código:
    Print #1, "|" & Trim(rst!reg) & "|" & Trim(rst!codigoInternoColaborador) & "|" & Trim(rst!Modelo) & "|" & Trim(rst!serie) & "|" & Trim(rst!subserie & "") & "|" & Trim(rst!numeroNotaFiscal) & "|" & Trim(Format(rst!dataEmissao, "ddmmyyyy")) & "|" & Trim(rst!codigoProduto) & "|" & Trim(Format(rst!icmsAntecipacaoParcialRecolher, "Fixed")) & "|" & Trim(rst!chaveDocumento) & "|"

    Abraço
    avatar
    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 03/05/2014

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qui 17 Nov - 18:35

    Teixeira não sei como agradecer pela sua ajuda e gentileza. Tenha certeza que pessoas como você que usam do pouco tempo de descanso que possuem para ajudar o semelhante compartilhando o conhecimento, certamente contribuem para uma mudança consistente e verdadeira do nosso mundo. Obrigado amigo a solução esta perfeita e resolveu o problema. Abaixo estou publicando o resultado final.

    Código:

    |E113|8|55|1||21792|16092016|2437|21,80|35160912117104000160550010000217921497135153|
    |E113|8|55|1||21792|16092016|2795|36,02|35160912117104000160550010000217921497135153|
    |E113|8|55|1||21792|16092016|3172|31,49|35160912117104000160550010000217921497135153|
    |E113|8|55|1||21792|16092016|3187|63,52|35160912117104000160550010000217921497135153|
    |E113|10|55|1||12513|23092016|7898501327138|9,40|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7898501327183|22,44|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572801664|8,93|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572801831|10,56|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572801855|8,12|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572802265|23,15|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572802272|9,61|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572802289|17,27|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572802296|11,26|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572802784|20,89|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803095|36,54|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803170|18,57|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803200|55,73|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803255|12,38|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803538|7,55|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803545|8,27|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572803552|10,06|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572805358|22,69|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572805365|22,69|33160917316560000152550010000125131936090165|
    |E113|10|55|1||12513|23092016|7899572805389|19,62|33160917316560000152550010000125131936090165|

    Solução dos problemas:

    Código:

    Print #1, "|" & Trim(rst!reg) & "|" & Trim(rst!codigoInternoColaborador) & "|" & Trim(rst!Modelo) & "|" & Trim(rst!serie) & "|" & Trim(rst!subserie & "") & "|" & Trim(rst!numeroNotaFiscal) & "|" & Trim(Format(rst!dataEmissao, "ddmmyyyy")) & "|" & Trim(rst!codigoProduto) & "|" & Trim(Format(rst!icmsAntecipacaoParcialRecolher, "Fixed")) & "|" & Trim(rst!chaveDocumento) & "|"
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4280
    Registrado : 15/03/2013

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Sex 18 Nov - 6:08

    Olá Darlan Sandro,
    São palavras gratificantes, obrigado pelo retorno.
    Isto é que é ser MaximoAccess Wink
    Abraço

      Data/hora atual: Qua 16 Ago - 11:18