Caro Marcelo, usando as rotinas do Rochinha, consegui fazer funcionar perfeitamente em harbour com Minigui Extended e o sat da sweda. Só não consegui fazer o cancelamento, não por problema no comando, mas por erro na montagem do xml de cancelamento que ainda não descobri o porque e como sempre estamos sem tempo para voltar e retomar. Segue abaixo trecho do que fiz e está funcionando, utilizando algumas rotinas em c.
Código: Selecionar todos
/*****************************************************************************
* SISTEMA : ROTINA EVENTUAL *
* PROGRAMA : SAT-SWEDA.PRG *
* OBJETIVO : Cupom Fiscal Eletrônico - SWEDA *
* AUTOR : Marcelo Antonio Lázzaro Carli *
* DATA : 29.05.2015 *
* ULT. ALT.: 18.08.2015 *
*****************************************************************************/
#include <minigui.ch>
#include <miniprint.ch>
Procedure Main()
Private nCfe:= Random(999999), cXml:= [teste]
REQUEST HB_LANG_PT
HB_LangSelect([PT])
REQUEST HB_CODEPAGE_PT850 &&& PARA INDEXAR CAMPOS ACENTUADOS
HB_SETCODEPAGE([PT850]) &&& PARA INDEXAR CAMPOS ACENTUADOS
Set wrap on
Set talk off
Set date briti &&& data no formato dd/mm/aaaa
Set dele on &&& ignora registros marcados por deleção
Set score off
Set exact on
Set ToolTip on
Setcancel(.F.) &&& evitar cancelar sistema c/ ALT + C
Set cent on &&& ano com 4 dígitos
Set epoch to 2000 &&& ano a partir de 2000
Set excl off &&& abre arquivos em modo compartilhado
Set navigation extended &&& enter no lugar do tab
Set language to portuguese &&& mensagens em português
Set multiple off warning &&& abrir 1 cópia somente
Set browsesync on &&& para o comando browse funcionar ok
Set tooltipstyle balloon &&& para mensagem dos campos em forma de balão
Set menustyle extended &&& padrão é standard, extended estilo office 2007
Set programmaticchange off &&& introduzida na build 1.9.94
define window main at 0, 0 width 500 height 300 ICON "demo.ico" NOTIFYICON "demo.ico" MAIN title [Cupom Fiscal Eletrônico - Sweda] NOSIZE NOMAXIMIZE on init {|| fIniciar(cXml)}
@ 10, 090 LABEL Lbl_Ativacao Value [Código de Ativação:] WIDTH 150 HEIGHT 20
@ 10, 220 TEXTBOX Txt_Ativacao Value [] MAXLENGTH 32 WIDTH 250 HEIGHT 20 TOOLTIP "Código de Ativação"
define button btn_EnviarVenda
row 50
col 90
width 120
caption [&Venda]
action {|| fEnviarVenda()}
DEFAULT .t.
end button
on key escape action {|| thiswindow.release}
end window
main.center()
main.activate()
Return (Nil)
Procedure fIniciar(cXml)
If !File([SAT.DLL])
MsgStop([SAT.dll não encontrada na pasta atual.], [Erro])
Quit
Else
Ferase(cXml + [.xml])
If [EM OPERA] $ upper(ConsultarSAT()[3])
fGerarCfe(cXml)
Else
MsgInfo([SAT-CFe: não foi ativado corretamente, tente outra vez...], [Erro])
Quit
Endif
Endif
Return (Nil)
Procedure fGerarCfe(cXml)
Local i:= 1
*** Cria o xml
cXml:= fCria_Xml(cXml)
*** Identificação da Software House
fCriaIdentificacao(cXml, [10.xxx.xxx/0001-xx], [yU9BZ/jxcp1daI15deXESFrPECQVNsIdroKZbg9zNkS28svLZUPAtzJ/6F9sLp9NnRRH2VLeitsN8Vw==], 1)
*** Identificação do Emitente
fCriaEmitente(cXml, [07.xxx.xxx/0001-xx], [117.xxx.xxx.xxx], [123123], [])
*** Identificação do Destinatário - obrigatório
fCriaDestinatario(cXml, [], [])
*** ou
* fCriaDestinatario(cXml, [xxx.xxx.xxx-xx], [Marcelo Antonio Lazzaro Carli])
*** Local de Entrega do Destinatário
* fCriaEntrega(cXml, [Rua xxxxxxx], [268], [Complemento A], [Jssssss], [São Paulo], [SP])
*** Identificação dos Produtos
For i:= 1 to 1 //5
fCriaProduto(cXml, i, strzero(i, 5), [], [Lapis de cor], [85447030], [5102], [un], [1.0000], [0.900], [A], [0.00], [], [], [0], [20], [7.00], [], [])
Next
fNode_Xml(cXml, [total/], 10) // fecha a tag ESSA SO FECHA UNICA
*** Identificação dos Pagamentos
fCriaPagamento(cXml, [01], [0.90], [])
*** Fechamento do Cfe
fCriaFechamento(cXml, [Obrigado e Volte Sempre;Malc Sistemas Agradece.])
Return (Nil)
Procedure fEnviarVenda()
Local aRetorno:= {}, iRetorno:= 0
Private cSecao:= cStatus:= cXML64:= cChave:= cCfeCanc:= cDataHora:= cQrcode:= []
If len(alltrim(GetProperty([main], [Txt_Ativacao], [Value]))) < 8 .or. len(alltrim(GetProperty([main], [Txt_Ativacao], [Value]))) > 32
MsgInfo([Código de Ativação de ser entre 8 e 32], [Erro])
Return (Nil)
Endif
aRetorno:= EnviarDadosVenda(nCfe, alltrim(GetProperty([main], [Txt_Ativacao], [Value])), memoread([teste.xml]))
cStatus := aRetorno[4]
If [SUCESSO] $ UPPER(cStatus)
cSecao := aRetorno[1]
cChave := aRetorno[9]
cXML64 := HB_BASE64Decode(aRetorno[7])
cDatahora:= substr(aRetorno[7], 7, 2) + [/] + substr(aRetorno[7], 5, 2) + [/] + substr(aRetorno[7], 1, 4) + [ - ] + substr(aRetorno[7], 9, 2) + [:] + substr(aRetorno[7], 11, 2) + [:] + substr(aRetorno[7], 13, 2)
cQrcode := aRetorno[12]
Memowrit(cChave + [.xml], cXML64)
If MsgYesNo([Cancelar a Última Venda?], [Cancelamento]) == .T.
cCfeCanc:= '<?xml version="1.0" encoding="UTF-8"?>'
cCfeCanc+= '<CFeCanc> <infCFe chCanc=CFe"' + cChave + '">'
cCfeCanc+= '<ide><CNPJ>11111111111111</CNPJ>' /// da softhouse
cCfeCanc+= '<signAC>CQVNsIdroKZbg9zNkS28svLZUPAtzJ/6F9sLp9NnRRH2VLeitsN8Vw==]</signAC>'
cCfeCanc+= '<numeroCaixa>001</numeroCaixa>'
cCfeCanc+= '</ide><emit></emit><dest></dest><total></total><infAdic></infAdic></infCFe></CFeCanc>'
*</ide><emit /><dest><CNPJ></CNPJ></dest><total /><infAdic /></infCFe></CFeCanc>
aRetorno:= CancelarUltimaVenda(Random(999999), alltrim(GetProperty([main], [Txt_Ativacao], [Value])), [CFe] + cChave, cCfeCanc)
If [SUCESSO] $ UPPER(aRetorno[4])
MsgInfo([Cancelamento executado com sucesso.])
Else
MsgStop([Erro no Cancelamento.] + aRetorno[1] + CRLF + aRetorno[2] + aRetorno[3] + CRLF + aRetorno[4], [Erro])
Endif
Endif
Else
MsgInfo(cStatus, [Erro])
Endif
Return (Nil)
Function fCria_Xml(cXml)
Local nHandle:= 0
If !Empty(cXml)
If (nHandle:= Fcreate(alltrim(cXml) + [.xml], 0)) == -1
Return (Nil)
Endif
Fwrite(nHandle, [<?xml version="1.0" encoding="utf-8" ?>] + CRLF)
Fwrite(nHandle, [<CFe>] + CRLF)
Fwrite(nHandle, [ <infCFe versaoDadosEnt="0.06">] + CRLF)
Endif
Return (nHandle)
Procedure fNode_Xml(cXml, cNomeTag, nEspaco, lFecha)
Local cRetorno:= []
Default lFecha to .F.
Default nEspaco to 5
If Empty(cXml)
Return (Nil)
Endif
If !Empty(cNomeTag) .and. !lFecha
cRetorno:= spac(nEspaco) + [<] + cNomeTag + [>]
Else
cRetorno:= spac(nEspaco) + [</] + cNomeTag + [>]
Endif
If !Empty(cRetorno )
Fwrite(cXml, cRetorno + CRLF)
Endif
Return (Nil)
Procedure fTag_Xml(cXml, cNomeTag, cValor, nEspaco, lFecha)
Local cRetorno:= []
Default lFecha to .T.
Default nEspaco to 5
Default cValor to []
If Empty(cXml)
Return (Nil)
Endif
cValor:= Rtrim(cValor)
If !Empty(cValor) .or. lFecha
cRetorno:= (spac(nEspaco) + [<] + cNomeTag + [>] + cValor + [</] + cNomeTag + [>])
Endif
If Empty(cValor)
cRetorno:= (spac(nEspaco) + [<] + cNomeTag + [ />] )
Endif
If !Empty(cRetorno )
Fwrite(cXml, cRetorno + CRLF)
Endif
Return (Nil)
Procedure fCriaIdentificacao(cXml, cCnpj, cAssinatura, nCaixa)
Default cCnpj to [10.229.311./0001-80]
Default cAssinatura to []
Default nCaixa to 1
If Empty(cXml)
Return (Nil)
Endif
fNode_Xml(cXml, [ide], 10) // abre a tag
fTag_Xml(cXml, [CNPJ], CHARREM("/;-:,\.(){}[] ", cCNPJ), 15)
fTag_Xml(cXml, [signAC], cAssinatura, 15)
fTag_Xml(cXml, [numeroCaixa], strzero(nCaixa, 3), 15)
fNode_Xml(cXml, [ide], 10, .T.) // fecha a tag
Return (Nil)
Procedure fCriaEmitente(cXml, cCnpj, cIe, cIm, nTribIssqn, cRatIssqn)
Default cIm to [] // Este campo deve ser informado, quando ocorrer a emissão de CF-e conjugada, com prestação de serviços sujeitos ao ISSQN e fornecimento de peças sujeitos ao ICMS
Default nTribIssqn to 2 // 1-Microempresa Municipal, 2-Estimativa, 3-Sociedade de Profissionais, 4-Cooperativa, 5-Microempresário Individual (MEI)
Default cRatIssqn to [N]
If Empty(cXml)
Return (Nil)
Endif
fNode_Xml(cXml, [emit], 10) // abre a tag
fTag_Xml(cXml, [CNPJ], CHARREM("/;-:,\.(){}[] ", cCNPJ), 15)
fTag_Xml(cXml, [IE], CHARREM("/;-:,\.(){}[] ", cIe), 15)
If !Empty(cIm) // emissão de CF-e conjugada c/ prestação de serviços ao ISSQN e fornecimento de peças sujeitos ao ICMS.
fTag_Xml(cXml, [IM], CHARREM("/;-:,\.(){}[] ", cIM), 15)
Endif
If !Empty(nTribIssqn)
fTag_Xml(cXml, [cRegTribISSQN], strzero(nTribIssqn, 1), 15)
Endif
fTag_Xml(cXml, [indRatISSQN], cRatIssqn, 15)
fNode_Xml(cXml, [emit], 10, .T.) // fecha a tag
Return (Nil)
Procedure fCriaDestinatario(cXml, cCnpjCpf, cNome)
Default cCnpjCpf to []
Default cNome to []
If Empty(cXml)
Return (Nil)
Endif
If !Empty(cCnpjCpf) .and. !Empty(cNome)
fNode_Xml(cXml, [dest], 10) // abre a tag
If len(cCnpjCpf) == 14
If !Empty(cCnpjCpf)
fTag_Xml(cXml, [CNPJ], CHARREM("/;-:,\.(){}[] ", cCnpjCpf), 15)
Endif
Else
If !Empty(cCnpjCpf)
fTag_Xml(cXml, [CPF], CHARREM("/;-:,\.(){}[] ", cCnpjCpf), 15)
Endif
Endif
If !Empty(cNome)
fTag_Xml(cXml, [xNome], alltrim(cNome), 15)
Endif
fNode_Xml(cXml, [dest], 10, .T.) // fecha a tag
Else
fNode_Xml(cXml, [dest/], 10, .F.) // fecha a tag
Endif
Return (Nil)
Procedure fCriaEntrega(cXml, xLgr, nro, xCpl, xBairro, xMun, cUF) // Informar apenas no caso de entrega da mercadoria em domicílio.
Default xCpl to []
If Empty(cXml)
Return (Nil)
Endif
fNode_Xml(cXml, [entrega], 10) // abre a tag
If !Empty(xLgr)
fTag_Xml(cXml, [xLgr], alltrim(xLgr), 15)
Endif
If !Empty(nro)
fTag_Xml(cXml, [nro], alltrim(nro), 15)
Endif
If !Empty(xCpl)
fTag_Xml(cXml, [xCpl], alltrim(xCpl), 15)
Endif
If !Empty(xBairro)
fTag_Xml(cXml, [xBairro], alltrim(xBairro), 15)
Endif
If !Empty(xMun)
fTag_Xml(cXml, [xMun], alltrim(xMun), 15)
Endif
If !Empty(cUF)
fTag_Xml(cXml, [UF], cUF, 15)
Endif
fNode_Xml(cXml, [entrega], 10, .T.) // fecha a tag
Return (Nil)
Procedure fCriaProduto(cXml, nItem, cProd, cEAN, xProd, NCM, CFOP, uCom, qCom, vUnCom, indRegra, vDesc, vOutro, vItem12741, Orig, CST, pICMS, xCampoDet, xTextoDet)
Default nItem to 1
Default cEAN to []
Default cFop to [5102]
Default uCom to [UN]
Default indRegra to [A]
Default vDesc to [0]
Default vOutro to [0]
Default vItem12741 to [0]
Default Orig to [0] // 0 - Nacional, exceto as indicadas nos códigos 3, 4, 5 e 8;1 - Estrangeira
Default Cst to [00] // 00 – Tributada integralmente; 20 – com redução de base de cálculo 90 – Outros
Default pICMS to [0]
Default xCampoDet to []
Default xTextoDet to []
If Empty(cXml)
Return (Nil)
Endif
qCom:= fDefNumero(qCom, 12, 4)
If indRegra == [A] // Valor deve ser arredondado com exceção de operação com combustíveis quando deve ser truncado(Portaria 30/94 do DNC)
vUnCom:= fDefNumero(vUnCom, 12, 2)
Else
vUnCom:= fDefNumero(vUnCom, 11, 3) // Deve ser informado com 3 decimais no caso de combustíveis (Portaria DNC 30/94), para os demais com 2 decimais.
Endif
pICMS:= fDefNumero(pICMS, 12, 2)
fNode_Xml(cXml, [det nItem="] + alltrim(str(nItem, 3)) + ["], 10) // máximo de 500 ítens por cfe
fNode_Xml(cXml, [prod], 15)
fTag_Xml(cXml, [cProd], alltrim(cProd), 20)
If !Empty(cEAN)
fTag_Xml(cXml, [cEAN], alltrim(cEAN), 20) // Tag Obrigatória para Validador do Governo, mesmo vazia
Endif
fTag_Xml(cXml, [xProd], alltrim(fParseXml(xProd)), 20)
If !Empty(Ncm)
fTag_Xml(cXml, [NCM], alltrim(Ncm), 20)
Endif
If !Empty(cFop)
fTag_Xml(cXml, [CFOP], alltrim(cFop), 20)
Endif
fTag_Xml(cXml, [uCom], alltrim(fParseXml(Ucom)), 20)
fTag_Xml(cXml, [qCom], qCom, 20)
fTag_Xml(cXml, [vUnCom], vUnCom, 20)
fTag_Xml(cXml, [indRegra], indRegra, 20)
If val(vDesc) > 0
vDesc := fDefNumero(vDesc, 12, 2)
fTag_Xml(cXml, [vDesc], vDesc, 20)
Endif
If val(vOutro) > 0
vOutro := fDefNumero(vOutro, 12, 2)
fTag_Xml(cXml, [vOutro], vOutro, 20)
Endif
If !Empty(vItem12741) // obrigatório, caso o contribuinte não opte por informar o valor em painel afixado no estabelecimento
vItem12741:= fDefNumero(vItem12741, 12, 2)
fTag_Xml(cXml, [vItem12741], vItem12741, 20)
Endif
fNode_Xml(cXml, [prod], 15, .T.) // fecha a tag
If !Empty(xCampoDet)
fNode_Xml(cXml, [obsFiscoDet], 15)
If !Empty(xCampoDet)
fTag_Xml(cXml, [xCampoDet], xCampoDet, 20)
Endif
If !Empty(xTextoDet)
fTag_Xml(cXml, [xTextoDet], xTextoDet, 20)
Endif
fNode_Xml(cXml, [obsFiscoDet], 15, .T.)
Endif
fNode_Xml(cXml, [imposto], 15)
fNode_Xml(cXml, [ICMS], 20)
fNode_Xml(cXml, [ICMS00], 25)
fTag_Xml(cXml, [Orig], Orig, 30)
fTag_Xml(cXml, [CST], CST, 30)
fTag_Xml(cXml, [pICMS], pICMS, 30)
fNode_Xml(cXml, [ICMS00], 25, .T.) // fecha a tag
fNode_Xml(cXml, [ICMS], 20, .T.) // fecha a tag
fNode_Xml(cXml, [PIS], 20)
fNode_Xml(cXml, [PISNT], 25)
fTag_Xml(cXml, [CST], [08], 30)
fNode_Xml(cXml, [PISNT], 25, .T.) // fecha a tag
* fNode_Xml(cXml, [PISAliq], 25)
* fTag_Xml(cXml, [CST], [02], 30)
* fTag_Xml(cXml, [vBC], [000000000001.00], 30)
* fTag_Xml(cXml, [pPIS], [0.0500], 30)
* fNode_Xml(cXml, [PISAliq], 25, .T.) // fecha a tag
fNode_Xml(cXml, [PIS], 20, .T.) // fecha a tag
fNode_Xml(cXml, [COFINS], 20)
fNode_Xml(cXml, [COFINSNT], 25)
fTag_Xml(cXml, [CST], [08], 30)
fNode_Xml(cXml, [COFINSNT], 25, .T.) // fecha a tag
* fNode_Xml(cXml, [COFINSOutr], 25)
* fTag_Xml(cXml, [CST], [99], 30)
* fTag_Xml(cXml, [vBC], [1.00], 30)
* fTag_Xml(cXml, [pCOFINS], [5.0000], 30)
* fNode_Xml(cXml, [COFINSOutr], 25, .T.) // fecha a tag
fNode_Xml(cXml, [COFINS], 20, .T.) // fecha a tag
fNode_Xml(cXml, [imposto], 15, .T.) // fecha a tag
fNode_Xml(cXml, [det], 10, .T.) // fecha a tag
Return (Nil)
Procedure fCriaPagamento(cXml, cMP, vMP, cAdmC)
Default cMP to [01]
Default cAdmC to [012] // Cielo 999 outros
If Empty(cXml)
Return (Nil)
Endif
/* cMp - Meios de Pagamento
01 - Dinheiro
02 - Cheque
03 - Cartão de Crédito
04 - Cartão de Débito
05 - Crédito Loja
10 - Vale Alimentação
11 - Vale Refeição
12 - Vale Presente
13 - Vale Combustível
99 - Outros
*/
/* cAdmC - Código da Credenciadora de cartão de débito ou crédito
Código da Credenciadora de cartão de débito ou crédito
conforme tabela disponível no Anexo 2 – Tabelas de códigos de UF e
Município. Exemplos: 001, 002, 003.
*/
If !Empty(cMP)
fNode_Xml(cXml, [pgto], 10) // abre a tag
fNode_Xml(cXml, [MP], 15) // abre a tag
fTag_Xml(cXml, [cMP], cMP, 20)
fTag_Xml(cXml, [vMP], vMP, 20)
If !Empty(cAdmC)
fTag_Xml(cXml, [cAdmC], cAdmC, 20)
Endif
fNode_Xml(cXml, [MP], 15, .T.) // fecha a tag
fNode_Xml(cXml, [pgto], 10, .T.) // fecha a tag
Endif
Return (Nil)
Procedure fCriaFechamento(cXml, infCpl)
Default infCpl to [Obrigado e Volte Sempre.; Agradecemos a Preferência.]
If Empty(cXml)
Return (Nil)
Endif
fNode_Xml(cXml, [infAdic], 10) // abre a tag
fTag_Xml(cXml, [infCpl], infCpl, 15)
fNode_Xml(cXml, [infAdic], 10, .T.) // fecha a tag
Fwrite(cXml, [ </infCFe>] + CRLF)
Fwrite(cXml, [</CFe>])
Fclose(cXml)
Return (Nil)
Static Function fDefNumero(xVar, nLen, nDecimal)
Local xRet
DEFAULT nDecimal TO 2
If Valtype(xVar) == [N]
xRet:= ltrim(str(xVar, nLen, nDecimal))
ElseIf Valtype(xVar) == [C]
xRet:= CHARREM(", ", xVar)
Endif
If Empty(xRet)
xRet:= ltrim(str(0, nLen, nDecimal))
Endif
Return (xRet)
Static Function fParseXml(cTxt)
Local i, aCmd:= {{">", "<"}, {"<", "&qt;"}, {"&", "&"}, {'"' , """}, {"'", "'"}}
For i:= 1 to len(aCmd)
If at(aCmd[i, 1], cTxt) > 0
cTxt:= strtran(cTxt, aCmd[i, 1], aCmd[i, 2])
Endif
Next
Return (cTxt)
***********************************************************************************
* Chamadas para DLL Funções de manipulação do cupom fiscal eletrônico Sweda
***********************************************************************************
Function EnviarDadosVenda(nNumeroSessao, cCodigoAtivacao, cDados)
Local cString:= SATENVIARDADOSVENDA(nNumeroSessao, cCodigoAtivacao, cDados), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function ConsultarSAT()
Local cString:= SATCONSULTAR(Random(999999)), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function ConsultarStatusOperacionalSAT(nNumeroSessao, cCodigoAtivacao)
Local cString:= SATCONSULTARSTATUSOPERACIONAL(nNumeroSessao, cCodigoAtivacao), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function AtivarSAT(nNumeroSessao, subComando, cCodigoAtivacao, CNPJ, cUF)
Local cString:= SATATIVAR(nNumeroSessao, subComando, cCodigoAtivacao, CNPJ, cUF), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function AssociarAssinaturaSAT(nNumeroSessao, cCodigoAtivacao, CNPJ, CNPJSH )
Local cString:= SATASSOCIARASSINATURA(nNumeroSessao, cCodigoAtivacao, CNPJ, CNPJSH), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function ConsultarNumeroSessao(nNumeroSessao, cCodigoAtivacao, nNumeroSessao2)
Local cString:= SATCONSULTARNUMEROSESSAO(nNumeroSessao, cCodigoAtivacao,nNumeroSessao2), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function TesteFimAFim(nNumeroSessao, cCodigoAtivacao, cDados)
Local cString := SATTESTEFIMAFIM(nNumeroSessao, cCodigoAtivacao, cDados), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function CancelarUltimaVenda(nNumeroSessao, cCodigoAtivacao, chaveAcesso, cDados)
Local cString:= SATCANCELARULTIMAVENDA(nNumeroSessao, cCodigoAtivacao, chaveAcesso, cDados), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
Function ExtrairLogsSAT(nNumeroSessao, cCodigoAtivacao)
Local cString:= SATEXTRAIRLOGS(nNumeroSessao, cCodigoAtivacao), aString:= HB_ATOKENS(cString, [|])
Return (Iif(Valtype(aString) # [A] .or. len(aString) < 1, {[0], [], [SAT-CFe: Sem Retorno], [], []}, aString))
#pragma BEGINDUMP
#include "hbapi.h"
#include "windows.h"
typedef LPSTR (WINAPI *_CONSULTARSAT) ( INT nRandom );
typedef LPSTR (WINAPI *_ATIVARSAT) ( INT nRandom, INT nSubComando , LPSTR cCodAtivacao, LPSTR cCNPJ, INT nUF );
typedef LPSTR (WINAPI *_ASSOCIARASSINATURASAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cCNPJ, LPSTR cAssCNPJ );
typedef LPSTR (WINAPI *_CONSULTARSECAOSAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cNumSecao );
typedef LPSTR (WINAPI *_TESTEFIMAFIMSAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cDadosVenda);
typedef LPSTR (WINAPI *_ENVIARVENDASAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cDadosVenda);
typedef LPSTR (WINAPI *_CANULTIMAVENDASAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cChave, LPSTR cDadosVenda);
typedef LPSTR (WINAPI *_CONSULTARSTATUSSAT) ( INT nRandom, LPSTR cCodAtivacao);
typedef LPSTR (WINAPI *_ATUALIZARSOFTWARE) ( INT nRandom, LPSTR cCodAtivacao);
typedef LPSTR (WINAPI *_EXTRAIRLOGS) ( INT nRandom, LPSTR cCodAtivacao);
HB_FUNC( SATCONSULTAR )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATATIVAR )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_ATIVARSAT pFunc;
pFunc = (_ATIVARSAT) GetProcAddress(handle, "AtivarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2), hb_parc(3), hb_parc(4), hb_parni(5)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATASSOCIARASSINATURA )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_ASSOCIARASSINATURASAT pFunc;
pFunc = (_ASSOCIARASSINATURASAT) GetProcAddress(handle, "AssociarAssinatura");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3), hb_parc(4)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATCONSULTARNUMEROSESSAO )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CONSULTARSECAOSAT pFunc;
pFunc = (_CONSULTARSECAOSAT) GetProcAddress(handle, "ConsultarNumeroSessao");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATTESTEFIMAFIM )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_TESTEFIMAFIMSAT pFunc;
pFunc = (_TESTEFIMAFIMSAT) GetProcAddress(handle, "TesteFimAFim");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATENVIARDADOSVENDA )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_ENVIARVENDASAT pFunc;
pFunc = (_ENVIARVENDASAT) GetProcAddress(handle, "EnviarDadosVenda");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATCANCELARULTIMAVENDA )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CANULTIMAVENDASAT pFunc;
pFunc = (_CANULTIMAVENDASAT) GetProcAddress(handle, "CancelarUltimaVenda");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3), hb_parc(4)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATCONSULTARSTATUSOPERACIONAL )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CONSULTARSTATUSSAT pFunc;
pFunc = (_CONSULTARSTATUSSAT) GetProcAddress(handle, "ConsultarStatusOperacional");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATATUALIZARSOFTWARE )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_ATUALIZARSOFTWARE pFunc;
pFunc = (_ATUALIZARSOFTWARE) GetProcAddress(handle, "AtualizarSoftwareSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
FreeLibrary( handle );
}
}
HB_FUNC( SATEXTRAIRLOGS )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_EXTRAIRLOGS pFunc;
pFunc = (_EXTRAIRLOGS) GetProcAddress(handle, "ExtrairLogs");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
FreeLibrary( handle );
}
}
#pragma ENDDUMP
Marcelo A. L. Carli
Se for repassar, apague o meu nome e endereço.