4 - Relatrios ....................................47
4.1 - LEITURA "X" ................................................... 47 4.2 - LEITURA "X" GERENCIAL (PARA ECF VERSO 3.0X)....................... 48 4.3 - REDUO "Z" ................................................... 49
REDUO "Z" GERENCIAL (PARA ECF VERSO 3.0X)....................... 50 LEITURA "X" SERIAL ............................................. 51 LEITURA DA MEMRIA FISCAL (COMANDO 1) .............................. 54 LEITURA DA MEMRIA FISCAL ( COMANDO 2 ) ............................ 57 LEITURA DE DISPONIBILIDADE DA MEMRIA FISCAL ......................... 60
5 - Auxiliares ....................................61
5.1 - CANCELANDO UM CUPOM J FINALIZADO .................................. 61 5.2 - LINE FEED (AVANANDO LINHAS) ..................................... 61 5.3 - ABERTURA DA GAVETA .............................................. 61 5.4 - STATUS DA IMPRESSORA ............................................ 62 5.5 - STATUS DO CUPOM ................................................ 64 5.6 - STATUS DAS ALQUOTAS (PARA ECF VERSO 3.0X) ........................ 66 5.7 - STATUS DOS PAGAMENTOS (PARA ECF VERSO 3.0X) ....................... 68 5.8 - STATUS DOS COMPROVANTES NO FISCAIS ( ECF VERSO 3.0X) ............... 70 5.9 - STATUS DO USURIO ( PARA ECF VERSO 3.0X ) ......................... 73 5.10 - STATUS DO EQUIPAMENTO ( PARA ECF VERSO 3.0X )..................... 76 5.11 - STATUS DO COMPROVANTES VINCULADOS ( PARA ECF VERSO 3.0X ) ........... 77 5.12 - STATUS DO TROCO ( PARA ECF VERSO 3.0X ) ......................... 79 5.13 - IMPRIME LINHA DE AUTENTICAO .................................... 80
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
Cupom aberto (90D - 5AH) ................................................. No h cupom a cancelar (91D - 5BH) ...................................... Tabela de taxa no inicializada (92D - 5CH) .............................. Seleo de taxa invlida (94D - 5EH) ..................................... Cancelamento invlido (95D - 5FH) ........................................ Nada a retificar (96D - 60H) ............................................. Reduo no localizada (97D - 61H) ....................................... Cabealho no carregado (98D - 62H) ...................................... Impressora em interveno tcnica (99D - 63H) ............................ Impressora em perodo de venda (100D - 64H) .............................. Somente com interveno tcnica (101D - 65H) ............................. Desconto invlido (102D - 66H) ........................................... Limite de linhas alcanado (103D - 67H) .................................. Somente aps o total (104D - 68H) ........................................ Dados invlidos (105D - 69H) ............................................. Taxa no disponvel (106D - 6AH) ......................................... Comando inexistente (107D - 6BF) ......................................... No houve o fechamento do dia (108D - 6CH) ............................... Erro irrecupervel (109D - 6DH) .......................................... Alterao invlida (110D - 6EH) .......................................... Data j alterada (111D - 6FH) ............................................ Alquota no carregada (112D - 70H) ...................................... Fechamento dirio no realizado (113D - 71H) ............................. Abertura do dia invlida (114D - 72H) .................................... Fechamento j realizado (115D - 73H) ..................................... Ajuste somente de +/- 1 hora (116D - 74H) ................................ Acrscimo invlido (117D - 75H) .......................................... Pagamento incompleto (118D - 76H) ........................................ Cheque no posicionado (119D - 77H) ...................................... Seqncia de cheque incorreta (120D - 78H) ............................... Erro de gravao na MEF (121D - 79H) ..................................... Comando fora de seqncia (126D - 7EH) ................................... Autenticao sem papel (127D - 7FH) ...................................... Queda de energia (132D - 84H) ............................................ Data invlida (133D - 85H) ............................................... Item fora da faixa (134D - 86H) .......................................... Item no vendido (135D - 87H) ............................................ Parmetro errado (136D - 88H) ............................................ Limite de valor ultrapassado (137D - 89H) ................................ Relgio Fora de Operao (138D - 8AH) .................................... Pagamento no definido (139D - 8BH) ...................................... Limite de autenticao excedido (140D - 8CH) ............................. Comando de venda invlido (141D - 8DH) ................................... Posio j programada (142D - 8EH) ....................................... Posio inexistente (143D - 8FH) ......................................... Cupom vinculado pendente (144D - 90H) .................................... Excesso de cupons vinculados (145D - 91H) ................................ No h cupom vinculado pendente(146D - 92H) .............................. Mudana de horrio j solicitada (147D - 93H) ............................ Cristal do relgio no oscila (148D - 94H) ............................... Pagamentos no inicializados (149D - 95H) ................................ Inscrio Estadual invlida (150D - 96H) ................................. Extenso excedido (151D - 97H) ............................................ Cupom est com valor zerado (152D - 98H) ................................. Codificao j programada (153D - 99H) ................................... No h vinculados a cupom (154D - 9AH) ................................... Reduo no permitida (155D - 9BH) ....................................... Caracter repetido na codificao (156D - 9CH) ............................ Caracter proibido na codificao (157D - 9DH) ............................
85 85 85 85 85 85 85 85 85 85 85 85 86 86 86 86 86 86 86 86 86 86 86 86 86 87 87 87 87 87 87 87 87 87 87 87 87 88 88 88 88 88 88 88 88 88 88 88 89 89 89 89 89 89 89 89 90 90 90
1 - Biblioteca CL_ECF.LIB
A biblioteca CL_ECF.LIB rene as funes para aplicaes em linguagem CLIPPER que implementam os comandos descritos no manual de programao da impressora. No enatanto, ela sozinha no basta, como veremos a seguir. Existem duas outras bibliotecas que devem ser linkadas junto com a CL_ECF, totalizando trs bibliotecas.
IMPORTANTE: A ordem de linkedio das bibliotecas no deve ser alterada. Siga a mesma ordem mostrada nos exemplos acima, para evitar erros de linkedio.
Outra observao: se voc for usurio de Clipper 5.3, ou posterior, temos bibliotecas diferentes para este caso. Estas bibliotecas seriam: CL_503, C_ECF_PL, CLIB503.
Seu aplicativo
Funo da biblioteca
Impressora fiscal
Para instalar o driver na memria do micro, a seguinte linha precisa ser adicionada ao CONFIG.SYS do computador (supondo que o driver ECF.SYS esteja na raiz do driver C) : DEVICE=ECF.SYS /C:1 /V:9600 /P:p Se voc for utilizar a porta serial COM2 a linha fica assim: DEVICE=ECF.SYS /C:2 /V:9600 /P:p
Aps a colocao desta linha, o micro deve ser reinicializado para a efetiva carga do driver na memria.
1.3.2 - Observao geral sobre valores numricos
Nas funes em CLIPPER existem parmetros com valores que possuem dois dgitos decimais. O valor deve ser fornecido com alinhamento direita, sem ser colocado o ponto ou vrgula decimal. Por exemplo, o valor "3,45" deve ser expresso como "345", e "12.00" como "1200".
2 - Programao de dados
2.1 - Acertando a data e a hora
Funo: AcertaData (dia, ms, ano, hora, min, seg) Parmetro: Recebe como parmetros os valores inteiros correspondentes ao dia, ms, ano, hora, minuto e segundo.
Exemplo:
Static Function _AcertaData() local cmd, Janela, cor, Data, Hora, Minuto, Segundo, ret, dia, mes, ano cor janela Data Hora Minuto Segundo @ 9, @ 10, @ 10, @ 10, @ 10, read 33 33 39 42 45 := := := := := := setcolor( cJanela ) FazBox( 7, 27, 13, 62, "Acerta Data e Hora", cJanela, 3, cTitulo ) date() val( substr( time(), 1, 2 ) ) val( substr( time(), 4, 2 ) ) val( substr( time(), 7, 2 ) ) "Data:" get Data pict "@K" "Hora: " + time() Hora pict "99" Minuto pict "99" Segundo pict "99"
if( lastkey() != K_ESC ) Data Dia Mes Ano := := := := dtoc( Data ) val( substr( Data, 1, 2 ) ) val( substr( Data, 4, 2 ) ) val( substr( Data, 7, 2 ) )
@ 12, 33 say "Aguarde..." ret := AcertaData( Dia, Mes, Ano, Hora, Minuto, Segundo ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
Funo: CargaTbAlq(Taxa, Alquota) Parmetros: # Taxa Valor numrico de 0 a 9 que identifica a posio do cadastro da taxa. # Alquota String com o valor da alquota. Para a formao deste parmetro lembre-se de que no pode ser utilizado vrgulas ou pontos. Por exemplo, para cadastrar uma alquota de 3.30%, o parmetro Alquota deve valer 330.
Exemplo:
Static Function _ProgramandoAliquotas( New ) local Janela, cor, Taxa, aliq, ret, n, i, j, tipo_TAX local Aliquota1, Aliquota2, Aliquota3, Aliquota4, Aliquota5, Aliquota6 local Aliquota, Aliquota10, Aliquota7, Aliquota8, Aliquota9 local TipoAliq0, TipoAliq1, TipoAliq2, TipoAliq3, TipoAliq4, TipoAliq5 local TipoAliq6, TipoAliq7,TipoAliq8,TipoAliq9 cor := setcolor( cJanela ) janela := FazBox( 6, 30, 25, 71, "Tabela de Taxas", cJanela, 3, cTitulo ) @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 07, 07, 08, 08, 09, 09, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 say say say say say say say say say say say say say say say say say say say say "Taxa 0 -> "Aliquota: "Taxa 1 -> "Aliquota: "Taxa 2 -> "Aliquota: "Taxa 3 -> "Aliquota: "Taxa 4 -> "Aliquota: "Taxa 5 -> "Aliquota: "Taxa 6 -> "Aliquota: "Taxa 7 -> "Aliquota: "Taxa 8 -> "Aliquota: "Taxa 9 -> "Aliquota: TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get TIPO: " get " get TipoAliq0 Aliquota0 pict "@K " get TipoAliq1 Aliquota1 pict "@K " get TipoAliq2 Aliquota2 pict "@K " get TipoAliq3 Aliquota3 pict "@K " get TipoAliq4 Aliquota4 pict "@K " get TipoAliq5 Aliquota5 pict "@K " get TipoAliq6 Aliquota6 pict "@K " get TipoAliq7 Aliquota7 pict "@K " get TipoAliq8 Aliquota8 pict "@K " get TipoAliq9 Aliquota9 pict "@K
99.99" 99.99" 99.99" 99.99" 99.99" 99.99" 99.99" 99.99" 99.99" 99.99"
read if( lastkey() != K_ESC ) if( C_Conf( 7, 10, "Programar Impressora?", "SN" ) == "S" ) @ 23, 43 say "Aguarde..." for taxa=0 to 15 n := FCOUNT() PRIVATE nome[n], tipo[n], tamanho[n], decimais[n] AFIELDS( nome, tipo, tamanho, decimais ) j = (2*(taxa)) + 18
i = j + 1 tipo_TAX := FIELDGET(j) Aliquota := FIELDGET(i) if( Aliquota <> 0 ) ret := CargaTbAlq( taxa, str(Aliquota*100,4) ) endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) if( New == 0 ) use endif R_TELA( janela ) setcolor( cor ) return endif endif next endif endif if( New == 0 ) use endif R_TELA( janela ) setcolor( cor ) return NIL
Exemplo:
Static Function _ProgramandoTaxas( ) local Janela, cor, Taxa, aliq, ret, n, i, j, tipo_TAX local Aliquota1, Aliquota2, Aliquota3, Aliquota4, Aliquota5, Aliquota6 local Aliquota7, Aliquota8, Aliquota9 local Aliquota, Aliquota10, Aliquot11, Aliquota12, Aliquota13, Aliquota14, Aliquota15 local TipoAliq0, TipoAliq1, TipoAliq2, TipoAliq3, TipoAliq4, TipoAliq5 local TipoAliq6, TipoAliq7,TipoAliq8,TipoAliq9 local TipoAliq10, TipoAliq11, TipoAliq12, TipoAliq13, TipoAliq14, TipoAliq15 cor := setcolor( cJanela ) janela := FazBox( 6, 30, 25, 71, "Tabela de Taxas", cJanela, 3, cTitulo ) @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 07, 07, 08, 08, 09, 09, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 54 32 say say say say say say say say say say say say say say say say say say say say say say say say say say say "Taxa 0 -> TIPO: " get TipoAliq0 valid TipoAliq0=="S".or.TipoAliq0=="T" "Aliquota: " get Aliquota0 pict "@K 99.99" "Taxa 1 -> TIPO: " get TipoAliq1 valid TipoAliq1=="S".or.TipoAliq1=="T" "Aliquota: " get Aliquota1 pict "@K 99.99" "Taxa 2 -> TIPO: " get TipoAliq2 valid TipoAliq2=="S".or.TipoAliq2=="T" "Aliquota: " get Aliquota2 pict "@K 99.99" "Taxa 3 -> TIPO: " get TipoAliq3 valid TipoAliq3=="S".or.TipoAliq3=="T" "Aliquota: " get Aliquota3 pict "@K 99.99" "Taxa 4 -> TIPO: " get TipoAliq4 valid TipoAliq4=="S".or.TipoAliq4=="T" "Aliquota: " get Aliquota4 pict "@K 99.99" "Taxa 5 -> TIPO: " get TipoAliq5 valid TipoAliq5=="S".or.TipoAliq5=="T" "Aliquota: " get Aliquota5 pict "@K 99.99" "Taxa 6 -> TIPO: " get TipoAliq6 valid TipoAliq6=="S".or.TipoAliq6=="T" "Aliquota: " get Aliquota6 pict "@K 99.99" "Taxa 7 -> TIPO: " get TipoAliq7 valid TipoAliq7=="S".or.TipoAliq7=="T" "Aliquota: " get Aliquota7 pict "@K 99.99" "Taxa 8 -> TIPO: " get TipoAliq8 valid TipoAliq8=="S".or.TipoAliq8=="T" "Aliquota: " get Aliquota8 pict "@K 99.99" "Taxa 9 -> TIPO: " get TipoAliq9 valid TipoAliq9=="S".or.TipoAliq9=="T" "Aliquota: " get Aliquota9 pict "@K 99.99" "Taxa 10 -> TIPO: " get TipoAliq10 valid TipoAliq10=="S".or.TipoAliq10=="T" "Aliquota: " get Aliquota10 pict "@K 99.99" "Taxa 11 -> TIPO: " get TipoAliq11 valid TipoAliq11=="S".or.TipoAliq11=="T" "Aliquota: " get Aliquota11 pict "@K 99.99" "Taxa 12 -> TIPO: " get TipoAliq12 valid TipoAliq12=="S".or.TipoAliq12=="T" "Aliquota: " get Aliquota12 pict "@K 99.99" "Taxa 13 -> TIPO: " get TipoAliq13 valid TipoAliq13=="S".or.TipoAliq13=="T"
10
54 32 54 32 54
"Aliquota: " get Aliquota13 pict "@K 99.99" "Taxa 14 -> TIPO: " get TipoAliq14 valid TipoAliq14=="S".or.TipoAliq14=="T" "Aliquota: " get Aliquota14 pict "@K 99.99" "Taxa 15 -> TIPO: " get TipoAliq15 valid TipoAliq15=="S".or.TipoAliq15=="T" "Aliquota: " get Aliquota15 pict "@K 99.99"
if( lastkey() != K_ESC ) @ 23, 43 say "Aguarde..." for taxa=0 to 15 n := FCOUNT() PRIVATE nome[n], tipo[n], tamanho[n], decimais[n] AFIELDS( nome, tipo, tamanho, decimais ) j = (2*(taxa)) + 18 i = j + 1 tipo_TAX := FIELDGET(j) Aliquota := FIELDGET(i)
if( Aliquota <> 0 ) if( tipo_TAX == 'S' ) ret := CrgAlqEx( (str((taxa),2)), 'S', str(Aliquota*100,4)) else ret := CrgAlqEx( (str((taxa),2)), 'T', str(Aliquota*100,4)) endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif endif next endif endif return NIL
11
Parmetros: # L1 String com at 48 caracteres correspondente a linha 1 do cabealho; # L2 String com at 48 caracteres correspondente a linha 2 do cabealho; # L3 String com at 48 caracteres correspondente a linha 3 do cabealho; # Lj Valor numrico na faixa de 0 a 9999, que indica o nmero do estabelecimento ou do estabelecimento usurio; # Eq Valor numrico na faixa de 0 a 9999, que indica o nmero do equipamento; # CGC String de dezoito caracteres com o CGC do emitente; # IE String de quinze caracteres com a inscrio estadual do emitente.
Observao: Quando o modelo da impressora for de 40 colunas, os parmetros "L1", "L2" e "L3" devem ser formados pelos primeiros 40 caracteres, sendo pois os 8 caracteres restantes desconsiderados.
Exemplo:
Static Function _AcertaCabecalho( New ) local cmd, Janela, cor, Cabec1, Cabec2, Cabec3, NroLoja, NroEquip, CGC, IE, ret local newmodel cor := setcolor( cJanela ) janela := FazBox( 8, 14, 20, 77, "Cabealho da Loja", cJanela, 3, cTitulo ) Cabec1 := Cabec2 := Cabec3 := space( 48 ) NroEquip := NroLoja := 0 CGC := space( 18 ) IE := space( 15 ) @ 10, @ 11, @ 12, @ 13, @ 14, @ 15, @ 16, read 16 16 16 16 16 16 16 say say say say say say say "Cabealho: " " " " " "Nro Loja: " "Nro Equip: " "CGC: " "Inscr.Est.:" get get get get get get get Cabec1 Cabec2 Cabec3 NroLoja pict "9999" NroEquip pict "9999" CGC IE
if( lastkey() != K_ESC ) @ 18, 16 say "Aguarde..." ret := CabLoja( LinhaCab_1,LinhaCab_2,LinhaCab_3, Loja_num, Equip_num, ad_CGC, Cad_IE ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif
12
Exemplo:
Static Function _AcertaCabecalho( New ) local cmd, Janela, cor, Cabec1, Cabec2, Cabec3, NroLoja, NroEquip, CGC, IE, ret, IM local newmodel cor := setcolor( cJanela ) janela := FazBox( 8, 14, 20, 77, "Cabealho da Loja", cJanela, 3, cTitulo ) Cabec1 := Cabec2 := Cabec3 := space( 48 ) NroEquip := NroLoja := 0 CGC := space( 18 ) IE := space( 15 ) IM := space( 15 ) @ 10, @ 11, @ 12, @ 13, @ 14, @ 15, @ 16, @ 17, read 16 16 16 16 16 16 16 16 say say say say say say say say "Cabealho: " " " " " "Nro Loja: " "Nro Equip: " "CGC: " "Inscr.Est.:" "Inscr.Mun.:" get get get get get get get get Cabec1 Cabec2 Cabec3 NroLoja pict "9999" NroEquip pict "9999" CGC IE IM
ret := CabLoja30( LinhaCab_1,LinhaCab_2,LinhaCab_3, Loja_num, Equip_num, Cad_CGC, Cad_IE, Cad_IM ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif
13
Exemplo:
Static Function _CargaCripto( New ) local cod, Janela, cor, ret cor := setcolor( cJanela ) janela := FazBox( 10, 33, 15, 63, "Codificao do GT", cJanela, 3, cTitulo ) cod := space( 10 ) cod := CodCripto @ 12, 37 say "Cdigo:" get read cod
if( C_Conf( 7, 10, "Programar impressora?", "SN" ) == "S" ) @ 14, 37 say "Aguarde..." ret := CargaCript( CodCripto ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
14
Parmetros: # TAM Caracter com o tamanho do cdigo do produto em uma transao de venda.
Observaes: Este comando somente aceito atravs de interveno tcnica. Este comando no funciona nos modelos de impressora SPrint e TPrint nas verses 2.04 ou anteriores. A programao do cdigo do produto somente possvel nas impressoras modelo DPrint 2.04 e DPrint 3.0x, bem como em todas as impressoras fiscais verses 3.01 e posteriores.
Exemplo:
Static Function _ProgramandoTamanhoCodigo( local cod, Janela, cor, ret )
cor := setcolor( cJanela ) janela := FazBox( 13, 36, 19, 66, "Codigo de item", cJanela, 3, cTitulo ) cod := 13 @ 15, 40 say "Tamanho do Codigo:" get read if( lastkey() != K_ESC ) @ 17, 40 say "Aguarde..." ret := PrgCod( cod ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL cod pict "@K 99"
15
Funo: CrgOperNF ( POSTAB, TITULO, DESC, ACRES, CANC, PAG, VINCULADO, VINCULO )
Parmetros: # POSTAB String com duas posies informando a posio da descrio que se deseja utilizar na tabela das formas de pagamento. Assume valores de "00" at "19". # TITULO String com at 20 caracteres contendo a descrio que aparecer no respectivo campo do comprovante no fiscal em questo. # DESC String com um caracter. Assume o valor "S" para que o comprovante que est sendo programado aceite descontos em itens ou no subtotal. Assume o valor "N" para que o comprovante no aceite nenhum tipo de desconto. # ACRES String com um caracter. Assume o valor "S" para que o comprovante que est sendo programado aceite acrscimos em itens ou no subtotal. Assume o valor "N" para que o comprovante no aceite nenhum tipo de acrscimo. # CANC String com um caracter. Assume o valor "S" para que o comprovante que est sendo programado aceite cancelamentos de itens. Assume o valor "N" para que o comprovante no aceite nenhum tipo de cancelamento. # PAG String com um caracter. Assume o valor "S" para que o comprovante que est sendo programado obrigue a realizao do pagamento. Assume o valor "N" para que o comprovante permita ser fechado sem a realizao do pagamento. # VINCULADO String com um caracter. Assume o valor "S" para informar que o comprovante que est sendo programado vinculado. Assume o valor "N" para informar que o comprovante em questo no vinculado. # VINCULO String com dois caracteres. Contm a posio na tabela de comprovantes no fiscais do vnculo que se pretende utilizar, caso o comprovante seja vinculado.
Observao: Este comando aceito sem a necessidade de interveno tcnica na primeira vez que for realizado. No entanto, a sobreposio de um comprovante j programado somente possvel mediante interveno tcnica. Quando um comprovante no fiscal programado como sendo "Vinculado", as outras caractersticas dele, como permisso de acrscimos, descontos, cancelamentos e obrigatoriedade de pagamento so ignoradas pela impressora. Caso o comprovante no fiscal no seja vinculado, o parmetro "Vinculo" no ser utilizado pela impressora.
16
Exemplo:
Static Function _DocNF () local cmd, Janela, cor, POSICAO, TITULO, DESCONTO, ACRESCIMO, CANCELA local PAGAMENTO, VINCULADO, vinculo, ret cor := setcolor( cJanela ) JANELA := FazBox( 10, 30, 20, 75, "Documento nao fiscal", cJanela, 3, cTitulo ) POSICAO := space(2) TITULO := space(20) POSICAO := "00" DESCONTO := "S" ACRESCIMO := "S" CANCELA := "S" PAGAMENTO := "S" VINCULADO := "S" VINCULO := "00" @ 11, 33 say "Titulo do documento:" get TITULO read if( lastkey() != K_ESC ) _SimNao( 12, 59, DESCONTO ) @ 12, 33 say "Permite desconto? _SimNao( 12, 59, DESCONTO ) read pict "@K"
_SimNao( 13, 59, ACRESCIMO ) @ 13, 33 say "Permite acrescimo? (S/N):" get ACRESCIMO _SimNao( 13, 59, ACRESCIMO ) read _SimNao( 14, 59, CANCELA ) @ 14, 33 say "Permite cancela? _SimNao( 14, 59, CANCELA ) read
_SimNao( 15, 59, PAGAMENTO ) @ 15, 33 say "Permite pagamento? (S/N):" get PAGAMENTO _SimNao( 15, 59, PAGAMENTO ) read _SimNao( 16, 59, VINCULADO ) @ 16, 33 say "Documento vinculado(S/N):" get VINCULADO _SimNao( 16, 59, VINCULADO ) read @ 17, 33 say "POSICAO DE CADASTRO read if( Vinculado == "S" ) @ 18, 33 say "FORMA DO PAGAMETO read endif ret := VINCULO ) :" get POSICAO
pict "@K"
pict "@K"
if (( ret != 0 ) .and. ( lastkey() != K_ESC )) MensagemErro( "Retorno Impressora", ret ) endif return NIL
17
Observao: Este comando aceito sem a necessidade de interveno tcnica na primeira vez que for realizado. No entanto, a sobreposio de um comprovante j programado somente possvel mediante interveno tcnica.
Exemplo:
Static Function _FormasDePagamento () local cmd, Janela, cor, POSICAO, TITULO, DESCONTO, ACRESCIMO, CANCELA local PAGAMENTO, VINCULADO, ret cor := setcolor( cJanela ) JANELA := FazBox( 10, 30, 15, 75, "Formas de pagamento", cJanela, 3, cTitulo ) POSICAO := space(2) TITULO := space(20) POSICAO := "00" @ 11, 33 say "Titulo do pagamento:" get TITULO read pict "@K"
if( lastkey() != K_ESC ) @ 12, 33 say "Posio na tabela :" get POSICAO read @ 13, 33 say "Aguarde..." ret := CrgFormPg( POSICAO, TITULO ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
18
Exemplo:
Por exemplo, vamos supor que desejamos ativar somente as caractersticas acionadas pelos bits 1, 4 e 7. Neste caso, o parmetro Tipo deve valer 146, em decimal. Quando colocamos o nmero 146 (que est em decimal) para binrio, logo percebemos quais caractersticas ele ativa. Observe: 146d = 10010010b Observe que os bits que esto setados so, justamente, os bits 7 (o bit mais da esquerda), o bit 4 e o bit 1.
19
Parmetro: # Tipo Valor numrico que determina o tipo de cupom no fiscal. Use sempre o valor 1 (um). Lembrando que, antes deste comando, necessrio a impresso do cabealho.
Exemplo:
Static Function _ExemploGenerico() local Janela, cor, Descri1, ret local Operador, LinhaCom1, aux, x cor := setcolor( cJanela ) janela := FazBox( 13, 30, 17, 50, "Exemplo genrico", cJanela, 3, cTitulo ) Descri1 := space( 30 ) ret := 0 aux := 0 Operador := "OPERADOR" LinhaCom1 := space ( 48 ) LinhaCom1 := "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH" if( lastkey() != K_ESC ) @ 15, 33 say "Aguarde..." ret := ImpCab ( ) if ( ret != 0 .and. ret != 68 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif ret := InCupNFisc( 1 ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif Descri1 := "OPERADOR" ret := FimTrans( Descri1 ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif return NIL
20
nove
(9)
caracteres
correspondente
ao
valor
da
forma
de
21
Parmetros: # Codigo String com at 13 caracteres com o cdigo do item da venda; # Descricao String com at 62 caracteres correspondentes descrio do item; # QInteira String com at 3 caracteres com a parte inteira da quantidade do item da venda; # QFracionada String com at 3 caracteres com a parte fracionada da quantidade do item da venda; # Valor String com at 9 caracteres correspondentes ao valor unitrio do item; # Taxa Corresponde a um valor numrico com a posio da alquota na tabela programada. As posies abaixo servem para as verses 2.04 ou anteriores: 0 - 9 = T0 a T9 10 = Sangria (no fiscal) 11 = Entrada de numerrio (no fiscal) 12 = Substituio tributria 13 = isento 14 = No incidente 15 = Servios 16 = Recebimentos diversos (no fiscais) Para a verso 3.0x servem as posies de alquotas abaixo: 0 - 15 = T0 a T15 (programveis, de ICMS ou de servio) 16 = Substituio tributria 17 = Isento 18 = No incidente
Observaes: Este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". Tambm este comando no ser aceito se for enviado um valor invlido no parmetro "Taxa". Observe o fato de no utilizar alquotas no fiscais em cupons fiscais ou vice-versa. Caso isto ocorrer, a impressora ir gerar um erro. Outro detalhe importante: obrigatrio o envio completo dos caracteres numricos da parte inteira e fracionada para a aceitao do comando. O parmetro "Codigo" at pode ter um tamanho menor do que 13 bytes. No entanto, a modificao dele somente possvel via interveno tcnica. possvel a verificao do tamanho programado na "Leitura X" ou "Reduo Z". Este comando no pode ser utilizado nas impressoras modelo SPrint verso 2.04. Este comando somente pode ser usado nas impressoras SPrint 3.0x e DPrint (todas).
22
Exemplo:
Static Function FVendaD( opc1 ) local Janela, cor, Descri1, Descri2, descr, Montante, Taxa, ret, tipo, first local Quant1, Quant2, Unid, cab, codigo cor := setcolor( cJanela ) janela := FazBox( 10, 20, 18, 77, "Venda de Item", cJanela, 3, cTitulo ) Descri1 := space( 22 ) Descri2 := space( 40 ) descr := space( 100 ) Montante := Taxa := tipo := ret := 0 codigo := space( 13 ) Quant1 := Quant2 := space( 3 ) cab := 48 @ 11, @ 12, @ 12, @ 13, @ 14, @ 15, @ 16, read 23 23 40 23 23 23 23 say say say say say say say "Codigo: "Quantidade : "." "Descrio 1: "Descrio 2: "Montante : "Taxa : " get codigo " get Quant1 get Quant2 " get Descri1 " get Descri2 " get Montante pict "@K 9999999.99" " get Taxa pict "@K 99"
if( lastkey() != K_ESC ) descr := Descri1 + Descri2 @ 17, 23 say "Aguarde..." if ( ret == 0 .or. ret == 68 ) ret := Vnd_Item( codigo, descr, Quant1, Quant2, Str( Montante * 100, 9), Taxa ) endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
23
Parmetros: # Codigo String com at 13 caracteres com o cdigo do item da venda; # Descricao String com at 62 caracteres correspondentes descrio do item; # Quantidade String com exatamente 7 caracteres contendo a quantidade vendida neste item. Este parmetro tem formao bastante rgida e deve, necessariamente, ter a seguinte formao: <parte inteira> + <,> + <parte fracionria> Se a parte inteira tiver, por exemplo, 3 caracteres, a parte fracionria dever ter, certamente, 3 caracteres. Se, por exemplo, a parte inteira tiver 5 caracteres, a parte fracionria dever ter, portanto, 1 caracter. Veja os seguintes exemplos prticos: - Quantidade := "001,000" - Quantidade := "00100,0" - Quantidade := "03,3400" - Quantidade := "31,0405" Observe que a posio da vrgula varivel, mas o tamanho total do parmetro (incluindo a vrgula) SEMPRE 7 caracteres. Observe tambm que obrigatrio o preenchimento com zeros esquerda. # Valor String com at 9 caracteres correspondentes ao valor unitrio do item; # Taxa Corresponde a um valor numrico com a posio da alquota na programada. Para a verso 3.01 servem as posies de alquotas (idntico a 3.00): 0 - 15 = T0 a T15 16 = Substituio tributria 17 = Isento 18 = No incidente # Unidade String com 2 caracteres que informa impressora a unidade que ser utilizada na venda do item. Exemplos de unidade seriam "Kg", "Lt", "P", etc. # Digito String com 1 caracter, precisamente, que indica se a impressora dever utilizar duas ou trs casas decimais no preo unitrio do item. Se este parmetro valer "3", a impressora ir assumir trs casas decimais. Caso este parmetro valha "2" ou qualquer outro valor (exceto "3"), a impressora ir utilizar somente duas casas decimais para o valor do item. Observaes:
tabela abaixo
24
Este comando interessa somente aos clientes que trabalham com trs casas decimais no preo unitrio do item. Caso isto no seja necessrio, a funo Vnd_Item (explicada no item 3.4 deste manual), pode ser utilizada na verso 3.01 da impressora fiscal, sem problema algum. Outro detalhe, que fica claro no exemplo que segue, mas vale a pena mencionar: se for dito que o preo unitrio tem 3 casas decimais, evidente que a impressora ir assumir os trs ltimos caracteres do parmetro "Valor" como sendo os centavos. Por exemplo, se o parmetro Valor valer "1234", a impressora ir assumir o valor do item como sendo R$1,234 Da mesma forma, valem as observaes j conhecidas: este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". Tambm este comando no ser aceito se for enviado um valor invlido no parmetro "Taxa". Observe o fato de no utilizar alquotas no fiscais em cupons fiscais ou vice-versa. Caso isto ocorrer, a impressora ir gerar um erro. Outro detalhe importante: obrigatrio o envio completo dos caracteres numricos da parte inteira e fracionada para a aceitao do comando. O parmetro "Codigo" at pode ter um tamanho menor do que 13 bytes. No entanto, a modificao dele somente possvel via interveno tcnica. possvel a verificao do tamanho programado na "Leitura X" ou "Reduo Z".
Exemplo:
Static Function FVendaD( opc1 ) local Janela, cor, Descri1, Descri2, descr, Montante, Taxa, ret, tipo, first local Quant1, Quant2, Unid, cab, codigo, Unidade, Digitos local I_accept, quantidade cor := setcolor( cJanela ) janela := FazBox( 10, 20, 21, 77, "Venda de Item", cJanela, 3, cTitulo ) Descri1 := space( 22 ) Descri2 := space( 40 ) descr := space( 100 ) tipo := 0 ret := 0 codigo := space( 13 ) Quant1 := space( 3 ) Quant2 := space( 3 ) quantidade := space ( 7 ) Unidade := space( 2 ) Digitos := space( 1 ) cab := 48 I_accept := "N" codigo := "00000000-00" Quant1 := "001" Quant2 := "000" quantidade := "001,000" Descri1 := " Testando a descricao" Descri2 := "geral de produto" Montante := montantepreferido Taxa := segurataxatable Unidade := "Kg" Digitos := "2" @ 11, 23 say "Numero de casas decimais: " get Digitos valid Digitos=="2".or.Digitos=="3" read @ 12, 23 say " Codigo: " get codigo if (Digitos == "3") @ 13, 23 say "Quantidade :" get quantidade else @ 13, 23 say "Quantidade : " get Quant1 @ 13, 40 say "." get Quant2
25
endif @ 14, 23 say "Unidade : " get Unidade @ 15, 23 say "Descriao 1: " get Descri1 @ 16, 23 say "Descriao 2: " get Descri2 if (Digitos == "3") @ 17, 23 say "Montante : " get Montante read else @ 17, 23 say "Montante : " get Montante read endif montantepreferido := Montante if( lastkey() == K_ESC ) R_TELA( janela ) setcolor( cor ) return endif @ 18, 23 say "Taxa read segurataxatable := Taxa if( lastkey() != K_ESC ) descr := Descri1+Descri2 @ 20, 23 say "Aguarde... ret := ImpCab ( cab ) "
if ( ret != 68 .and. ret != 0 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return else if (Digitos == "3") ret := VndItem3( codigo, descr, quantidade, Str( Montante * 1000, 9), Taxa, Unidade, Digitos ) else ret := Vnd_Item( codigo, descr, Quant1, Quant2, Str( Montante * 100, 9), Taxa ) endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif endif endif return NIL
26
Parmetros: # Descr String de at 60 caracteres com a descrio do item; # Valor String com at 9 caracteres correspondentes ao valor do item; # Taxa Corresponde a um valor numrico com a posio da alquota programada: 0 - 9 = T0 a T9 10 = Sangria (no fiscal) 11 = Entrada de numerrio (no fiscal) 12 = Substituio tributria 13 = isento 14 = No incidente 15 = Servios 16 = Recebimentos diversos (no fiscais)
na
tabela
Observaes: Este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". Da mesma forma, este comando no ser aceito se for enviado no Parmetro "Taxa", valores acima de 17d. Os valores 10 e 11 para o parmetro "Taxa" somente sero aceitos em cupom no fiscal. Este comando no serve para cupons fiscais nas impressoras (todas as verses) nem para cupons fiscais nas verses 3.0x. modelo Dprint
Nas impressoras fiscais verses 3.0x, esta funo utilizada somente dentro de cupons no fiscais no vinculados, com a diferena de que, no lugar do parmetro Taxa, mandamos o nmero do comprovante no fiscal ao qual desejamos totalizar a transao. Por exemplo, se programamos um cupom no fiscal no vinculado chamado "Recebimento" na posio 03, usaremos a venda descritiva da seguinte forma:
estamos
supondo
que
valor
do
registro
foi
de
27
Parmetros: # Descr String de at 78 caracteres com a descrio do item; # Valor String com at 9 caracteres correspondentes ao valor do item; # Taxa Corresponde a um valor numrico com a posio da alquota programada: 0 - 9 = T0 a T9 10 = Sangria (no fiscal) 11 = Entrada de numerrio (no fiscal) 12 = Substituio tributria 13 = isento 14 = No incidente 15 = Servios 16 = Recebimentos diversos (no fiscais)
na
tabela
Observaes: Este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". Tambm este comando no ser aceito se for enviado um valor invlido no parmetro "Taxa". Observe o fato de no utilizar alquotas no fiscais em cupons fiscais ou vice-versa. Caso isto ocorrer, a impressora ir gerar um erro. Este comando no pode ser utilizado nas impressoras modelo SPrint verso 3.00 e DPrint. Este comando somente pode ser usado nas impressoras SPrint 2.04 e TPrint. Nas impressoras fiscais verses 3.0x, esta funo utilizada somente dentro de cupons no fiscais no vinculados, com a diferena de que, no lugar do parmetro Taxa, mandamos o nmero do comprovante no fiscal ao qual desejamos totalizar a transao. Por exemplo, se programamos um cupom no fiscal no vinculado chamado "Recebimento" na posio 03, usaremos a venda descritiva da seguinte forma:
estamos
supondo
que
valor
do
registro
foi
de
28
Parmetros: # Tipo 0 = desconto; 1 = cancela desconto dado anteriormente; # Descr String com at 60 caracteres com a descrio do item. # Valor String com at 9 caracteres com o valor do item. Observaes: Para o cancelamento de desconto, o valor do parmetro "Valor" desconsiderado. Na verso 3.0x das impressoras fiscais, um desconto de item no pode ter descrio. Assim, o parmetro "Descr" desconsiderado nestas verses.
Exemplo:
Static Function FCancItem () local cmd, Janela, cor, descr, Descri1, Descri2, Montante, Cancela, Retifica cor := JANELA := Cancela Retifica Descri1 Montante setcolor( cJanela ) FazBox( 11, 30, 20, 75, "Estorno/Desconto de Item", cJanela, 3, cTitulo ) := "C" := "N" := Descri2 := space( 30 ) := Taxa := Item := 0
if( Retifica == "N") tipo := 0 else tipo := 1 endif ret := DescItem( tipo, descr, Str( Montante * 100, 9) )
return NIL
29
Exemplo:
Static Function FCancItem () local cmd, Janela, cor, descr, Descri1, Descri2, Montante, Cancela, Retifica local Ultimo, Taxa, tipo, ret, Item cor := JANELA := Ultimo Cancela Retifica Descri1 Montante setcolor( cJanela ) FazBox( 11, 30, 20, 75, "Estorno/Desconto de Item", cJanela, 3, cTitulo ) := "S" := "C" := "N" := Descri2 := space( 30 ) := Taxa := Item := 0
if( lastkey() != K_ESC ) @ 19, 33 say "Aguarde..." descr := Descri1 + Descri2 if( Ultimo == "N") ret := CancIDef( Str( Item, 4 ), Descri1 ) else if (Cancela=="D") ret := DescItem( tipo, descr, Str( Montante * 100, 9) ) else ret := CancItem( descr ) endif endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
30
Parmetros: # Item String de 4 caracteres com o nmero do item a ser cancelado. # Descr String de 30 caracteres com a descrio do item.
Observaes: Esta funo pode ser utilizada no ECF verso 3.0x, com um detalhe: a descrio ignorada pela impressora. O motivo disto esta baseado na legislao, que proibiu o uso de descries livres no cancelamento de itens. A impressora no ir gerar erro caso seja enviada uma descrio, mas simplesmente no ir imprimi-la.
Exemplo:
Static Function CancelandoItem () local cmd, Janela, cor, descr, Descri1, Descri2, Montante, Cancela, Retifica local Ultimo, Taxa, tipo, ret, Item cor := JANELA := Ultimo Cancela Retifica Descri1 Montante setcolor( cJanela ) FazBox( 11, 30, 20, 75, "Estorno/Desconto de Item", cJanela, 3, cTitulo ) := "S" := "C" := "N" := Descri2 := space( 30 ) := Taxa := Item := 0
if( lastkey() != K_ESC ) @ 19, 33 say "Aguarde..." descr := Descri1 + Descri2 if( Ultimo == "N") ret := CancIDef( Str( Item, 4 ), Descri1 ) else if (Cancela=="D") ret := DescItem( tipo, descr, Str( Montante * 100, 9) ) else ret := CancItem( descr ) endif endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
31
Parmetros: # Tipo 0 = pagamento vista; 1 = cancela pagamento a vista; # Descr String com at 10 caracteres com a descrio do tipo de pagamento ( vista, dinheiro ou cheque); # Valor String com at 10 caracteres correspondentes ao valor do pagamento. # Mens 0 = imprime a mensagem "A VISTA"; 1 = omite a mensagem "A VISTA"; # Linhas Corresponde a um byte numrico com a informao de quantas linhas complementares de descrio pode ter a forma de pagamento. Os valores possveis para este parmetro so 0, 1, 2 e 3. Se for enviado um valor acima de 3, a impressora assumir 3 linhas. Estas linhas complementares so impressas utilizando a funo ImpLinha.
Observaes: Este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". O mesmo acontecer se for enviado um valor invlido no parmetro "Taxa". Quando se cancela um pagamento, o parmetro "Valor" desconsiderado.
Exemplo:
Static Function Pagando () local Janela, cor, acres, tipo, Montante, Retifica, ret, Valor, mens Local vRet := {} local Data local bnc, fav, loc, esp, dat local forma Retifica := "N" Montante := acres := 0 Desc_pag := space ( 11 ) Valor := space( 10 ) mens := 0 Lmens := 0 forma := space ( 2 ) forma := "00" if( lastkey() != K_ESC ) Valor := substr( VRet[ 6 ], 9, 2 ) +; substr( VRet[ 6 ], 12, 3 ) +; substr( VRet[ 6 ], 16, 3 ) +; substr( VRet[ 6 ], 20, 2 )
32
Desc_pag := "Dinheiro" Montante := val( Valor ) / 100 endif if ( tipo == 0 ) @ 20, 41 say " Montante: read endif if( lastkey() != K_ESC ) @ 21, 41 say " Aguarde..." Data := date() Data := dtoc( Data ) dat := substr( Data, 1, 2 ) +; substr( Data, 4, 2 ) +; substr( Data, 7, 2 ) if( Retifica == "S") if(pmodeles == "E") ret := Pagamnt( tipo, Str( Montante * 100, 10 ), mens, Lmens, Forma ) else ret := PagCancPag( tipo, Desc_pag, Str( Montante * 100, 10 ), mens, Lmens ) endif endif if ( ret != 0 ) MensagemErro( "Retorno da impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif return NIL
33
Observaes: Este comando no ser aceito se for enviado um valor negativo ou igual a zero no parmetro "Valor". O mesmo acontecer se for enviado um valor invlido no parmetro "Taxa". Quando se cancela um pagamento, o parmetro "Valor" desconsiderado.
Exemplo: Como possvel observar, os pagamentos vista e prazo so bastante semelhantes. Na verdade, a nica diferena entre eles referente ao valor dado em pagamento. No pagamento vista, a impressora aceita um valor maior do que o total da venda (fornecendo TROCO neste caso). No pagamento prazo, o valor dado em pagamento deve ser exatamente igual ao valor total da venda, nem mais nem menos. Do ponto de vista dos totalizadores internos da impressora, no h diferena alguma entre as duas modalidades de pagamento.
34
# LMens Corresponde a um byte numrico com a informao de quantas linhas complementares de descrio pode ter a forma de pagamento. Os valores possveis para este parmetro so 0, 1 e 2. # Forma String com dois caracteres contendo a posio na tabela da descrio que desejamos utilizar no pagamento. Observaes: Esta funo somente vlida nas verses 3.00 do ECF. Para utilizar esta funo, necessrio antes realizar a programao das formas de pagamento que se deseja utilizar. A impressora aceita a programao de at 20 diferentes formas de pagamento, cada uma tendo sua descrio e seu acumulador particular. Caso seja enviado uma requisio de pagamento utilizando uma forma no programada, a impressora ir retornar um erro. Para realizar vendas, obrigatrio ter, no mnimo, uma forma de pagamento cadastrada.
Exemplo:
Static Function Pagando () local Janela, cor, acres, tipo, Montante, Retifica, ret, Valor, mens Local vRet := {} local Data local bnc, fav, loc, esp, dat local forma Retifica := "N" Montante := acres := 0 Desc_pag := space ( 11 ) Valor := space( 10 ) mens := 0 Lmens := 0 forma := space ( 2 ) forma := "00" if( lastkey() != K_ESC ) Valor := substr( VRet[ 6 ], 9, 2 ) +; substr( VRet[ 6 ], 12, 3 ) +; substr( VRet[ 6 ], 16, 3 ) +;
35
2 )
Montante := val( Valor ) / 100 endif if ( tipo == 0 ) @ 20, 41 say " Montante: read endif if( lastkey() != K_ESC ) @ 21, 41 say " Aguarde..." Data := date() Data := dtoc( Data ) dat := substr( Data, 1, 2 ) +; substr( Data, 4, 2 ) +; substr( Data, 7, 2 ) if( Retifica == "S") if(pmodeles == "E") ret := Pagamnt( tipo, Str( Montante * 100, 10 ), mens, Lmens, Forma ) else ret := PagCancPag( tipo, Desc_pag, Str( Montante * 100, 10 ), mens, Lmens ) endif endif if ( ret != 0 ) MensagemErro( "Retorno da impressora", ret ) R_TELA( janela ) setcolor( cor ) return endif return NIL
36
Observaes: Esta funo somente vlida nas verses 3.00 do ECF. Para utilizar esta funo, necessrio antes realizar a programao das formas de pagamento que se deseja utilizar. Isto significa que ambas as formas de pagamento (a de retirada e a de depsito) devem ser vlidas.
Exemplo:
Static Function _pgTransf() local cmd, Janela, cor local pagOut, pagIn, Valor, ret cor := setcolor( cJanela ) JANELA := FazBox( 10, 25, 17, 72, "Transferencia de Valor", cJanela, 3, cTitulo ) pagOut := space(2) pagIn := space(2) pagValor := 0 pagOut := "00" pagIn := "01" @ 12, 28 say "Pagamento de RETIRADA:" get pagOut pict "@K" @ 13, 28 say "Pagamento de DEPOSITO:" get pagIn pict "@K" @ 14, 28 say " Valor do movimento:" get pagValor pict "@K 9999999.99" read if( lastkey() != K_ESC ) @ 16, 28 say "Aguarde..." ret := Transfer( pagOut, pagIn, str(pagValor*100,10) ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif if (txrxview == ATIVO) MostraFiles( ret ) endif endif R_TELA( janela ) setcolor( cor ) return NIL
37
3.15 - Subtotal
Funo: SubTotal ( )
Observao: Esta funo deve ser enviada para a impressora imediatamente antes de ser realizada uma alterao no subtotal (desconto ou acrscimo). No uma funo utilizada para totalizar o cupom. A totalizao feita automaticamente no momento do pagamento. Esta funo pode ser usada tanto na verso 2.04 quanto nas verses 3.0x.
Exemplo:
Static Function FunctionSubtotal() local Janela, cor, ret cor := setcolor( cJanela ) janela := FazBox( 12, 30, 14, 75, "Aviso", cJanela, 3, cTitulo ) @ 13, 33 say "Aguarde..." ret := SubTotal() if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif R_TELA( janela ) setcolor( cor ) return NIL
38
Exemplo:
Static Function FAcresSubt () local Janela, cor, acres, tipo, Descri1, Montante, Retifica, ret
cor := setcolor( cJanela ) janela := FazBox( 13, 30, 18, 75, "Acrescimo no SubTotal ou Cancela", cJanela, 3, cTitulo ) Retifica := "N" Descri1 := space( 22 ) Montante := 0 acres := 1 _SimNao( 14, 59, Retifica ) @ 14, 33 say "Cancela Acrescimo? (S/N):" get Retifica Retifica ) read ret := 0 if( lastkey() != K_ESC ) @ 15, 33 say "Descricao: read " get Descri1
39
if( Retifica == "S") tipo := 1 @ 17, 33 say "Aguarde..." ret := CADSubTot( acres, tipo, Descri1, Str( Montante * 100, 9 ) ) else tipo := 0 if ( lastkey() != K_ESC ) ret := CADSubTot( acres, tipo, Descri1, Str( Montante * 100, 9 ) ) @ 17, 33 say "Aguarde..." endif endif endif if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL
40
Observaes: Esta funo utilizada somente na TPrint, onde o preechimento de cheques feito por um mecanismo IM70. Um cheque, observado no sentido horizontal, tem cerca de 80 colunas por 20 linhas.
DPrint 2.04 e TPrint em geral ImpCheque( bnc, valor, fav, loc, dat, esp)
Onde: Bnc - string de trs posies contendo o nmero do banco; Valor - string de 10 posies contendo o valor numrico do cheque, sem pontos nem vrgula. Fav - string com 60 caracteres contendo o favorecido (nominal) do cheque; Loc - string com at 20 caracteres contendo a cidade do cheque; Dat - string com exatamenteo 8 caracteres contendo a data do cheque; Esp - string com at 15 caracteres contendo a informao de campo especial.
Exemplo prtico: Neste exemplo, observe o uso da funo de status do cupom para capturar tanto o valor total quanto a data da impressora, informaes estas que sero usadas para o preenchimento do cheque. Observe ainda o uso das funes para a impresso do endosso. Static Function _Cheque ()
41
Janela, cor, acres, tipo, Montante, Retifica, ret, Valor, mens vRet := {} Data bnc, fav, loc, esp, dat LF1, Endosso1, LF2, Endosso2 Retifica := "N" Montante := acres := 0 Valor := space( 10 ) mens := 0 Lmens := 0 bnc := space( 3 ) bnc := "001" fav := space( 60 ) fav := 'SCHALTER ELETRONICA LTDA' loc := space( 20 ) loc := 'PORTO ALEGRE esp := space( 15 ) esp := '(051) 346 37 99' cor := setcolor( cJanela )
'
if (Mod == 'E') janela := FazBox( 10, 05, 22, 75, "Pagamento em Cheque", cJanela, 3, cTitulo ) LF1 := 12 Endosso1 := space( 60 ) Endosso1 := 'LINHA 1 DO ENDOSSO DO CHEQUE ' LF2 := 1 Endosso2 := space( 60 ) Endosso2 := 'LINHA 2 DO ENDOSSO DO CHEQUE ' else janela := FazBox( 10, 05, 18, 75, "Pagamento em Cheque", cJanela, 3, cTitulo ) endif ret := 0 if( lastkey() != K_ESC ) VRet := StatusCup() if ( VRet[ 1 ] != 0 ) MensagemErro( "Retorno Impressora", if( lastkey() == K_ESC ) R_TELA( janela ) setcolor( cor ) return endif else Valor := substr( VRet[ 6 ], 9, substr( VRet[ 6 ], 12, substr( VRet[ 6 ], 16, substr( VRet[ 6 ], 20, Montante := val( Valor ) / 100 endif Set century on Data := date()
ret )
2 3 3 2
) +; ) +; ) +; )
42
Data := dtoc( Data ) dat := substr( Data, 1, 2 ) +; substr( Data, 4, 2 ) +; substr( Data, 7, 4 ) Set century off @ @ @ @ @ @ 11, 06 say " Montante: " get Montante pict "@K 99999999.99" 12, 06 say " Banco: " get bnc 13, 06 say " Favorecido: " get fav 14, 06 say " Localidade: " get loc 15, 06 say " Campo Especial: " get esp 16, 06 say " Data: " get dat if (Mod == 'E') @ 17, 06 say " LF1: " get LF1 pict "@K99" @ 18, 06 say " End1:" get Endosso1 @ 19, 06 say " LF2: " get LF2 pict "@K99" @ 20, 06 say " End2:" get Endosso2 endif read if (Mod == 'E') ret := Imprecheq( bnc, str( Montante * 100, 10), fav, loc, dat, esp ) @ 21, 06 say " Aguarde imprimindo o endosso ... ret := LinCheque( LF1, Endosso1 ) if ( ret == 0 ) ret := LinCheque( LF2, Endosso2 ) endif else ret := ImpCheque( bnc, str( Montante * 100, 10), fav, loc, dat, esp ) endif "
43
44
Exemplo:
Static Function FCancelandoVenda () local Janela, cor, ret, oper, Descri1 cor := setcolor( cJanela ) janela := FazBox( 16, 30, 19, 75, "Aviso", cJanela, 3, cTitulo ) Descri1 := space( 10 ) Descri1 := "OPERADOR" @ 17, 33 say "Operador: read if( lastkey() == K_ESC ) R_TELA( janela ) setcolor( cor ) return endif @ 18, 33 say "Aguarde..." ret := CancVenda( Descri1 ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) else ret := LineFeed( 1, 10 ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL " get Descri1 pict "@K"
45
if ( pr1 == 1 ) Descri1 := "OPERADOR" @ 18, 33 say "Operador: read endif @ 19, 33 say "Aguarde...Finalizando" ret := FimTrans( Descri1 ) if ( ret != 0 .and. ret != 69 ) MensagemErro( "Retorno Impressora", ret ) else ret := AbreGaveta() if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif ret := LineFeed( 1, 10 ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif return NIL " get Descri1 pict "@K"
46
Exemplo:
Static Function FFimVenda ( pr1, pr2 ) local Janela, cor, ret, Descri1, LinhaCom local n, i, qvincula LinhaCom := space ( 48 ) qvincula := space ( 2 ) cor janela Descri1 := setcolor( cJanela ) := FazBox( 17, 30, 21, 75, "Aviso", cJanela, 3, cTitulo ) := space( 10 )
if ( pr1 == 1 ) Descri1 := "OPERADOR" qvincula := "00" @ 18, 33 say "Operador: " get Descri1 pict "@K" @ 19, 33 say "Vinculados/Vias: " get qvincula pict "@K 99" read endif if( lastkey() == K_ESC ) R_TELA( janela ) setcolor( cor ) return endif ret := FimTVinc( Descri1, qvincula ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) R_TELA( janela ) setcolor( cor ) return else @ 20, 33 say "Aguarde... Finalizando" endif
47
4 - Relatrios
4.1 - Leitura "X"
Funo: LeituraX ( OperTerm ) Parmetros: # OperTerm String com no mximo 8 caracteres para a descrio de algum dado informativo (ex. registro do operador, Nmero do terminal etc).
Exemplo:
Static Function _LeituraX(opc2) local Terminal, Janela, cor, ret cor := setcolor( cJanela ) janela := FazBox( 9, 20, 14, 55, "Imprime Relatorio X", cJanela, 3, cTitulo ) Terminal := space( 8 ) Terminal := "OPERADOR" @ 11, 24 say "Operador:" get Terminal pict "XXXXXXXX" read ret := LeituraX( Terminal ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif return NIL
48
Parmetros: # OperTerm String com no mximo 8 caracteres para a descrio de algum dado informativo (ex. registro do operador, Nmero do terminal etc). Observaes: A leitura X gerencial imprime os mesmos dados que a leitura X convencional. A diferena est no fato de que a leitura X gerencial no fecha o cupom (imprimindo o rodap), permitindo que o usurio inclua informaes adicionais, caracterizando um relatrio prprio de cunho gerencial. Para a impresso desta parte adicional, o usurio tem 10 minutos somente. Depois de expirado este tempo mximo, a impressora automaticamente fecha o relatrio, imprimindo o rodap. O usurio pode ainda fechar o relatrio antes do tempo, enviando um fim de transao.
Exemplo:
Static Function _LeitXGer(opc2) local Terminal, Janela, cor, ret, Vezes, Repet cor := setcolor( cJanela ) janela := FazBox( 13, 20, 18, 55, "Imprime Relato X Gerencial", cJanela, 3, cTitulo ) Terminal := space( 8 ) Terminal := "OPERADOR" @ 15, 24 say "Operador:" get Terminal pict "XXXXXXXX" read if( lastkey() != K_ESC ) @ 17, 24 say "Aguarde..." ret := LeitXGer( Terminal ) if ( ret != 0 ) MensagemErro( "Retorno Impressora", ret ) endif endif R_TELA( janela ) setcolor( cor ) return NIL
49
50
51
de
# Vret[9] Totalizador contendo a soma de todos os descontos do dia, realizados em itens fiscais (String de 21 caracteres). # Vret[10] Totalizador contendo a soma de todos os acrscimos do dia, em itens fiscais (String de 21 caracteres). # Vret[11] Totalizador dirio contendo toda a venda realizada no dia, em itens de classificao fiscal, exceto os cancelamentos e descontos (String de 21 caracteres). # Vret[12] Totalizador dirio contendo a soma de itens de situao classificada como "Substituio tributaria" (String de 18 caracteres).
tributria
52
# Vret[13] Totalizador dirio contendo a soma de itens classificada como "Isento" (String de 18 caracteres).
de
situao
tributria
# Vret[14] Totalizador dirio contendo a soma de itens de classificada como "No incidente" (String de 18 caracteres).
situao
tributria
Os trs vetores descritos a seguir sero repetido dez vezes, uma para cada taxa de alquota programada, da taxa 00 a taxa 09 consecutivamente. # Vret[15] (Vret[18], Vret[21], Vret[24], Vret[27], Vret[30], Vret[33], Vret[36], Vret[39], Vret[42]) Alquota efetiva programada. No seguinte formato 99,99 % (String de 5 caracteres). # Vret[16] (Vret[19], Vret[22], Vret[25], Vret[28], Vret[31], Vret[34], Vret[37], Vret[40], Vret[43]) Totalizador contendo a soma de itens de situao tributria classificada nesta alquota efetiva (String de 18 caracteres). # Vret[17] (Vret[20], Vret[23], Vret[26], Vret[29], Vret[32], Vret[35], Vret[38], Vret[41], Vret[44]) Montante do correspondente imposto debitado nesta classificao (String de 18 caracteres).
documento
no
fiscal
emitido
aps
ltimo
fechamento
# Vret[46] Nmero do ltimo documento no fiscal emitido (String de 6 caracteres). # Vret[47] Contador de documentos no fiscais cancelados (String de 6 caracteres). # Vret[48] Totalizador dirio contendo (String de 18 caracteres).
soma
de
itens
classificada
como
"Sangria"
# Vret[49] Totalizador dirio contendo a soma de itens classificada como "Entrada de numerrio" (String de 18 caracteres). # Vret[50] Totalizador dirio contendo (String de 18 caracteres).
soma
de
itens
classificada
como
"Servio"
# Vret[51] Totalizador dirio contendo a soma de itens classificada como "Recebimento" (String de 18 caracteres). # Vret[52] Totalizador contendo a soma de todos os valores pertencentes a itens classificao no fiscal, que foram cancelados no dia (String de 18 caracteres).
de
# Vret[53] Totalizador contendo a soma de todos os descontos do dia, realizados em itens no fiscais (String de 18 caracteres).
53
# Vret[54] Totalizador contendo a soma de todos os acrscimos do dia, realizados em itens no fiscais (String de 18 caracteres). # Vret[55] Total de tempo emitindo cupom no dia, no formato HHH:MM:SS (String caracteres).
de
# Vret[56] Total em que a impressora se encontra ligada no dia, no formato HHH:MM:SS (String de 9 caracteres).
Observaes: Na descrio deste comando "Item fiscal" so todos os itens incidentes de "ICMS" ou que possuem a seguinte situao tributria "Substituio tributria", "Iseno" ou "No incidente". E tambm, quando nos referimos a "Item no fiscal", estamos nos referindo a todos os itens no incidentes de "ICMS", Ex.: "Recebimentos de prestao", "Sangria", "Entrada de numerrio" etc. Na descrio deste comando a referncia "dia" corresponde ao dia em que foi realizado a abertura sem ter realizado o fechamento ou seja no dia em que ocorreu a emisso de um cupom de venda sem ainda ter ocorrido a reduo Z, caso no tenha ocorrido abertura a referncia "dia" corresponde ao dia atual. Outro detalhe ilustrativo: os parmetros de retorno que possuem valores em moeda corrente possuem pontos e virgula. A esquerda do valor preenchida com zeros. Ex.:0000000009.470,30. Esta funo pode ser utilizada tanto na verso 2.04 quanto na verso 3.0x. No entanto, ela mais apropriada para a verso 2.04, j que ela, por exemplo, no cobre toda a extenso de alquotas programadas na verso 3.0x.
54
55
Observaes: Se no parmetro "Tipo" for selecionado perodo entre datas, os valores dos parmetros "Ri" e "Rf" so ignorados. Se no parmetro "Tipo" for selecionado perodo entre redues, os parmetros "Di" e "Df" so ignorados. No entanto, todos os parmetro de chamada da funo devem ser passados independente de serem considerados ou no. Para aplicaes que utilizem a biblioteca e o driver em modo protegido, devese realizar a leitura da memria fiscal em blocos, sendo que cada bloco deve ser selecionado em no mximo 100 redues.
Exemplo:
O exemplo a seguir utiliza o comando "Leitura de Disponibilidade da Memria Fiscal" para definir o nmero de vetores para os dados dos usurios e das redues. Aps a leitura da memria fiscal os dados so colocados em um arquivo.
Local vRet:= {}, vUsu:= {}, vRed:= {}, vTot:= {}, i, vRetF:= {} local DtIni, DtFim, Tipo, Red_i, ReD_f, Drive, Arquivo DtIni Tipo Red_i Arquivo Drive := := := := := DtFim := ctod ( "" ) 1 Res_f := 0 space(11) "C"
aadd( vRet, 0 ) @ 13,24 say "Tipo: " Tipo < 5 .and. Tipo > 0 @ 14,24 say "Data Inicial: " Tipo == 1 .or. Tipo == 3 @ 15,24 say "Data Final: " Tipo == 1 .or. Tipo == 3 @ 16,24 say "Reduo Inicial:" when Tipo == 2 .or. Tipo == 4 @ 17,24 say "Reduo Final: " when Tipo == 2 .or. Tipo == 4 @ 18,24 say "Arquivo: " XXXXXXXXXXX" when Tipo > 2
get Tipo pict "@K 9" valid; get DtIni pict "@K" when; get DtFim pict "@K" when;
get Red_i pict "@K 9999"; get Red_f pict "@K 9999" get Arquivo pict "@K;
if( lastkey() != K_ESC ) DtIni := dtoc( DtIni ) DtFim := dtoc( DtFim ) DtIni := substr(DtIni,1,2) + substr(DtIni,4,2) + substr(DtIni,7,2) DtFim := substr( DtFim,1,2) + substr(DtFim,4,2) + substr( DtFim, 7, 2 ) @ 19,24 say aadd( vRet, aadd( vRet, aadd( vRet, ret := "Aguarde..." 0 ) 0 ) 0 )
if( vRet[ 1 ] == 0 ) vRet[ 2 ] = if( vRet[ 2 ] == 0, 1, vRet[ 2 ] ) vRet[ 3 ] = if( vRet[ 3 ] == 0, 1, vRet[ 3 ] ) for i = 1 to vRet[ 2 ] aadd( vUsu, space( 59 ) ) next for i = 1 to vRet[ 3 ] aadd( vRed, space( 41 ) ) next
56
0 ) 0 ) 0 ) space( 20 ) )
LeitMFisc( vCab, vUsu, vRed, tipo, DtIni, DtFim, Red_i, Red_f ) if( Tipo == 3 .or. Tipo == 4 ) Arquivo := alltrim( Arquivo ) set printer to ( Arquivo ) set device to printer for i = 1 to len( vUsu ) @ prow()+1,1 say substr(vUsu[i], substr( vUsu[ i substr( vUsu[ i substr( vUsu[ i substr( vUsu[ i substr( vUsu[ i next for i = 1 to len( vRed ) @ prow() + 1, 1 say substr( substr( substr( substr( substr( next
) ) ) ) )
+ + + +
+; +; +; +;
i i i i i
], ], ], ], ],
1, 5, 9, 17, 22,
4 4 8 5 20
)+" ) + ) + ) + )
@ prow() + 1, 1 say substr( vCab[ 4 ], set device to screen set printer to endif endif endif
1, 20 )
57
Observaes: Este comando difere do comando anterior, de leitura da memria fiscal, para as opes de leitura via comunicao serial. Neste comando os dados so armazenados em um arquivo seguindo um formato de armazenamento j definido pela funo. Se no Parmetro "Tipo" for selecionado perodo entre datas, os valores dos Parmetros "Ri" e "Rf" so ignorados. Se no Parmetro "Tipo" for selecionado perodo entre redues, os Parmetros "Di" e "Df" so ignorados. Todos os Parmetro de chamada da funo devem ser passados independente de serem considerados ou no. Para aplicaes que so executadas no modo protegido, quando utilizar a leitura da memria fiscal via comunicao serial, deve realizar a leitura da memria em blocos, cada bloco deve ser selecionado no mximo 100 redues, evitando assim problemas com violao de acesso na memria devido ao tamanho dos buffers internos.
Retorno:
Aps a chamada da funo de leitura da memria fiscal retornada, alm do arquivo com os dados da memria, quando "Tipo" 3 ou 4, retornado um vetor com a seguintes caracterstica: # Vret[1] Cdigo de retorno da funo;
58
Exemplo:
local DtIni, DtFim, Tipo, Red_i, Res_f, Drive, Arquivo local vRet := {} DtIni Tipo Red_i Arquivo Drive := := := := := DtFim := ctod( "" ) 1 Res_f := 0 space( 11 ) "A"
aadd( vRet, 0 ) @ 13,24 say "Tipo: " Tipo < 5 .and. Tipo > 0 @ 14,24 say "Data Inicial: " Tipo == 1 .or. Tipo == 3 @ 15,24 say "Data Final: " Tipo == 1 .or. Tipo == 3 @ 16,24 say "Reduo Inicial:" when Tipo == 2 .or. Tipo == 4 @ 17,24 say "Reduo Final: " when Tipo == 2 .or. Tipo == 4 @ 18,24 say "Arquivo: " XXXXXXXXXXX" when Tipo > 2 read get Tipo pict "@K 9" valid; get DtIni pict "@K" when; get DtFim pict "@K" when;
get Red_i pict "@K 9999"; get Res_f pict "@K 9999" get Arquivo pict "@K;
if( lastkey() != K_ESC ) DtIni := dtoc( DtIni ) DtFim := dtoc( DtFim ) DtIni := substr(DtIni,1,2) + substr(DtIni,4,2) +; substr(DtIni,7,2) DtFim := substr( DtFim,1,2) + substr(DtFim,4,2) +; substr( DtFim, 7, 2 ) @ 19,24 say "Aguarde..." vRet:= LeitMemFisc ( Arquivo, Tipo, DtIni, DtFim, ; Red_i, Res_f ) if ( vRet[ 1 ] != 0 ) @ 19,24 say "Erro..." inkey( 0 ) else @ 19,24 say "Ok..." inkey( 0 ) endif endif
59
Exemplo de retorno: ------------------------------------------------------------------------Relatrio da Leitura da Memria Fiscal Relao dos Proprietrios Anteriores CGC IE Data e Hora Incio Data e Hora Trmino 47.396.635/0002-02 11020170011 13/03/96 17:03 25/03/96 12:13 47.396.635/0002-02 11020170011 26/03/96 12:13 Relao das Redues Reduo 0001 0002 0003 0004 0005 Reincio 0001 0001 0001 0001 0001 Data 13/03/96 14/03/96 15/03/96 16/03/96 18/03/96 Hora 21:04 21:15 21:05 20:59 21:12 Total 0000000000001.348,20 00000000000000935,50 0000000000001.105,00 0000000000001.740,10 0000000000001.351,30
60
4.
Valor
que
corresponde
reduo
# red_fim Utilizado se o Parmetro "Tipo" for 4. Valor que corresponde reduo final, devendo estar na faixa de 0 9999.
Observaes: Se no parmetro "Tipo" for selecionado perodo Parmetros "red_inc" e "red_fim" so ignorados. selecionado perodo entre redues, os parmetros ignorados. Todos os parmetro de chamada da funo devem serem considerados ou no. entre datas, os valores dos Se no parmetro "Tipo" for "data_inc" e "data_fim" so ser passados independente de
61
5 - Auxiliares
5.1 - Cancelando um cupom j finalizado
Funo: CancDoc ( OperTerm ) Parmetros: # OperTerm String com no mximo 8 caracteres para a descrio de algum dado informativo (ex. registro do operador, Nmero do terminal etc).
Parmetros: # Est Valor que determina o tipo da estao. Assume sempre o valor 1. # Lin Nmero de linhas a serem avanadas.
62
.f. - sensor de pouco papel. .f. - sensor de autenticao. .f. - sensor da gaveta. .f. - sensor de documento( estao de cheques ).
Exemplo:
Static Function _StatusDaImpressora() local Ret, Janela, cor cor := setcolor( cJanela ) janela := FazBox( 10, 20, 19, 71, "Status da Impressora", cJanela, 3, cTitulo )
63
if ( Ret[ 1 ] != 0 ) MensagemErro( "Retorno Impressora", Ret[ 1 ] ) else @ 11, 23 say "Total de Usuarios: " ?? Ret[ 2 ] @ 12, 23 say "Estado Interno: " ?? Ret[ 3 ] @ 13, 23 say "Estado Interno: " ?? Ret[ 4 ] @ 14, 23 say "Sensor de Pouco Papel: " ?? Ret[ 5 ] @ 15, 23 say "Sensor de Autenticaao: " ?? Ret[ 6 ] @ 16, 23 say "Sensor da Gaveta: " ?? Ret[ 7 ] @ 17, 23 say "Sensor de Documento: " ?? Ret[ 8 ] endif inkey( 1 ) enddo return NIL
64
Parmetros: Nenhum. Retorno: A funo StatusCup( ) retorna um vetor com as seguintes caractersticas: # Vret[1] Retorno da funo. # VRet[ 2 ] O Nmero do ECF. # VRet[ 3 ] O tipo do documento: 0 = no fiscal 1 = fiscal 2 = fora de cupom # VRet[ 4 ] O Nmero do cupom. # VRet[ 5 ] String contendo a data no formato # VRet[ 6 ] String de at 22 bytes contendo o # VRet[ 7 ] String de at 22 bytes contendo o # VRet[ 8 ] String de 6 caracteres com a hora
dd/mm/aa. valor do subtotal. valor do grande total (GT). atual, no seguinte formato HHMMAA.
Observaes: O valor do subtotal e do grande total so retornados sem o ponto decimal, assumindo-se que os 2 dgitos mais direita compem a parte fracionria. Quando o dado de retorno VRet[1] retornar algum valor diferente de zero os demais dados de retorno, o restante dos vetores, devem ser ignorados, uma vez que a informao que eles contero ser descartvel.
Exemplo:
Static Function _StatusCup() local VRet, Janela, cor cor := setcolor( cJanela ) janela := FazBox( 11, 20, 20, 71, "Status do Cupom", cJanela, 3, cTitulo ) @ 15, 23 say "Aguarde..." do while( lastkey() != K_ESC ) VRet := StatusCup() if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else
65
@ 13, 23 say "Nmero do ECF: " ?? VRet[ 2 ] @ 14, 23 say "Tipo Documento: " ?? VRet[ 3 ] @ 15, 23 say "Nmero do Cupom: " ?? VRet[ 4 ] @ 16, 23 say "Data: " ?? VRet[ 5 ] @ 17, 23 say "Sub Total: " ?? VRet[ 6 ] @ 18, 23 say "Grande Total: " ?? VRet[ 7 ] @ 19, 23 say "Hora Atual " ?? (substr( VRet[ 8 ], 1, 2) + ':'; +substr( VRet[ 8 ], 3, 2) + ':'; +substr( VRet[ 8 ], 5, 2) ) endif inkey( 1 ) enddo return NIL
66
Exemplo:
Static Function _StAL() local VRet, Janela, cor local IndAliq, numaliq cor := setcolor( cJanela ) janela := FazBox( 14, 20, 19, 71, "Status de uma Aliquota", cJanela, 3, cTitulo ) IndAliq := space( 2 ) IndAliq := "00" numaliq := 0 @ 16, 23 say "Indice da Aliquota: " get IndAliq pict "@K 99" read numaliq := val(Indaliq) if (numaliq > 20) MensagemErro("Entrada de dados incorreta", 400) else @ 18, 23 say "Aguarde..." do while ( lastkey() != K_ESC )
67
VRet := StatusAl(numaliq) if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else if ( VRet[2] == "S" ) @ 16, 23 say " @ 16, 23 say "ISSQN : " ?? VRet[ 3 ] endif if ( VRet[2] == "T" ) @ 16, 23 say " @ 16, 23 say "ICMS : " ?? VRet[ 3 ] endif @ 17, 23 ?? VRet[ @ 18, 23 ?? VRet[ endif inkey(1) enddo endif return NIL say " Total parcial : " 4 ] say "Imposto incidente : " 5 ]
"
"
68
Parmetro: # numpag String com 2 caracteres contendo a posio que a forma de pagamento ocupa na tabela programada de formas de pagamento. Assume valores de "00" at "15". Retorno: A funo StatusPg retorna um vetor com as seguintes caractersticas: # Vret[ 1 ] Retorno da funo. Caso neste campo venha o valor zero (0), os demais campos so vlidos, pois o comando foi executado com sucesso. Caso contrrio, ocorreu uma falha. # VRet[ 2 ] Retorna uma string de uma posio que indica se esta forma de pagamento est ativa ou no. Caso a forma de pagamento esteja ativa, este campo conter "S". Caso esteja inativa, conter "N". # VRet[ 3 ] Retorna uma string de uma posio que indica se esta forma de pagamento tem algum vnculo ou no. Caso a forma de pagamento possua algum vnculo, este campo conter "S". Caso esteja inativa, conter "N". # VRet[ 4 ] Retorna uma string que contm a descrio da forma de pagamento em questo. Exemplos de descries seriam "dinheiro", "cheque", "cartao credito", etc. # VRet[ 5 ] A string retornada utilizando-se esta forma totalizador particular.
neste campo traz o valor de quanto j foi vendido de pagamento. Cada forma de pagamento possui o seu
Exemplo:
Static Function _StPags() local VRet, Janela, cor local IndPaga, numpaga cor := setcolor( cJanela ) janela := FazBox( 12, 20, 17, 71, "Status de um pagamento", cJanela, 3, cTitulo ) IndPaga := space( 2 ) IndPaga := "00" numpaga := 0 @ 14, 23 say "Indice do pagamento: " get IndPaga pict "@K 99" read numpaga := val(IndPaga) do while( lastkey() != K_ESC )
69
@ 16, 23 say "Aguarde..." VRet := StatusPg(numpaga) if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ 14, 23 say " " @ 13, 23 say ?? VRet[ 2 ] @ 14, 23 say ?? VRet[ 3 ] @ 15, 23 say ?? VRet[ 4 @ 16, 23 say ?? VRet[ 5 endif inkey(0) enddo return NIL "Ativado? => " "Tem vinculo? => " "Descricao do pag.: " ] "Total vendido: " ]
70
Parmetro: # numcnf String com 2 caracteres contendo a posio que o comprovante no fiscal programado ocupa na tabela de comprovantes no fiscais. Assume valores de "00" at "15". Retorno: A funo StatusCnf retorna um vetor com as seguintes caractersticas: # Vret[ 1 ] Retorno da funo. Caso neste campo venha o valor zero (0), os demais campos so vlidos, pois o comando foi executado com sucesso. Caso contrrio, ocorreu uma falha. # VRet[ 2 ] Retorna uma string de uma posio que indica se este comprovante no fiscal est ativo ou no. Caso este comprovante no fiscal esteja ativo, este campo conter "S". Caso esteja inativo, conter "N". # VRet[ 3 ] Este campo contm o ttulo do comprovante no fiscal. Como ttulo entende-se a descrio do comprovante. # VRet[ 4 ] Este campo contm uma string que indica se o comprovante no fiscal em questo permite descontos nele. Caso este campo contenha "S", o comprovante permite descontos. Caso contenha "N", no permite. # VRet[ 5 ] Este campo contm uma string que indica se o comprovante no fiscal em questo permite acrscimos nele. Caso este campo contenha "S", o comprovante permite acrscimos. Caso contenha "N", no permite. # VRet[ 6 ] Este campo contm uma string que indica se o comprovante no fiscal em questo permite cancelamentos nele. Caso este campo contenha "S", o comprovante permite cancelamentos. Caso contenha "N", no permite. # VRet[ 7 ] Este campo contm uma string que indica se o comprovante no fiscal em questo obriga a existncia de pagamento nele. Caso este campo contenha "S", o comprovante obriga a existncia de pagamento. Caso contenha "N", o pagamento no condio obrigatria para o fechamento do comprovante. # VRet[ 8 ] Este campo contm uma string que indica se o comprovante no fiscal em questo vinculado. Caso este campo contenha "S", o comprovante vinculado. Caso contenha "N", no vinculado. # VRet[ 9 ]
71
Caso o comprovante no fiscal em questo seja vinculado, neste campo encontrase a posio do tipo de pagamento ao qual o comprovante vinculado. Por exemplo, se na posio 02 da tabela de pagamentos estiver o pagamento "Cartao Credito VISA", e o comprovante no fiscal em questo for vinculado a este tipo de pagamento, o campo Vret[9] conter a string "02". # VRet[ 10 ] Este campo contm quantos comprovantes no fiscais desta modalidade j foram emitidos no dia corrente de operao do ECF. # VRet[ 11 ] Este campo contm quantos comprovantes no fiscais desta modalidade j foram cancelados no dia corrente de operao do ECF. # VRet[ 12 ] Neste campo retorna uma string que contm o valor correspondente ao total de vendas computadas no comprovante no fiscal em questo. # VRet[ 13 ] Neste campo retorna uma string que contm o valor correspondente ao total de acrscimos computados no comprovante no fiscal em questo. Certamente que se o comprovante no fiscal foi programado para no aceitar acrscimos, no faz sentido a anlise deste totalizador. # VRet[ 14 ] Neste campo retorna uma string que contm o valor correspondente ao total de descontos computados no comprovante no fiscal em questo. Certamente que se o comprovante no fiscal foi programado para no aceitar descontos, no faz sentido a anlise deste totalizador. # VRet[ 15 ] Neste campo retorna uma string que contm o valor correspondente ao total de cancelamentos computados no comprovante no fiscal em questo. Certamente que se o comprovante no fiscal foi programado para no aceitar cancelamentos, no faz sentido a anlise deste totalizador.
Exemplo:
Static Function _StCnfs() local VRet, Janela, cor local IndPaga, numcnf cor := setcolor( cJanela ) janela := FazBox( 12, 20, 20, 71, "Status de compr. nao fiscal", cJanela, 3, cTitulo ) IndPaga := space( 2 ) IndPaga := "00" numcnf := 0 @ 14, 23 say "Indice do comprovante: " get IndPaga pict "@K 99" read numcnf := val(IndPaga) do while( lastkey() != K_ESC ) @ 16, 23 say "Aguarde..." VRet := StatusCnf(numcnf) if ( VRet[1] != 0 )
72
MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ @ @ @ @ @ @ @ @ @ @ @ @ endif inkey(0) R_TELA( janela ) setcolor( cor ) enddo return NIL @ 13, 23 say "Ativado? => " 13, 45 say "Titulo? => " 14, 23 say "Descontos? " 14, 45 say "Acrescimos? " 15, 23 say "Cancelamentos? " 15, 45 say "Tem pagamento? " 15, 45 say " vinculado? " 16, 23 say "Qual vinculo? " 16, 45 say "N. de CNFs: " 17, 23 say "Canc.s de CNFs: " 18, 23 say "Venda NF: " 18, 50 say "Acre. NF: " 19, 23 say "Desc. NF: " 19, 50 say "Canc. NF: " ?? VRet[ 2 ] ?? VRet[ 3 ] ?? VRet[ 4 ] ?? VRet[ 5 ] ?? VRet[ 6 ] ?? VRet[ 7 ] ?? VRet[ 8 ] ?? VRet[ 9 ] ?? VRet[ 10 ] ?? VRet[ 11 ] ?? VRet[ 12 ] ?? VRet[ 13 ] ?? VRet[ 14 ] ?? VRet[ 15 ]
73
Parmetro: # numuser String com 2 caracteres contendo o nmero do usurio. O primeiro usurio da mquina ter nmero "00", o segundo ter "01" e assim por diante. Assume valores de "00" at "19", pois a impressora permite no mximo 20 programaes de cabealhos. Retorno: A funo StatusUsr retorna um vetor com as seguintes caractersticas: # Vret[ 1 ] Retorno da funo. Caso neste campo venha o valor zero (0), os demais campos so vlidos, pois o comando foi executado com sucesso. Caso contrrio, ocorreu uma falha. # VRet[ 2 ] Retorna uma string contendo a primeira linha de endereo do cabealho. # VRet[ 3 ] Retorna uma string contendo a segunda linha de endereo do cabealho. # VRet[ 4 ] Retorna uma string contendo a terceira linha de endereo do cabealho. # VRet[ 5 ] Neste campo retorna o nmero da loja. # VRet[ 6 ] Neste campo retorna o nmero do equipamento. # VRet[ 7 ] Neste campo retorna uma string contendo o nmero do CGC do usurio. # VRet[ 8 ] Neste campo retorna uma string contendo o nmero da IE (Inscrio Estadual) do usurio. # VRet[ 9 ] Neste campo retorna uma string que contm o nmero da IM (Inscrio Municipal) do usurio. # VRet[ 10 ] Neste campo retorna uma string que contm a data inicial, a partir da qual o atual usurio comeou a utilizar o ECF. # VRet[ 11 ] Neste campo retorna uma string que contm a hora inicial, a partir da qual o atual usurio comeou a utilizar o ECF. # VRet[ 12 ]
74
Neste campo retorna uma string que contm a data final, at a qual o respectivo usurio utilizou o ECF. Se for requisitado o status do usurio atual, a informao de data final no procede. # VRet[ 13 ] Neste campo retorna uma string que contm a hora final, at a qual o respectivo usurio utilizou o ECF. Se for requisitado o status do usurio atual, a informao de hora final no procede. # VRet[ 14 ] Neste campo retorna uma string que traz o contador de reincio do usurio em questo. # VRet[ 15 ] Neste campo retorna o grande total do usurio em questo.
Exemplo:
Static Function _StUsers() local VRet, Janela, cor local NumUser, numusuario cor := setcolor( cJanela ) janela := FazBox( 12, 20, 23, 71, "Status do usu rio", cJanela, 3, cTitulo ) NumUser := space( 2 ) NumUser := "00" numusuario := 0 @ 14, 23 say "Nmero do usu rio: " get NumUser pict "@K 99" read numusuario := val(NumUser) do while( lastkey() != K_ESC ) @ 16, 23 say "Aguarde..." VRet := StatusUsr(numusuario) if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ 13, 23 say " " ?? VRet[ 2 ] @ 14, 23 say " " ?? VRet[ 3 ] @ 15, 23 say " " ?? VRet[ 4 ] @ 16, 23 ?? VRet[ @ 16, 55 ?? VRet[ @ 17, 23 ?? VRet[ @ 17, 55 ?? VRet[ @ 18, 23 ?? VRet[ @ 19, 23 ?? VRet[ @ 20, 55 say "Num. Loja: " 5 ] say "Num. ECF: " 6 ] say "CGC: " 7 ] say "IE: " 8 ] say "IM: " 9 ] say "Data inicial: " 10 ] say "Hora inicial: "
75
?? VRet[ @ 21, 23 ?? VRet[ @ 21, 55 ?? VRet[ @ 22, 23 ?? VRet[ @ 22, 40 ?? VRet[ endif inkey(0) enddo return NIL
11 ] say "Data final: " 12 ] say "Hora final: " 13 ] say "Reinicio: " 14 ] say "Total: " 15 ]
76
Exemplo:
Static Function _StEquip() local VRet, Janela, cor cor := setcolor( cJanela ) janela := FazBox( 14, 20, 19, 71, "Informacoes do ECF", cJanela, 3, cTitulo ) @ 18, 23 say "Aguarde..." VRet := StatusEcf() if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ 15, 23 say " Marca: " ?? VRet[ 2 ] @ 16, 23 say " Modelo: " ?? VRet[ 3 ] @ 17, 23 say " Versao do firmware: " ?? VRet[ 4 ] @ 18, 23 say " Numero de serie: " ?? VRet[ 5 ] endif return NIL
77
string com a posio do comprovante no fiscal vinculado que, aps uma pendncia. Obviamente que este campo somente trar uma aps a liberao da pendncia. Assim, este campo no traz uma para a emisso do comprovante vinculado.
# Vret[ 8 ] Retorna uma string com o Contador de Ordem de Operao (COO) do comprovante no fiscal que, aps emitido, libera uma pendncia. Igualmente ao vetor anterior, este campo somente trar uma informao vlida aps a liberao da pendncia. Assim, este campo no traz uma informao vlida para a emisso do comprovante vinculado.
78
Exemplo:
Static Function _StVincs() local VRet, Janela, cor local IndPaga, numcnf cor := setcolor( cJanela ) janela := FazBox( 12, 18, 22, 76, "Status de comprovante vinculado", cJanela, 3, cTitulo ) IndPaga := space( 2 ) IndPaga := "00" numcnf := 0 @ 14, 21 say "Indice do comprovante: " get IndPaga pict "@K 99" read numcnf := val(IndPaga) if( lastkey() != K_ESC ) @ 16, 21 say "Aguarde... " VRet := StatusVin(numcnf) if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ 16, 21 say " @ 15, 21 say "Pendencia: " ?? VRet[ 2 ] @ 15, 47 say " Tipo do vinculo: " ?? VRet[ 3 ] @ 17, 21 say " Valor da operacao: " ?? VRet[ 4 ] @ 18, 21 say " Valor da transacao: " ?? VRet[ 5 ] @ 19, 21 say " Numero do cupom: " ?? VRet[ 6 ] @ 20, 21 say "Posicao do CNF emitido: " ?? VRet[ 7 ] @ 21, 21 say " Cupom emitido: " ?? VRet[ 8 ] endif inkey(0) R_TELA( janela ) setcolor( cor ) endif if (txrxview == ATIVO) MostraFiles( VRet[1] ) endif R_TELA( janela ) setcolor( cor ) return NIL
"
79
Exemplo:
Static Function _StTroco() local VRet, Janela, cor cor := setcolor( cJanela ) janela := FazBox( 17, 20, 22, 71, "Totalizador de Troco", cJanela, 3, cTitulo ) @ 20, 23 say "Aguarde... " VRet := StatusTrc() if ( VRet[1] != 0 ) MensagemErro( "Retorno Impressora", VRet[ 1 ] ) else @ 20, 23 say " " @ 19, 23 say " Descricao : " ?? VRet[ 2 ] @ 20, 23 say " Montante: " ?? VRet[ 3 ] inkey(0) endif if (txrxview == ATIVO) MostraFiles( VRet[1] ) endif R_TELA( janela ) setcolor( cor ) return NIL
80
Av. Berlim, 514 - So Geraldo CEP 90240-580 Porto Alegre - RS FONE: (051) 3463799 FAX: (051) 3465140 www.schalter.com.br schalter@schalter.com.br
81
obrigatria a leitura e interpretao do cdigo de retorno A maioria dos cdigos de retorno so provenientes da prpria impressora. No entanto, existem alguns cdigos que so provenientes das bibliotecas ou DLLs utilizadas pelo aplicativo na comunicao com a impressora. Pode ocorrer, ainda, situaes onde um valor lido na porta serial mas, por problemas de comunicao, este valor no confivel. Por exemplo, comum alguns aplicativos lerem, na porta serial, o valor 255. Este erro no consta na tabela, mas geralmente ocorre quando a porta serial do micro est desabilitada ou defeituosa. A seguir descrevemos a origem da gerao do cdigo de retorno.
Cdigo Cdigo Cdigo Cdigo Cdigo Cdigo Cdigo (-100D) ou cdigo(-101D): Biblioteca em CLIPPER. (-01D): Retorno do driver. (00D): Retorno da impressora. (01D) ao cdigo (19D): Retorno do driver. (20D) ao cdigo (23D): Retorno da biblioteca de funes de cheque. (30D) e o cdigo (31D): Retorno da biblioteca em COBOL. (60D) ao cdigo (200D): Retorno da impressora.
Os valores do byte de retorno so indicados sempre, entre parnteses, ao lado da descrio do erro. A letra "D" significa que o nmero est na base decimal. A letra "H" significa que o nmero est na base hexadecimal.
82
83
84
85
86
87
88
89
90