SAT-Fiscal Extrato

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
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal Extrato

Mensagem por HASA »

:-O

- Boa tarde, a todos, como os colegas estão imprimindo ?, fiz um teste via AcbrMonitorPlus, para um cliente que tenha um caixa beleza, e se tiver mais de 1, pensei em instalar o acbrMonitorPlus para cada caixa, gostaria mesmo é de enviar via sistema, mas... a parte do qrcode + código de barras em saída tipo D.O.S para pode comandar o corte de papel, abertura de gaveta, etc...
:-o
HASA
Avatar do usuário
anfm
Colaborador
Colaborador
Mensagens: 65
Registrado em: 01 Mar 2010 22:16
Localização: Tatuí-SP
Contato:

SAT-Fiscal EXTRATO

Mensagem por anfm »

André Ferreira de Moraes
Conheça o Projeto ACBr - Automaçao Comercial Brasil
http://acbr.sourceforge.net
--------------------------------------------------------------------------------------
Fórum Oficial do Projeto ACBr
http://www.djsystem.com.br/acbr/forum
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal EXTRATO

Mensagem por HASA »

:))
-Valeu André, vou guardar essa na manga, é que não queria abrir o sistema o monitor e usar mais um executável externo, mas... como disse se não conseguir de outro jeito o jeito é sigar a sua dica.
:{ :)Pos :-Y

HASA
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal EXTRATO - Resolvido

Mensagem por HASA »

:))
Com prazer disponibilizo aos colegas o fonte SIMPLES é verdade de um extrato S@T - CFe, completão com código de barras e QRCode, na nossa linguem, está prontinho para a EPSON TM-T20 caso algum colega consiga implementar as demais marcas por favor disponibilizar para comunidade.
:)Pos


HASA
Anexos
teste.png
teste.prg
(5.38 KiB) Baixado 300 vezes
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

SAT-Fiscal EXTRATO

Mensagem por malcarli »

Seguindo o exemplo disponibilizado pelo HASA, estou tentando implementar a impressão sem uso de dll. Usando minigui extended 2.3.5 e harbour. Para compilar o exemplo abaixo utilize assim:

Código: Selecionar todos

c:\minigui\Batch\Compile.Bat sat-imprimir  /L hbwin
Abaixo está a rotina modificada, que ainda estou testando, mas não estou conseguindo implementar a leitura de mais de um item de produto.

Código: Selecionar todos

/*****************************************************************************
 * SISTEMA  : ROTINA EVENTUAL                                                *
 * PROGRAMA : SAT-IMPRIMIR.PRG   		                             *
 * OBJETIVO : Imprimir Cupom Fiscal Eletrônico Sem Dll                       *
 * AUTOR    : Marcelo Antonio Lázzaro Carli                                  *
 * DATA     : 07.10.2015                                                     *
 * ULT. ALT.: 08.10.2015                                                     *
 *****************************************************************************/
#include <minigui.ch>

Procedure Main()
   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 {|| fImprimirNfce()}

      define button btn_EnviarVenda
         row 50
         col 90
         width 120
         caption [&Imprimir Cfe]
         action {|| fImprimirNfce()}
         DEFAULT .t.
      end button

      on key escape action {|| Thiswindow.Release}
   end window

   main.center()
   main.activate()
Return (Nil)

Procedure fImprimirNfce()
    Local I:= 1, cNfce:= cFilePath(GetFile({{[Arquivos Xml], [*.xml]}}, [Abrir Arquivo], [], .F., .F.)), cPrinter:= GetPrinter(), cTexto:= [] 
    Private cChave:= substr(cNfce, 4, 44)

    If Empty(cNfce)
      MsgStop([Arquivo Xml não Selecionado!], [Erro])
      Return (Nil)
   Endif

   cTexto:= memoread(cNfce)

   If Empty(cPrinter)
      MsgStop([Impressora não Selecionada!], [Erro])
      Return (Nil)
   EndIf

   ferase([NFCE.TXT])
   Setalternate([NFCE.TXT])

   Set Margin TO 0
   SetPrc(0, 0)

   fImp_Cabecalho(cTexto)

   ? "#|COD|DESC|QTD|UN|VL UN R$|(VLTR R$)*|VL ITEM R$" 
   ? REPLI([-], 48)

   ? CHR(27) + CHR(33) + CHR(1)             && Muda para a FontB para que o Texto seja impresso em 1 linha

   z:= 1

   For i:= 1 to len(cTexto)   ///////// aqui que não consegui implementar a leitura de vários ítens de produtos
       If [det nItem="] + str(i) + ["] == [det nItem="] + str(z) + ["]
          ? STRZERO( I++, 3, 0 )
          ?? [ ] + Retiratag([cProd], cTexto)
          ?? [ ] + Retiratag([xProd], cTexto)
          ?? [ ] + Transf(Retiratag([qCom], cTexto), [9,9999])
          ?? [ ] + Retiratag([uCom], cTexto)
          ?? [ ] + "X" 
          ?? [ ] + Transf(Retiratag([vUnCom], cTexto), [9,999,999.99])
          ?? [ ] + Transf(Retiratag([vProd], cTexto), [9,999,999.99])
          z++
       Endif
              

       msginfo(str(i) + [ <== i  z ==>  ] + str(z))


       if i > 5
          exit
       endif
   Next

   ? CHR(27) + CHR(33) + CHR(0) 	    && Volta para a FontA

   fImp_Totais(cTexto, cChave)

   SetPrc(0, 0)

   Setalternate()
   WIN_PrintFileRaw(cPrinter, [NFCE.TXT], [TESTE])
Return (Nil)

Procedure fImp_Cabecalho(cTexto)
   *** aqui o melhor é pegar os dados do arquivo de parâmetros do sistema, pois não tem por exemplo,
   *** o nome fantasia e a tag CNPJ  é comum para o cnpj da softhouse e do emitente
   ? PADC(Retiratag([xNome], cTexto), 48) 
   ? PADC([Nome Fantasia], 48) 
   ? PADC(Retiratag([xLgr], cTexto) + [ No ]  + Retiratag([nro], cTexto) , 48)
   ? PADC(Retiratag([xBairro], cTexto) + [ Cep ]  + Retiratag([CEP], cTexto) , 48)
   ? PADC(Retiratag([xMun], cTexto) + [/SP], 48) 
   ? PADC([CNPJ ] + Retiratag([CNPJ], cTexto) + [ IE ]  + Retiratag([IE], cTexto) + [ IM ]  + Retiratag([IM], cTexto), 48) 
   ? REPLI([-], 48)

   ? PADC([Extrato No: ] + Retiratag([nCFe], cTexto) , 48)
   ? PADC( "CUPOM FISCAL ELETRONICO - SAT", 48)

   ? REPLI([-], 48)
   ? [CPF/CNPJ do Consumidor: ] + Retiratag([CPF], cTexto) 
   ? REPLI([-], 48)
Return (Nil)

Procedure fImp_Totais(cTexto, cChave)
   Local i:= 0, aString:= HB_ATOKENS(Retiratag([xTexto], cTexto), [;]), cPagto:= Retiratag([cMP], cTexto)
 
   ? [TOTAL R$]
   ?? PADL(Transf(Retiratag([vCFe], cTexto), [9,999,999.99]), 40)

   If cPagto == [01]
     ? [Dinheiro]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 40)
   Elseif cPagto == [02]
     ? [Cheque]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 42)
   Elseif cPagto == [03]
     ? [Cartão de Crédito]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 31)
   Elseif cPagto == [04]
     ? [Cartão de Débito]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 32)
   Elseif cPagto == [05]
     ? [Crédito Loja]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 36)
   Elseif cPagto == [10]
     ? [Vale Alimentação]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 32)
   Elseif cPagto == [11]
     ? [Vale Refeição]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 35)
   Elseif cPagto == [12]
     ? [Vale Presente]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 35)
   Elseif cPagto == [13]
     ? [Vale Combustível]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 32)
   Elseif cPagto == [99]
     ? [Outros]
     ?? PADL(Transf(Retiratag([vMP], cTexto), [9,999,999.99]), 42)
   Endif      

   ? REPLI([-], 48)
   ? PADC([SAT No. ] + Retiratag([nserieSAT], cTexto) , 48)
 
   ? PADC(dtoc(STOD(Retiratag([dEmi], cTexto))) + [ - ] + Transf(Retiratag([hEmi], cTexto), [@R 99:99:99]), 48)

   ? CHR(10) + CHR(27) + CHR(97) + CHR(49)  && Centraliza a Impressão	
   ? CHR(27) + CHR(33) + CHR(1)             && Muda para a FontB para que o Texto seja impresso em 1 linha

   ? PADC(Transf(cChave, [@R 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999]), 56 )
   ? CHR(27) + CHR(33) + CHR(0) 	    && Volta para a FontA

   f_QRCODE8(cChave, Retiratag([dEmi], cTexto) + Retiratag([hEmi], cTexto), Retiratag([vCFe], cTexto), Retiratag([signAC], cTexto), [])

   ? CHR(27) + "a" + CHR(0) 													&& Volta a justificar à esquerda

*   For i:= 1 to len(aString)
*       ? PADC(aString[i] , 48)
*   Next
   ? REPLI([-], 48)
 
   aString:= HB_ATOKENS(Retiratag([infCpl], cTexto), [;])
   For i:= 1 to len(aString)
       ? PADC(aString[i] , 48)
   Next

   ? REPLI([-], 48)
   ? ""
	
   ? CHR(29) + CHR(86) + CHR(0) && Aciona Guilhotina
Return (Nil)

Procedure f_QRCODE8(cChave, cDatahora, cValor, cAssinatura, cCnpj)
   Local x_URL_QrCode:= cChave + "|" + cDatahora + "|" + cValor + "|" + cCnpj + "|" + cAssinatura, iTamanho, iLow, iHigh, iCount, ComandoQR

   * BYTES PARA COMPOR O QRCODE
   iTamanho := Len( x_URL_QrCode ) + 3
   iLow     := MOD( iTamanho, 256 )
   iHigh    := iTamanho / 256
	
   ? CHR(29) + "h" + CHR(60) && Altura do código de barras
   ? CHR(29) + "w" + CHR(2)  && Largura das barras
   ? CHR(29) + "H0"          && Apresentação numérica do código DE BARRAS / H0 = INIBE, H2 = MOSTRA
      
   * Imprime o Code128C com 44 algarismos
   ComandoQR := CHR(29) + CHR(107) + CHR(73) + CHR(24) + "{C"
   For iCount:= 0 To 22
       ComandoQR += CHR( VAL( SUBSTR( cChave, (iCount * 2) + 1, 2 ) ) )
   Next
   ? []

   ? ComandoQR
   * Fim da impressão do Code128C

   * Impressão do QRCode
   ? CHR(29) + "(k" + CHR(iLow) + CHR(iHigh) + CHR(49) + CHR(80) + CHR(48) +  x_URL_QrCode && QRCode PROPRIAMENTE DITO

   ? CHR(29) + "(k"+ CHR(3) + CHR(0) + CHR(49) + CHR(81) + CHR(48)
Return (Nil)

Procedure Setalternate(cParam)
   If cParam == Nil
      Set Cons on
      Set Alter to
      Set Alter off
   Else
      Set cons off
      Set Alter to &cParam
      Set Alter on
   Endif
Return (Nil)

Function Retiratag(cParam, cTexto)
   Local nTagI:= len(alltrim(cParam)) + 2, cTagI:= [<] + alltrim(Upper(cParam)) + [>], cTagF:= [</] + alltrim(Upper(cParam)) + [>], nInicio:= at(cTagI, Upper(cTexto)), nFim:= at(cTagF, Upper(cTexto)), cEspaco:= [ ]
   
   If nInicio == 0 .or. nFim == 0
      Return(cEspaco)
   Endif
Return(substr(cTexto, (nInicio + nTagI), nFim - (nInicio + nTagI)))

Function cFilePath(cPathMask)
   Local n:= RAt([\], cPathMask )
Return (If( n > 0, Upper(substr(cPathMask, n + 1)), Upper(cPathMask)))
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

SAT-Fiscal EXTRATO

Mensagem por HASA »

Boa tarde, Malcarli, veja se ficou bom.
:)Pos
HASA
Anexos
SAT-IMPRIMIR_VIAXML.zip
(647.9 KiB) Baixado 369 vezes
malcarli
Usuário Nível 3
Usuário Nível 3
Mensagens: 239
Registrado em: 20 Ago 2015 18:14
Localização: marilia/sp

SAT-Fiscal EXTRATO

Mensagem por malcarli »

Obrigado irei testar e qq coisa retorno

bfds
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 Extrato

Mensagem por rochinha »

Amiguinhos,

Pelo fato de voces estarem manipulando os .XMLs de forma direta sem uso de funcoes especificas e OLE sugiro usar as funcoes tradicionais de contagem de forma a retornar quantas vezes det item existe no arquivo.

Código: Selecionar todos

function OCCURS(Arg1, Arg2)
    local Local1, Local2
    Local2:= 0
    do while (!Empty(Arg2))
        if ((Local1:= At(Arg1, Arg2)) != 0)
            Local2++
            Arg2:= SubStr(Arg2, Local1 + 1)
        else
            Arg2:= ""
        endif
    enddo
    return Local2

Código: Selecionar todos

function Ocorrencia(pString,PCHAR)
   nString := 0
   for I = 1 to len(pString)
       if substr(pString,I,1) = PCHAR
          nString := nString + 1
       endif
   next
   return nString
No primero parametro passe o conteudo a ser analisado e no segundo parametro o trecho a ser pesquisado. O retorno sera o numero de vezes que um foi encontrado no outro.
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.
Responder