1 2 Previous Next 15 Replies Latest reply on Oct 24, 2013 7:53 AM by ibrahim_bittar

    Como criar um XML de nota fiscal eletronica no Filemaker

    bruno_seidi

      Prezados,

       

      Sou desenvolvedor do sistema Filemaker(iniciando) e estou tentando criar um arquivo XML, que faça a exportação do meu sistema que é um sistema de cosmeticos. Todos os campos de uma nota fiscal eu ja tenho na minha tabela nota fiscal, o que falta é exportar esses campos em um arquivos xml para que dessa forma eu possa importar no sistem de nota fiscal conhecido como SEFAZ (Brasil).

       

      procurei de formas diferentes se em algum forum tem essas informações e nao obtive sucesso, alguem pode me ajudar por favor???

        • 1. Re: Como criar um XML de nota fiscal eletronica no Filemaker
          taylorsharpe

          Did you try:

           

               FILE > Export Records to File > Type > XML

          • 2. Re: Como criar um XML de nota fiscal eletronica no Filemaker
            bruno_seidi

            Obrigado Taylor, mas para meu sistema ficar mais elegante gostaria de montar um script que exportasse automaticamente sem eu ter que ir toda vez no file-> Export Records para File -> tipo -> XML

             

            E tambem gostaria de exporta somente um arquivo por vez....

             

            pois preciso depois exportar para o sistema de nota fiscal eletronica...queria que estivesse nesse formato... voce sabe como poderia fazer??

             

            segue anexo

            • 3. Re: Como criar um XML de nota fiscal eletronica no Filemaker
              ibrahim_bittar

              Olá Bruno

               

              Meu português e muito pobre. Disculpa. Eu melhor escrevo en espanhol. Você podes escrever en português, eu entendo tudo mais e muito dificil para me falar. .

               

              Lo que tienes que hacer es un cálculo en donde vayas construyendo el XML por partes. En este ejemplo que te mando está un cálculo para hacer la factura electrónica de México. Está un poco largo pero creo que se puede entender fácilmente:

               

              "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" &

               

              //Encabezado del archivo XML

               

              "<cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/3\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:detallista=\"http://www.sat.gob.mx/detallista\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/detallista http://www.sat.gob.mx/sitio_internet/cfd/detallista/detallista.xsd\" " &

               

              //Nodo comprobante, los atributos opcionales van con If

               

              "version=" & $Comprobante.versión & " " &

              If ( not IsEmpty ( $Comprobante.serie ) ; "serie=" & $Comprobante.serie & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.folio ) ; "folio=" & $Comprobante.folio & " " ; "" ) &

              "fecha=" & $Comprobante.Fecha & " " &

              "sello=" & Quote ( Substitute ( Facturación::WS_CFDi_CadenaSello ; "¶" ; "" ) ) & " " &

              "formaDePago=" & $Comprobante.FormaDePago & " " &

              "noCertificado=" & $Comprobante.noCertificado & " " &

              "certificado=" & $Comprobante.Certificado & " " &

              If ( not IsEmpty ( $Comprobante.condicionesDePago ) ; "condicionesDePago=" & $Comprobante.condicionesDePago & " " ; "" ) &

              "subTotal=" & $Comprobante.subTotal & " " &

              If ( not IsEmpty ( $Comprobante.descuento ) ; "descuento=" & $Comprobante.descuento & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.motivoDescuento ) ; "motivoDescuento=" & $Comprobante.motivoDescuento & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.tipoCambio ) ; "TipoCambio=" & $Comprobante.tipoCambio & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.moneda ) ; "Moneda=" & $Comprobante.Moneda & " " ; "" ) &

              "total=" & $Comprobante.total & " " &

              "tipoDeComprobante=" & $Comprobante.tipoDeComprobante & " " &

              "metodoDePago=" & $Comprobante.metodoDePago & " " &

              "LugarExpedicion=" & $Comprobante.LugarExpedicion & " " &

              If ( not IsEmpty ( $Comprobante.NumCtaPago ) ; "NumCtaPago=" & $Comprobante.NumCtaPago & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.FolioFiscalOrig ) ; "FolioFiscalOrig=" & $Comprobante.FolioFiscalOrig & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.SerieFolioFiscalOrig ) ; "SerieFolioFiscalOrig=" & $Comprobante.SerieFolioFiscalOrig & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.FechaFolioFiscalOrig ) ; "FechaFolioFiscalOrig=" & $Comprobante.FechaFolioFiscalOrig & " " ; "" ) &

              If ( not IsEmpty ( $Comprobante.MontoFolioFiscalOrig ) ; "MontoFolioFiscalOrig=" & $Comprobante.MontoFolioFiscalOrig & " " ; "" ) & ">" &

               

              //Nodo emisor

               

              "<cfdi:Emisor " &

              "rfc=" & $Emisor.rfc & " " &

              If ( not IsEmpty ( $Emisor.nombre ) ; "nombre=" & $Emisor.nombre & " " ; "" ) & ">" &

               

              //Nodo Domicilio Fiscal

               

              "<cfdi:DomicilioFiscal " &

              "calle=" & $Emisor.domicilioFiscal.calle & " " &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.noExterior ) ; "noExterior=" & $Emisor.domicilioFiscal.noExterior & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.noInterior ) ; "noInterior=" & $Emisor.domicilioFiscal.noInterior & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.colonia ) ; "colonia=" & $Emisor.domicilioFiscal.colonia & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.localidad ) ; "localidad=" & $Emisor.domicilioFiscal.localidad & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.referencia ) ; "referencia=" & $Emisor.domicilioFiscal.referencia & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.domicilioFiscal.municipio ) ; "municipio=" & $Emisor.domicilioFiscal.municipio & " " ; "" ) &

              "estado=" & $Emisor.domicilioFiscal.estado & " " &

              "pais=" & $Emisor.domicilioFiscal.pais & " " &

              "codigoPostal=" & $Emisor.domicilioFiscal.codigoPostal & "/>" &

               

              //Nodo Expedido en

               

              "<cfdi:ExpedidoEn " &

              "calle=" & $Emisor.expedidoEn.calle & " " &

              If ( not IsEmpty ( $Emisor.expedidoEn.noExterior ) ; "noExterior=" & $Emisor.expedidoEn.noExterior & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.expedidoEn.noInterior ) ; "noInterior=" & $Emisor.expedidoEn.noInterior & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.expedidoEn.colonia ) ; "colonia=" & $Emisor.expedidoEn.colonia & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.expedidoEn.localidad ) ; "localidad=" & $Emisor.expedidoEn.localidad & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.expedidoEn.referencia ) ; "referencia=" & $Emisor.expedidoEn.referencia & " " ; "" ) &

              If ( not IsEmpty ( $Emisor.expedidoEn.municipio ) ; "municipio=" & $Emisor.expedidoEn.municipio & " " ; "" ) &

              "estado=" & $Emisor.expedidoEn.estado & " " &

              "pais=" & $Emisor.expedidoEn.pais & " " &

              "codigoPostal=" & $Emisor.expedidoEn.codigoPostal & "/>" &

               

              //Nodo Régimen fiscal

               

              "<cfdi:RegimenFiscal " &

              "Regimen=" & $Emisor.regimen & "/>" &

               

              "</cfdi:Emisor>" &

               

              //Nodo Receptor

               

              "<cfdi:Receptor " &

              "rfc=" & $Receptor.rfc & " " &

              If ( not IsEmpty ( $Receptor.nombre ) ; "nombre=" & $Receptor.nombre & " " ; "" ) & ">" &

               

              //Nodo Domicilio Fiscal del receptor

               

              "<cfdi:Domicilio " &

              If ( not IsEmpty ( $Receptor.domicilio.calle ) ; "calle=" & $Receptor.domicilio.calle & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.noExterior ) ; "noExterior=" & $Receptor.domicilio.noExterior & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.noInterior ) ; "noInterior=" & $Receptor.domicilio.noInterior & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.colonia ) ; "colonia=" & $Receptor.domicilio.colonia & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.localidad ) ; "localidad=" & $Receptor.domicilio.localidad & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.referencia ) ; "referencia=" & $Receptor.domicilio.referencia & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.municipio ) ; "municipio=" & $Receptor.domicilio.municipio & " " ; "" ) &

              If ( not IsEmpty ( $Receptor.domicilio.estado ) ; "estado=" & $Receptor.domicilio.estado & " " ; "" ) &

              "pais=" & $Receptor.domicilio.pais & " " &

              If ( not IsEmpty ( $Receptor.domicilio.codigoPostal ) ; "codigoPostal=" & $Receptor.domicilio.codigoPostal & " " ; "" ) & "/>" &

              "</cfdi:Receptor>" &

               

              //Nodo conceptos

               

              "<cfdi:Conceptos> " & Substitute ( List ( Facturación_Line Items::WS_CFDi_Partidas_XML ) ; "¶" ; " " ) & "</cfdi:Conceptos>" &

               

              //Nodo Impuestos

               

              "<cfdi:Impuestos " &

              "totalImpuestosTrasladados=" & $impuestos.totalImpuestosTrasladados &

              If ( Facturación::Retenciones Federales > 0 ; " totalImpuestosRetenidos=" & $impuestos.totalImpuestosRetenidos ; "" ) & ">" &

               

              //Nodo retenciones y traslados

               

              //Retenciones Federales, el sistema sólo las declara si existen

               

              If ( Facturación::Retenciones Federales > 0 ;

              "<cfdi:Retenciones>" &

               

              If ( Facturación::Flag RET 1 ;

                   "<cfdi:Retencion " &

                   "impuesto=" & $impuestos.Retenciones.impuesto1 & " " &

                   "importe=" & $impuestos.Retenciones.importe1 & "/>" ; "" ) &

               

              If ( Facturación::Flag RET 2 ;

                   "<cfdi:Retencion " &

                   "impuesto=" & $impuestos.Retenciones.impuesto2 & " " &

                   "importe=" & $impuestos.Retenciones.importe2 & "/>" ; "" ) &

               

              If ( Facturación::Flag RET 3 ;

                   "<cfdi:Retencion " &

                   "impuesto=" & $impuestos.Retenciones.impuesto3 & " " &

                   "importe=" & $impuestos.Retenciones.importe3 & "/>" ; "" ) &

               

              "</cfdi:Retenciones>"

               

              ; "" ) &

               

              "<cfdi:Traslados>" &

               

              //Impuestos Federales

               

              If ( not IsEmpty ( Facturación_Pref::Impuestos_Label IVA 1 ) ;

                   "<cfdi:Traslado " &

                   "impuesto=" & $impuestos.traslados.impuesto1 & " " &

                   "tasa=" & $impuestos.traslados.tasa1 & " " &

                   "importe=" & $impuestos.traslados.importe1 & "/>" ; "" ) &

               

              If ( not IsEmpty ( Facturación_Pref::Impuestos_Label IVA 2 ) ;

                   "<cfdi:Traslado " &

                   "impuesto=" & $impuestos.traslados.impuesto2 & " " &

                   "tasa=" & $impuestos.traslados.tasa2 & " " &

                   "importe=" & $impuestos.traslados.importe2 & "/>" ; "" ) &

               

              If ( not IsEmpty ( Facturación_Pref::Impuestos_Label IVA 3 ) ;

                   "<cfdi:Traslado " &

                   "impuesto=" & $impuestos.traslados.impuesto3 & " " &

                   "tasa=" & $impuestos.traslados.tasa3 & " " &

                   "importe=" & $impuestos.traslados.importe3 & "/>" ; "" ) &

               

              "</cfdi:Traslados>" &

               

              "</cfdi:Impuestos>" &

               

              //En el caso de que haya impuestos locales o haya addenda de Liverpool, estos van en el nodo de complementos

               

              If ( Facturación::Impuestos Locales > 0 or Facturación::Retenciones Locales > 0 or Facturación_Clientes::Addenda ID = "Liverpool" ;

               

              "<cfdi:Complemento>" ; "" ) &

               

              If ( Facturación::Impuestos Locales > 0 or Facturación::Retenciones Locales > 0 ;

               

              "<implocal:ImpuestosLocales xmlns:implocal=" & Quote ( "http://www.sat.gob.mx/implocal" ) & " version=" & Quote ( "1.0" ) &

               

              " TotaldeRetenciones=" & $impuestoslocales.TotaldeRetenciones & " TotaldeTraslados=" & $impuestoslocales.TotaldeTraslados & ">" &

               

              If ( Facturación::Flag RET 4 ;

                   "<implocal:RetencionesLocales " &

                   "ImpLocRetenido=" & $impuestoslocales.Retenciones.impuesto1 & " " &

                   "TasadeRetencion=" & $impuestoslocales.Retenciones.tasa1 & " " &

                   "Importe=" & $impuestoslocales.Retenciones.importe1 & "/>" ; "" ) &

               

              If ( Facturación::Flag RET 5 ;

                   "<implocal:RetencionesLocales " &

                   "ImpLocRetenido=" & $impuestoslocales.Retenciones.impuesto2 & " " &

                   "TasadeRetencion=" & $impuestoslocales.Retenciones.tasa2 & " " &

                   "Importe=" & $impuestoslocales.Retenciones.importe2 & "/>" ; "" ) &

               

              If ( Facturación::Flag RET 6 ;

                   "<implocal:RetencionesLocales " &

                   "ImpLocRetenido=" & $impuestoslocales.Retenciones.impuesto3 & " " &

                   "TasadeRetencion=" & $impuestoslocales.Retenciones.tasa3 & " " &

                   "Importe=" & $impuestoslocales.Retenciones.importe3 & "/>" ; "" ) &

               

              If ( Facturación::Flag IVA 4 ;

                   "<implocal:TrasladosLocales " &

                   "ImpLocTrasladado=" & $impuestoslocales.Traslados.impuesto1 & " " &

                   "TasadeTraslado=" & $impuestoslocales.Traslados.tasa1 & " " &

                   "Importe=" & $impuestoslocales.Traslados.importe1 & "/>" ; "" ) &

               

              If ( Facturación::Flag IVA 5 ;

                   "<implocal:TrasladosLocales " &

                   "ImpLocTrasladado=" & $impuestoslocales.Traslados.impuesto2 & " " &

                   "TasadeTraslado=" & $impuestoslocales.Traslados.tasa2 & " " &

                   "Importe=" & $impuestoslocales.Traslados.importe2 & "/>" ; "" ) &

               

              If ( Facturación::Flag IVA 6 ;

                   "<implocal:TrasladosLocales " &

                   "ImpLocTrasladado=" & $impuestoslocales.Traslados.impuesto3 & " " &

                   "TasadeTraslado=" & $impuestoslocales.Traslados.tasa3 & " " &

                   "Importe=" & $impuestoslocales.Traslados.importe3 & "/>" ; "" ) &

               

              "</implocal:ImpuestosLocales>" ; "" ) &

               

              If ( Facturación_Clientes::Addenda ID = "Liverpool" ;

               

              Facturación_Addendas::DOCXML ; "" ) &

               

              //En el caso de que haya impuestos locales o haya addenda de Liverpool, estos van en el nodo de complementos

               

              If ( Facturación::Impuestos Locales > 0 or Facturación::Retenciones Locales > 0 or Facturación_Clientes::Addenda ID = "Liverpool" ;

               

              "</cfdi:Complemento>" ; "" ) &

               

              "</cfdi:Comprobante>"

              • 4. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                mbraendle

                In the XML export, you can specify an XSLT Stylesheet that transforms the FMPXMLRESULT grammar to the target grammar of your fiscal file.

                • 5. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                  ibrahim_bittar

                  Por cierto, você vai precisar de convertir o texto a formato UTF8 antes de exportar:

                   

                  http://www.briandunning.com/cf/1380

                   

                  http://www.briandunning.com/cf/1381

                  • 6. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                    ibrahim_bittar

                    Hi Martin

                     

                    Do you have an example for this case?

                    • 7. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                      bruno_seidi

                      Muito obrigado Ibrahim... vou verificar qualquer problema comunico voce... obrigado pela ajuda...

                      • 8. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                        bruno_seidi

                        Ibrahim, boa tarde!

                         

                        mas onde voce define essas variaveis...

                        e como onde voce define os line_itens da nota fiscal...??

                         

                        muito brilhante esse seu codigo...

                         

                        e Obrigado pela ajuda...

                        • 9. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                          ibrahim_bittar

                          Se definen las variables en un script. Prefiero hacerlo así para no tener demasiados campos en la tabla de facturas pero puedes hacerlo con campos. Anexo te envío el script completo en PDF para que lo veas.

                           

                          En México la factura electrónica es bastante más complicada que en Brasil pero te puedes dar una idea viendo todo el script.

                           

                          En la tabla de Line Items tengo un cálculo para el XML de la factura:

                           

                          "<cfdi:Concepto" &

                          " cantidad=" & Quote2 ( Cantidad ) &

                          " unidad=" & Quote2 ( WS_Unidad ) &

                          If ( not IsEmpty ( Producto ID ) ; " noIdentificacion=" & Quote2 ( Producto ID ) ; "" ) &

                          " descripcion=" & Quote2 ( EscapeXML ( Descripción ) ) &

                          " valorUnitario=" & Quote2 ( CFDI_Monedacero ( Precio Unitario más Extras ) ) &

                          " importe=" & Quote2 ( CFDI_Monedacero ( Total Línea ) ) &

                          "/>"

                           

                          La función Quote2 ( Text ) es así:

                           

                          If ( IsEmpty ( Text ) ; "" ; Quote ( EscapeXML2 ( Text ) ) )

                           

                          Y la función EscapeXML2 ( Text ) es así:

                           

                          Let ( [ NoQuotes = Substitute ( StraightQuote ( Texto ) ; "\"" ; "%$%" ) ;

                                    FilteredText = Filter ( Supertrim ( Substitute ( NoQuotes ; [ "          " ; "" ] ; [ "  " ; " " ] ; [ "¶" ; ". " ] ; [ "|" ; "" ] ; [ "Á" ; "A" ] ; [ "É" ; "E" ] ; [ "Í" ; "I" ] ; [ "Ó" ; "O" ] ; [ "Ú" ; "U" ] ; [ "–" ; "-" ] ; [ "à" ; "á" ] ; [ "è" ; "é" ] ; [ "ì" ; "í" ] ; [ "ò" ; "ó" ] ; [ "ù" ; "ú" ] ; [ "®" ; "(r)" ] ) ) ; "@qwertyuiopasdfghjklñzxcvbnmQWERTYUIOPASDFGHJKLÑZXCVBNM1234567890áéíóúâêîôûäëïöüàèìòù!#\"·$%&/()=?¿¡'[]*+çÇ{}-.,_:; " ) ] ;

                           

                           

                          Substitute ( FilteredText ; "%$%" ; "\"" ) )

                           

                          Y la función SuperTrim ( Text ) es así:

                           

                          Let (

                          // Remove up to multiple returns, tabs, and spaces

                          [

                          tempText = Substitute (Text;

                          ["¶¶"; "¶"]; ["¶¶"; "¶"]; ["¶¶"; "¶"]; ["¶¶"; "¶"]; ["¶¶"; "¶"];

                          ["          "; " "]; ["          "; " "]; ["          "; " "]; ["          "; " "]; ["          "; " "]; // tab characters

                          ["   "; " "];["  "; " "];["  "; " "];["  "; " "];["  "; " "];["  "; " "] );

                           

                          // Remove return from beginning if there to prevent blanking out

                          tempText1 = If(Left (tempText; 1) ="¶"; Right(tempText; Length(tempText)-1) ; tempText)

                          ];

                           

                          // Remove all text formatting and make one line without leading spaces

                          Evaluate (

                          Quote (

                          Trim (

                          If(Position(tempText1;"¶";1;1)>0;

                          Left(tempText1; Position ( tempText1 ; "¶" ; 1 ; 1 )-1); tempText1)

                          ))))

                          • 10. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                            bruno_seidi

                            Ok, Ibrahim,

                             

                            muito obrigado pela sua ajuda vou analisar o seu codigo e verificar como irei colocar no formato aqui do Brasil...

                             

                            mas é muito brilhante tudo isso... voce pelo jeito ja tem um bom tempo de Filemaker...

                             

                            Voce tem algum email???

                             

                            Muito obrigado pela ajuda...

                            • 12. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                              pfroelicher

                              Hi Martin (I studied in ETH too. Mech Engeneering 1991).

                              Now I run a cosmétics company here in Brazil and we (Bruno Seidi, the owner of this post, and I) are trying to automate the issuing of notas fiscais.

                              We have to export our field data into a xml which follows the rules of the tax authority, just like Ibrahim did in Mexico.

                              For example the field Emitente has to go between the xml tags <emit>NAMEOFEMITENTE</emit>, the street name <logradouro>STREETNAME</logradouro>.

                               

                              I think we manage that with scripts and calcs. However if you have a hint how to produce a XSLT Stylesheet would be more elegant and in the end even portable to other solutions.

                               

                               

                              Ibrahim! I have seen in a video your solution work. Lets assume we have the xml OK. How do we transmit it from within Filemaker. We know that the server on the other side talks SOAP 1.2.

                              Is there a way to do this in Filemaker?

                              yours

                              Pierre

                              • 13. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                                ecroissier

                                Hola Ibrahim,

                                 

                                Interesante tu trabajo de la factura electrónica de México con XML.

                                 

                                ¿Tienes alguna demo básica o ejemplo en .fp7 o .fmp12 con el que probar el funcionamiento?

                                 

                                Saludos.

                                --

                                 

                                Eduardo Croissier

                                • 14. Re: Como criar um XML de nota fiscal eletronica no Filemaker
                                  ibrahim_bittar

                                  Hola Eduardo

                                   

                                  De momento estoy trabajando en un archivo que se va a distribuir gratis para que puedas timbrar facturas a través de Eikonsys. Va a ser algo sumamente sencillo.

                                   

                                  También puedes visitar nuestra página web http://www.eikonsys.com, checa en la sección de Videos / Demos.

                                   

                                  Saludos

                                   

                                  Ibrahim

                                  1 2 Previous Next