sexta-feira, 28 de fevereiro de 2014

GERAR O ARQUIVO XML PARA MATRIZ DE TRIBUTAÇÃO DO IMPORTADOR


  
Olá, Pessoal!

O código abaixo faz a geração de dados para a MATRIZ DE TRIBUTAÇÃO DO IMPORTADOR, novo serviço disponível no site da Sefaz de alguns estados brasileiros.

Este código-fonte está em VISUAL STUDIO 2012 para VB.NET e já dá uma idéia de como gerar o XML para atender aos requesitos da Sefaz.



 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Try

        Catch ex As Exception

        End Try
        Dim Ano As String = ""
        Dim Mes As String = ""
        Dim Dia As String = ""
        Dim sDataIni As String = Now
        Dim myConnectionMatrix As MySqlConnection
        Dim myCommand2IM As MySqlCommand
        Dim dsR As MySqlDataReader

        Ano = Trim(Replace(Mid(sDataIni, 7, 4), "/", ""))
        Mes = Trim(Replace(Mid(sDataIni, 4, 2), "/", ""))
        Dia = Trim(Replace(Mid(sDataIni, 1, 2), "/", ""))


        sInicio = Ano + "-" + Mes + "-" + Dia


        sTimes = CStr(Now)
        sHora = Mid(sTimes, 12, 8)

        Dim sDataGeracao As String = Ano + "-" + Mes + "-" + Dia + " " + sHora

        myConnectionMatrix = New MySqlConnection("server=192.168.40.65; user id=root; password=3007722108; database=orca; pooling=false;")
        myConnectionMatrix.Open()

        Dim myCommandsEQ As MySqlCommand
        Dim sSequencia As String = ""

        sSQL = "SELECT ifnull(count(sequencial),0) FROM GERARXML"
        myCommandsEQ = New MySqlCommand(sSQL, myConnectionMatrix)
        dsR = myCommandsEQ.ExecuteReader

        If dsR.Read() Then

            sSequencia = dsR(0)

        End If

        dsR.Close()

        sSequencia = sSequencia + 1

        'If Len(sSequencia) = 1 Then
        ' sNumeroMatrizDi = "0000000000000" + sSequencia
        ' ElseIf Len(sSequencia) = 2 Then
        'sNumeroMatrizDi = "000000000000" + sSequencia
        'ElseIf Len(sSequencia) = 3 Then
        'sNumeroMatrizDi = "00000000000" + sSequencia
        'ElseIf Len(sSequencia) = 4 Then
        'sNumeroMatrizDi = "0000000000" + sSequencia
        'End If

        'Gerar sequencial da XML
        sSQL = "INSERT INTO GERARXML VALUES(" & CInt(sSequencia) & ",'" & sDataGeracao & "','" & sNumeroMatrizDi & "')"
        'Pega os valores das data definidas dentro da tabela padrão
        myCommand2IM = New MySqlCommand(sSQL, myConnectionMatrix)
        dsR = myCommand2IM.ExecuteReader

        dsR.Close()


        'Ler os dados 
        sSQL = "SELECT * FROM matriztrib WHERE DATAREGISTRO  = '" & sInicio & "' ORDER BY CODPROD"

        'Pega os valores das data definidas dentro da tabela padrão
        myCommand2IM = New MySqlCommand(sSQL, myConnectionMatrix)
        dsR = myCommand2IM.ExecuteReader

        Dim sInicioBenf As String = ""
        Dim sFimBenef As String = ""
        Dim sImportador As String = ""
        'Gerar o XML de cada item
        'Abre o Arquivo para Criação do XML
        '----------------------------------
        'sNumeroMatrizDi = sNumeroMatrizDi + 1

        'Cabeçalho do Arquivo
        '--------------------
        Dim sData As String = CStr(Now)
        Ano = Trim(Replace(Mid(sData, 7, 4), "/", ""))
        Mes = Trim(Replace(Mid(sData, 4, 2), "/", ""))
        Dia = Trim(Replace(Mid(sData, 1, 2), "/", ""))
        sArquivo = "MatrizDI_" + sNumeroMatrizDi + "_" + DateTime.Now.ToString("ddMMyy") + "_" + DateTime.Now.ToString("hhmmss") + ".xml"
        Dim arq As New StreamWriter("C:\Temp\" + sArquivo, False)

        'arq.WriteLine("" & "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "??>")

        arq.WriteLine("<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "??>")
        arq.WriteLine("<enviMatrizDIe xmlns=" & Chr(34) & "http://www.sefaz.am.gov.br/die" & Chr(34) & " xmlns:xsi=" & Chr(34) & "http://www.w3.org/2001/XMLSchema-instance" & Chr(34) & " versao=" & Chr(34) & "1.00" & Chr(34) & " xsi:schemaLocation=" & Chr(34) & "http://www.sefaz.am.gov.br/die enviGabaritoDIe_v1.00.xsd" & Chr(34) & "?>")

        arq.WriteLine("<MatrizDIe?>")
        arq.WriteLine("<InfMatrizDIe Id=" & Chr(34) & "MatrizDIe" & sNumeroMatrizDi & Chr(34) & " versao=" & Chr(34) & "1.00" & Chr(34) & "?>")
        arq.WriteLine("<Importador?>")



        If dsR.Read Then
            sImportador = dsR(0)
            sImportador = Replace(sImportador, ".", "")
            sImportador = Replace(sImportador, "-", "")
            arq.WriteLine("<tipoImportador?>" & dsR(1) & "</tipoImportador?>")
            arq.WriteLine("<cdImportador?>" & sImportador & "</cdImportador?>")
        End If

        dsR.Close()
        arq.WriteLine("</Importador?>")

        myCommand2IM = New MySqlCommand(sSQL, myConnectionMatrix)
        dsR = myCommand2IM.ExecuteReader



        While dsR.Read

            arq.WriteLine("<ItemMatriz?>")
            arq.WriteLine("<cdNcmProdFinal?>" & dsR(2) & "</cdNcmProdFinal?>")
            arq.WriteLine("<cdSuframa?>" & dsR(3) & "</cdSuframa?>")
            arq.WriteLine("<cdDestinacao?>" & dsR(4) & "</cdDestinacao?>")
            arq.WriteLine("<cdUtilizacao?>" & dsR(5) & "</cdUtilizacao?>")
            arq.WriteLine("<cdTributacao?>" & dsR(6) & "</cdTributacao?>")
            arq.WriteLine("<numDecreto?>" & Replace(dsR(7), "/", "") & "</numDecreto?>")
            arq.WriteLine("<tpDocumentoConcessivo?>" & "1" & "</tpDocumentoConcessivo?>")
            arq.WriteLine("<numDocumentoConcessivo?>" & Replace(dsR(8), "/", "") & "</numDocumentoConcessivo?>")

            sInicioBenf = dsR(9)
            Ano = Trim(Replace(Mid(sInicioBenf, 7, 4), "/", ""))
            Mes = Trim(Replace(Mid(sInicioBenf, 4, 2), "/", ""))
            Dia = Trim(Replace(Mid(sInicioBenf, 1, 2), "/", ""))
            sInicioBenf = Ano + Mes + Dia

            arq.WriteLine("<dtInicioBeneficio?>" & sInicioBenf & "</dtInicioBeneficio?>")

            sFimBenef = dsR(10)
            Ano = Trim(Replace(Mid(sFimBenef, 7, 4), "/", ""))
            Mes = Trim(Replace(Mid(sFimBenef, 4, 2), "/", ""))
            Dia = Trim(Replace(Mid(sFimBenef, 1, 2), "/", ""))
            sFimBenef = Ano + Mes + Dia

            arq.WriteLine("<dtFimBeneficio?>" & sFimBenef & "</dtFimBeneficio?>")
            arq.WriteLine("</ItemMatriz?>")

        End While

        arq.WriteLine("</InfMatrizDIe?>")
        arq.WriteLine("</MatrizDIe?>")
        arq.WriteLine("</enviMatrizDIe?>")

        dsR.Close()
        arq.Close()

        ' Create an XML document instance and load the XML data.
        Dim doc As XmlDocument = New XmlDocument()
        ' This code assumes that the XML file is in the same folder.
        doc.Load("C:\Temp\" + sArquivo)
        ' Save the XML to a file.
        doc.Save("C:\Temp\" + sArquivo)

        MsgBox("Arquivo XML criado com sucesso", MsgBoxStyle.Information, "Matriz Trubutação")


    End Sub


Pontosa observar:

1. A notação "?>" ou "??>"  no final de cada tag deve ser substituída por ">" ou "/>" conforme o caso. Trata-se do editor de textos do blog que infelizmente foge ao meu controle!

2. A notação "&" é o "é comercial" necessário para separar campos no VB.NET;

3. o campo Id (MatrizDIe) é a identificação da matriz, e o número que o segue deve, 
para facilitar, referir-se à inscrição da empresa no Cadastro de Contribuintes do Estado com 14 casas, ou seja, a informação é numérica e o comprimento da informação é 
de 14 dígitos. Alguns estão colocando aqui um contador, mas este não é o procedimento
correto. 


4. Aqui transformamos o arquivo-texto criado em um documento XML propriamente dito:



  ' Create an XML document instance and load the XML data.
  Dim doc As XmlDocument = New XmlDocument()
  ' This code assumes that the XML file is in the same folder.
  doc.Load("C:\Temp\" + sArquivo)

No momento em que doc.Load é realizado o arquivo XML é verificado em relação ao arquivo XSD   carregado inicialmente - linha que contêm o http://www.w3.org/2001/XMLSchema-instance. 

Você pode acrescentar aqui um comando Try para indicar os erros dos arquivos XML que está gerando.

  ' Save the XML to a file.
   doc.Save("C:\Temp\" + sArquivo)

Após o salvamento o arquivo XML está pronto para ser assinado. A assinatura pode ser realizada com um certificado digital do Serasa e vocês podem utilizar o mesmo código-fonte que postei aqui para realizar a assinatura deste documento.

Segue um bom site que fala um pouco sobre assinaturas digitais:

http://inginheiiro.wikidot.com/

Sucesso a todos em 2014!


quarta-feira, 29 de janeiro de 2014

TI: COMO SE TORNAR A CAIXA PRETA DA EMPRESA

Não há como negar que em matería de TI há inúmeros processos dentro de vários 
setores dentro de uma empresa que podem e devem ser controlados dia-à-dia a fim
de que em um período de tempo curto - seja ele semanal, quinzenal ou mensal -
dados possam ser analisados e tomadas de decisão possam ser criadas.

Todos os dias o TI de qualquer empresa trabalha a fim de que relatórios e dados
possam ser gerenciados tanto dentro do setor como em diversas áreas da 
empresa. O investimento de recursos na criação de ferramentas capazes de
gerir informações é massivo todos os anos em muitas empresas. A qualidade
do serviço prestado de àrea a àrea pode variar com o passar do tempo. 
No entanto, por diversos motivos, há algumas áreas da empresa que são
de difícil acesso ou que se tornam assim devido ao relacionamento e ao
modus operandi das mesmas com relação ao setor de TI. 

Algumas áreas podem necessitar de controles de informações que necessitam
do envolvimento de mais de uma área para o levantamento de dados e isso
dificulta o trabalho final na obtenção do resultado: pode ser que uma ponta
da informação em alguma outra área deixe de ser coletada e assim todo o
processo é comprometido. Há casos em que o escopo final é criado mas no
momento da implantação descobre-se que um detalhe deixou de ser levado
em conta e isso prejudica todo o projeto que por força maior é colocado de
lado.

E há aqueles casos em que o TI desenvolve mais de uma ferramenta para uma
mesma área e todas elas são sub-utilizadas ou nem sequer utilizadas. A síndrome
do "minha planilha é melhor do que seu sistema" é um problema em muitas
empresas. O TI por trabalhar com a qualidade de seus serviços acaba avaliando
aquele setor como de difícil acesso. Se muitas ferramentas são desenvolvidas para
um mesmo setor e nenhuma delas é utilizada haverá certa resistência por parte
do TI em tentar criar uma nova ferramenta para esta área. Se os projetos forem
concorrentes com os de outras áreas - materias e produção pedem dois sistemas
e todos os criados para a área estão sendo utilizados - por uma questão de 
bom uso e de promoção o TI dará prioridade a outras áreas: bons clientes
merecem consideração e respeito. Clientes que ainda se tentam conquistar
e sempre respondem de modo negativo a ferramentas novas criadas acabam
entrando no final da fila ou entregues a uma área em outra planta para 
análise e desenvolvimento.


Se tonar a caixa preta que nunca é capaz de corresponder a bons trabalhos 
que o TI desenvolve não é uma coisa boa para qualquer empresa. 

Quanto projetos foram criados em TI para sua área no ano que se 
passou? Quantos serão implementados este ano? Quantos foram implementados
e nunca utilizados?

Se estas perguntas forem respondidas por você de modo negativo  seria
boma avaliar uma mudança de direção neste ano. Afinal, ninguém quer ser
a piadinha da área de TI como o setor caixa preta que ninguém consegue
entrar.

Sucesso em 2014!

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...