Totali PoS
Objetivo e Considerações
*Documentar modelo de fórmulas utilizadas pelo Totali POS.
*As fórmulas abaixo são sugestões, algumas foram validadas nos clientes outras não.
*Mantenha esse artigo atualizado, isso nos ajudará na criação e aplicação das fórmulas de forma rápida e segura.
*Valide as fórmulas internamente. Antes de aplicar para todas as estações de trabalho do cliente, valide em uma máquina.
*Esse artigo é de uso interno, portanto não pode ser publicado ou repassado.
Tags
<n> - Liga Negrito
</n> - Desliga Negrito
- Liga Sublinhado
- Desliga Sublinhado
<c> - Liga Condensado
</c> - Desliga Condensado
- Liga Italico
- Desliga Italico
</fn> - Fonte Normal
</fa> - Liga Fonte Tipo A (normal)
</fb> - Liga Fonte Tipo B (condensada)
<in> - Liga Fonte Invertida (Fundo Preto)
</in> - Desliga Fonte Invertida
</ae> - Liga Alinhamento a Esquerda
</ce> - Liga Alinhamento ao Centro
</ad> - Liga Alinhamento a Direita
</linha_simples> - Imprime Linha Simples
</linha_dupla> - Imprime Linha Dupla
</logo> - Imprime Logotipo já gravado na Impressora (use utilitário do fabricante)
</corte_parcial> - Efetua Corte Parcial no Papel (não disponivel em alguns modelos)
</corte_total> - Efetua Corte Total no papel
</abre_gaveta> - Aciona a abertura da Gaveta de Dinheiro
</beep> - Emite um Beep na Impressora (não disponivel em alguns modelos)
</zera> - Reseta as configurações de Fonte Alinhamento.
</cr> - Retorna para o Inicio da Linha
<ad> - Bloco - Texto Alinhado a Direita
<ae> - Bloco - Texto Alinhado a Esquerda
<ce> - Bloco - Texto Centralizado
<ean8> - Bloco - Cod.Barras EAN8 - 7 numeros e 1 dig.verificador
<ean13> - Bloco - Cod.Barras EAN13 - 12 numeros e 1 dig.verificador
<std> - Bloco - Cod.Barras "Standard 2 of 5" - apenas números, tamanho livre
<inter> - Bloco - Cod.Barras "Interleaved 2 of 5" - apenas números, tamanho PAR
<code11> - Bloco - Cod.Barras Code11 - apenas números, tamanho livre
<code39> - Bloco - Cod.Barras Code39 - Aceita: 0..9,A..Z, ,$,%,*,+,-,.,/, tamanho livre
<code93> - Bloco - Cod.Barras Code93 - Aceita: 0..9,A..Z,-,., ,$,/,+,%, tamanho livre
<code128> - Bloco - Cod.Barras Code128 - Todos os caracteres ASCII, tamanho livre
<upca> - Bloco - Cod.Barras UPCA - 11 numeros e 1 dig.verificador
<codabar> - Bloco - Cod.Barras CodaBar - Aceita: 0..9,A..D,a..d,$,+,-,.,/,:, tamanho livre
<msi> - Bloco - Cod.Barra MSI - Apenas números, 1 dígito verificador
<code128a> - Bloco - Cod.Barras Code128 - Subtipo A
<code128b> - Bloco - Cod.Barras Code128 - Subtipo B (padrão) = <code128>
<code128c> - Bloco - Cod.Barras Code128 - Subtipo C (informar valores em BCD)
<qrcode> - Bloco - Imprime QRCode de acordo com "ConfigQRCode"
<ignorar_tags> - Bloco - Ignora todas as Tags contidas no Bloco
Fórmulas
Desconto no Item
SELECT Trunc(i.DocIte_ValorTotal *-.1,2) FROM Documento d INNER JOIN DocumentoItem i ON i.Doc_Id = d.Doc_Id INNER JOIN Transacao t ON t.Trn_Id = d.Doc_TrnId INNER JOIN participante p ON p.Par_Id = t.Trn_ParId INNER JOIN usuario u ON u.usu_parid = p.Par_Id WHERE i.Doc_Id = $1 AND i.DocIte_Id = $2
Desconto na Venda
Desconto por Quantidade e Classe
SELECT Trunc( SUM(i.DocIte_Quantidade/2) ) * 50.00 AS Valor FROM Documento d INNER JOIN DocumentoItem i ON i.Doc_id = d.Doc_id INNER JOIN Produto p ON p.Pro_Id = i.DocIte_ProId INNER JOIN Classe1 c ON c.Cl1_Id = p.Pro_Cl1Id WHERE d.Doc_TrnId = $1 AND i.DocIte_Situacao = ''''N'''' AND c.Cl1_Nome = ''''BOMBAS'''' AND i.DocIte_PromoId IS NULL AND p.Pro_Preco > 500 AND i.DocIte_Desconto = 0
Desconto por Quantidade e Fidelização
SELECT CASE WHEN SUM(DocIte_Quantidade) > 9 THEN SUM(DocIte_ValorTotal) * 0.30 WHEN SUM(DocIte_Quantidade) > 4 THEN SUM(DocIte_ValorTotal) * 0.20 WHEN SUM(DocIte_Quantidade) > 2 THEN SUM(DocIte_ValorTotal) * 0.10 END FROM Documento d INNER JOIN DocumentoItem i ON i.Doc_Id = d.Doc_Id INNER JOIN Transacao t ON t.Trn_Id = d.Doc_TrnId INNER JOIN Participante p ON p.Par_Id = t.Trn_ParId INNER JOIN Fidelizacao f ON f.Fid_Id = p.Par_FidelizacaoId WHERE i.DocIte_Situacao = 'N' AND Fid_Nome = 'VIP' AND d.Doc_TrnId = $1
Descrição do Produto
Referência Básica na Descrição
SELECT pro_nome||' ('||pro_referenciabasica||')' AS pro_nome FROM Produto INNER JOIN DocumentoItem ON Produto.Pro_Id = DocumentoItem.Docite_ProId INNER JOIN Documento ON DocumentoItem.Doc_Id = Documento.Doc_Id WHERE DocumentoItem.Doc_id = $1 AND DocumentoItem.Docite_id = $2
Bônus de Cliente
SELECT CASE WHEN COALESCE( Par_FidelizacaoId, 1 ) = 1 THEN 0.00 ELSE Trn_Valor * Fid_Percentual / 100 END FROM transacao INNER JOIN Participante ON Par_id = Trn_ParId LEFT JOIN Fidelizacao ON Fid_Id = Par_FidelizacaoId WHERE Trn_Id = $1
Rodapé do Cupom
Não esqueça de incluir na sua fórmula a tag <BARRAS> do cupom fiscal.
Operador e Vendedor
SELECT CAST('OPERADOR:' || u.usu_apelido || CASE WHEN v.vendedores IS NULL THEN '' WHEN POSITION( '/' IN v.vendedores ) = 0 THEN ' - VENDEDOR:' || v.Vendedores ELSE ' - VENDEDORES:' || v.Vendedores END AS VARCHAR(254) ) || '|<BARRAS>' AS linha FROM transacao t INNER JOIN usuario u ON u.usu_id = t.trn_usuid INNER JOIN documento d ON d.doc_TrnId = t.trn_id, (SELECT string_agg( Vendedor,'/' ) AS Vendedores FROM (SELECT REPLACE(U.Usu_Apelido,'/','-') AS vendedor FROM Documento D INNER JOIN Usuario U ON U.Usu_id = D.Vdd_id WHERE D.Doc_Trnid = $1 UNION SELECT REPLACE(U.Usu_Apelido,'/','-') FROM Documento D INNER JOIN DocumentoItem I ON I.Doc_Id = D.Doc_Id INNER JOIN Usuario U ON U.Usu_id = I.DocIte_VddId WHERE D.Doc_Trnid = $1 ) INT) v WHERE t.trn_id = $1
Quantidade de Itens Vendidos
SELECT 'Total de Itens: '||TRIM(to_char(SUM(DocumentoItem.DocIte_quantidadeembalagem),'99999999')) FROM Transacao INNER JOIN Documento ON Transacao.Trn_ID = Documento.Doc_TrnId INNER JOIN DocumentoItem ON DocumentoItem.Doc_Id = Documento.Doc_Id WHERE Transacao.Trn_id=$1 AND DocumentoItem.DocIte_Situacao<>'C'
Informações para Consumidor
SELECT '<LF>' 'OS PRODUTOS ACIMA DISCRIMINADOS PODEM SER TROCADOS NO PRAZO DE' || '<LF>' '30 DIAS A CONTAR DA DATA DE COMPRA, EXIGINDO APRESENTAÇÃO DE' || '<LF>' 'DOCUMENTO FISCAL E ETIQUETA DO PRODUTO SEM VIOLAÇÃO.' '<LF>' '<LF>' '<BARRAS>' FROM Transacao INNER JOIN Documento ON Transacao.Trn_ID = Documento.Doc_TrnId INNER JOIN DocumentoItem ON DocumentoItem.Doc_Id = Documento.Doc_Id WHERE Transacao.Trn_id=$1 AND DocumentoItem.DocIte_Situacao<>'C'
Observação Padrão da NF
SELECT 'Total de Itens: '||TRIM(to_char(SUM(DocumentoItem.DocIte_quantidadeembalagem),'99999999')) FROM Transacao INNER JOIN Documento ON Transacao.Trn_ID = Documento.Doc_TrnId INNER JOIN DocumentoItem ON DocumentoItem.Doc_Id = Documento.Doc_Id WHERE Transacao.Trn_id=$1 AND DocumentoItem.DocIte_Situacao<>'C'
Exemplo de Observação Fiscal para produtos com redução, diferimento e substituído
SELECT REPLACE(REPLACE(REPLACE(REPLACE( CAST(array_agg(tab.TXTOBS) AS VARCHAR(4000)) ,'"', '') ,'{', '') ,'}', '') ,'>,', '>') FROM ( SELECT CASE WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='20'AND DocumentoItem.docite_aliquotareducao = 48.24 THEN 'BASE DE CALC. RED. CFE. LIVRO I, ART 23, INC XIII, DEC 37.699/97 - RICMS/RS.' WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='20'AND DocumentoItem.docite_aliquotareducao = 80.00 THEN 'BASE DE CALC. RED. CFE. LIVRO I, ART 23, INC I, DEC 37.699/97 - RICMS/RS.' WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='20'AND DocumentoItem.docite_aliquotareducao = 41.67 THEN 'BASE DE CALC. RED. CFE. LIVRO I, ART 23, INC I, DEC 37.699/97 - RICMS/RS.' WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='20'AND DocumentoItem.docite_aliquotareducao = 58.82 THEN 'BASE DE CALC. RED. CFE. LIVRO I, ART 23, INC II E III, DEC 37.699/97 - RICMS/RS.' WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='51' THEN 'DIFERIMENTO PARCIAL CONFORME LIVRO III, ARTIGO 1° K. DO RICMS/RS DECRETO 37699/97.' WHEN substr(DocumentoItem.docite_cst_icms, 2,2)='60' THEN 'IMPOSTO RETIDO ANTERIORMENTE P/SBUST. TRIBUTÁRIA CFE. PROT. ICMS DE 23 DE JULHO DE 2009.' ELSE '' END AS TXTOBS --, --DocumentoItem.* FROM Transacao INNER JOIN Documento ON Transacao.Trn_ID = Documento.Doc_TrnId INNER JOIN DocumentoItem ON DocumentoItem.Doc_Id = Documento.Doc_Id WHERE Transacao.Trn_id=$1 AND DocumentoItem.DocIte_Situacao<>'C' GROUP BY DocumentoItem.docite_cst_icms, DocumentoItem.docite_aliquotareducao, DocumentoItem.docite_codigobeneficiofiscal ) TAB ;
Update da Tabela de Preços
UPDATE serie SET ser_ativa = FALSE WHERE ser_modelo = '55'; UPDATE serie SET ser_ativa = TRUE WHERE ser_modelo = '55' AND ser_chave = '2' AND (SELECT substr( Amb_CnpjDaInstalacao,1,8) FROM ambiente) IN ('04303719','12345678');; UPDATE serie SET ser_ativa = TRUE WHERE ser_modelo = '55' AND ser_chave = '1' AND (SELECT substr( Amb_CnpjDaInstalacao,1,8) FROM ambiente) IN ('01968595'); UPDATE TabelaPreco SET TabPre_NomeNaConsulta = CASE WHEN POSITION('VAREJO' IN TabPre_Nome) > 0 THEN 'Varejo' WHEN POSITION('ATACADO' IN TabPre_Nome) > 0 THEN 'Atacado' ELSE '' END; SELECT 'OK';
Confissão de Dívida de Carnê
select 'TERMO DE CONFISSÃO DE DÍVIDA' || '<LF>' || 'Eu, ' || Par_Lista || ', portador(a) do CPF' || replace(to_char(To_Number(Par_Documento,'99999999999'), '000:000:000-00'), ':', '.') || ' domiciliado(a) no endereço: ' || End_Endereco || ', ' || End_Numero || case when coalesce(End_Complemento,'X') = 'X' then ' ' else ' - ' || End_Complemento end || ' - BAIRRO ' || End_Bairro || ' - ' || Cid_Nome || '-' || UF_Sigla ||',' || 'abaixo assinado, declaro ser devedor(a) ' || 'da NOME EMPRESA através de contrato ' || 'de Nº ' || Par_chave || ' e após conferidos detalhadamente os cálculos de meu ' || 'débito, reconheço a exatidão dos mesmos, que perfazem ' || 'até a presente data o valor de ' || '<VALOR> (<EXTENSO>) ' || 'referente ao Documento Fiscal NFe/NFCe Nº <NOTA> de ' || to_char(Trn_Inicio, 'DD/MM/YYYY às HH24:MI:SS' ) || ' obrigando-me a efetuar o pagamento das parcelas ' || 'negociadas e aqui contratadas, que são as seguintes:' || '<LF>' || '<PARCELAS>' '<LF>' || 'Obrigando-me a efetuar o pagamento das parcelas ' || 'até o dia do vencimento, em estabelecimentos da ' || 'Credora, ou onde ela indicar; à falta de ' || 'pagamento de quaisquer umas das parcelas no ' || 'respectivo vencimento, produzirá o vencimento ' || 'imediato e antecipado do saldo, dando à Credora, ' || 'pleno direito de proceder à Cobrança Judicial.' || '<LF>' || Cid_Nome || '-' || UF_Sigla || '<LF>' || '<LF>' || '______________________________________' '<LF>'|| 'Assinatura do Cliente' '<LF>' as Texto from transacao left join Cupom on Cup_Id = Trn_CupId left join Documento on Doc_TrnId = Trn_Id left join Participante p on p.Par_Id = Trn_ParId left join Endereco e on e.Par_Id = EndFat_ParId and End_Id = EndFat_Id left join Cidade c on Cid_Id = End_CidId left join UnidadeFederativa UF on Uf_Id = Cid_UfId left join categoria1 on ct1_id = Par_Ct1Id
where Trn_id = $1 and Par_TipoPessoa = 0 and ct1_Nome <> 'FUNCIONARIO'
Nota Promissória de Parcela de Carnê
SELECT '<ce><n>NOTA PROMISSÓRIA</n></ce>' || '<LF>' 'Venda <NOTA>, parcela <NUMERO><LF>Vencimento , no valor de <VALOR>.<LF>Pagarei por esta única via de NOTA PROMISSÓRIA ' || 'a RAZAO SOCIAL, inscrito no CNPJ/MF 00.000.000/0000-00 e ' || 'Inscrição Estadual 000.000.000-0' || ' ou à sua ordem a quantia de: ' || '(<EXTENSO>)' || ' em moeda corrente deste país, pagável em ' || Cid_Nome || '-' || UF_Sigla || '<LF>' 'Data da emissão: ' || to_char(Trn_Inicio, 'DD/MM/YYYY às HH24:MI:SS' ) || '<LF>' 'Nome do Funcionário: ' || Par_Lista || ', CPF: ' || replace(to_char(To_Number('0'||Par_Documento,'99999999999'),'000:000:000-00'), ':', '.') || ' Endereço: ' || End_Endereco || ', ' || End_Numero || case when coalesce(End_Complemento,) = then * else ' - ' || End_Complemento* end || ' - BAIRRO ' || End_Bairro || ' - ' || Cid_Nome || '-' || UF_Sigla ||'.'|| '<LF><ce>' '____________________________________<LF>' || 'Assinatura do Funcionário</ce>' as Texto from transacao left join Cupom on Cup_Id = Trn_CupId left join Documento on Doc_TrnId = Trn_Id left join Participante p on p.Par_Id = Trn_ParId
left join Endereco e on e.Par_Id = EndFat_ParId and End_Id = EndFat_Id left join Cidade c on Cid_Id = End_CidId left join UnidadeFederativa UF on Uf_Id = Cid_UfId left join categoria1 on ct1_id = Par_Ct1Id where Trn_id = $1 and Par_TipoPessoa = 0 and ct1_Nome = 'FUNCIONARIO'
Referenciado por: Fórmulas - Totali PoS | Totali POS |