SAT-Fiscal a mistica está desvendada.

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,
desenvolvedores que não possuem um CNAE
Para estes casos, se o mesmo não é empresa resta tornar-se Micro Empreendedor Individual, leia, assista o vídeo e clique em Formalize-se.

Outro fator determinante e necessário é adquirir o e-CNPJ, Certisign.

Existirá um custo, mas valerá a pena.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Olá Rochinha,

Já sou MEI e quando me cadastrei não podia usar CNAE de empresa desenvolvedora de softwares ou ligada a isso, apenas manutenção de computadores e periféricos.

Tentei acessar o portal do MEI para obter meus CNAEs (principal e secundário) que nem lembro pois não uso o MEI para quase nada, só que está fora do ar.
Devido a atualização do sistema CNPJ, o acesso aos serviços relativos ao MEI estará indisponível de Sexta-Feira 16/01/2015 das 18:00hs até Segunda-Feira 19/01/2015 às 10:00hs.
Não basta apenas ser MEI e ter CNPJ, precisa ver se os CNAEs exigidos para o SAT estão na listagem oferecidas pelo MEI, voce sabe de dizer se já consta estes CNAEs?
6201-5/00 - Desenvolvimento de programas de computador sob encomenda;
ii. 6202-3/00 - Desenvolvimento e licenciamento de programas de computador customizáveis;
iii. 6203-1/00 - Desenvolvimento e licenciamento de programas de computador não – customizáveis;
iv. 6204-0/00 - Consultoria em tecnologia da informação;
v. 6209-1/00 - Suporte técnico, manutenção e outros serviços em tecnologia da informação
Esta informação consta no site do Projeto Acbr que estão implantando o SAT.
http://www.projetoacbr.com.br/forum/ind ... are-house/

Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,

ANDRIL, fiz acesso ao meu CCMEI para verificar quanto a alteração de CNAE relacionado ao ramo de software e não encontrei nada relativo.

Creio que estas relações ainda serão criadas para contemplar-nos.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

SAT-Fiscal a mistica está desvendada.

Mensagem por Jairo Maia »

Olá Andril,
ANDRIL escreveu:Não basta apenas ser MEI e ter CNPJ, precisa ver se os CNAEs exigidos para o SAT estão na listagem oferecidas pelo MEI, voce sabe de dizer se já consta estes CNAEs?
Você pode tentar acrescentar em seu contrato social a atividade para TÉCNICO(A) DE MANUTENÇÃO DE COMPUTADOR e tentar se registrar na JUCESP (necessário para se cadastrar como Software House) com o CNAE 6209-1/00. Mas não sei se a JUCESP vai aceitar isso. Precisa tentar. Se ainda não der certo, acho que melhor seria você alterar sua Razão Social para ME.

Fonte atividades de MEI: Atividades que podem ser enquadradas dentro do MEI (acesse a letra T)

Você já leu também este tópico no fórum do ACBr?: Optando Por Emissão De Nfc-E A Cf-E-Sat Em São Paulo
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por HASA »

:(
- Rochinha, como não temos saída em Sampa temos por bem ou mal fazer o SAT em nossos sistema estarei me baseando em sua excelente contribuição acima, pergunto: Por um acaso houve alguma atualização nos seus fontes de testes, pergunto porque o material é de Nov/2012 e não sei se alguma coisa mudou, eu mesmo não queria ir por SAT mas como não tenho querer vamos nessa, fazer o que ?

:*

HASA
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,

HASA

Não sei o que mexi neste código mas ele é de 05/04/2013.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// PDVSAT - Compativeis com SAT 4.00 usando emulador versao 2.5.20
//
//         Autor: Jose Carlos da Rocha
//          Data: 05/04/2013
//         Email: contato@5volution.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase
//       Prefixo: SAT_
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo )
//    Versao SAT: 4.00
//
/////////////////////////////////////////////////////////////////////////////

#include "Fivewin.ch"
#include "dll.ch"

function main( cCFe )
   DEFAULT cCFe  := "CFe35130411111111111111590010000009511000009519.XML"
   // CNPJ do contribuinte 11.111.111/1111-11
   cCNPJ         := "11111111111111"
   // CNPJ da Software House 22.222.222/2222-22
   cSHcnpj       := "22222222222222"
   // Codigo de Ativacao
   cSHAtivacao   := "123123"
   // Assinatura do AC concatenar CNPJ do contribuinte(11.111.111/1111-11) com CNPJ da Software House(22.222.222/2222-22)
   cSHsignAC     := SubStr( replicate( cCNPJ + cSHcnpj, 13 ), 1, 344 )
   
   PUBLIC hACBrDLL, numeroSessao := nRandNum := Random( 999999 )

   ? "SAT.dll carregada",;
   hACBrDLL := LoadLibrary( "C:\SAT\SAT.DLL" ) // cPath+"SAT.DLL" )
   
   ? "ConsultarSAT",;
   ConsultarSAT( Random( 999999 ) )[3]
   SysWait( 4 )
   
   ? "AtivarSAT",;
   AtivarSAT( Random( 999999 ), 1, cSHAtivacao, cCNPJ, 35 )[3]
   SysWait( 4 )
   
   //? "ConsultarNumeroSessao",ConsultarNumeroSessao( Random( 999999 ), cSHAtivacao, "" )[3]
   
   cCFeTeste := MemoRead( cCFe ) // MemoRead( cPath+"CFeTeste.xml" )
   SysWait( 4 )
   
   //? "TesteFimAFim",TesteFimAFim( Random( 999999 ), cSHAtivacao, cCFeTeste )[4]
   ? "EnviarDadosVenda",;
   EnviarDadosVenda( Random( 999999 ), cSHAtivacao, cCFeTeste )[4]
   SysWait( 4 )
   
   cCFeCanc := "<CFeCanc>" + ;
               "   <infCFe>" + ;
               "      <emit>" + ;
               "         <CNPJ>01234567891234</CNPJ>" + ;
               "         <IE>6546546546546655</IE>" + ;
               "         <IM>654654654654</IM>" + ;
               "      </emit>" + ;
               "      <dest>" + ;
               "         <CNPJ>01234567891234</CNPJ>" + ;
               "         <CPF>01234567891</CPF>" + ;
               "      </dest>" + ;
               "      <total>" + ;
               "         <vCFe>59.05<vCFe>" + ;
               "      </total>" + ;
               "   </infCFe>" + ;
               "</CFeCanc>"
               
   if MsgYesNo( "Cancelar ultima venda?", "Cancelamento" )

      ? "CancelarUltimaVenda",;
      CancelarUltimaVenda( Random( 999999 ), cSHAtivacao, StrTran( cFileName( cCFe ), ".XML", "" ), cCFeTeste )[4]
      SysWait( 4 )
      
   endif
   return nil

/////////////////////////////////////////////////////////////////////////////
Function ConsultarSAT( nSessionRandom )
   // Consulta entre AC e Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação   
   cString := SATConsultar( nSessionRandom )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function AtivarSAT( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   cString := SATAtivar( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function DesligarSAT()
   cString := SATDesligar()
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function ConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   // Consulta de número de sessão processada pelo Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // cNumeroDeSessao - Número de sessão a ser consultado no SAT-CF-e   
   cString := SATConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function TesteFimAFim( numeroSessao, codigoAtivacao, dados )
   // Teste fim-a-fim de comunicação de venda (envio de dados para venda de teste).
   cString := SATTesteFimAFim( numeroSessao, codigoAtivacao, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   // Geração do Cupom de Venda
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
   // dadosVenda - refere-se aos dados de venda gerados pelo AC e utilizados para compor o CF-e-SAT.
   cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})

Function CancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   // Cancelamento da última venda
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação e vendas
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
   // chave - Chave de acesso do CF-e-SAT a ser cancelado
   // dadosCancelamento - refere-se aos dados da venda gerados pelo AC e utilizados para compor o CF-e-SAT de cancelamento
   cString := SATCancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)=="A",aString,{"0","","","",""})
   
/* OK */ DLL32 FUNCTION SATConsultar( nSessionRandom AS _INT ) AS STRING FROM "ConsultarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATAtivar( numeroSessao AS _INT, subComando AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, cUF AS _INT ) ;
                        AS STRING FROM "AtivarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATDesligar() AS STRING FROM "DesligarSAT" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATConsultarNumeroSessao( getRandom AS _INT, codigoAtivacao AS STRING, numeroSessao AS STRING) ;
                        AS STRING FROM "ConsultarNumeroSessao" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATTesteFimAFim( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) ;
                        AS STRING FROM "TesteFimAFim" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATEnviarDadosVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) ;
                        AS STRING FROM "EnviarDadosVenda" LIB hACBrDLL
/* OK */ DLL32 FUNCTION SATCancelarUltimaVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, chaveAcesso AS STRING, dados AS STRING) ;
                        AS STRING FROM "CancelarUltimaVenda" LIB hACBrDLL

function fun(); return .t.
function thehelp(); return .t.
function tsysteminfo(); return .t.
function enumdisplaysettings(); return .t.
function changedisplaysettings(); return .t.

STATIC FUNCTION Random( nMaximo )
    static nRandom
    local nTemporal
    nMaximo = if( nMaximo == NIL, 65535, nMaximo )
    if nRandom == NIL
       nRandom = seconds()
    endif
    nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )
    nRandom = ( nTemporal + seconds() )
    RETURN int( nTemporal )

function StringToArray( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   RETURN ( aString ) 
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,

Abaixo voce pode analisar o meu módulo de manipulação SAT, em Fivewin, para ter idéias e subsídios:

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// PDVSAT - Compativeis com SAT 4.00
//
//         Autor: Jose Carlos da Rocha
//          Data: 14/11/2012
//         Email: contato@5volution.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase
//       Prefixo: SAT_
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo )
//    Versao SAT: 4.00
// Codigo de barras
// D:\develop\TRABALHO\PRG\HarbourBoleto\source\boleto
/////////////////////////////////////////////////////////////////////////////

#include "Fivewin.ch"
#include "edx.ch"
#include "dll.ch"

function SATTeste()
   LOCAL oNetInterface
   PUBLIC hACBrDLL, numeroSessao := nRandNum := Random( 999999 )
   cPath := cFilePath( GetModuleFileName( GetInstance() ) )
   ? "SAT.dll carregada",hACBrDLL := LoadLibrary( cPath+"SAT.DLL" )
   ? "ConsultarSAT",ConsultarSAT( Random( 999999 ) )[3]
   ? "AtivarSAT",AtivarSAT( Random( 999999 ), 1, "123456", "11111111111111", 35 )[3]
   //? "ConsultarNumeroSessao",ConsultarNumeroSessao( Random( 999999 ), "123456", "" )[3]
   cCFeTeste := MemoRead( cPath+"CFeTeste.xml" )
   //? "TesteFimAFim",TesteFimAFim( Random( 999999 ), "123456", cCFeTeste )[4]
   ? "EnviarDadosVenda",EnviarDadosVenda( Random( 999999 ), "123456", cCFeTeste )[4]
   cCFeCanc := "<CFeCanc>" + ;
               "   <infCFe>" + ;
               "      <emit>" + ;
               "         <CNPJ>01234567891234</CNPJ>" + ;
               "         <IE>6546546546546655</IE>" + ;
               "         <IM>654654654654</IM>" + ;
               "      </emit>" + ;
               "      <dest>" + ;
               "         <CNPJ>01234567891234</CNPJ>" + ;
               "         <CPF>01234567891</CPF>" + ;
               "      </dest>" + ;
               "      <total>" + ;
               "         <vCFe>59.05<vCFe>" + ;
               "      </total>" + ;
               "   </infCFe>" + ;
               "</CFeCanc>"
   if MsgYesNo( "Cancelar ultima venda?", "Cancelamento" ) = "S"
      ? CancelarUltimaVenda( Random( 999999 ), "123456", "CFe35121111111111111111590000000070000011047808", cCFeCanc )
   endif
   return nil
/////////////////////////////////////////////////////////////////////////////
Function CFeAtivar()
   PUBLIC hACBrDLL
   hACBrDLL := LoadLibrary( cPathDados+"SAT.DLL" )
   if hACBrDLL > 0
      cPathSAT   := VerifyINI( "PATHS", "PathSAT", cPath+"\SAT\remessa\SAT", cPathDados+"\nfw.ini", .f.)
      if ! MsgYesNo( "Continuar a salvar em "+alltrim(cPathSAT)+"?" )
         cPathSAT := cGetDir("Salvar SAT na pasta",cPathSAT)
         VerifyINI( "PATHS", "PathSAT", cPathSAT, cPathDados+"\nfw.ini", .t.)
      endif
      // PEGA DADOS DO EMITENTE - SOFWARE HOUSE
      ClCNPJ     := VerifyINI( "CLIENTE"      ,"CGC"     , ""                , cPath+"\nfw.ini" )
      cSHcnpj    := VerifyINI( "SOFTWAREHOUSE","CGC"     , cSHcnpj           , cPath+"\nfw.ini" )
      cSHAtivacao:= VerifyINI( "SOFTWAREHOUSE","Ativacao", cSHAtivacao       , cPath+"\nfw.ini" )
      cSHsignAC  := VerifyINI( "SOFTWAREHOUSE","signAC"  , cSHsignAC         , cPath+"\nfw.ini" )
      cRetorno   := AtivarSAT( Random( 999999 ), 1, cSHAtivacao, CharRem( ",./-", ClCNPJ ), 35 )[3]
      //? "AtivarSAT",cRetorno,CharRem( ",./-", ClCNPJ ),CharRem( ",./-", cSHcnpj )
      oWnd:SetMsg( "SAT-CFe "+cRetorno+"..." )
      SysWait( 4 )
   endif
   return nil

Function CFeGerar( _pedido_ )
   PUBLIC hSATDLL
   // CNPJ do contribuinte 11.111.111/1111-11
   ClCNPJ        := "11111111111111"
   // CNPJ da Software House 22.222.222/2222-22
   cSHcnpj       := "22222222222222"
   // Codigo de Ativacao
   cSHAtivacao   := "123123"
   // Assinatura do AC concatenar CNPJ do contribuinte(11.111.111/1111-11) com CNPJ da Software House(22.222.222/2222-22)
   cSHsignAC     := SubStr( replicate( ClCNPJ + cSHcnpj, 13 ), 1, 344 )
   
   // Puxa do INI de configuracao
   ClCNPJ        := VerifyINI( "CLIENTE"      ,"CGC"     , ClCNPJ     , cPath+"\nfw.ini" )
   cSHcnpj       := VerifyINI( "SOFTWAREHOUSE","CGC"     , cSHcnpj    , cPath+"\nfw.ini" )
   cSHAtivacao   := VerifyINI( "SOFTWAREHOUSE","Ativacao", cSHAtivacao, cPath+"\nfw.ini" )
   cSHsignAC     := VerifyINI( "SOFTWAREHOUSE","signAC"  , cSHsignAC  , cPath+"\nfw.ini" )

   if !file( cPathDados+"SAT.DLL" )
      MsgStop( "SAT.dll nao encontrada em "+cPathDados, "SAT-Fiscal" )
   else   
      FErase( "SAT.TXT" )
      cPathSAT   := VerifyINI( "PATHS", "PathSAT", cPath+"\SAT\remessa\SAT", cPathDados+"\nfw.ini", .f.)
      cXMLCFePath:= cPathSAT+"\CFe"+strZero(PN->IDPEDIDO,5)+".XML"
      cXMLFile   := GeraXMLCFe( ,,,cPathSAT )

      ClCNPJ        := CharRem( "./-", ClCNPJ )
      cSHcnpj       := CharRem( "./-", cSHcnpj )  
      
      oWnd:SetMsg( "SAT-CFe: carregando driver..." )
      hSATDLL := LoadLibrary( "C:\SAT\SAT.DLL" ) // cPath+"SAT.DLL" )
   
      oWnd:SetMsg( "SAT-CFe: Consultando status..." )
      cRespostaSAT := ConsultarSAT( Random( 999999 ) )[3]
      SysWait( 4 )

      //? "cRespostaSAT", cRespostaSAT, iif( "EM OPERA" $ upper(cRespostaSAT),"sim","nao"), upper(cRespostaSAT)
	  
      if "EM OPERA" $ upper(cRespostaSAT)
         oWnd:SetMsg( "SAT-CFe: Driver carregado, ativando..." )
         //?cSHAtivacao, ClCNPJ, CharRem( "./-", ClCNPJ ), cSHcnpj, CharRem( "./-", cSHcnpj ),;
         cRespostaSAT := AtivarSAT( Random( 999999 ), 1, cSHAtivacao, ClCNPJ, 35 )[3]
         SysWait( 4 )

         if "ATIVADO CORRETAMENTE" $ upper(cRespostaSAT) .or. "JA ATIVADO" $ upper(cRespostaSAT)
            oWnd:SetMsg( "SAT-CFe: Associando assinatura..." )
            cRespostaSAT := AssociarAssinaturaSAT( Random( 999999 ), cSHAtivacao, ClCNPJ + cSHcnpj, cSHsignAC )
            SysWait( 4 )
         endif   
      
         oWnd:SetMsg( "SAT-CFe: Lendo conteudo do cupom..." )   
         cCFeTeste := MemoRead( cXMLFile )
         SysWait( 4 )
   
         if !empty(cCFeTeste)
            oWnd:SetMsg( "SAT-CFe: Enviando dados de venda..." )
            cRespostaSAT := EnviarDadosVenda( Random( 999999 ), cSHAtivacao, cCFeTeste )[4]
            SysWait( 4 )
         else
            cRetorno := "SAT-CFe: Arquivo de dados nao foi criado."
            oWnd:SetMsg( "SAT-CFe: "+cRetorno+"..." )
            SysWait( 4 )
         endif

      else
   
         oWnd:SetMsg( "SAT-CFe: não foi ativado corretamente, tente outra vez..." )
         ? "SAT-CFe: não foi ativado corretamente, tente outra vez..."

      endif

   endif
   return nil
   
/////////////////////////////////////////////////////////////////////////////
Function ConsultarSAT( nSessionRandom )
   // Consulta entre AC e Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação   
   cString := SATConsultar( nSessionRandom )
   aString := StringToArray( cString, "|" )
   //? cString
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
   
Function ConsultarStatusOperacionalSAT( nSessionRandom, codigoDeAtivacao )
   // Consulta entre AC e Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação   
   cString := SATConsultarStatusOperacional( nSessionRandom, codigoDeAtivacao )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
   
Function AtivarSAT( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   cString := SATAtivar( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function AssociarAssinaturaSAT( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
   cString := SATAssociarAssinatura( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function DesligarSAT()
   cString := SATDesligar()
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function ConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   // Consulta de número de sessão processada pelo Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // cNumeroDeSessao - Número de sessão a ser consultado no SAT-CF-e   
   cString := SATConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function TesteFimAFim( numeroSessao, codigoAtivacao, dados )
   // Teste fim-a-fim de comunicação de venda (envio de dados para venda de teste).
   cString := SATTesteFimAFim( numeroSessao, codigoAtivacao, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   // Geração do Cupom de Venda
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
   // dadosVenda - refere-se aos dados de venda gerados pelo AC e utilizados para compor o CF-e-SAT.
   cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)

Function CancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   // Cancelamento da última venda
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação e vendas
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
   // chave - Chave de acesso do CF-e-SAT a ser cancelado
   // dadosCancelamento - refere-se aos dados da venda gerados pelo AC e utilizados para compor o CF-e-SAT de cancelamento
   cString := SATCancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
   aString := StringToArray( cString, "|" )
   return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
   
/* OK */ DLL32 FUNCTION SATConsultar( numeroSessao AS _INT ) AS STRING FROM "ConsultarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATAtivar( numeroSessao AS _INT, subComando AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, cUF AS _INT ) AS STRING FROM "AtivarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATAssociarAssinatura( numeroSessao AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, AssinaturaCNPJ AS STRING ) AS STRING FROM "AssociarAssinatura" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATDesligar() AS STRING FROM "DesligarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATConsultarNumeroSessao( getRandom AS _INT, codigoAtivacao AS STRING, numeroSessao AS STRING) AS STRING FROM "ConsultarNumeroSessao" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATTesteFimAFim( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING FROM "TesteFimAFim" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATEnviarDadosVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING FROM "EnviarDadosVenda" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATCancelarUltimaVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, chaveAcesso AS STRING, dados AS STRING) AS STRING FROM "CancelarUltimaVenda" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATConsultarStatusOperacional( numeroSessao AS _INT, codigoAtivacao AS STRING ) AS STRING FROM "ConsultarStatusOperacional" LIB hSATDLL

/////////////////////////////////////////////////////////////////////////////
function ComunicarCertificadoICPBRASIL()
   // 1 numeroSessao - Número aleatório gerado pelo AC
   // 2 codigoDeAtivacao - senha definida pelo contribuinte
   // 3 certificado 
   return SAT_MSGRetorno()
function SAT_ConsultarStatusOperacional 
   // Consulta de Status Operacional do Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.   
   return SAT_MSGRetorno()
function SAT_ConfigurarInterfaceDeRede 
   // Configuração da interface de comunicação do SAT.
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte
   // dadosConfiguracao - Arquivo de configuração no formato XML.
   return SAT_MSGRetorno()
function SAT_AssociarAssinatura 
   // Vinculação do AC
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // CNPJvalue - CNPJ da empresa desenvolvedora do Aplicativo Comercial + CNPJ do Emitente
   // assinaturaCNPJs - Assinatura digital conjunto “CNPJ Software House” + “CNPJ do estabelecimento comercial”.   
   return SAT_MSGRetorno()
function SAT_AtualizarSoftwareSAT 
   // Atualização do Software Básico
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.   
   return SAT_MSGRetorno()
function SAT_ExtrairLogs 
   // Extração de Logs
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.   
   return SAT_MSGRetorno()
function SAT_BloquearSAT 
   // Solicitação de bloqueio das funções fiscais do Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.   
   return SAT_MSGRetorno()
function SAT_DesbloquearSAT 
   // Solicitação de desbloqueio das funções fiscais do Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.   
   return SAT_MSGRetorno()
function SAT_TrocarCodigoDeAtivacao 
   // Alteração do Código de Ativação do Equipamento SAT
   // numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
   // codigoDeAtivacao - senha definida pelo contribuinte no software de ativação
   // opcao - Refere-se a opção do conteúdo do parâmetro “codigoDeAtivacao”, sendo:
   //     1 – Código de Ativação
   //     2 – Código de Ativação de Emergência
   // novoCodigo - Novo código de ativação escolhido pelo contribuinte
   // confNovoCodigo - Confirmação do novo código de ativação.   
   return SAT_MSGRetorno()
   
function StringToArray( cString, cSeparator ) 
   LOCAL nPos 
   LOCAL aString := {} 
   DEFAULT cSeparator := ";" 
   cString := ALLTRIM( cString ) + cSeparator 
   DO WHILE .T. 
      nPos := AT( cSeparator, cString ) 
      IF nPos = 0 
         EXIT 
      ENDIF 
      AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
      cString := SUBSTR( cString, nPos+1 ) 
   ENDDO 
   RETURN ( aString ) 

function SAT_Mensagens( _numErro_ )
   local aSATErros := {}
   //local _numErro_ := trataMensagem( cMSGErro )
   aadd( aSATErros, { 4000, "Ativado corretamente" } )
   aadd( aSATErros, { 4001, "Erro na criação do certificado" } )
   aadd( aSATErros, { 4002, "SAT não reconhecido pela SEFAZ (CNPJ invalido)" } )
   aadd( aSATErros, { 4003, "SAT já ativado" } )
   aadd( aSATErros, { 4004, "SAT com uso cessado" } )
   aadd( aSATErros, { 4005, "Erro de comunicação com a SEFAZ" } )
   aadd( aSATErros, { 4098, "SAT em processamento. tente novamente" } )
   aadd( aSATErros, { 4099, "Erro desconhecido na ativacao" } )
   aadd( aSATErros, { 5000, "Nota emitida com sucesso" } )
   aadd( aSATErros, { 5001, "Código de ativação inválido" } )
   aadd( aSATErros, { 5002, "SAT ainda não ativado" } )
   aadd( aSATErros, { 5999, "Erro desconhecido na emissão" } )
   aadd( aSATErros, { 7000, "Cupom cancelado com sucesso" } )
   aadd( aSATErros, { 7001, "Código de ativação inválido" } )
   aadd( aSATErros, { 7002, "Cupom inválido" } )
   aadd( aSATErros, { 7999, "Erro desconhecido no cancelamento" } )
   aadd( aSATErros, { 6000, "Cupom de teste emitido com sucesso" } )
   aadd( aSATErros, { 6001, "Códiogo de ativação invalido" } )
   aadd( aSATErros, { 6002, "SAT ainda não ativado" } )
   aadd( aSATErros, { 6999, "Erro desconhecido na emissão de cupom teste" } )
   aadd( aSATErros, { 1001, "Número de registro E14 diferente de 1" } )
   aadd( aSATErros, { 1002, "Formato do registro E14 incorreto" } )
   aadd( aSATErros, { 1003, "Versão do leiaute E14 inválida" } )
   aadd( aSATErros, { 1004, "Versão do leiaute E14 antiga" } )
   aadd( aSATErros, { 1005, "CNPJ do estabelecimento inválido" } )
   aadd( aSATErros, { 1006, "CNPJ ou CPF do consumidor inválido" } )
   aadd( aSATErros, { 1007, "Formato do subtotal incorreto" } )
   aadd( aSATErros, { 1008, "Formato do desconto sobre o subtotal incorreto" } )
   aadd( aSATErros, { 1009, "Formato do desconto em % sobre o subtotal incorreto" } )
   aadd( aSATErros, { 1010, "Formato do acréscimo sobre o subtotal incorreto." } )
   aadd( aSATErros, { 1011, "Formato do acréscimo em % sobre o subtotal incorreto" } )
   aadd( aSATErros, { 1012, "Formato do valor total liquido incorreto" } )
   aadd( aSATErros, { 1013, "CNPJ da nota não confere com cnpj utilizado na ativação" } )
   aadd( aSATErros, { 2001, "Arquivo não possui registros E15" } )
   aadd( aSATErros, { 2002, "Formato do registro E15 incorreto" } )
   aadd( aSATErros, { 2003, "Formato do numero do item incorreto" } )
   aadd( aSATErros, { 2004, "Formato do código do produto incorreto" } )
   aadd( aSATErros, { 2005, "Formato da descrição do produto incorreto" } )
   aadd( aSATErros, { 2006, "Formato da quantidade incorreto" } )
   aadd( aSATErros, { 2007, "Formato do valor unitário incorreto" } )
   aadd( aSATErros, { 2008, "Formato sobre o desconto sobre o item incorreto" } )
   aadd( aSATErros, { 2009, "Formato sobre o acréscimo sobre o item" } )
   aadd( aSATErros, { 2010, "Formato do valor total liquido incorreto" } )
   aadd( aSATErros, { 2011, "Formato do totalizador parcial incorreto" } )
   aadd( aSATErros, { 2012, "Formato indicador de arredondamento incorreto" } )
   aadd( aSATErros, { 3001, "Quantidade de registros ROD diferente de 1" } )
   aadd( aSATErros, { 3002, "Numero de registros ROD diferente de 1" } )
   aadd( aSATErros, { 3003, "Quantidade de registros E15 incorreta" } )
   aadd( aSATErros, { 9999, "Registro desconhecido" } )
   for i = 1 to len( aSATErros )
       if aSATErros[i][1] = _numErro_
          return aSATErros[i][2]
       endif
   next
   return ""

function SAT_ValidaMensagens( _numErro_ )
   local aSATErros := {}
   aadd( aSATErros, { 1001, "sem conexao com a Internet ou sitio da SEFAZ fora do Ar." } ) // 1001>
   aadd( aSATErros, { 1002, "Codigo da UF nao confere com a Tabela do IBGE" } ) // 1002>
   aadd( aSATErros, { 1003, "Codigo da UF diferente da UF registrada no SAT" } ) // 1003>
   aadd( aSATErros, { 1004, "Rejeicao: Versao do leiaute do arquivo de entrada do SAT nao e valida" } ) // 1004>
   aadd( aSATErros, { 1005, "Alerta: Versao do leiaute do arquivo de entrada do SAT nao e a mais atual" } ) // 1005>
   aadd( aSATErros, { 1226, "Rejeicao: Codigo da UF do Emitente diverge da UF receptora." } ) // 1226>
   aadd( aSATErros, { 1450, "Rejeicao: Codigo de modelo de documento fiscal diferente de 59" } ) // 1450>
   aadd( aSATErros, { 1258, "Rejeicao: Data/hora invalida. Problemas com o relogio interno do SAT-CF-e" } ) // 1258>
   aadd( aSATErros, { 1224, "Rejeicao: CNPJ da Software House invalido" } ) // 1224>
   aadd( aSATErros, { 1222, "Rejeicao: Assinatura do Aplicativo Comercial nao e valida" } ) // 1222>
   aadd( aSATErros, { 1207, "Rejeicao: CNPJ do emitente invalido" } ) // 1207>
   aadd( aSATErros, { 1203, "Rejeicao: Emitente nao  autorizado para uso do SAT." } ) // 1203>
   aadd( aSATErros, { 1229, "Rejeicao: IE do emitente nao informada" } ) // 1229>
   aadd( aSATErros, { 1209, "Rejeicao: IE do emitente invalida" } ) // 1209>
   aadd( aSATErros, { 1230, "Rejeicao: IE do emitente diferente da IE do contribuinte autorizado para uso do SAT" } ) // 1230>
   aadd( aSATErros, { 1456, "Rejeicao: Codigo de Regime Tributario invalido" } ) // 1456>
   aadd( aSATErros, { 1457, "Rejeicao: Codigo de Natureza da Operacao para ISSQN invalido" } ) // 1457>
   aadd( aSATErros, { 1507, "Rejeicao: Indicador de rateio para ISSQN invalido" } ) // 1507>
   aadd( aSATErros, { 1235, "Rejeicao: CNPJ do destinatario invalido" } ) // 1235>
   aadd( aSATErros, { 1237, "Rejeicao: CPF do destinatario invalido" } ) // 1237>
   aadd( aSATErros, { 1234, "Alerta: Razao Social/Nome  do destinatario em branco" } ) // 1234>
   aadd( aSATErros, { 1019, "Rejeicao: numeracao dos itens nao e sequencial crescente" } ) // 1019>
   aadd( aSATErros, { 1459, "Rejeicao: Codigo do produto ou servico em branco" } ) // 1459>
   aadd( aSATErros, { 1460, "Rejeicao: GTIN do item (N) invalido" } ) // 1460>
   aadd( aSATErros, { 1461, "Rejeicao: Descricao do produto ou servico em branco" } ) // 1461>
   aadd( aSATErros, { 1462, "Rejeicao: CFOP nao e de Operacao de saida prevista para CF-e-SAT" } ) // 1462>
   aadd( aSATErros, { 1463, "Rejeicao: Unidade Comercia do produto ou servico em branco" } ) // 1463>
   aadd( aSATErros, { 1464, "Rejeicao: Quantidade Comercial do item (N) invalido." } ) // 1464>
   aadd( aSATErros, { 1465, "Rejeicao: Valor Unitario do item (N) invalido." } ) // 1465>
   aadd( aSATErros, { 1467, "Rejeicao: Regra de calculo do Item (N) invalido (diferente de (A) e (T))" } ) // 1467>
   aadd( aSATErros, { 1468, "Rejeicao: Valor do Desconto do item (N) invalido." } ) // 1468>
   aadd( aSATErros, { 1469, "Rejeicao: Valor de outras despesas acessorias do item (N) invalido." } ) // 1469>
   aadd( aSATErros, { 1220, "Rejeicao: Valor do rateio do desconto sobre subtotal do item (N) invalido." } ) // 1220>
   aadd( aSATErros, { 1228, "Rejeicao: Valor do rateio do acrescimo sobre subtotal do item (N) invalido." } ) // 1228>
   aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
   aadd( aSATErros, { 1472, "Rejeicao:CST do Item (N) invalido (diferente de 00, 20, 90)" } ) // 1472>
   aadd( aSATErros, { 1473, "Rejeicao: Aliquota efetiva do ICMS do item (N) nao e maior ou igual a zero." } ) // 1473>
   aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
   aadd( aSATErros, { 1475, "Rejeicao:CST do Item (N) invalido   (diferente de 40 e 41 e 50 e 60)" } ) // 1475>
   aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
   aadd( aSATErros, { 1476, "Rejeicao:Codigo de situacao da operacao - Simples Nacional - do Item (N) invalido (diferente de 102, 300 e 500)" } ) // 1476>
   aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
   aadd( aSATErros, { 1477, "Rejeicao:Codigo de situacao da operacao - Simples Nacional - do Item (N) invalido (diferente de 900)" } ) // 1477>
   aadd( aSATErros, { 1473, "Rejeicao: Aliquota efetiva do ICMS do item (N) nao e maior ou igual a zero." } ) // 1473>
   aadd( aSATErros, { 1478, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 01 e 02)" } ) // 1478>
   aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido" } ) // 1479>
   aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) nao e maior ou igual a zero." } ) // 1480>
   aadd( aSATErros, { 1482, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 03)" } ) // 1482>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
   aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) nao e maior ou igual a zero." } ) // 1484>
   aadd( aSATErros, { 1486, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de  04, 06, 07, 08 e 09)" } ) // 1486>
   aadd( aSATErros, { 1487, "Rejeicao: Codigo de Situacao Tributaria do PIS invalido (diferente de  49)" } ) // 1487>
   aadd( aSATErros, { 1488, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de  99)" } ) // 1488>
   aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido." } ) // 1479>
   aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) invalido." } ) // 1480>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) invalido." } ) // 1483>
   aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) invalido." } ) // 1484>
   aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido." } ) // 1479>
   aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) invalida." } ) // 1480>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) invalida" } ) // 1483>
   aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) invalida" } ) // 1484>
   aadd( aSATErros, { 1490, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de  01 e 02)" } ) // 1490>
   aadd( aSATErros, { 1491, "Rejeicao: Base de calculo do COFINS  do item (N) invalido." } ) // 1491>
   aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
   aadd( aSATErros, { 1494, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de  03)" } ) // 1494>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
   aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero." } ) // 1496>
   aadd( aSATErros, { 1498, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de  04, 06, 07, 08 e 09)" } ) // 1498>
   aadd( aSATErros, { 1499, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de  49)" } ) // 1499>
   aadd( aSATErros, { 1500, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de  99)" } ) // 1500>
   aadd( aSATErros, { 1491, "Rejeicao: Base de calculo da COFINS  do item (N) invalido." } ) // 1491>
   aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
   aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero." } ) // 1496>
   aadd( aSATErros, { 1491, "Rejeicao: Base de calculo da COFINS do item (N) invalido" } ) // 1491>
   aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
   aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
   aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero" } ) // 1496>
   aadd( aSATErros, { 1501, "Rejeicao: Operacao com tributacao de ISSQN sem informar a Inscricao Municipal" } ) // 1501>
   aadd( aSATErros, { 1503, "Rejeicao: Valor das deducoes para o ISSQN do item (N) nao e maior ou igual a zero." } ) // 1503>
   aadd( aSATErros, { 1505, "Rejeicao: Aliquota efetiva do ISSQN do item (N) nao e maior ou igual a  2,00 (2%) e menor ou igual a 5,00 (5%)." } ) // 1505>
   aadd( aSATErros, { 1287, "Rejeicao: Codigo Municipio do FG - ISSQN: digito invalido. Exceto os codigos descritos no Anexo 2 que apresentam digito invalido." } ) // 1287>
   aadd( aSATErros, { 1508, "Rejeicao: Item da lista de Servicos do ISSQN do item (N) nao e maior ou igual a zero." } ) // 1508>
   aadd( aSATErros, { 1509, "Rejeicao:Codigo municipal de Tributacao do ISSQN do Item (N) em branco." } ) // 1509>
   aadd( aSATErros, { 1510, "Rejeicao: Codigo de Natureza da Operacao para ISSQN invalido" } ) // 1510>
   aadd( aSATErros, { 1511, "Rejeicao: Indicador de Incentivo Fiscal do ISSQN do item (N) invalido (diferente de 1 e 2)" } ) // 1511>
   aadd( aSATErros, { 1527, "Rejeicao: Codigo do Meio de Pagamento invalido" } ) // 1527>
   aadd( aSATErros, { 1528, "Rejeicao: Valor do Meio de Pagamento invalido." } ) // 1528>
   aadd( aSATErros, { 1408, "Rejeicao: Valor total do CF-e-SAT maior que o somatorio dos valores de Meio de Pagamento empregados em seu pagamento." } ) // 1408>
   aadd( aSATErros, { 1409, "Rejeicao: Valor total do CF-e-SAT supera o maximo permitido no arquivo de Parametrizacao de Uso" } ) // 1409>
   aadd( aSATErros, { 1073, "Rejeicao: Valor de Desconto sobre total nao e maior ou igual a zero." } ) // 1073>
   aadd( aSATErros, { 1074, "Rejeicao: Valor de Acrescimo sobre total nao e maior ou igual a zero." } ) // 1074>
   aadd( aSATErros, { 1218, "Chave de acesso do CF-e-SAT ja consta como cancelado" } ) // 1218>
   aadd( aSATErros, { 1221, "Aplicativo Comercial nao vinculado ao SAT" } ) // 1221>
   aadd( aSATErros, { 1083, "Sem conexao com a Rede Local" } ) // 1083>
   aadd( aSATErros, { 1084, "Formatacao do Certificado nao e valido." } ) // 1084>
   aadd( aSATErros, { 1085, "Assinatura do Aplicativo Comercial nao confere com o registro do SAT" } ) // 1085>
   aadd( aSATErros, { 1999, "Rejeicao: Erro nao identificado" } ) // 1999>
   for i = 1 to len( aSATErros )
       if aSATErros[i][1] = _numErro_
          return aSATErros[i][2]
       endif
   next
   return ""
   
function IsInternet( cDominio )
   local cIp
   default cDominio := "www.google.com"
   WsaStartUp()
   cIp := GETHOSTBYNAME( cDominio ) // se supone que siempre esta activo
   WsaCleanUp()
   IsConectado := cIp
   RETURN iif( cIp <> "0.0.0.0", .t., .f. )

function SAT_MSGRetorno()
   return ""

/*
 * XML de Nota Fiscal padrao
 */
Function GeraXMLCFe2(cNFeChave)
      cXMLFile := "CFeTeste.xml"
      EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
      //
      EDX OPEN MARK "CFe" ;
          ATTRIB "xmlns" VALUE "http://www.fazenda.sp.gov.br/sat" OF oEDX
          EDX OPEN MARK "infCFe" ;
                  ATTRIB "Id"             VALUE "&(cNFeChave)" ;
                  ATTRIB "versao"         VALUE "0.02" ;
                  ATTRIB "versaoDadosEnt" VALUE "1.00" ;
                  ATTRIB "versaoSB"       VALUE "000003" OF oEDX
              EDX OPEN MARK "ide" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "cUF"               TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cNF"               TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "mod"               TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "nserieSAT"         TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "nCFe"              TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "dEmi"              TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "hEmi"              TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cDV"               TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "tpAmb"             TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "CNPJ"              TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "signAC"            TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "assinaturaQRCODE"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "emit" OF oEDX
                  EDX OPEN MARK "CNPJ"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xNome"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xFant"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "enderEmit" OF oEDX
                      EDX OPEN MARK "xLgr"          TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "nro"           TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "xCpl"          TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "xBairro"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "xMun"          TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "CEP"           TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX CLOSE MARK OF oEDX
                  EDX OPEN MARK "IE"            TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "IM"            TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "CRT"           TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cRegTribISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "indRatISSQN"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "dest" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "CNPJ"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "CPF"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xNome"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "det" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "nItem"         TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "prod" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "cProd"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "cEAN"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "xProd"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "NCM"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "CFOP"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "uCom"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "qCom"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vUnCom"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vProd"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "indRegra"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vDesc"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vOutro"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vItem"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vRatDesc"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vRatAcr"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "obsFiscoDet" TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "xCampoDet"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "xTextoDet"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX CLOSE MARK OF oEDX
                  EDX CLOSE MARK OF oEDX
                  EDX OPEN MARK "imposto" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "ICMS" TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "ICMS00" TYPE "" TAG "" OF oEDX
                              // CST 00, 20, 90
                              EDX OPEN MARK "Orig"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "pICMS"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vICMS"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "ICMS40" TYPE "" TAG "" OF oEDX
                              // CST 40, 41, 50, 60
                              EDX OPEN MARK "Orig"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1 * //
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 41 * //
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "ICMSSN102" TYPE "" TAG "" OF oEDX
                              // CSOSN 102, 300, 500
                              EDX OPEN MARK "Orig"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "CSOSN"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "ICMSSN900" TYPE "" TAG "" OF oEDX
                              // CSOSN 900
                              EDX OPEN MARK "Orig"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "CSOSN"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "pICMS"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vICMS"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                      EDX CLOSE MARK OF oEDX
                      EDX OPEN MARK "PIS" TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "PISAliq" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 01 * //
                              EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                              EDX OPEN MARK "pPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.0000 * //
                              EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "PISQtde" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "PISNT"   TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "PISSN"   TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "PISOutr" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "pPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                      EDX CLOSE MARK OF oEDX
                      EDX OPEN MARK "PISST"   TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                          EDX OPEN MARK "pPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                      EDX CLOSE MARK OF oEDX
                      EDX OPEN MARK "COFINS" TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "COFINSAliq" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "pCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "COFINSQtde" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "COFINSNT"   TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "COFINSSN"   TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                          EDX OPEN MARK "COFINSOutr" TYPE "" TAG "" OF oEDX
                              EDX OPEN MARK "CST"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "pCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                              EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX CLOSE MARK OF oEDX
                      EDX CLOSE MARK OF oEDX
                      EDX OPEN MARK "COFINSST"   TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                          EDX OPEN MARK "pCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "qBCProd"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
                          EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
                      EDX CLOSE MARK OF oEDX
                      EDX OPEN MARK "ISSQN" TYPE "" TAG "" OF oEDX
                          EDX OPEN MARK "vDeducISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "vBC"          TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "vAliq"        TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "vISSQN"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "cMunFG"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "cListServ"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "cServTribMun" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "cNatOp"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                          EDX OPEN MARK "indincFisc"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX CLOSE MARK OF oEDX
                  EDX CLOSE MARK OF oEDX
                  EDX OPEN MARK "infAdProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "MP" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "cMP"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1 * //
                  EDX OPEN MARK "vMP"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * mesmo que vItem * //
                  EDX OPEN MARK "cAdmC"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "total" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "ICMSTot" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "vICMS"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vProd"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vDesc"     TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vPISST"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vCOFINSST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vOutro"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                      EDX OPEN MARK "vCFe"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
                  EDX CLOSE MARK OF oEDX
                  EDX OPEN MARK "ISSQNtot" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "vBC"       TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vISS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vPIS"      TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vCOFINS"   TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vPISST"    TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vCOFINSST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX CLOSE MARK OF oEDX
                  EDX OPEN MARK "DescAcrEntr" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "vDescSubtot"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "vAcresSubtot" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX CLOSE MARK OF oEDX
              EDX CLOSE MARK OF oEDX
              EDX OPEN MARK "infAdic" TYPE "" TAG "" OF oEDX
                  EDX OPEN MARK "infCpl"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "obsFisco" TYPE "" TAG "" OF oEDX
                      EDX OPEN MARK "xCampo"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                      EDX OPEN MARK "xTexto"  TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
                  EDX CLOSE MARK OF oEDX
              EDX CLOSE MARK OF oEDX
          EDX CLOSE MARK OF oEDX
      EDX CLOSE MARK OF oEDX
      //
      EDX END oEDX
   return .t.
O código acima está com data de 08/01/2014, mas tenho certeza de não ter mexido nele para testes nesta data, pois desde 2013 não mexi com nenhuma versão do emulador porque nem conseguia configurar direito.

Mas é um começo, ou fim...
[/code]
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por HASA »

:))
Rocha Bom Dia, com certeza é um começo sim, vou "brincar" com esse material, na medida do possível vamos atualizando ele, só que não uso FiveWin, aparentemente está em Harbour puro, tem algo da biblioteca Fivewin ?
:{
HASA
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinho,
tem algo da biblioteca Fivewin ?
Só o que é relativo a interface com o usuário, como mensagems, telas, browses, etc.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por HASA »

:))
- Mãos a obra, aproveitando li todas as mensagens deste post novamente para rememorar e creio que temos alguns colegas de 2012/2013 que já possam dar uma mãozinha também para nós, vamos aguardar...
:xau :{
HASA
eduardomc00
Usuário Nível 1
Usuário Nível 1
Mensagens: 43
Registrado em: 07 Out 2014 18:29
Localização: São Paulo

SAT-Fiscal a mistica está desvendada.

Mensagem por eduardomc00 »

Galera, boa tarde....

Alguém consegue utilizar a DLL em (x)harbour puro?
a função DLLCALL() só devolve valor inteiro...
alguém pode me ajudar?!
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por HASA »

:))
Ola Eduardo, veja esse link https://br.groups.yahoo.com/neo/groups/ ... pics/36288

:xau
HASA
eduardomc00
Usuário Nível 1
Usuário Nível 1
Mensagens: 43
Registrado em: 07 Out 2014 18:29
Localização: São Paulo

SAT-Fiscal a mistica está desvendada.

Mensagem por eduardomc00 »

Não consigo acessar!!
eduardomc00
Usuário Nível 1
Usuário Nível 1
Mensagens: 43
Registrado em: 07 Out 2014 18:29
Localização: São Paulo

SAT-Fiscal a mistica está desvendada.

Mensagem por eduardomc00 »

tenho que criar e-mail no yahoo.. e esperar eles me aprovarem! #-)
eduardomc00
Usuário Nível 1
Usuário Nível 1
Mensagens: 43
Registrado em: 07 Out 2014 18:29
Localização: São Paulo

SAT-Fiscal a mistica está desvendada.

Mensagem por eduardomc00 »

Eles não me aceitam! =/
Responder