MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

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

    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Sab 12 Nov 2016, 15: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,

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Dom 13 Nov 2016, 11: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

    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qua 16 Nov 2016, 18: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á.

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Qua 16 Nov 2016, 18: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

    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qua 16 Nov 2016, 19: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.

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Qui 17 Nov 2016, 11: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

    darlansandro
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  darlansandro em Qui 17 Nov 2016, 23: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) & "|"

    ahteixeira
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Re: [Resolvido]Limitar Caracteres nos dados importados

    Mensagem  ahteixeira em Sex 18 Nov 2016, 11:08

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

      Data/hora atual: Sab 03 Dez 2016, 15:36