• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rui_fernandes

Ficheiro SAFT-PT

7 mensagens neste tópico

Bom dia...

de certeza que ja ouviram falar do SAFT-PT...

SAF-T PT (Standard Audit File for Tax porposes) - Versão Portuguesa

SAF-T é um ficheiro que contém dados contabilisticos fiáveis que se podem exportar de um sistema contabilistico original por um periodo de tempo específico.

Alguém ja fez isto ??

eu gostaria que me ajudassem num assunto,

como é que eu gero um ficheiro XML apartir do VB.net com dados de uma Base de Dados ACCESS ??

este ficheiro SAFT, tem que ser em XML, e tem uma estrutura, so que eu nao pesco nada..  :down:

vejam aqui para ver se me podem ajudar

http://www.dgci.min-financas.pt/NR/rdonlyres/E8E55022-3112-4B56-85AB-2F373A8C84E2/0/SAFTPT_20061205.xsd

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, este código gera um xml

  Private Sub CreateSettingsXml()
        Dim Encryption As New Encryption_and_other_classes
        Try
            Dim writer As New XmlTextWriter(filepath & File, Nothing)
            writer.WriteStartDocument()
            writer.Formatting = Formatting.Indented
            writer.WriteComment("This file was generated by a program")
            writer.WriteComment("developed by De4thPr00f")
            writer.WriteComment("Contact: joao.cyber@gmail.com")
            writer.WriteStartElement("Request")
            writer.WriteElementString("Length", GameLengthBox.SelectedIndex)
            writer.WriteElementString("Team1Name", Team1Name.Text)
            writer.WriteElementString("Team1Local", Team1CountrieBox.SelectedIndex)
            writer.WriteElementString("Team2Name", Team2Name.Text)
            writer.WriteElementString("Team2Local", Team2CountrieBox.SelectedIndex)
            writer.WriteElementString("GameType", GameTypeCombobox.SelectedIndex)
            If RadioButton1.Checked = True Then
                writer.WriteElementString("GameMode", "1.6")
            ElseIf RadioButton2.Checked = True Then
                writer.WriteElementString("GameMode", "DoD")
            ElseIf RadioButton3.Checked = True Then
                writer.WriteElementString("GameMode", "NS")
            ElseIf RadioButton4.Checked = True Then
                writer.WriteElementString("GameMode", "CZ")
            Else
                writer.WriteElementString("GameMode", "Source")
            End If
            writer.WriteElementString("IpPort", tbIPandPort.Text)
            writer.WriteElementString("ServerPassword", Encryption_and_other_classes.TripleDES(ServerPW.Text, "serverthing", True))
            writer.WriteElementString("Delay", DelayBox.SelectedIndex)
            writer.WriteElementString("ServerLocation", ServerLocation.SelectedIndex)
            writer.WriteEndElement()
            writer.Close()
        Catch ex As Exception

            MsgBox(ex.Message)

        End Try
End Sub

Cria uma coisa deste género

<!--This file was generated by a program-->
<!--developed by De4thPr00f-->
<!--Contact: joao.cyber@gmail.com-->
<Request>
  <Length>1</Length>
  <Team1Name>SAM</Team1Name>
  <Team1Local>48</Team1Local>
  <Team2Name>NeR</Team2Name>
  <Team2Local>48</Team2Local>
  <GameType>33</GameType>
  <GameMode>1.6</GameMode>
  <IpPort>80.172.224.142:30000</IpPort>
  <ServerPassword>I+ojzMzVe7Q=</ServerPassword>
  <Delay>0</Delay>
  <ServerLocation>48</ServerLocation>
</Request>

O código para ler isso

    Private Sub LoadMySettings()
        If Settings.SaveUserInfo.Checked = True Then
            If System.IO.File.Exists(filepath & file) Then
                Dim allText As String
                Try
                    allText = My.Computer.FileSystem.ReadAllText(filepath & file)
                    If InStr(allText, "<!--developed by De4thPr00f-->") And InStr(allText, "Request") Then
                        Dim Objreader As New XmlTextReader(filepath & file)
                        While Objreader.Read()
                            Objreader.MoveToContent()
                            If Objreader.LocalName = "Length" Then
                                GameLengthBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Length"))
                            End If
                            If Settings.TeamInfo.SelectedIndex = 0 Then
                                If Objreader.LocalName = "Team1Name" Then
                                    Team1Name.Text = Objreader.ReadElementString("Team1Name")
                                End If
                                If Objreader.LocalName = "Team1Local" Then
                                    Team1CountrieBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Team1Local"))
                                End If
                            ElseIf Settings.TeamInfo.SelectedIndex = 1 Then
                                If Objreader.LocalName = "Team2Name" Then
                                    Team2Name.Text = Objreader.ReadElementString("Team2Name")
                                End If
                                If Objreader.LocalName = "Team2Local" Then
                                    Team2CountrieBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Team2Local"))
                                End If
                            Else
                                If Objreader.LocalName = "Team1Name" Then
                                    Team1Name.Text = Objreader.ReadElementString("Team1Name")
                                End If
                                If Objreader.LocalName = "Team1Local" Then
                                    Team1CountrieBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Team1Local"))
                                End If
                                If Objreader.LocalName = "Team2Name" Then
                                    Team2Name.Text = Objreader.ReadElementString("Team2Name")
                                End If
                                If Objreader.LocalName = "Team2Local" Then
                                    Team2CountrieBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Team2Local"))
                                End If
                            End If
                            If Objreader.LocalName = "GameType" Then
                                GameTypeCombobox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("GameType"))
                            End If
                            If Objreader.LocalName = "GameMode" Then
                                Dim whatmode = Objreader.ReadElementString("GameMode")
                                If whatmode = "1.6" Then
                                    RadioButton1.Checked = True
                                ElseIf whatmode = "DoD" Then
                                    RadioButton2.Checked = True
                                ElseIf whatmode = "NS" Then
                                    RadioButton3.Checked = True
                                ElseIf whatmode = "CZ" Then
                                    RadioButton4.Checked = True
                                ElseIf whatmode = "Source" Then
                                    RadioButton5.Checked = True
                                End If
                            End If
                            If Settings.SaveServerInfo.Checked = True Then
                                If Objreader.LocalName = "IpPort" Then
                                    tbIPandPort.Text = Objreader.ReadElementString("IpPort")
                                End If
                                If Objreader.LocalName = "ServerPassword" Then
                                    ServerPW.Text = Encryption_and_other_classes.TripleDES(Objreader.ReadElementString("ServerPassword"), "serverthing", False)
                                End If
                                If Objreader.LocalName = "Delay" Then
                                    DelayBox.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("Delay"))
                                End If
                                If Objreader.LocalName = "ServerLocation" Then
                                    ServerLocation.SelectedIndex = Convert.ToInt32(Objreader.ReadElementString("ServerLocation"))
                                End If
                            End If
                        End While
                        Objreader.Close()
                    Else
                        MsgBox("Something in the xml has been changed!", MsgBoxStyle.Critical)
                    End If
                Catch fileException As Exception
                    MsgBox(fileException.ToString)
                End Try
            End If
        End If
    End Sub

É uma questão de adaptares.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que isso é passível de ser feito com um dataset, somente... e utilizar a serialização do mesmo para converter para XML. Tenho que me debruçar sobre esse assunto nos próximos dias. Depois digo qq coisa! 1abraço!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá pessoal. Eu comecei hoje a desenvolver o módulo para exportação do SAFT para uma aplicação o qual já não é suportada, nem tem desenvolvimento em Portugal.

Estou a desenvolver em C#. Então a minha ideia é a seguinte:

- Criar uma Stored Procedure com os dados que necessito para encher o XML (A aplicação usa SQL Server)

- Criar um DataSet com base no XSD fornecido para exportação

                DataSet dsExport = new DataSet();

                dsExport.ReadXmlSchema(@"C:\schema\SAF-T-PT.XSD");

- Criar um novo DataSet com base nos registos que vem da SP

- Correr o DataSet2 e copiar os dados que foram carregados para o DataSet1 (Neste ponto ainda não vi como é que carrego as tabelas filhas, por exemplo carregar uma morada no cliente certo)

Amanhã tento avançar com o resto...

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

marafado, mas sabes qual a estrutura do ficheiro ??

que dicas podes fornecer, sobre a estrutura ?

fico grato pela ajuda...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vais enviar os ficheiros SAFT para que empresa ? NetDocs?

Ja desenvolvi um servico que vai ler uma base de dados SQL e tratar de construir os ficheiros SAFT e envia-los, utilizando o WebServices da NetDocs.

Ja tens o certificado para poderes enviar?

Basicamente cada tipo de documento tem uma estrutura e utilizas o XSD respectivo para a construcao do XML.

No caso da netdocs, o sistema deles gera uma lista de mesnsagens no caso de existirem erros para saberes se o ficheiro que geraste esta dentro da norma. Essa lista deve ser limpa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora