Jump to content
Fivewin Brasil

Wellington Vieira

Membros
  • Posts

    424
  • Joined

  • Last visited

  • Days Won

    10

Reputation Activity

  1. Like
    Wellington Vieira got a reaction from Luiz Fernando in NFC-e para MG   
    Valeu!!

    Em MG, o que se alterou em relação a NFC-e das demais UF's foram apenas algumas URL'S que foi a partir do dia 06/03/2023

    A URL de consulta a NFCe via QRCode e a URL de consulta por chave (Portal) foram alteradas em homologação e produção.
    A partir de 06/03/2023 só aceitaremos as url's abaixo:
     
    PRODUÇÃO
    Nova url de consulta via QRCode: 
    https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml

    Nova url de consulta via Portal:
    https://portalsped.fazenda.mg.gov.br/portalnfce
     
    HOMOLOGAÇÃO
    Nova url de consulta via Portal:
    https://hportalsped.fazenda.mg.gov.br/portalnfce
    Nova url de consulta via QRCode: 
    https://portalsped.fazenda.mg.gov.br/portalnfce/sistema/qrcode.xhtml
     
    Importante lembrar que as novas urls deverão ser utilizadas tanto no processo de consulta quanto de autorização.
    Caso sejam utilizadas as url's antigas o emitente poderá receber as rejeições: "878: Endereço do site da UF da Consulta por chave de acesso diverge do previsto" ou "395: Endereço do site da UF da Consulta via QR-Code diverge do previsto".
     
    Abraço.
     
  2. Like
    Wellington Vieira got a reaction from Luiz Fernando in NFC-e para MG   
    Boa tarde,

    Você pode usar a DLL da UNIMAKE ( É free - gratuita )

    Acesse.
    https://wiki.unimake.com.br/index.php/Manuais:Unimake.DFe

    https://github.com/Unimake/DFe
    Neste na pasta EXEMPLOS - tem todos os exemples em xharbour.

    No youtube, tem todas as LIVE ensinando como programar com a DLL no xharbour, consequentemente em fivewin + xharbour
    https://www.youtube.com/results?search_query=dll+unimake+xharbour
    É só procurar as LIVE, são muitas..

    Para baixar a DLL
    https://www.unimake.com.br/downloads

    TEM TAMBÉM OS FONTES DO SR. JOSE QUINTAS ( CLASSE) em fivewin + xharbour
    TOTALMENTE FUNCIONAL ( basta baixar zipado, todas os fontes estão lá, inclusive com exemplos)
    https://github.com/JoseQuintas/sefazclass
     

    Abraço.
  3. Like
    Wellington Vieira got a reaction from rochinha in Tabela Ncm com Aliq Icms   
    Boa tarde,

    Uma forma que encontrei de "AMENIZAR" estas operações fiscais, sem a necessidade de colocar as regras nos cadastros de produtos, foi a de criar um "CADASTRO DE OPERAÇÕES FISCAIS", que trabalhe com o cadastro da própria LOJA (ESTADO onde a empresa se encontra), CADASTRO DE UF,CADASTRO DE PRODUTOS, CADASTRO DE CST/CSOSN e o próprio cadastro de OPERAÇÕES FICAIS.









  4. Like
    Wellington Vieira got a reaction from aferra in Agenda / Calendário   
    bom dia,
    Segue link do calendário acima.
    http://www.wsiscom.com.br/download/agenda.rar
  5. Like
    Wellington Vieira got a reaction from Theotokos in Agenda / Calendário   
    bom dia,
    Fiz este calendário / agenda de compromisso, achei legal e resolvi postar o código para quem quiser aproveitar e usar o código para incrementar como quiser.
    Abraço.

    Segue o link
    http://www.wsiscom.com.br/download/agenda.rar

  6. Thanks
    Wellington Vieira got a reaction from aferra in Registro online boleto Bradesco   
    Me esqueci de adicionar o arquivo sefaz_capicom.ch
    #define CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME 0 #define CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME 1 #define CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION 2 #define CAPICOM_CERTIFICATE_FIND_SHA1_HASH 0 #define CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME 1 #define CAPICOM_CERTIFICATE_FIND_ISSUER_NAME 2 #define CAPICOM_CERTIFICATE_FIND_ROOT_NAME 3 #define CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME 4 #define CAPICOM_CERTIFICATE_FIND_EXTENSION 5 #define CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY 6 #define CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY 7 #define CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY 8 #define CAPICOM_CERTIFICATE_FIND_TIME_VALID 9 #define CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID 10 #define CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED 11 #define CAPICOM_CERTIFICATE_FIND_KEY_USAGE 12 #define CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT 0 #define CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN 1 #define CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY 2 // CAPICOM Chain check flag #define CAPICOM_CHECK_NONE &H00000000 #define CAPICOM_CHECK_TRUSTED_ROOT &H00000001 #define CAPICOM_CHECK_TIME_VALIDITY &H00000002 #define CAPICOM_CHECK_SIGNATURE_VALIDITY &H00000004 #define CAPICOM_CHECK_ONLINE_REVOCATION_STATUS &H00000008 #define CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS &H00000010 #define CAPICOM_CHECK_COMPLETE_CHAIN &H00000020 #define CAPICOM_CHECK_NAME_CONSTRAINTS &H00000040 #define CAPICOM_CHECK_BASIC_CONSTRAINTS &H00000080 #define CAPICOM_CHECK_NESTED_VALIDITY_PERIOD &H00000100 #define CAPICOM_CHECK_ONLINE_ALL &H000001EF #define CAPICOM_CHECK_OFFLINE_ALL &H000001F7 #define CAPICOM_ENCRYPTION_ALGORITHM_RC2 0 #define CAPICOM_ENCRYPTION_ALGORITHM_RC4 1 #define CAPICOM_ENCRYPTION_ALGORITHM_DES 2 #define CAPICOM_ENCRYPTION_ALGORITHM_3DES 3 #define CAPICOM_ENCRYPTION_ALGORITHM_AES 4 // v2.0 #define CAPICOM_ENCRYPTION_KEY_LENGTH_MAXIMUM 0 #define CAPICOM_ENCRYPTION_KEY_LENGTH_40_BITS 1 #define CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS 2 #define CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS 3 #define CAPICOM_ENCRYPTION_KEY_LENGTH_192_BITS 4 // AES v2.0 #define CAPICOM_ENCRYPTION_KEY_LENGTH_256_BITS 5 // AES v2.0 #define CAPICOM_ENCODE_ANY 0xffffffff #define CAPICOM_ENCODE_BASE64 0 #define CAPICOM_ENCODE_BINARY 1 #define CAPICOM_EXPORT_DEFAULT 0 #define CAPICOM_EXPORT_IGNORE_PRIVATE_KEY_NOT_EXPORTABLE_ERROR 1 #define CAPICOM_HASH_ALGORITHM_SHA1 0 #define CAPICOM_HASH_ALGORITHM_MD2 1 #define CAPICOM_HASH_ALGORITHM_MD4 2 #define CAPICOM_HASH_ALGORITHM_MD5 3 #define CAPICOM_HASH_ALGORITHM_SHA_256 4 #define CAPICOM_HASH_ALGORITHM_SHA_384 5 #define CAPICOM_HASH_ALGORITHM_SHA_512 6 #define CAPICOM_KEY_STORAGE_DEFAULT 0 #define CAPICOM_KEY_STORAGE_EXPORTABLE 1 #define CAPICOM_KEY_STORAGE_USER_PROTECTED 2 #define CAPICOM_MY_STORE "My" #define CAPICOM_PROPID_KEY_PROV_INFO 2 #define CAPICOM_STORE_OPEN_READ_ONLY 0 #define CAPICOM_STORE_OPEN_READ_WRITE 1 #define CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED 2 #define CAPICOM_STORE_OPEN_EXISTING_ONLY 128 #define CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED 256 #define CAPICOM_STORE_SAVE_AS_SERIALIZED 0 #define CAPICOM_STORE_SAVE_AS_PKCS7 1 #define CAPICOM_STORE_SAVE_AS_PFX 2 #define CAPICOM_MEMORY_STORE 0 #define CAPICOM_LOCAL_MACHINE_STORE 1 #define CAPICOM_CURRENT_USER_STORE 2 #define CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 #define CAPICOM_SMART_CARD_USER_STORE 4 // CAPICOM Chain check flag #define CAPICOM_TRUST_IS_NOT_TIME_VALID &H00000001 #define CAPICOM_TRUST_IS_NOT_TIME_NESTED &H00000002 #define CAPICOM_TRUST_IS_REVOKED &H00000004 #define CAPICOM_TRUST_IS_NOT_SIGNATURE_VALID &H00000008 #define CAPICOM_TRUST_IS_NOT_VALID_FOR_USAGE &H00000010 #define CAPICOM_TRUST_IS_UNTRUSTED_ROOT &H00000020 #define CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN &H00000040 #define CAPICOM_TRUST_IS_CYCLIC &H00000080 #define CAPICOM_TRUST_INVALID_EXTENSION &H00000100 #define CAPICOM_TRUST_INVALID_POLICY_CONSTRAINTS &H00000200 #define CAPICOM_TRUST_INVALID_BASIC_CONSTRAINTS &H00000400 #define CAPICOM_TRUST_INVALID_NAME_CONSTRAINTS &H00000800 #define CAPICOM_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT &H00001000 #define CAPICOM_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT &H00002000 #define CAPICOM_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT &H00004000 #define CAPICOM_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT &H00008000 #define CAPICOM_TRUST_IS_OFFLINE_REVOCATION &H01000000 #define CAPICOM_TRUST_NO_ISSUANCE_CHAIN_POLICY &H02000000 #define CAPICOM_TRUST_IS_PARTIAL_CHAIN &H00010000 #define CAPICOM_TRUST_CTL_IS_NOT_TIME_VALID &H00020000 #define CAPICOM_TRUST_CTL_IS_NOT_SIGNATURE_VALID &H00040000 #define CAPICOM_TRUST_CTL_IS_NOT_VALID_FOR_USAGE &H00080000 #define KNOWN_TRUST_STATUS_MASK &H030FFFFF #define CAPICOM_VERIFY_SIGNATURE_ONLY 0 #define CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE 1 Manual_Registro_de_Boleto_Bancario_Online - Guia de integração Versão 2.2 janeiro/2019
    http://fivewin.com.br/index.php?/files/file/1123-manual_registro_de_boleto_bancario_online/
    Para testar a criptografia.
    https://redkestrel.co.uk/products/decoder/
  7. Like
    Wellington Vieira got a reaction from aferra in Browse, Grid, ou outra forma de fazer uma tela parecida com esta, para atendimento   
    Tela para bar ( touch ). Esta em fase de término, mas consegui fazer funcionar com btnbmp e array.

  8. Like
    Wellington Vieira got a reaction from Valdir in Tabela de Validações da NFe.   
    Boa noite,
    Acredito que na classe do Jose Quintas, você encontrará o que procura.
    https://github.com/JoseQuintas/sefazclass
  9. Like
    Wellington Vieira got a reaction from Theotokos in Interfaces feitas usando Fivewin   
    Boa tarde,
    Msdn, é apenas um bitmap, carregada na dialog como um brush e os botões são imagens também que são impressas na tela a partir do buttonbmp que carrega as imagens e o sombreamento fica na tela de fundo.




  10. Like
    Wellington Vieira got a reaction from jfaguiar in Contrib PGSQL   
    http://www.xharbour.org/index.asp?page=download/sources
    Baixar no link: 
    xHarbour 1.2.3 Rev. 10241 contrib source code
  11. Like
    Wellington Vieira got a reaction from kapiaba in Contrib PGSQL   
    http://www.xharbour.org/index.asp?page=download/sources
    Baixar no link: 
    xHarbour 1.2.3 Rev. 10241 contrib source code
  12. Like
    Wellington Vieira got a reaction from jfaguiar in PostGre-SQL   
    CONTRIB PGSQL -> Dentro das contribs do xharbour
    1º - Compilar a contrib usando o seu xharbour e bcc( borland) instalado, conforme os bat's contidos na pasta xharbour.
         ou na própria pasta da contrib.
         É necessário compilar para gerar um LIB, de acordo com o seu xharbour e bcc(borland), instalados...
         O nome da lib a ser gerada é o nome de : libhbpg.lib
         OBS. CASO A LIB QUE VEM COM A CONTRIB, já esteja no formato do xharbour e bcc(borland) que esteja usando, não
         será necessário compilar, para gerar a lib...
    2º - No postgresql vem uma lib que é a libpq.lib , mas esta vem para o  microsoft visual C , então tem que criar 
         uma nova lib  para o formato borland (instalado):  implib -a libpq.lib libpq.dll
         implib.exe -> pertence ao seu bcc(borland) instalado..
    OBS. A 1º e 2º você fará somente em seu computador, para compilar os seus executáveis, nos clientes a instalação do
         postgresql é normal..
    3º - Na execução de seu software caso ele pedir Dll's, batas ir na pasta onde foi instalada o postgresql e copiar as dll's
         para a pasta onde fica o seu executável e mante-las lá inclusive em seus clientes.
    OBS. Copiará as dll's caso o executável exigir as dll's, e mante-las para compilações futuras. E levar estas dll's junto
         com o seu executável aos clientes.. ( Isto dependerá do path da sua máquina e dos cliente), o mais fácil e já ter as
         dll's junto com o seu executável.
    4º - No seu bat de compilação acrescentar as duas lib's criadas: libhbpg.lib, libpq.lib
    INSTALANDO O POSTGRESQL.
         - Sempre verificar na sua máquina ou máquinas dos clientes, qual postgresql 32 ou 64 bits, e instalar o correto,
           podendo ser 9.2, 9.3 ou 10 etc.. ( postgresql)
           OBS. EU ESTOU UTILIZANDO.. OS
           postgresql-9.2.4-1-windows 32/64 Bits ou postgresql-10.4-1-windows 32/64 Bits, mas já testei versões superiores
           e anteriores começadas com o 8.2 e funcionam normalmente.
         - No firewal do windows defender ( ir em Configurações Avançadas) - Regras de Entrada - Nova regra
           Escolher porta - tcp - ( A porta é a 5432) e permir a conexão usando esta porta.
           
           OBS. Eu faço isso, porque se for utilizar o postgresql em rede ou no futuro eu não tenha que alterar essas confi
           gurações, independente se for em uma máquina ou em várias.
         - Em ferramentas administrativas - serviços - Logon secudário -> colocar o tipo de inicialização automático e iniciar.
           Aplicar -> OK
         - instalar o postgresql.. ( Na instalação ele pedirá uma senha que será a senha de acesso ao postgresql).
           (guardar a mesma)
         - Geralmente é instalado em Arquivos de programas-> postgresql -> ai vem as versões em pastas 9.2, 9.3 etc..
         - MAQUINA LOCAL
         - Após instalado o postgresql, ele sempre instalará na porta 5432 e a máquina local será sempre
           localhost ou 127.0.0.1, depois da instalação.

         - EM REDE.
         - Caso seja em rede, na máquina que será o servidor tem que ter ip,dns e gateway na máquina
           da, pois se deixar pelo ip gerado pelo modem de acesso a internet, este poderá mudar de tempos em tempos
           caso não seja ip fixo.
         - No postgresql, na pasta bin tem um executavel chamado de PGADMIN, acessar o mesmo e ir em File(Arquivo)->
           Open pg_hba.conf que esta em Arquivos de programas->postgresql->9.2->data
           Onde tem 127.0.0.1/32 - clicar duas vezes e alterar esta opção para 0.0.0.0/0, que fará com que o postgresql
           aceite a entrada em seus serviços de qualquer computador da rede... 
           OBS. ESTE É APENAS UM JEITO, EXISTEM VÁRIAS FORMAS NO POSTGRESQL, PARA SEGURANÇA DE DADOS PROCESSADOS,,
           QUAIS IP'S DE ACESSO AO BANCO E CONFIGURAÇÕES DIVERSAS... OK
         - EM REDE E MAQUINA LOCAL
         - No postgresql 9.2(localhost:5432), clicar 02 vezes colocar a senha que informou na instalação.
         - depois é só criar uma base de dados ou utilizar a que vem padrão com o nome de "postgresql"
    NO SEU SOFTWARE:
          
    - ABRINDO O POSTGRESQL A PARTIR DE SEU SOFTWARE
     ( O trecho abaixo é retirado do meu fonte, mais pode ser da forma que quiser..)
    function main()          // Conexao com a base de dados........................................          oserver = ""          cserver   = space(20)  // Em máquina local será (127.0.0.1) ou o IP da máquina de rede que foi instalado o postgresql.          cdatabase = space(20)  // O nome do banco de dados criado ou o que instalado automatico com o postgre (postgresql)          cuser     = space(20)  // Caso você não mude, sempre será (postgres)          cpass     = space(20)  // A senha que foi colocada na instalação do postgresql.(xxxxxxxxx)          // Verifica as configuracoes em arquivo..............................          cDirXML = "wsiscom.xml"          if !file(cDirXML)                                                                // cores colocadas em variaveis...             define dialog XML title "Configurando o PostgreSQL" from 10,20 to 23,60 color corobjjan, corfdojan                    define font mtahoma  name "Tahoma"          size 5.5,13                       @ 15.5,002 say "I.P do servidor" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 15, 050 get oserver var cserver font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 30.5,002 say "Banco de Dados" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 30, 050 get odatabase var cdatabase font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 45.5,002 say "Usuario" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 45, 050 get ouser var cuser font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 60.5,002 say "Senha" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 60, 050 get opass var cpass font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel password                       @ 085,116 BUTTON olbut3 prompt "&Continuar" size 040,12 font mtahoma OF XML pixel action ( gera_xml_postgresql() )             activate dialog XML center          endif          if GetKeyState(VK_ESCAPE)             return nil          endif                    // FWAIT É UMA FUNÇÃO MINHA QUE MOSTRA A MENSAGE ABAIXO NA TELA...          fwait(" ...Tentativa acesso 1 ...")                    nn = 0          ns = "S"          do while .t.                                       // A função abrir_xml lê o xml gerado pela função gera_xml_postgresql()             cserver   =  abrir_xml(cDirXML,"server")             cdatabase =  abrir_xml(cDirXML,"database")             cuser     =  abrir_xml(cDirXML,"user")             cpass     =  abrir_xml(cDirXML,"pass")                                       // FAZ A CONEXÃO COM O POSTGRESQL A PARTIR DAS INFORMAÇÕES .......             oserver := tpqserver():new(cserver, cdatabase, cuser, cpass)                          // oserver - será a variavel que guarda a conexão com o postgresql para todo o software.                          // VERIFICA SE HOUVE ERRO COM A ABERTURA DO POSTGRESQL E TENTA 05 VEZES A CONEXÃO.             if oserver:neterr()                oserver = ""                if nn = 1                   // FECHA A FWAIT                   odlgwait:end()                                      // FWAIT É UMA FUNÇÃO MINHA QUE MOSTRA A MENSAGE ABAIXO NA TELA...                   fwait(" ...Tentativa acesso 2 ...")                                      SysWait(3)                elseif nn = 2                   odlgwait:end()                   fwait(" ...Tentativa acesso 3 ...")                   SysWait(3)                elseif nn = 3                   odlgwait:end()                   fwait(" ...Tentativa acesso 4 ...")                   SysWait(3)                elseif nn = 4                   odlgwait:end()                   fwait(" ...Tentativa acesso 5 ...")                   SysWait(3)                elseif nn = 5                   ns = "N"                             exit                endif             else                exit             endif             ++nn             loop          enddo          if ns = "N"             odlgwait:end()             ferase(cDirXML)             msgstop("Erro de conexão com a base de dados. Contate o suporte","Atenção")             return nil          else             odlgwait:end()          endif return nil function gera_xml_postgresql()          if empty(cserver)             msgstop("I.P do servidor em branco.","Atenção")             return nil          endif          if empty(cdatabase)             msgstop("Banco de dados em branco.","Atenção")             return nil          endif          if empty(cuser)             msgstop("Usuario em branco.","Atenção")             return nil          endif          if empty(cpass)             msgstop("Senha em branco.","Atenção")             return nil          endif          lh := 00          oPrn := TDosPrn():New(cDirXML)          oPrn:StartPage()          oPrn:lZeraBuffer:=.T.          mlinha = '<?xml version='+'"'+'1.0'+'"'+ ' encoding='+'"'+'UTF-8'+'"'+' ?>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<confPostgreSQL xmlns='+'"'+'http://www.wsiscom.com.br'+'"'+ ' versao='+'"'+ "1.0" +'"'+'>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<server>'+alltrim(cserver)+'</server>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<database>'+alltrim(cdatabase)+'</database>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<user>'+alltrim(cuser)+'</user>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<pass>'+alltrim(cpass)+'</pass>'          //mlinha = '<pass>'+encrypt(alltrim(cpass))+'</pass>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '</confPostgreSQL>'          oPrn:Say(lh,000,mlinha)          ++lh          oPrn:EndPage()          oPrn:End()          // Fecha a caixa de dialog da configuracao do XML....................          XML:end() return nil Function abrir_xml(cFileName,cTipoName,cvazioounao)          local hFile, cXml,xmlDoc, xmlIter, xmlNode, cNode, cAttrib, cValue, cData          hFile := FOpen( cFileName )          xmlDoc := TXmlDocument():New( hFile )          if xmlDoc:nStatus != HBXML_STATUS_OK              msgstop("Falha no arquivo XML ","ERRO Arquivo XML")              return("")          endif          xmlIter := TXmlIterator():New( xmlDoc:oRoot )          xmlNode := xmlIter:Find()          ctipo  = ""          npassa = "N"          do while xmlNode != NIL             cName := xmlNode:cName             cData := xmlNode:cData             if empty(cvazioounao)                if cName = cTipoName                   npassa = "S"                   exit                endif             else                if cName = cTipoName                   ctipo = cData                   npassa = "S"                endif             endif             xmlNode := xmlIter:Next()          enddo          fclose(hFile)          if !empty(cvazioounao)             cData = ctipo          endif          if npassa = "N"             cData = ""          endif Return(cData) - CRIANDO UMA TABELA EM SUA BASE DE DADOS.....
     ( O trecho abaixo é retirado do meu fonte, mais pode ser da forma que quiser..)         
    // oserver      -> conexão com o postgresql
    // "cabacertos" -> nome da tabela a ser criada
             
             if oServer:TableExists("cabacertos")                            // eu uso este espaço para alterações na base quando tem, a partir de um ftp....             // futuramente eu posso colocar como faço...                       else                                               cQuery := 'CREATE TABLE cabacertos('             cQuery += 'asqn serial primary key,'    && sequencial             cQuery += 'loja smallint,'              && empresa             cQuery += 'adtm date,'                  && data do acerto             cQuery += 'arep smallint,'              && vendedor             cQuery += 'acli smallint,'              && cliente             cQuery += 'asub double precision,'      && subtotal das duplicatas.             cQuery += 'ades double precision,'      && desconto dado nas duplicatas.             cQuery += 'ajur double precision,'      && juros dado nas duplicatas.             cQuery += 'amul double precision,'      && multa dado nas duplicatas.             cQuery += 'atot double precision,'      && total (subtotal - descontos)             cQuery += 'acre double precision,'      && credito aproveitado.             cQuery += 'arec double precision,'      && valor dos recebimentos..             cQuery += 'aeco double precision,'      && valor em kg acerto para o sistema eco             cQuery += 'aecoabatenovalordevido boolean,'&&              cQuery += 'aecoreal double precision,'  &&              cQuery += 'aecorealkg double precision,'&&              cQuery += 'absd text,'                  // observacao desconto..             cQuery += 'absa text,'                  // observacao acrescimo..             cQuery += 'aapr double precision,'      // ndebito - se igual a zero.. nao tem credito e nem debito                                                     //           se positivo ficou devendo..                                                     //           se negativo tem credito a ser lancado nos clientes...             cQuery += 'aope character(2),'          && operador             cQuery += 'alib character(1),'          && liberado..             cQuery += 'asdn double precision,'      && saldo anterior do cliente credito/debito             cQuery += 'asda double precision,'      && saldo atual do cliente credito/debito             cQuery += 'aseq integer)'               && sequencia...             oQuery := oServer:Query(cQuery)             if oQuery:neterr()                msgstop("Nao foi possível criar arquivo de cabacertos. O sistema sera finalizado.","ATENÇÃO")                oServer:Destroy()             endif             oQuery:Destroy()          endif                              if oServer:TableExists("conta_corrente_acertos")          else             cQuery := 'CREATE TABLE conta_corrente_acertos('             cQuery += 'ascr serial primary key,'   && sequencial             cquery += 'loja smallint,'             cQuery += 'asqn integer,'              && sequencial do cabacertos             cQuery += 'adtm date,'                 && data do conta_corrente             cQuery += 'acli smallint,'             && cliente             cQuery += 'arep smallint,'             && vendedor             cQuery += 'avlr double precision,'     && valor             cQuery += 'aobs character(100),'       && Observacao             cQuery += 'acre character(01))'        && (C)redito (D)ebito             oQuery := oServer:Query(cQuery)             if oQuery:neterr()                msgstop("Nao foi possível criar arquivo de conta_corrente_acertos. O sistema sera finalizado.","ATENÇÃO")                oServer:Destroy()                janela_principal:end()                return .t.             endif             oQuery:Destroy()          endif         
     
     - INSERINDO DADOS NA BASE DE DADOS......
             
             OBS. CAMPOS CARACTER,DATA,boolean tem que ser precedidos de '    e de pois de '  ex:  nome character(60), 
             grava-se assim :  'WELLINGTON LLSLSLSLSLSLSLSLSLSL'
             ex de com fica uma query: insert into cabacertos(loja,adtm,arep,)values(1,'2018-09-10',1)
             // aqui todos os campos da tabela..          cQuery := "insert into cabacertos(loja,adtm,arep,acli,asub,ades,ajur,"+;                    "atot,acre,arec,aeco,aecoabatenovalordevido,aecoreal,aecorealkg,aapr,alib,absd,absa,asdn,aseq)"                    // aqui as variaveis que serão guardadas nos campos da tabela.          // lembrando que os campos caracter,data,booleans são precedidos de '    e depois de  '          cQuery += "values("+str(zseqloja)+","+;                    "'"+madtm+"'"+","+;                    alltrim(str(marep))+","+;                    alltrim(str(mccod))+","+;                    alltrim(str(stotal))+","+;                    alltrim(str(mdesc))+","+;                    alltrim(str(mjuro))+","+;                    alltrim(str(ntotal))+","+;                    alltrim(str(ncredi))+","+;                    alltrim(str(nTRece))+","+;                    iif(!empty(npgeco),alltrim(str(npgeco)),"0")+","+;                    "'" + iif(nabatenovalordevido = .f.,"n","y") + "'" +","+;                    iif(!empty(npgEcoReais),alltrim(str(npgEcoReais)),"0")+","+;                    iif(!empty(npgEcoKilos),alltrim(str(npgEcoKilos)),"0")+","+;                    alltrim(str(ndebito))+","+;                    "'"+"N"+"'"+","+;                    "'"+mobsd+"'"+","+;                    "'"+mobsa+"'"+","+;                    iif(!empty(msaldoanteriorcliente),alltrim(str(msaldoanteriorcliente)),"0")+","+;                    alltrim(str(mdncd))+")"                    // Cria um objeto ( variavel ) que chama o postgresql na variavel oserver e executa a query          oQuery := oServer:Query(cQuery)                    // Se der erro na gravação exibe a mensagem abaixo.          if oQuery:neterr()             msgStop("Erro na inclusão do cabacerto.","Atenção")          endif                    // destroy a query.....          oQuery:destroy()                    // faz o commit do insert.....          oServer:Commit() - ALTERANDO DADOS NA BASE DE DADOS...         
             // supondo que mdncd é igual a 2587, o update irá até o registro 2587,
             // lembrando que na criação da base ele primary key [cQuery += 'asqn serial primary key,'], ou pode ser através de indices etc...
             
     
            cQuery := "Update cabacertos set "+;                    "asda = " + iif(!empty(msaldoatualcliente),alltrim(str(msaldoatualcliente)),"0")  +;                    " where " + " aseq = " + alltrim(str(mdncd))          oQuery := oServer:Query(cQuery)          if oQuery:neterr()             msgStop("Não foi possível realizar a alteração no conta corrente.","Atenção")          endif          oQuery:destroy()          oServer:Commit() - EXCLUINDO DADOS NA BASE DE DADOS....
             // supondo que mdncd é igual a 2587, o delete irá até o registro 2587,
             // lembrando que na criação da base ele primary key [cQuery += 'asqn serial primary key,'], ou pode ser através de indices etc...
             cQuery := "delete from cabacertos where "+;                    "aseq = " + alltrim(str(mdncd))          oQuery := oServer:Query(cQuery)          if oQuery:neterr()             msgstop("Não foi possível realizar a operação de exclusão.","ATENÇÃO")          endif          oQuery:destroy()          oServer:Commit()
    - EXECUTANDO UM SELECT
            // SUPONDO QUE MCULF - CODIGO DO CLIENTE SEJA 2879 E ZSEQLOJA - 1 LOJA 1
            
            cQuery := "select * from conta_corrente_acertos where"+;                   " acli = " + alltrim(str(mculf))+;                   " and loja = " + alltrim(str(zseqloja))         cQuery += " order by adtm asc;"         oQuery := oServer:Query(cQuery)         DO WHILE ! oQuery:Eof()            nacre = oQuery:Fieldget(oQuery:Fieldpos('acre'))            navlr = oQuery:Fieldget(oQuery:Fieldpos('avlr'))            if nacre = "C"               nvalorcredito = nvalorcredito + navlr            elseif nacre = "D"               nvalorcredito = nvalorcredito - navlr            endif            oQuery:Skip()         END         oQuery:destroy()         
    OBS. AS FUNCOES, DE INSERT, UPDATE E DELETE, TAIS COMO SELECT ETC.. PODEM SER CRIADAS A PARTIR DE FUNCOES UNICAS QUE VOCÊ PODERÁ 
             CRIAR, PARA FACILITAR NO DESENVOLVIMENTO E MANUTENÇÃO DOS FONTES, TAIS COMO BROWSER'S ETC..
        
             A PARTIR DAQUI, CASO VC, SE ANIME A UTILIZAR PODE ME PEDIR INFORMAÇÕES QUE O QUE ESTIVER AO MEU ALCANCE EU AUXILIO.
     
  13. Like
    Wellington Vieira got a reaction from aferra in PostGre-SQL   
    CONTRIB PGSQL -> Dentro das contribs do xharbour
    1º - Compilar a contrib usando o seu xharbour e bcc( borland) instalado, conforme os bat's contidos na pasta xharbour.
         ou na própria pasta da contrib.
         É necessário compilar para gerar um LIB, de acordo com o seu xharbour e bcc(borland), instalados...
         O nome da lib a ser gerada é o nome de : libhbpg.lib
         OBS. CASO A LIB QUE VEM COM A CONTRIB, já esteja no formato do xharbour e bcc(borland) que esteja usando, não
         será necessário compilar, para gerar a lib...
    2º - No postgresql vem uma lib que é a libpq.lib , mas esta vem para o  microsoft visual C , então tem que criar 
         uma nova lib  para o formato borland (instalado):  implib -a libpq.lib libpq.dll
         implib.exe -> pertence ao seu bcc(borland) instalado..
    OBS. A 1º e 2º você fará somente em seu computador, para compilar os seus executáveis, nos clientes a instalação do
         postgresql é normal..
    3º - Na execução de seu software caso ele pedir Dll's, batas ir na pasta onde foi instalada o postgresql e copiar as dll's
         para a pasta onde fica o seu executável e mante-las lá inclusive em seus clientes.
    OBS. Copiará as dll's caso o executável exigir as dll's, e mante-las para compilações futuras. E levar estas dll's junto
         com o seu executável aos clientes.. ( Isto dependerá do path da sua máquina e dos cliente), o mais fácil e já ter as
         dll's junto com o seu executável.
    4º - No seu bat de compilação acrescentar as duas lib's criadas: libhbpg.lib, libpq.lib
    INSTALANDO O POSTGRESQL.
         - Sempre verificar na sua máquina ou máquinas dos clientes, qual postgresql 32 ou 64 bits, e instalar o correto,
           podendo ser 9.2, 9.3 ou 10 etc.. ( postgresql)
           OBS. EU ESTOU UTILIZANDO.. OS
           postgresql-9.2.4-1-windows 32/64 Bits ou postgresql-10.4-1-windows 32/64 Bits, mas já testei versões superiores
           e anteriores começadas com o 8.2 e funcionam normalmente.
         - No firewal do windows defender ( ir em Configurações Avançadas) - Regras de Entrada - Nova regra
           Escolher porta - tcp - ( A porta é a 5432) e permir a conexão usando esta porta.
           
           OBS. Eu faço isso, porque se for utilizar o postgresql em rede ou no futuro eu não tenha que alterar essas confi
           gurações, independente se for em uma máquina ou em várias.
         - Em ferramentas administrativas - serviços - Logon secudário -> colocar o tipo de inicialização automático e iniciar.
           Aplicar -> OK
         - instalar o postgresql.. ( Na instalação ele pedirá uma senha que será a senha de acesso ao postgresql).
           (guardar a mesma)
         - Geralmente é instalado em Arquivos de programas-> postgresql -> ai vem as versões em pastas 9.2, 9.3 etc..
         - MAQUINA LOCAL
         - Após instalado o postgresql, ele sempre instalará na porta 5432 e a máquina local será sempre
           localhost ou 127.0.0.1, depois da instalação.

         - EM REDE.
         - Caso seja em rede, na máquina que será o servidor tem que ter ip,dns e gateway na máquina
           da, pois se deixar pelo ip gerado pelo modem de acesso a internet, este poderá mudar de tempos em tempos
           caso não seja ip fixo.
         - No postgresql, na pasta bin tem um executavel chamado de PGADMIN, acessar o mesmo e ir em File(Arquivo)->
           Open pg_hba.conf que esta em Arquivos de programas->postgresql->9.2->data
           Onde tem 127.0.0.1/32 - clicar duas vezes e alterar esta opção para 0.0.0.0/0, que fará com que o postgresql
           aceite a entrada em seus serviços de qualquer computador da rede... 
           OBS. ESTE É APENAS UM JEITO, EXISTEM VÁRIAS FORMAS NO POSTGRESQL, PARA SEGURANÇA DE DADOS PROCESSADOS,,
           QUAIS IP'S DE ACESSO AO BANCO E CONFIGURAÇÕES DIVERSAS... OK
         - EM REDE E MAQUINA LOCAL
         - No postgresql 9.2(localhost:5432), clicar 02 vezes colocar a senha que informou na instalação.
         - depois é só criar uma base de dados ou utilizar a que vem padrão com o nome de "postgresql"
    NO SEU SOFTWARE:
          
    - ABRINDO O POSTGRESQL A PARTIR DE SEU SOFTWARE
     ( O trecho abaixo é retirado do meu fonte, mais pode ser da forma que quiser..)
    function main()          // Conexao com a base de dados........................................          oserver = ""          cserver   = space(20)  // Em máquina local será (127.0.0.1) ou o IP da máquina de rede que foi instalado o postgresql.          cdatabase = space(20)  // O nome do banco de dados criado ou o que instalado automatico com o postgre (postgresql)          cuser     = space(20)  // Caso você não mude, sempre será (postgres)          cpass     = space(20)  // A senha que foi colocada na instalação do postgresql.(xxxxxxxxx)          // Verifica as configuracoes em arquivo..............................          cDirXML = "wsiscom.xml"          if !file(cDirXML)                                                                // cores colocadas em variaveis...             define dialog XML title "Configurando o PostgreSQL" from 10,20 to 23,60 color corobjjan, corfdojan                    define font mtahoma  name "Tahoma"          size 5.5,13                       @ 15.5,002 say "I.P do servidor" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 15, 050 get oserver var cserver font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 30.5,002 say "Banco de Dados" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 30, 050 get odatabase var cdatabase font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 45.5,002 say "Usuario" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 45, 050 get ouser var cuser font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel                       @ 60.5,002 say "Senha" of XML font mtahoma color corfrtsay,corfdosay pixel                       @ 60, 050 get opass var cpass font mtahoma size 080,9 of XML color corfrtget,corfdoget pixel password                       @ 085,116 BUTTON olbut3 prompt "&Continuar" size 040,12 font mtahoma OF XML pixel action ( gera_xml_postgresql() )             activate dialog XML center          endif          if GetKeyState(VK_ESCAPE)             return nil          endif                    // FWAIT É UMA FUNÇÃO MINHA QUE MOSTRA A MENSAGE ABAIXO NA TELA...          fwait(" ...Tentativa acesso 1 ...")                    nn = 0          ns = "S"          do while .t.                                       // A função abrir_xml lê o xml gerado pela função gera_xml_postgresql()             cserver   =  abrir_xml(cDirXML,"server")             cdatabase =  abrir_xml(cDirXML,"database")             cuser     =  abrir_xml(cDirXML,"user")             cpass     =  abrir_xml(cDirXML,"pass")                                       // FAZ A CONEXÃO COM O POSTGRESQL A PARTIR DAS INFORMAÇÕES .......             oserver := tpqserver():new(cserver, cdatabase, cuser, cpass)                          // oserver - será a variavel que guarda a conexão com o postgresql para todo o software.                          // VERIFICA SE HOUVE ERRO COM A ABERTURA DO POSTGRESQL E TENTA 05 VEZES A CONEXÃO.             if oserver:neterr()                oserver = ""                if nn = 1                   // FECHA A FWAIT                   odlgwait:end()                                      // FWAIT É UMA FUNÇÃO MINHA QUE MOSTRA A MENSAGE ABAIXO NA TELA...                   fwait(" ...Tentativa acesso 2 ...")                                      SysWait(3)                elseif nn = 2                   odlgwait:end()                   fwait(" ...Tentativa acesso 3 ...")                   SysWait(3)                elseif nn = 3                   odlgwait:end()                   fwait(" ...Tentativa acesso 4 ...")                   SysWait(3)                elseif nn = 4                   odlgwait:end()                   fwait(" ...Tentativa acesso 5 ...")                   SysWait(3)                elseif nn = 5                   ns = "N"                             exit                endif             else                exit             endif             ++nn             loop          enddo          if ns = "N"             odlgwait:end()             ferase(cDirXML)             msgstop("Erro de conexão com a base de dados. Contate o suporte","Atenção")             return nil          else             odlgwait:end()          endif return nil function gera_xml_postgresql()          if empty(cserver)             msgstop("I.P do servidor em branco.","Atenção")             return nil          endif          if empty(cdatabase)             msgstop("Banco de dados em branco.","Atenção")             return nil          endif          if empty(cuser)             msgstop("Usuario em branco.","Atenção")             return nil          endif          if empty(cpass)             msgstop("Senha em branco.","Atenção")             return nil          endif          lh := 00          oPrn := TDosPrn():New(cDirXML)          oPrn:StartPage()          oPrn:lZeraBuffer:=.T.          mlinha = '<?xml version='+'"'+'1.0'+'"'+ ' encoding='+'"'+'UTF-8'+'"'+' ?>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<confPostgreSQL xmlns='+'"'+'http://www.wsiscom.com.br'+'"'+ ' versao='+'"'+ "1.0" +'"'+'>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<server>'+alltrim(cserver)+'</server>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<database>'+alltrim(cdatabase)+'</database>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<user>'+alltrim(cuser)+'</user>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '<pass>'+alltrim(cpass)+'</pass>'          //mlinha = '<pass>'+encrypt(alltrim(cpass))+'</pass>'          oPrn:Say(lh,000,mlinha)          ++lh          mlinha = '</confPostgreSQL>'          oPrn:Say(lh,000,mlinha)          ++lh          oPrn:EndPage()          oPrn:End()          // Fecha a caixa de dialog da configuracao do XML....................          XML:end() return nil Function abrir_xml(cFileName,cTipoName,cvazioounao)          local hFile, cXml,xmlDoc, xmlIter, xmlNode, cNode, cAttrib, cValue, cData          hFile := FOpen( cFileName )          xmlDoc := TXmlDocument():New( hFile )          if xmlDoc:nStatus != HBXML_STATUS_OK              msgstop("Falha no arquivo XML ","ERRO Arquivo XML")              return("")          endif          xmlIter := TXmlIterator():New( xmlDoc:oRoot )          xmlNode := xmlIter:Find()          ctipo  = ""          npassa = "N"          do while xmlNode != NIL             cName := xmlNode:cName             cData := xmlNode:cData             if empty(cvazioounao)                if cName = cTipoName                   npassa = "S"                   exit                endif             else                if cName = cTipoName                   ctipo = cData                   npassa = "S"                endif             endif             xmlNode := xmlIter:Next()          enddo          fclose(hFile)          if !empty(cvazioounao)             cData = ctipo          endif          if npassa = "N"             cData = ""          endif Return(cData) - CRIANDO UMA TABELA EM SUA BASE DE DADOS.....
     ( O trecho abaixo é retirado do meu fonte, mais pode ser da forma que quiser..)         
    // oserver      -> conexão com o postgresql
    // "cabacertos" -> nome da tabela a ser criada
             
             if oServer:TableExists("cabacertos")                            // eu uso este espaço para alterações na base quando tem, a partir de um ftp....             // futuramente eu posso colocar como faço...                       else                                               cQuery := 'CREATE TABLE cabacertos('             cQuery += 'asqn serial primary key,'    && sequencial             cQuery += 'loja smallint,'              && empresa             cQuery += 'adtm date,'                  && data do acerto             cQuery += 'arep smallint,'              && vendedor             cQuery += 'acli smallint,'              && cliente             cQuery += 'asub double precision,'      && subtotal das duplicatas.             cQuery += 'ades double precision,'      && desconto dado nas duplicatas.             cQuery += 'ajur double precision,'      && juros dado nas duplicatas.             cQuery += 'amul double precision,'      && multa dado nas duplicatas.             cQuery += 'atot double precision,'      && total (subtotal - descontos)             cQuery += 'acre double precision,'      && credito aproveitado.             cQuery += 'arec double precision,'      && valor dos recebimentos..             cQuery += 'aeco double precision,'      && valor em kg acerto para o sistema eco             cQuery += 'aecoabatenovalordevido boolean,'&&              cQuery += 'aecoreal double precision,'  &&              cQuery += 'aecorealkg double precision,'&&              cQuery += 'absd text,'                  // observacao desconto..             cQuery += 'absa text,'                  // observacao acrescimo..             cQuery += 'aapr double precision,'      // ndebito - se igual a zero.. nao tem credito e nem debito                                                     //           se positivo ficou devendo..                                                     //           se negativo tem credito a ser lancado nos clientes...             cQuery += 'aope character(2),'          && operador             cQuery += 'alib character(1),'          && liberado..             cQuery += 'asdn double precision,'      && saldo anterior do cliente credito/debito             cQuery += 'asda double precision,'      && saldo atual do cliente credito/debito             cQuery += 'aseq integer)'               && sequencia...             oQuery := oServer:Query(cQuery)             if oQuery:neterr()                msgstop("Nao foi possível criar arquivo de cabacertos. O sistema sera finalizado.","ATENÇÃO")                oServer:Destroy()             endif             oQuery:Destroy()          endif                              if oServer:TableExists("conta_corrente_acertos")          else             cQuery := 'CREATE TABLE conta_corrente_acertos('             cQuery += 'ascr serial primary key,'   && sequencial             cquery += 'loja smallint,'             cQuery += 'asqn integer,'              && sequencial do cabacertos             cQuery += 'adtm date,'                 && data do conta_corrente             cQuery += 'acli smallint,'             && cliente             cQuery += 'arep smallint,'             && vendedor             cQuery += 'avlr double precision,'     && valor             cQuery += 'aobs character(100),'       && Observacao             cQuery += 'acre character(01))'        && (C)redito (D)ebito             oQuery := oServer:Query(cQuery)             if oQuery:neterr()                msgstop("Nao foi possível criar arquivo de conta_corrente_acertos. O sistema sera finalizado.","ATENÇÃO")                oServer:Destroy()                janela_principal:end()                return .t.             endif             oQuery:Destroy()          endif         
     
     - INSERINDO DADOS NA BASE DE DADOS......
             
             OBS. CAMPOS CARACTER,DATA,boolean tem que ser precedidos de '    e de pois de '  ex:  nome character(60), 
             grava-se assim :  'WELLINGTON LLSLSLSLSLSLSLSLSLSL'
             ex de com fica uma query: insert into cabacertos(loja,adtm,arep,)values(1,'2018-09-10',1)
             // aqui todos os campos da tabela..          cQuery := "insert into cabacertos(loja,adtm,arep,acli,asub,ades,ajur,"+;                    "atot,acre,arec,aeco,aecoabatenovalordevido,aecoreal,aecorealkg,aapr,alib,absd,absa,asdn,aseq)"                    // aqui as variaveis que serão guardadas nos campos da tabela.          // lembrando que os campos caracter,data,booleans são precedidos de '    e depois de  '          cQuery += "values("+str(zseqloja)+","+;                    "'"+madtm+"'"+","+;                    alltrim(str(marep))+","+;                    alltrim(str(mccod))+","+;                    alltrim(str(stotal))+","+;                    alltrim(str(mdesc))+","+;                    alltrim(str(mjuro))+","+;                    alltrim(str(ntotal))+","+;                    alltrim(str(ncredi))+","+;                    alltrim(str(nTRece))+","+;                    iif(!empty(npgeco),alltrim(str(npgeco)),"0")+","+;                    "'" + iif(nabatenovalordevido = .f.,"n","y") + "'" +","+;                    iif(!empty(npgEcoReais),alltrim(str(npgEcoReais)),"0")+","+;                    iif(!empty(npgEcoKilos),alltrim(str(npgEcoKilos)),"0")+","+;                    alltrim(str(ndebito))+","+;                    "'"+"N"+"'"+","+;                    "'"+mobsd+"'"+","+;                    "'"+mobsa+"'"+","+;                    iif(!empty(msaldoanteriorcliente),alltrim(str(msaldoanteriorcliente)),"0")+","+;                    alltrim(str(mdncd))+")"                    // Cria um objeto ( variavel ) que chama o postgresql na variavel oserver e executa a query          oQuery := oServer:Query(cQuery)                    // Se der erro na gravação exibe a mensagem abaixo.          if oQuery:neterr()             msgStop("Erro na inclusão do cabacerto.","Atenção")          endif                    // destroy a query.....          oQuery:destroy()                    // faz o commit do insert.....          oServer:Commit() - ALTERANDO DADOS NA BASE DE DADOS...         
             // supondo que mdncd é igual a 2587, o update irá até o registro 2587,
             // lembrando que na criação da base ele primary key [cQuery += 'asqn serial primary key,'], ou pode ser através de indices etc...
             
     
            cQuery := "Update cabacertos set "+;                    "asda = " + iif(!empty(msaldoatualcliente),alltrim(str(msaldoatualcliente)),"0")  +;                    " where " + " aseq = " + alltrim(str(mdncd))          oQuery := oServer:Query(cQuery)          if oQuery:neterr()             msgStop("Não foi possível realizar a alteração no conta corrente.","Atenção")          endif          oQuery:destroy()          oServer:Commit() - EXCLUINDO DADOS NA BASE DE DADOS....
             // supondo que mdncd é igual a 2587, o delete irá até o registro 2587,
             // lembrando que na criação da base ele primary key [cQuery += 'asqn serial primary key,'], ou pode ser através de indices etc...
             cQuery := "delete from cabacertos where "+;                    "aseq = " + alltrim(str(mdncd))          oQuery := oServer:Query(cQuery)          if oQuery:neterr()             msgstop("Não foi possível realizar a operação de exclusão.","ATENÇÃO")          endif          oQuery:destroy()          oServer:Commit()
    - EXECUTANDO UM SELECT
            // SUPONDO QUE MCULF - CODIGO DO CLIENTE SEJA 2879 E ZSEQLOJA - 1 LOJA 1
            
            cQuery := "select * from conta_corrente_acertos where"+;                   " acli = " + alltrim(str(mculf))+;                   " and loja = " + alltrim(str(zseqloja))         cQuery += " order by adtm asc;"         oQuery := oServer:Query(cQuery)         DO WHILE ! oQuery:Eof()            nacre = oQuery:Fieldget(oQuery:Fieldpos('acre'))            navlr = oQuery:Fieldget(oQuery:Fieldpos('avlr'))            if nacre = "C"               nvalorcredito = nvalorcredito + navlr            elseif nacre = "D"               nvalorcredito = nvalorcredito - navlr            endif            oQuery:Skip()         END         oQuery:destroy()         
    OBS. AS FUNCOES, DE INSERT, UPDATE E DELETE, TAIS COMO SELECT ETC.. PODEM SER CRIADAS A PARTIR DE FUNCOES UNICAS QUE VOCÊ PODERÁ 
             CRIAR, PARA FACILITAR NO DESENVOLVIMENTO E MANUTENÇÃO DOS FONTES, TAIS COMO BROWSER'S ETC..
        
             A PARTIR DAQUI, CASO VC, SE ANIME A UTILIZAR PODE ME PEDIR INFORMAÇÕES QUE O QUE ESTIVER AO MEU ALCANCE EU AUXILIO.
     
  14. Like
    Wellington Vieira got a reaction from Valdir in Pesquisar Tabela CEST   
    Boa tarde,
    Eu tive a mesma dúvida, e as respostas me ajudaram. Caso queira dar uma olhada.
    http://fivewin.com.br/index.php?/topic/27528-relacionar-a-tabela-cest-com-a-tabela-ncm/#comment-282455
  15. Like
    Wellington Vieira got a reaction from kapiaba in Emissor de mdf-e   
    Veja o UNINFE...
    http://www.unimake.com.br/uninfe/
    Lá tem : UniNFe 5.0 - Transmissor de XML´s de NF-e, NFC-e, CT-e, MDF-e e NFS-e / Integração ao ERP (.NET Framework 3.5)
    UniNFe 5.0 - Transmissor de XML´s de NF-e, NFC-e, CT-e, MDF-e e NFS-e / Integração ao ERP (.NET Framework 4.5.1)
    tem também :
    https://github.com/JoseQuintas/sefazclass ( hbnfe )
  16. Like
    Wellington Vieira got a reaction from kapiaba in FTP Download / Upload   
    Veja se ajuda também..
    http://fontefivewin.site88.net/transferencias-de-arquivos-via-ftp-com-fivewin-for-xharbour/
    abs.
  17. Like
    Wellington Vieira got a reaction from btsinfo@com4.com.br in Exemplo para pegar dados XML - NF-e   
    Kapiaba,
     
    Desculpe a demora, mas fui fazer uma pesquisa na NET, para ver se encontrava algo sobre download direto no webservice da SEFAZ nacional, encontrei algumas coisas,, mas ainda vou testar,, assim que der eu posto.. , mas para ir adiantando.. achei um exemplo em OLE, no site da five anterior.. que não sei quem postou.. que funciona com alguns cliques...apresentando em uma dialog a parte de download da SEFAZ.. 
     
    Segue o fonte:  A função é a function conulta_cont(),  (Não sei que postou o exemplo mais funciona..)
     
    #include "FiveWin.ch" #include "postgres.ch" #include "hbxml.ch" #include 'inkey.ch' #include "fileio.ch" function main() define window janela_principal from 0, 0 to 800, 600; title "Importando nota fiscal pelo xml"; MENU BuildMenu() public odlgwait // Cores do sistema................................................... corfdojan = rgb(245,235,223) corobjjan = rgb(255,255,255) corfrtget = rgb(064,078,089) // cor de frente para a edi‡Æo dos campos corfdoget = rgb(255,255,255) // cor de fundo para a edi‡Æo dos campos corfdogetnotafiscal = rgb(245,235,223) // cor de fundo para edicao dos campos corfrtsay = rgb(000,000,000) // cor de frente para o say corfdosay = rgb(245,235,223) // cor de fundo para o say corlstbxp = rgb(255,247,232) // cor do list box linhas pares corlstbxi = rgb(255,247,232) // cor do list box linhas impares corlstbxselecaofundo = rgb(255,247,232) // cor do list box selecao fundo corlstbxselecaotexto = rgb(255,247,232) // cor do list box selecao texto corlstbxnormal = rgb(255,255,255) corlstbxdifere = rgb(228,218,191) corlstelasconsultasuspensa = rgb(255,255,255) corfrtsaysuspensa = rgb(153,012,005) corfdosaysuspensa = rgb(228,218,191) corfrtsaybr = rgb(255,255,255) // cor de frente para o say destaque branco corfrtsayds = rgb(153,012,005) // cor de frente para o say destaque corfdosayds = rgb(255,255,255) // cor de fundo para o say destaque corteladiferente_01 = rgb(255,239,214) define brush obrushsuspenso color corteladiferente_01 define brush obrushwindow COLOR rgb(255,255,255) define brush obrush COLOR corfdojan define brush obrushfolder COLOR corfdojan define brush obrushteladiferente_01 color corteladiferente_01 define font mtahoma name "Tahoma" size 6.0,15 // font padrao para Say/Get/Botoes define font mtahomabold name "Tahoma" bold size 6.0,15 // font padrao para Say/Get/Botoes define font mtahomameiogrande name 'Tahoma' bold size 09,25 // define font mtahomagrande name 'Tahoma' bold size 12,25 // define font mtahomagrandeletra name 'Tahoma' bold size 14,28 // define font mcourier name 'courier' size 0,-10 define font mtahomamenor name 'MS Sans Serif' size 4.5,15 // font padrao para listbox....... define font msanser name 'MS Sans Serif' size 6.0,15 // font padrao para listbox....... define font obotaof name 'MS Sans Serif' size 6,15 // font padrao para botoes define font olistagem_01 name "Courier New" size 0,-10 define font olistagem_02 name "Courier New" size 0,-10 bold define font olistagem_03 name "Courier New" size 0,-10 italic define font olistagem_04 name "Courier New" size 0,-8 define font olistagem_05 name "Courier New" size 0,-13 define font olistagem_06 name "Courier New" size 0,-9 SET MESSAGE OF janela_principal TO "RW" NOINSET CLOCK DATE KEYBOARD activate window janela_principal maximized return nil function BuildMenu() MENU oMenu MENUITEM "Importar NF-E ( XML )" ACTION ( consulta() ) ENDMENU return oMenu // Faz uma consulta de nota fiscal............................................. function consulta() if IsInternet() == .f. msgstop("Necessário conexão com internet."+CRLF+"Operação cancelada","Informação") return .f. endif define dialog consultachave title "Digite a chave...." from 10,20 to 23,065 brush obrush transparent define font mtahomachave name "Tahoma" size 5.5,13 f_cchave = space(50) @ 35, 002 say "Chave NF-e:" of consultachave font mtahomachave color corfrtsay,corfdosay pixel @ 35, 035 get of_cchave var f_cchave picture "@!" font mtahomachave size 140,9 of consultachave color corfrtget,corfdoget pixel @ 082,005 BUTTON olbut3 prompt "&Consultar" size 040,12 font mtahomachave OF consultachave pixel action ( conulta_cont(f_cchave) ) @ 082,134 BUTTON olbut3 prompt "&Importa XML" size 040,12 font mtahomachave OF consultachave pixel action ( pega_nam_xml() ) activate dialog consultachave center return nil function conulta_cont(f_cchave) local oOle, oOleDoc := Array(2) if empty(f_cchave) msgstop("Chave em branco.","Atenção") of_cchave:setfocus() of_cchave:gotfocus() return nil endif f_cchave = alltrim(f_cchave) oOle:= CreateObject("InternetExplorer.Application") oOle:Visible := .T. // Apresenta o Browser oOle:ToolBar := .F. // Desativa a barra de ferramentas oOle:StatusBar:= .f. // Desativa a barra de status oOle:MenuBar := .f. // desativa a barra de menu oOle:Navigate2("http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=") WHILE oOle:Busy syswait(.5) END oOle := oOle:Document() oOle:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:= f_cchave oOle:All:Item("ctl00$ContentPlaceHolder1$txtCaptcha",0):Focus() oOle:=Nil CursorArrow() SysRefresh() of_cchave:ctext := space(50) of_cchave:setfocus() of_cchave:gotfocus() return nil // Importa arquivo xml......................................................... function pega_nam_xml() // Entrada de nota fiscal eletronica.................................. gcFile := cGetFile( "XML (*.xml)| *.xml|"; ,"Por favor localize o arquivo no formato XML.", 4 ) if !Empty( gcFile ) .and. File( gcFile ) aa = gcfile bb = "" for xt = 1 to len(gcFile) if substr(gcfile,xt,1) = "\" bb = "" else bb = bb + substr(gcfile,xt,1) endif next mEnomearquivoxmlnfentrada = bb mLocaldoarquivoxml = gcfile if msgyesno("Deseja importar o arquivo: " + mEnomearquivoxmlnfentrada,"ATENÇÃO") ler_arquivo_xml(mLocaldoarquivoxml) endif endif return nil function ler_arquivo_xml(mLocaldoarquivoxml) fwait(" ...Aguarde processando...") hFile := FOpen( mLocaldoarquivoxml ) xmlDoc := TXmlDocument():New( hFile ) if xmlDoc:nStatus != HBXML_STATUS_OK msgstop("Falha no arquivo XML ","ERRO Arquivo XML") return nil endif xmlIter := TXmlIterator():New( xmlDoc:oRoot ) xmlNode := xmlIter:Find() // variaveis ........................................................ nfe_notafiscalsimounao = "N" nfe_cabecalho = "" muf = space(02) // dados da nota nfe_estado = space(02) // estado do emitente da nf-e nfe_cdchvacesso = space(08) // codigo que compoe chave de acesso nfe_operacao = space(60) // natureza de operacao nfe_pagamento = space(01) // 0-A vista 1-Prazo 2-Outros nfe_modelo = space(02) // modelo do documento fiscal nfe_serie = space(03) // serie do documento fiscal nfe_numero = space(09) // numero do documento fiscal nfe_emissao = space(10) // data de emissÆo nfe_saida = space(10) // data de sa¡da nfe_hora = space(08) // hora nfe_tipo = space(01) // 0-entrada 1-saida nfe_ibgeGerador = space(07) // c¢digo do munic¡pio ocorrˆncia do fato gerador nfe_impressao = space(01) // 1-retrato 2-paisagem nfe_tipoemissao = space(01) // 1-Normal 2-Contigˆncia FS 3-Contigˆncia Scan 4-Contigˆncia DPEC 5-Contigˆncia FS-DA nfe_digitochave = space(01) // digitoverificador da chave nfe_tipoambiente = space(01) // 1-produ‡Æo 2-homologa‡Æo nfe_finalidade = space(01) // 1-normal 2-complementar 3-Ajuste nfe_processo = space(01) // 0-aplicativo contribuinte 1-avulsa pelo fisco 2-avulsa pelo contribuinte 3-aplicativo do fisco nfe_versao = space(20) // identificador da versÆo nfe_dtcontigencia = space(19) // data e hora de contigencia nfe_justificativa = space(256)// Justificativa da contigencia // emitente nfe_e_cnpj = space(14) // CNPJ nfe_e_cpf = space(11) // CPF nfe_e_razaonome = space(60) // nome ou razao social nfe_e_fantasia = space(60) // fantasia nfe_e_logradouro = space(60) // logradouro nfe_e_numero = space(60) // numero nfe_e_complemento = space(60) // complemento nfe_e_bairro = space(60) // bairro nfe_e_ibgemunicipio = space(07) // codigo ibge municipio nfe_e_municipio = space(60) // munic¡pio nfe_e_estado = space(02) // estado nfe_e_cep = space(08) // cep nfe_e_codigopais = space(04) // c¢digo do pa¡s nfe_e_nomepais = space(60) // nome do pa¡s nfe_e_telefone = space(14) // telefone nfe_e_inscricao = space(14) // inscri‡Æo estadual nfe_e_inscricaost = space(14) // inscri‡Æo estadual substituto tribut rio nfe_e_inscricaomun = space(15) // inscri‡Æo municipal nfe_e_cnae = space(07) // c¢digo CNAE nfe_e_crt = space(01) // regime tribut rio 1-simples nacional 2-simples nacional excesso receita 3-regime normal // destinat rio nfe_d_cnpj = space(14) // cnpj do destinat rio nfe_d_cpf = space(11) // cpf do destinat rio nfe_d_nome = space(60) // razao ou nome do destinat rio nfe_d_logradouro = space(60) // logradouro de destinat rio nfe_d_numero = space(60) // n£mero do destinat rio nfe_d_complemento = space(60) // complemento do destinar rio nfe_d_bairro = space(60) // bairro do destinat rio nfe_d_ibgemunicip = space(07) // c¢digo do ibge do munic¡pi nfe_d_municipio = space(60) // munic¡pio nfe_d_estado = space(02) // estado nfe_d_cep = space(08) // cep do destinat rio nfe_d_cpais = space(04) // c¢digo do pa¡s nfe_d_pais = space(60) // nome do pa¡s nfe_d_telefone = space(14) // telefone do destinatario nfe_d_ie = space(14) // inscri‡Æo estadual nfe_d_isuf = space(08) // suframa nfe_d_email = space(60) // e-mail // produtos........................................................... nfe_dadosproduto = {} nfe_verosproduto = {} nfe_p_codigo = space(60) // (03) c¢digo do produto nfe_p_barras = space(14) // (04) c¢digo EAN ( barras ) nfe_p_produto = space(120) // (05) nome do produto nfe_p_ncm = space(08) // (06) ncm nfe_p_extipi = space(03) // (07) ex da tipi. nfe_p_cfop = space(04) // (08) cfop nfe_p_unidade = space(06) // (09) unidade comercial nfe_p_quantidade = space(15) // (10) 15,4 quantidade nfe_p_valor = space(21) // (11) 21,10 valor nfe_p_bruto = space(15) // (12) 15,2 valor total do item nfe_p_ceantrib = space(14) // (13) barras nfe_p_unidadetrib = space(06) // (14) unidade tributavel nfe_p_qtdtributa = space(15) // (15) 15,4 quantidade tribut vel do produto nfe_p_valortribut = space(21) // (16) 21,10 valor tributavel nfe_p_frete = space(15) // (17) 15,2 frete do item nfe_p_seguro = space(15) // (18) 15,2 seguro do item nfe_p_desconto = space(15) // (19) 15,2 desconto do item nfe_p_outro = space(15) // (20) 15,2 outros do item nfe_p_entratotal = space(01) // (21) 0-nÆo compäe total 1-compäe total nfe_i_origem = space(01) // (22) 0-nacional 1-estrangeira 2-estrangeira adquirida no mercado interno nfe_i_cst = space(02) // (23) cst nfe_i_modbc = space(01) // (24) 0-margem valor agregado 1-pauta 2-pre‡o tabelado 3-valor da opera‡Æo nfe_i_valorbase = space(15) // (25) 15,2 valor da base de c lculo nfe_i_aliquota = space(05) // (26) 05,2 aliquota nfe_i_valoricms = space(15) // (27) 15,2 valor do icms nfe_i_reducaobase = space(05) // (28) 05,2 percentual de redu‡Æo da base de c lculo nfe_i_modbcst = space(01) // (29) 0-tabelado 1-lista negativa 2-lista positiva 3-lista neutra 4-margem valor agregado 5-pauta nfe_i_mvast = space(05) // (30) 05,2 percentual da margem de valor adicionado do icms st nfe_i_redbcst = space(05) // (31) 05,2 percentual da redu‡Æo de bc do icms st nfe_i_valorbasest = space(15) // (32) 15,2 valor da base de calculo st nfe_i_aliquotast = space(05) // (33) 05,2 aliquota do icms st nfe_i_valoricmsst = space(15) // (34) 15,2 valor do icms st nfe_i_motivodeson = space(01) // (35) motivo da desonera‡Æo conforme manual 4.0.1 nfe_i_vbcstret = space(15) // (36) 15,2 valor da base de calculo do icms retido nfe_i_vicmsstret = space(15) // (37) 15,2 valor do icms st retido nfe_i_csosn = space(03) // (38) tipo nfe_i_aliqcredit = space(05) // (39) 05,2 Al¡quota aplicavel de c lculo do cr‚dito nfe_i_valorcredi = space(15) // (40) 15,2 valor do cr‚dito de icms que pode ser aproveitado. nfe_cstipi = space(02) // (41) c¢digo da situa‡Æo tribut ria do ipi nfe_valorbaseipi = space(15) // (42) 15,2 valor da base de calculo do ipi nfe_aliquotaipi = space(05) // (43) 05,2 al¡quota do ipi nfe_valoripi = space(15) // (44) 15,2 valor do ipi nfe_cstpis = space(02) // (45) c¢digo da situa‡Æo tribut ria do pis nfe_valorbasepis = space(15) // (46) 15,02 valor da base de c lculo do pis nfe_aliquotapis = space(05) // (47) 05,2 al¡quota do pis nfe_valorpis = space(15) // (48) 15,02 valor do pis nfe_valorbasepisst= space(15) // (49) 15,02 valor da base de c lculo do pis nfe_aliquotapisst = space(05) // (50) 05,2 al¡quota do pis nfe_valorpisst = space(15) // (51) 15,02 valor do pis nfe_cstcof = space(02) // (52) c¢digo da situa‡Æo tribut ria do cofins nfe_valorbasecof = space(15) // (53) 15,02 valor da base do cofine nfe_aliquotacof = space(05) // (54) 05,2 al¡quota do cofins nfe_valorcof = space(15) // (55) 15,2 valor do cofins nfe_valorbasecofst= space(15) // (56) 15,02 valor da base do cofine nfe_aliquotacofst = space(05) // (57) 05,2 al¡quota do cofins nfe_valorcofst = space(15) // (58) 15,2 valor do cofins // o array nfe_verosproduto ‚ so para mostras o listbox... ou para // outro uso qualquer... // os produtos serao lancados no array nfe_dadosproduto, bastando // fazer um for xx = 1 to len(nfe_dadosproduto) para pegar as informa‡äes.. // ex: nfe_verosproduto[xx, 3] = nfe_p_codigo -> c¢digo do produto // nfe_verosproduto[xx, 4] = nfe_p_barras -> c¢digo EAN ( barras ) // nfe_verosproduto[xx, 5] = nfe_p_produto -> nome do produto // nfe_verosproduto[xx, 6] = nfe_p_ncm -> ncm // nfe_verosproduto[xx, 7] = nfe_p_extipi -> ex da tipi. // nfe_verosproduto[xx, 8] = nfe_p_cfop -> cfop // nfe_verosproduto[xx, 9] = nfe_p_unidade -> unidade comercial // nfe_verosproduto[xx,10] = nfe_p_quantidade -> quantidade // nfe_verosproduto[xx,11] = nfe_p_valor -> valor // nfe_verosproduto[xx,12] = nfe_p_bruto -> valor total do item // nfe_verosproduto[xx,13] = nfe_p_ceantrib -> barras // nfe_verosproduto[xx,14] = nfe_p_unidadetrib -> unidade tributavel // nfe_verosproduto[xx,15] = nfe_p_qtdtributa -> quantidade tribut vel do produto // nfe_verosproduto[xx,16] = nfe_p_valortribut -> valor tributavel // nfe_verosproduto[xx,17] = nfe_p_frete -> frete do item // nfe_verosproduto[xx,18] = nfe_p_seguro -> seguro do item // nfe_verosproduto[xx,19] = nfe_p_desconto -> desconto do item // nfe_verosproduto[xx,20] = nfe_p_outro -> outros do item // nfe_verosproduto[xx,21] = nfe_p_entratotal -> 0-nÆo compäe total 1-compäe total // nfe_verosproduto[xx,22] = nfe_i_origem -> 0-nacional 1-estrangeira 2-estrangeira adquirida no mercado interno // nfe_verosproduto[xx,23] = nfe_i_cst -> cst // nfe_verosproduto[xx,24] = nfe_i_modbc -> 0-margem valor agregado 1-pauta 2-pre‡o tabelado 3-valor da opera‡Æo // nfe_verosproduto[xx,25] = nfe_i_valorbase -> valor da base de c lculo // nfe_verosproduto[xx,26] = nfe_i_aliquota -> aliquota // nfe_verosproduto[xx,27] = nfe_i_valoricms -> valor do icms // nfe_verosproduto[xx,28] = nfe_i_reducaobase -> percentual de redu‡Æo da base de c lculo // nfe_verosproduto[xx,29] = nfe_i_modbcst -> 0-tabelado 1-lista negativa 2-lista positiva 3-lista neutra 4-margem valor agregado 5-pauta // nfe_verosproduto[xx,30] = nfe_i_mvast -> percentual da margem de valor adicionado do icms st // nfe_verosproduto[xx,31] = nfe_i_redbcst -> percentual da redu‡Æo de bc do icms st // nfe_verosproduto[xx,32] = nfe_i_valorbasest -> valor da base de calculo st // nfe_verosproduto[xx,33] = nfe_i_aliquotast -> aliquota do icms st // nfe_verosproduto[xx,34] = nfe_i_valoricmsst -> valor do icms st // nfe_verosproduto[xx,35] = nfe_i_motivodeson -> motivo da desonera‡Æo conforme manual 4.0.1 // nfe_verosproduto[xx,36] = nfe_i_vbcstret -> valor da base de calculo do icms retido // nfe_verosproduto[xx,37] = nfe_i_vicmsstret -> valor do icms st retido // nfe_verosproduto[xx,38] = nfe_i_csosn -> tipo // nfe_verosproduto[xx,39] = nfe_i_aliqcredit -> Al¡quota aplicavel de c lculo do cr‚dito // nfe_verosproduto[xx,40] = nfe_i_valorcredi -> valor do cr‚dito de icms que pode ser aproveitado. // nfe_verosproduto[xx,41] = nfe_cstipi -> c¢digo da situa‡Æo tribut ria do ipi // nfe_verosproduto[xx,42] = nfe_valorbaseipi -> valor da base de calculo do ipi // nfe_verosproduto[xx,43] = nfe_aliquotaipi -> al¡quota do ipi // nfe_verosproduto[xx,44] = nfe_valoripi -> valor do ipi // nfe_verosproduto[xx,45] = nfe_cstpis -> c¢digo da situa‡Æo tribut ria do pis // nfe_verosproduto[xx,46] = nfe_valorbasepis -> valor da base de c lculo do pis // nfe_verosproduto[xx,47] = nfe_aliquotapis -> al¡quota do pis // nfe_verosproduto[xx,48] = nfe_valorpis -> valor do pis // nfe_verosproduto[xx,49] = nfe_valorbasepisst-> valor da base de c lculo do pis // nfe_verosproduto[xx,50] = nfe_aliquotapisst -> al¡quota do pis // nfe_verosproduto[xx,51] = nfe_valorpisst -> valor do pis // nfe_verosproduto[xx,52] = nfe_cstcof -> c¢digo da situa‡Æo tribut ria do cofins // nfe_verosproduto[xx,53] = nfe_valorbasecof -> valor da base do cofine // nfe_verosproduto[xx,54] = nfe_aliquotacof -> al¡quota do cofins // nfe_verosproduto[xx,55] = nfe_valorcof -> valor do cofins // nfe_verosproduto[xx,56] = nfe_valorbasecofst-> valor da base do cofine // nfe_verosproduto[xx,57] = nfe_aliquotacofst -> al¡quota do cofins // nfe_verosproduto[xx,58] = nfe_valorcofst -> valor do cofins // totais da nota nfe_t_basecalculo = space(15) // 15,2 total da base de calculo nfe_t_valoricms = space(15) // 15,2 valor total do icms nfe_t_basecalcst = space(15) // 15,2 valor da da base de calculo st nfe_t_valoricmsst = space(15) // 15,2 valor do icms st nfe_t_produtos = space(15) // 15,2 valor total dos produtos nfe_t_frete = space(15) // 15,2 valor total do frete nfe_t_Seguro = space(15) // 15,2 valor total do seguro nfe_t_desconto = space(15) // 15,2 valor total do desconto nfe_t_vII = space(15) // 15,2 valor tota VII nfe_t_ipi = space(15) // 15,2 valor total do ipi nfe_t_pis = space(15) // 15,2 valor total do pis nfe_t_cofins = space(15) // 15,2 valor total do cofins nfe_t_Outro = space(15) // 15,2 valor total despesas acessorias e/ou outros. nfe_t_valornota = space(15) // 15,2 valor total da nota fiscal // transportadora nfe_r_moffrete = space(01) // 0-emitente 1-destinatario 2-terceiros 9-sem frete nfe_r_cnpj = space(14) // cnpj nfe_r_cpf = space(11) // cpf nfe_r_nometransp = space(60) // nome da transportadora nfe_r_ie = space(14) // inscri‡Æo estadural da transportadora nfe_r_endereco = space(60) // endere‡o da transportadora nfe_r_municipio = space(60) // nome do municipio da transportadora nfe_r_estado = space(05) // estado da transportadora nfe_r_placa = space(08) // placa do veiculo da transportadora nfe_r_placauf = space(02) // estado da placa nfe_r_rntc = space(20) // ANTT nfe_v_quantidade = space(15) // quantidade nfe_v_especie = space(60) // especie nfe_v_marca = space(60) // marca nfe_v_volume = space(60) // volume nfe_v_pesoliquido = space(15) // 15,3 peso l¡quido nfe_v_pesobruto = space(15) // 15,3 peso bruto nfe_infadicionais = "" nfe_chave = space(100) // chave da nota fiscal nfe_protocolo = space(100) // protocolo da nota fiscal do while xmlNode != NIL cName := xmlNode:cName cData := xmlNode:cData if cName = "infNFe" nfe_notafiscalsimounao = "S" endif if upper(cName) = "IDE" .or.; // dados da nota fiscal upper(cName) = "NFREF" .or.; // referenciada upper(cName) = "REFNF" .or.; // referenciada upper(cName) = "REFNP" .or.; // referenciada upper(cName) = "REFECF" .or.; // referenciada upper(cName) = "EMIT" .or.; // emitente upper(cName) = "AVULSA" .or.; // emitente avulsa pelo fisco upper(cName) = "DEST" .or.; // destinatario upper(cName) = "RETIRADA" .or.; // destinatario upper(cName) = "ENTREGA" .or.; // destinatario upper(cName) = "DET" .or.; // cabecalho de produtos.. upper(cName) = "PROD" .or.; // produtos upper(cName) = "IMPOSTO" .or.; // icms upper(cName) = "ICMS" .or.; // icms upper(cName) = "IPI" .or.; // ipi upper(cName) = "IPITRIB" .or.; // ipi upper(cName) = "IPINT" .or.; // ipi upper(cName) = "PIS" .or.; // pis upper(cName) = "PISALIQ" .or.; // pis upper(cName) = "PISQTDE" .or.; // pis upper(cName) = "PISNT" .or.; // pis upper(cName) = "PISOUTR" .or.; // pis upper(cName) = "PISST" .or.; // pis upper(cName) = "COFINS" .or.; // cofins upper(cName) = "COFINSALIQ" .or.; // cofins upper(cName) = "COFINSQTDE" .or.; // cofins upper(cName) = "COFINSNT" .or.; // cofins upper(cName) = "COFINSOUTR" .or.; // cofins upper(cName) = "COFINSST" .or.; // cofins upper(cName) = "ISSQN" .or.; // issqn upper(cName) = "TOTAL" .or.; // total upper(cName) = "ICMSTOT" .or.; // total icms upper(cName) = "ISSQNTOT" .or.; // issqn upper(cName) = "RETTRIB" .or.; // restitui‡Æo tribu upper(cName) = "TRANSP" .or.; // transportador upper(cName) = "RETTRANSP" .or.; // transportador upper(cName) = "VEICTRANSP" .or.; // transportador upper(cName) = "VOL" .or.; // volumes upper(cName) = "COBR" .or.; // cobran‡a upper(cName) = "INFADIC" .or.; // informa‡äes adicionais upper(cName) = "INFPROT" nfe_cabecalho = upper(cName) if upper(cName) = "DET" if !empty(nfe_p_codigo) aadd(nfe_verosproduto,{space(10),; space(100),; alltrim(nfe_p_codigo),; alltrim(nfe_p_produto),; alltrim(nfe_p_quantidade),; alltrim(nfe_p_valor),; alltrim(nfe_p_bruto)}) aadd(nfe_dadosproduto,{space(10),; space(20),; nfe_p_codigo,; nfe_p_barras,; nfe_p_produto,; nfe_p_ncm,; nfe_p_extipi,; nfe_p_cfop,; nfe_p_unidade,; nfe_p_quantidade,; nfe_p_valor,; nfe_p_bruto,; nfe_p_ceantrib,; nfe_p_unidadetrib,; nfe_p_qtdtributa,; nfe_p_valortribut,; nfe_p_frete,; nfe_p_seguro,; nfe_p_desconto,; nfe_p_outro,; nfe_p_entratotal,; nfe_i_origem,; nfe_i_cst,; nfe_i_modbc,; nfe_i_valorbase,; nfe_i_aliquota,; nfe_i_valoricms,; nfe_i_reducaobase,; nfe_i_modbcst,; nfe_i_mvast,; nfe_i_redbcst,; nfe_i_valorbasest,; nfe_i_aliquotast,; nfe_i_valoricmsst,; nfe_i_motivodeson,; nfe_i_vbcstret,; nfe_i_vicmsstret,; nfe_i_csosn,; nfe_i_aliqcredit,; nfe_i_valorcredi,; nfe_cstipi,; nfe_valorbaseipi,; nfe_aliquotaipi,; nfe_valoripi,; nfe_cstpis,; nfe_valorbasepis,; nfe_aliquotapis,; nfe_valorpis,; nfe_valorbasepisst,; nfe_aliquotapisst,; nfe_valorpisst,; nfe_cstcof,; nfe_valorbasecof,; nfe_aliquotacof,; nfe_valorcof,; nfe_valorbasecofst,; nfe_aliquotacofst,; nfe_valorcofst}) nfe_p_codigo = space(60) // c¢digo do produto nfe_p_barras = space(14) // c¢digo EAN ( barras ) nfe_p_produto = space(120) // nome do produto nfe_p_ncm = space(08) // ncm nfe_p_extipi = space(03) // ex da tipi. nfe_p_cfop = space(04) // cfop nfe_p_unidade = space(06) // unidade comercial nfe_p_quantidade = space(15) // 15,4 quantidade nfe_p_valor = space(21) // 21,10 valor nfe_p_bruto = space(15) // 15,2 valor total do item nfe_p_ceantrib = space(14) // barras nfe_p_unidadetrib = space(06) // unidade tributavel nfe_p_qtdtributa = space(15) // 15,4 quantidade tribut vel do produto nfe_p_valortribut = space(21) // 21,10 valor tributavel nfe_p_frete = space(15) // 15,2 frete do item nfe_p_seguro = space(15) // 15,2 seguro do item nfe_p_desconto = space(15) // 15,2 desconto do item nfe_p_outro = space(15) // 15,2 outros do item nfe_p_entratotal = space(01) // 0-nÆo compäe total 1-compäe total nfe_i_origem = space(01) // 0-nacional 1-estrangeira 2-estrangeira adquirida no mercado interno nfe_i_cst = space(02) // cst nfe_i_modbc = space(01) // 0-margem valor agregado 1-pauta 2-pre‡o tabelado 3-valor da opera‡Æo nfe_i_valorbase = space(15) // 15,2 valor da base de c lculo nfe_i_aliquota = space(05) // 05,2 aliquota nfe_i_valoricms = space(15) // 15,2 valor do icms nfe_i_reducaobase = space(05) // 05,2 percentual de redu‡Æo da base de c lculo nfe_i_modbcst = space(01) // 0-tabelado 1-lista negativa 2-lista positiva 3-lista neutra 4-margem valor agregado 5-pauta nfe_i_mvast = space(05) // 05,2 percentual da margem de valor adicionado do icms st nfe_i_redbcst = space(05) // 05,2 percentual da redu‡Æo de bc do icms st nfe_i_valorbasest = space(15) // 15,2 valor da base de calculo st nfe_i_aliquotast = space(05) // 05,2 aliquota do icms st nfe_i_valoricmsst = space(15) // 15,2 valor do icms st nfe_i_motivodeson = space(01) // motivo da desonera‡Æo conforme manual 4.0.1 nfe_i_vbcstret = space(15) // 15,2 valor da base de calculo do icms retido nfe_i_vicmsstret = space(15) // 15,2 valor do icms st retido nfe_i_csosn = space(03) // tipo nfe_i_aliqcredit = space(05) // 05,2 Al¡quota aplicavel de c lculo do cr‚dito nfe_i_valorcredi = space(15) // 15,2 valor do cr‚dito de icms que pode ser aproveitado. nfe_cstipi = space(02) // c¢digo da situa‡Æo tribut ria do ipi nfe_valorbaseipi = space(15) // 15,2 valor da base de calculo do ipi nfe_aliquotaipi = space(05) // 05,2 al¡quota do ipi nfe_valoripi = space(15) // 15,2 valor do ipi nfe_cstpis = space(02) // c¢digo da situa‡Æo tribut ria do pis nfe_valorbasepis = space(15) // 15,02 valor da base de c lculo do pis nfe_aliquotapis = space(05) // 05,2 al¡quota do pis nfe_valorpis = space(15) // 15,02 valor do pis nfe_valorbasepisst= space(15) // 15,02 valor da base de c lculo do pis nfe_aliquotapisst = space(05) // 05,2 al¡quota do pis nfe_valorpisst = space(15) // 15,02 valor do pis nfe_cstcof = space(02) // c¢digo da situa‡Æo tribut ria do cofins nfe_valorbasecof = space(15) // 15,02 valor da base do cofine nfe_aliquotacof = space(05) // 05,2 al¡quota do cofins nfe_valorcof = space(15) // 15,2 valor do cofins nfe_valorbasecofst= space(15) // 15,02 valor da base do cofine nfe_aliquotacofst = space(05) // 05,2 al¡quota do cofins nfe_valorcofst = space(15) // 15,2 valor do cofins endif endif endif if nfe_cabecalho = "IDE" if !empty(cData) nfe_estado = iif(cName = "cUF" ,cData,retorna_volta(nfe_estado )) nfe_cdchvacesso = iif(cName = "cNF" ,cData,retorna_volta(nfe_cdchvacesso )) nfe_operacao = iif(cName = "natOp" ,cData,retorna_volta(nfe_operacao )) nfe_pagamento = iif(cName = "indPag" ,cData,retorna_volta(nfe_pagamento )) nfe_modelo = iif(cName = "mod" ,cData,retorna_volta(nfe_modelo )) nfe_serie = iif(cName = "serie" ,cData,retorna_volta(nfe_serie )) nfe_numero = iif(cName = "nNF" ,cData,retorna_volta(nfe_numero )) nfe_emissao = iif(cName = "dEmi" ,cData,retorna_volta(nfe_emissao )) nfe_saida = iif(cName = "dSaiEnt",cData,retorna_volta(nfe_saida )) nfe_hora = iif(cName = "hSaiEnt",cData,retorna_volta(nfe_hora )) nfe_tipo = iif(cName = "tpNF" ,cData,retorna_volta(nfe_tipo )) nfe_ibgeGerador = iif(cName = "cMunFG" ,cData,retorna_volta(nfe_ibgeGerador )) nfe_impressao = iif(cName = "tpImp" ,cData,retorna_volta(nfe_impressao )) nfe_tipoemissao = iif(cName = "tpEmis" ,cData,retorna_volta(nfe_tipoemissao )) nfe_digitochave = iif(cName = "cDV" ,cData,retorna_volta(nfe_digitochave )) nfe_tipoambiente = iif(cName = "tpAmb" ,cData,retorna_volta(nfe_tipoambiente )) nfe_finalidade = iif(cName = "finNFe" ,cData,retorna_volta(nfe_finalidade )) nfe_processo = iif(cName = "procEmi",cData,retorna_volta(nfe_processo )) nfe_versao = iif(cName = "verProc",cData,retorna_volta(nfe_versao )) nfe_dtcontigencia = iif(cName = "dhCont" ,cData,retorna_volta(nfe_dtcontigencia )) nfe_justificativa = iif(cName = "xJust" ,cData,retorna_volta(nfe_justificativa )) endif endif if nfe_cabecalho = "EMIT" if !empty(cData) nfe_e_cnpj = iif(cName = "CNPJ" ,cData,retorna_volta(nfe_e_cnpj )) nfe_e_cpf = iif(cName = "CPF" ,cData,retorna_volta(nfe_e_cpf )) nfe_e_razaonome = iif(cName = "xNome" ,cData,retorna_volta(nfe_e_razaonome )) nfe_e_fantasia = iif(cName = "xFant" ,cData,retorna_volta(nfe_e_fantasia )) nfe_e_logradouro = iif(cName = "xLgr" ,cData,retorna_volta(nfe_e_logradouro )) nfe_e_numero = iif(cName = "nro" ,cData,retorna_volta(nfe_e_numero )) nfe_e_complemento = iif(cName = "xCpl" ,cData,retorna_volta(nfe_e_complemento )) nfe_e_bairro = iif(cName = "xBairro",cData,retorna_volta(nfe_e_bairro )) nfe_e_ibgemunicipio = iif(cName = "cMun" ,cData,retorna_volta(nfe_e_ibgemunicipio )) nfe_e_municipio = iif(cName = "xMun" ,cData,retorna_volta(nfe_e_municipio )) nfe_e_estado = iif(cName = "UF" ,cData,retorna_volta(nfe_e_estado )) nfe_e_cep = iif(cName = "CEP" ,cData,retorna_volta(nfe_e_cep )) nfe_e_codigopais = iif(cName = "cPais" ,cData,retorna_volta(nfe_e_codigopais )) nfe_e_nomepais = iif(cName = "xPais" ,cData,retorna_volta(nfe_e_nomepais )) nfe_e_telefone = iif(cName = "fone" ,cData,retorna_volta(nfe_e_telefone )) nfe_e_inscricao = iif(cName = "IE" ,cData,retorna_volta(nfe_e_inscricao )) nfe_e_inscricaost = iif(cName = "IEST" ,cData,retorna_volta(nfe_e_inscricaost )) nfe_e_inscricaomun = iif(cName = "IM" ,cData,retorna_volta(nfe_e_inscricaomun )) nfe_e_cnae = iif(cName = "CNAE" ,cData,retorna_volta(nfe_e_cnae )) nfe_e_crt = iif(cName = "CRT" ,cData,retorna_volta(nfe_e_crt )) endif endif if nfe_cabecalho = "DEST" if !empty(cData) nfe_d_cnpj = iif(cName = "CNPJ" ,cData,retorna_volta(nfe_d_cnpj )) nfe_d_cpf = iif(cName = "CPF" ,cData,retorna_volta(nfe_d_cpf )) nfe_d_nome = iif(cName = "xNome" ,cData,retorna_volta(nfe_d_nome )) nfe_d_logradouro = iif(cName = "xLgr" ,cData,retorna_volta(nfe_d_logradouro )) nfe_d_numero = iif(cName = "nro" ,cData,retorna_volta(nfe_d_numero )) nfe_d_complemento = iif(cName = "xCpl" ,cData,retorna_volta(nfe_d_complemento )) nfe_d_bairro = iif(cName = "xBairro",cData,retorna_volta(nfe_d_bairro )) nfe_d_ibgemunicip = iif(cName = "cMun" ,cData,retorna_volta(nfe_d_ibgemunicip )) nfe_d_municipio = iif(cName = "xMun" ,cData,retorna_volta(nfe_d_municipio )) nfe_d_estado = iif(cName = "UF" ,cData,retorna_volta(nfe_d_estado )) nfe_d_cep = iif(cName = "CEP" ,cData,retorna_volta(nfe_d_cep )) nfe_d_cpais = iif(cName = "cPais" ,cData,retorna_volta(nfe_d_cpais )) nfe_d_pais = iif(cName = "xPais" ,cData,retorna_volta(nfe_d_pais )) nfe_d_telefone = iif(cName = "fone" ,cData,retorna_volta(nfe_d_telefone )) nfe_d_ie = iif(cName = "IE" ,cData,retorna_volta(nfe_d_ie )) nfe_d_isuf = iif(cName = "ISUF" ,cData,retorna_volta(nfe_d_isuf )) nfe_d_email = iif(cName = "email" ,cData,retorna_volta(nfe_d_email )) endif endif // dados de produtos,impostos,ipi,pis,cofins gravar em array........ if nfe_cabecalho = "PROD" if !empty(cData) nfe_p_codigo = iif(cName = "cProd" ,cData,retorna_volta(nfe_p_codigo )) nfe_p_barras = iif(cName = "cEAN" ,cData,retorna_volta(nfe_p_barras )) nfe_p_produto = iif(cName = "xProd" ,cData,retorna_volta(nfe_p_produto )) nfe_p_ncm = iif(cName = "NCM" ,cData,retorna_volta(nfe_p_ncm )) nfe_p_extipi = iif(cName = "EXTIPI" ,cData,retorna_volta(nfe_p_extipi )) nfe_p_cfop = iif(cName = "CFOP" ,cData,retorna_volta(nfe_p_cfop )) nfe_p_unidade = iif(cName = "uCom" ,cData,retorna_volta(nfe_p_unidade )) nfe_p_quantidade = iif(cName = "qCom" ,cData,retorna_volta(nfe_p_quantidade )) nfe_p_valor = iif(cName = "vUnCom" ,cData,retorna_volta(nfe_p_valor )) nfe_p_bruto = iif(cName = "vProd" ,cData,retorna_volta(nfe_p_bruto )) nfe_p_ceantrib = iif(cName = "cEANTrib" ,cData,retorna_volta(nfe_p_ceantrib )) nfe_p_unidadetrib = iif(cName = "uTrib" ,cData,retorna_volta(nfe_p_unidadetrib )) nfe_p_qtdtributa = iif(cName = "qTrib" ,cData,retorna_volta(nfe_p_qtdtributa )) nfe_p_valortribut = iif(cName = "vUnTrib" ,cData,retorna_volta(nfe_p_valortribut )) nfe_p_frete = iif(cName = "vFrete" ,cData,retorna_volta(nfe_p_frete )) nfe_p_seguro = iif(cName = "vSeg" ,cData,retorna_volta(nfe_p_seguro )) nfe_p_desconto = iif(cName = "vDesc" ,cData,retorna_volta(nfe_p_desconto )) nfe_p_outro = iif(cName = "vOutro" ,cData,retorna_volta(nfe_p_outro )) nfe_p_entratotal = iif(cName = "indTot" ,cData,retorna_volta(nfe_p_entratotal )) endif endif if nfe_cabecalho = "ICMS" if !empty(cData) nfe_i_origem = iif(cName = "orig" ,cData,retorna_volta(nfe_i_origem )) nfe_i_cst = iif(cName = "CST" ,cData,retorna_volta(nfe_i_cst )) nfe_i_modbc = iif(cName = "modBC" ,cData,retorna_volta(nfe_i_modbc )) nfe_i_valorbase = iif(cName = "vBC" ,cData,retorna_volta(nfe_i_valorbase )) nfe_i_aliquota = iif(cName = "pICMS" ,cData,retorna_volta(nfe_i_aliquota )) nfe_i_valoricms = iif(cName = "vICMS" ,cData,retorna_volta(nfe_i_valoricms )) nfe_i_reducaobase = iif(cName = "pRedBC" ,cData,retorna_volta(nfe_i_reducaobase )) nfe_i_modbcst = iif(cName = "modBCST" ,cData,retorna_volta(nfe_i_modbcst )) nfe_i_mvast = iif(cName = "pMVAST" ,cData,retorna_volta(nfe_i_mvast )) nfe_i_redbcst = iif(cName = "pRedBCST" ,cData,retorna_volta(nfe_i_redbcst )) nfe_i_valorbasest = iif(cName = "vBCST" ,cData,retorna_volta(nfe_i_valorbasest )) nfe_i_aliquotast = iif(cName = "pICMSST" ,cData,retorna_volta(nfe_i_aliquotast )) nfe_i_valoricmsst = iif(cName = "vICMSST" ,cData,retorna_volta(nfe_i_valoricmsst )) nfe_i_motivodeson = iif(cName = "motDesICMS" ,cData,retorna_volta(nfe_i_motivodeson )) nfe_i_vbcstret = iif(cName = "vBCSTRet" ,cData,retorna_volta(nfe_i_vbcstret )) nfe_i_vicmsstret = iif(cName = "vICMSSTRet" ,cData,retorna_volta(nfe_i_vicmsstret )) nfe_i_csosn = iif(cName = "CSOSN" ,cData,retorna_volta(nfe_i_csosn )) nfe_i_aliqcredit = iif(cName = "pCredSN" ,cData,retorna_volta(nfe_i_aliqcredit )) nfe_i_valorcredi = iif(cName = "vCredICMSSN",cData,retorna_volta(nfe_i_valorcredi )) endif endif if nfe_cabecalho = "IPITRIB" if !empty(cData) nfe_cstipi = iif(cName = "CST" ,cData,retorna_volta(nfe_cstipi )) nfe_valorbaseipi = iif(cName = "vBC" ,cData,retorna_volta(nfe_valorbaseipi )) nfe_aliquotaipi = iif(cName = "pIPI" ,cData,retorna_volta(nfe_aliquotaipi )) nfe_valoripi = iif(cName = "vIPI" ,cData,retorna_volta(nfe_valoripi )) endif endif if nfe_cabecalho = "PISALIQ" if !empty(cData) nfe_cstpis = iif(cName = "CST" ,cData,retorna_volta(nfe_cstpis )) nfe_valorbasepis = iif(cName = "vBC" ,cData,retorna_volta(nfe_valorbasepis )) nfe_aliquotapis = iif(cName = "pPIS" ,cData,retorna_volta(nfe_aliquotapis )) nfe_valorpis = iif(cName = "vPIS" ,cData,retorna_volta(nfe_valorpis )) endif endif if nfe_cabecalho = "PISST" if !empty(cData) nfe_valorbasepisst = iif(cName = "vBC" ,cData,retorna_volta(nfe_valorbasepis )) nfe_aliquotapisst = iif(cName = "pPIS" ,cData,retorna_volta(nfe_aliquotapis )) nfe_valorpisst = iif(cName = "vPIS" ,cData,retorna_volta(nfe_valorpis )) endif endif if nfe_cabecalho = "COFINSALIQ" if !empty(cData) nfe_cstcof = iif(cName = "CST" ,cData,retorna_volta(nfe_cstcof )) nfe_valorbasecof = iif(cName = "vBC" ,cData,retorna_volta(nfe_valorbasecof )) nfe_aliquotacof = iif(cName = "pCOFINS" ,cData,retorna_volta(nfe_aliquotacof )) nfe_valorcof = iif(cName = "vCOFINS" ,cData,retorna_volta(nfe_valorcof )) endif endif if nfe_cabecalho = "COFINSST" if !empty(cData) nfe_valorbasecofst= iif(cName = "vBC" ,cData,retorna_volta(nfe_valorbasecofst)) nfe_aliquotacofst = iif(cName = "pCOFINS" ,cData,retorna_volta(nfe_aliquotacofst )) nfe_valorcofst = iif(cName = "vCOFINS" ,cData,retorna_volta(nfe_valorcofst )) endif endif if nfe_cabecalho = "ICMSTOT" if !empty(cData) nfe_t_basecalculo = iif(cName = "vBC" ,cData,retorna_volta(nfe_t_basecalculo )) nfe_t_valoricms = iif(cName = "vICMS" ,cData,retorna_volta(nfe_t_valoricms )) nfe_t_basecalcst = iif(cName = "vBCST" ,cData,retorna_volta(nfe_t_basecalcst )) nfe_t_valoricmsst = iif(cName = "vST" ,cData,retorna_volta(nfe_t_valoricmsst )) nfe_t_produtos = iif(cName = "vProd" ,cData,retorna_volta(nfe_t_produtos )) nfe_t_frete = iif(cName = "vFrete" ,cData,retorna_volta(nfe_t_frete )) nfe_t_Seguro = iif(cName = "vSeg" ,cData,retorna_volta(nfe_t_Seguro )) nfe_t_desconto = iif(cName = "vDesc" ,cData,retorna_volta(nfe_t_desconto )) nfe_t_vII = iif(cName = "vII" ,cData,retorna_volta(nfe_t_vII )) nfe_t_ipi = iif(cName = "vIPI" ,cData,retorna_volta(nfe_t_ipi )) nfe_t_pis = iif(cName = "vPIS" ,cData,retorna_volta(nfe_t_pis )) nfe_t_cofins = iif(cName = "vCOFINS" ,cData,retorna_volta(nfe_t_cofins )) nfe_t_Outro = iif(cName = "vOutro" ,cData,retorna_volta(nfe_t_Outro )) nfe_t_valornota = iif(cName = "vNF" ,cData,retorna_volta(nfe_t_valornota )) endif endif if nfe_cabecalho = "TRANSP" if !empty(cData) nfe_r_moffrete = iif(cName = "modFrete" ,cData,retorna_volta(nfe_r_moffrete )) nfe_r_cnpj = iif(cName = "CNPJ" ,cData,retorna_volta(nfe_r_cnpj )) nfe_r_cpf = iif(cName = "CPF" ,cData,retorna_volta(nfe_r_cpf )) nfe_r_nometransp = iif(cName = "xNOME" ,cData,retorna_volta(nfe_r_nometransp )) nfe_r_ie = iif(cName = "IE" ,cData,retorna_volta(nfe_r_ie )) nfe_r_endereco = iif(cName = "xEnder" ,cData,retorna_volta(nfe_r_endereco )) nfe_r_municipio = iif(cName = "xMun" ,cData,retorna_volta(nfe_r_municipio )) nfe_r_estado = iif(cName = "UF" ,cData,retorna_volta(nfe_r_estado )) endif endif if nfe_cabecalho = "VEICTRANSP" if !empty(cData) nfe_r_placa = iif(cName = "placa" ,cData,retorna_volta(nfe_r_placa )) nfe_r_placauf = iif(cName = "UF" ,cData,retorna_volta(nfe_r_placauf )) nfe_r_rntc = iif(cName = "RNTC" ,cData,retorna_volta(nfe_r_rntc )) endif endif if nfe_cabecalho = "VOL" if !empty(cData) nfe_v_quantidade = iif(cName = "qVol" ,cData,retorna_volta(nfe_v_quantidade )) nfe_v_especie = iif(cName = "esp" ,cData,retorna_volta(nfe_v_especie )) nfe_v_marca = iif(cName = "marca" ,cData,retorna_volta(nfe_v_marca )) nfe_v_volume = iif(cName = "nVol" ,cData,retorna_volta(nfe_v_volume )) nfe_v_pesoliquido = iif(cName = "pesoL" ,cData,retorna_volta(nfe_v_pesoliquido )) nfe_v_pesobruto = iif(cName = "pesoB" ,cData,retorna_volta(nfe_v_pesobruto )) endif endif if nfe_cabecalho = "INFADIC" if !empty(cData) nfe_infadicionais = iif(cName = "infCpl" ,cData,retorna_volta(nfe_infadicionais )) endif endif if nfe_cabecalho = "INFPROT" if !empty(cData) nfe_chave = iif(cName = "chNFe" ,cData,retorna_volta(nfe_chave )) nfe_protocolo = iif(cName = "nProt" ,cData,retorna_volta(nfe_protocolo )) endif endif xmlNode := xmlIter:Next() enddo fclose(hFile) if !empty(nfe_p_codigo) aadd(nfe_verosproduto,{space(10),; space(100),; alltrim(nfe_p_codigo),; alltrim(nfe_p_produto),; alltrim(nfe_p_quantidade),; alltrim(nfe_p_valor),; alltrim(nfe_p_bruto)}) aadd(nfe_dadosproduto,{space(10),; space(20),; nfe_p_codigo,; nfe_p_barras,; nfe_p_produto,; nfe_p_ncm,; nfe_p_extipi,; nfe_p_cfop,; nfe_p_unidade,; nfe_p_quantidade,; nfe_p_valor,; nfe_p_bruto,; nfe_p_ceantrib,; nfe_p_unidadetrib,; nfe_p_qtdtributa,; nfe_p_valortribut,; nfe_p_frete,; nfe_p_seguro,; nfe_p_desconto,; nfe_p_outro,; nfe_p_entratotal,; nfe_i_origem,; nfe_i_cst,; nfe_i_modbc,; nfe_i_valorbase,; nfe_i_aliquota,; nfe_i_valoricms,; nfe_i_reducaobase,; nfe_i_modbcst,; nfe_i_mvast,; nfe_i_redbcst,; nfe_i_valorbasest,; nfe_i_aliquotast,; nfe_i_valoricmsst,; nfe_i_motivodeson,; nfe_i_vbcstret,; nfe_i_vicmsstret,; nfe_i_csosn,; nfe_i_aliqcredit,; nfe_i_valorcredi,; nfe_cstipi,; nfe_valorbaseipi,; nfe_aliquotaipi,; nfe_valoripi,; nfe_cstpis,; nfe_valorbasepis,; nfe_aliquotapis,; nfe_valorpis,; nfe_valorbasepisst,; nfe_aliquotapisst,; nfe_valorpisst,; nfe_cstcof,; nfe_valorbasecof,; nfe_aliquotacof,; nfe_valorcof,; nfe_valorbasecofst,; nfe_aliquotacofst,; nfe_valorcofst}) endif odlgwait:end() define dialog listbox_entrada_xml title "NF-e (Entrada - xml)" from 000,000 to 620,1020 pixel brush obrush transparent @ 0.1,0.3 to 1.5,72.7 label "" of listbox_entrada_xml color corfrtsay,corfdosay @ 1.7,0.3 to 19.9,72.7 label "" of listbox_entrada_xml color corfrtsay,corfdosay @ 20,0.3 to 22,72.7 label "" of listbox_entrada_xml color corfrtsay,corfdosay mlinha = alltrim(nfe_e_razaonome) + "-" +; iif(!empty(nfe_e_cnpj),alltrim(nfe_e_cnpj),alltrim(nfe_e_cpf))+; " | Modelo: "+ alltrim(nfe_modelo)+" | Serie: "+alltrim(nfe_serie)+" | Numero: "+; alltrim(nfe_numero)+" | Emissao: "+substr(nfe_emissao,9,2)+"-"+ substr(nfe_emissao,6,2)+"-"+substr(nfe_emissao,1,4)+; " | Chave: "+alltrim(nfe_chave) @ 009,005 say mlinha of listbox_entrada_xml font mtahoma color corfrtsay,corfdosay pixel @ 029.5,005 listbox onfe_verosproduto fields nfe_verosproduto[onfe_verosproduto:nat,1],nfe_verosproduto[onfe_verosproduto:nat,2],; nfe_verosproduto[onfe_verosproduto:nat,3],nfe_verosproduto[onfe_verosproduto:nat,4],nfe_verosproduto[onfe_verosproduto:nat,5],; nfe_verosproduto[onfe_verosproduto:nat,6],nfe_verosproduto[onfe_verosproduto:nat,7]; headers "Codigo","Tamanho/Cor","Código NF-e","Produto","Quantidade","Unitário","Total" FIELDSIZES 070,120,090,480,070,070,070; size 500,247; pixel of listbox_entrada_xml onfe_verosproduto:nClrPane := {|| iif((onfe_verosproduto:nat/2) = int(onfe_verosproduto:nat/2),corfdogetnotafiscal,corlstbxnormal) } onfe_verosproduto:aJustify := { .F.,.F., .F., .F., .T.,.T.,.T. } onfe_verosproduto:nLineStyle := 2 onfe_verosproduto:lCellStyle = .t. onfe_verosproduto:lAutoSkip = .t. onfe_verosproduto:SetArray(nfe_verosproduto) onfe_verosproduto:bGoTop = { || onfe_verosproduto:nat := 1 } onfe_verosproduto:bGoBottom = { || onfe_verosproduto:nat := Eval( onfe_verosproduto:bLogicLen ) } onfe_verosproduto:bSkip = { | nWant, nOld | nOld := onfe_verosproduto:nat, onfe_verosproduto:nat += nWant,; onfe_verosproduto:nat := Max( 1, Min( onfe_verosproduto:nat, Eval( onfe_verosproduto:bLogicLen ) ) ),; onfe_verosproduto:nat - nOld } onfe_verosproduto:bLogicLen = { || Len( nfe_verosproduto ) } onfe_verosproduto:cAlias = "Array" onfe_verosproduto:nColAct := 1 onfe_verosproduto:lMChange := .F. onfe_verosproduto:SetFocus() onfe_verosproduto:Refresh() @ 289,012 buttonbmp olisclibut00 bitmap "" left prompt "Processa" textright size 040,12 font obotaof of listbox_entrada_xml pixel action ( processa_xml_entrada(mLocaldoarquivoxml) ) @ 289,452 buttonbmp olisclibut10 bitmap "bmpsair" left prompt "Sair" textright size 040,12 font obotaof of listbox_entrada_xml pixel action ( listbox_entrada_xml:end() ) activate dialog listbox_entrada_xml center return nil function retorna_volta(objetnfe) return(objetnfe) function processa_xml_entrada(mLocaldoarquivoxml) cInfo:= "Dados da nota:" cInfo+=CRLF+ " " cInfo+=CRLF+ "Chave de acesso: " + nfe_cdchvacesso cInfo+=CRLF+ "Natureza da operacao: " + nfe_operacao cInfo+=CRLF+ "Modelo: " + nfe_modelo cInfo+=CRLF+ "Serie: " + nfe_serie cInfo+=CRLF+ "Numero: " + nfe_numero cInfo+=CRLF+ "Emissao: " + nfe_emissao cInfo+=CRLF+ " " cInfo+=CRLF+ "Dados do fornecedor: " cInfo+=CRLF+ " " cInfo+=CRLF+ iif(empty(nfe_e_cnpj),"CPF: ","CNPJ: ") + iif(empty(nfe_e_cnpj),nfe_e_cpf,nfe_e_cnpj) cInfo+=CRLF+ "Razao: " + nfe_e_razaonome cInfo+=CRLF+ "Fantasia: " + nfe_e_fantasia cInfo+=CRLF+ "Endereco: " + nfe_e_logradouro cInfo+=CRLF+ "Numero: " + nfe_e_numero cInfo+=CRLF+ "Complemento: " + nfe_e_complemento cInfo+=CRLF+ "Bairro: " + nfe_e_bairro cInfo+=CRLF+ "Cidade: " + nfe_e_municipio cInfo+=CRLF+ "Estado: " + nfe_e_estado cInfo+=CRLF+ " " cInfo+=CRLF+ "E ASSIM POR DIANTE............. " msginfo(cInfo) listbox_entrada_xml:end() odlgwait:end() return nil FUNCTION fWait( cMens ) CursorWait() define dialog oDlgWait title "" from 10,20 to 23,60 brush obrush STYLE nOr( WS_BORDER, WS_POPUP, WS_VISIBLE ) //transparent define font mtahoma_desc name "Tahoma" size 11.2,30.8 @ 35,010 say oMens var cMens of odlgWait font mtahoma_desc color corfrtsay,corfdosay pixel ACTIVATE DIALOG oDlgWait CENTERED NOWAIT CursorArrow() release font mtahoma_desc RETURN nil function IsInternet() local cip, cvret := .F. wsastartup() cip := gethostbyname("www.microsoft.com") wsacleanup() if cip = "0.0.0.0" return .f. else return .t. endif return .t.
×
×
  • Create New...