LeTRA - cálculo de valores do arquivo de venda do PDV
Publicado por Gabriel Fernandes (última atualização em 06/10/2009)
[ Hits: 5.750 ]
Homepage: http://cd2.com.br
LeTRA é um script para ler arquivo de movimento de venda (TRAB1.SDF) da solução de PDV da Zanthus - Zeus Front End e comparar se existem erros entre os registros 01 - resumo de cupom, registro 02 - movimentação de finalizadora, registro 03 - itens dos cupons e registro 05 - registro fiscal (redução Z).
Funciona também com a versão 1.6 da Zanthus e processa arquivo gigantes de vendas, testes foram efetuados em arquivo com mais de 100 mil linhas.
IMPORTANTE:
- Necessita do dialog instalado.
- Foi feito as pressas, pode estar um pouco desorganizado, mas funciona.
Boa sorte!
#!/bin/bash # # Duel class misc # Duel Informática Ltda. # Authors: Gabriel Fernandes <gabriel@duel.com.br> # log () { Hora=$(date +%X) [ ! -f /var/log/$Data/$NomePrograma.log ] && touch /var/log/installer/$Data/$NomePrograma.log echo "[$Hora] $1" >> /var/log/$Data/$NomePrograma.log } #exibelog TITULO CAMINHO_DO_ARQUIVO exibelog () { $Dialog --backtitle "$BackTitle" \ --title "$1 - [ENTER] Para atualizar informacoes." \ --tailbox "$2" \ 28 110 } #confirmacao - Solicita confirma??o dos dados confirmacao () { Retorno=$( $Dialog \ --stdout \ --backtitle "$BackTitle" \ --yesno "$1" 0 0 ) export Retorno=$? } #solicita_senha - Solicita entrada de uma senha solicita_senha () { DadoSolicitado=$( $Dialog \ --stdout \ --backtitle "$BackTitle" \ --passwordbox "$2" \ 0 0 ) export Retorno=$? export $1=$DadoSolicitado } #mostra_dados - exibe informa??es mostra_dado () { $Dialog --stdout \ --backtitle "$BackTitle" \ --title "$1" \ --msgbox "$2" \ 0 0 export Retorno=$? } #altera_parametro - Altera parametros em arquivos altera_parametro () { Arquivo=$1 Parametro=$2 Valor=$3 Resultado=$(grep -c $Parametro $Arquivo) case $Resultado in 0) log "Incluindo parametro $Parametro$Valor no arquivo $Arquivo." echo "$Parametro$Valor" >> $Arquivo ;; 1) log "Alterando parametro $Parametro$Valor no arquivo $Arquivo." echo "/$Parametro/c\\" > /tmp/scriptsed echo "$Parametro$Valor" >> /tmp/scriptsed sed -i~ -f /tmp/scriptsed $Arquivo 2>> /var/log/installer/$Data/$NomePrograma.zlg ;; *) log "Arquivo $Arquivo invalido, possui mais de uma vez o parametro $Parametro" ;; esac } #inicia - Funcao para inicializacao remota do pdvJava no display 0 inicia () { startx 2>> /dev/null & sleep 5 pid_app_ecf } #reinicia - Funcao para reinicializar remotamente o pdvJava no display 0 reinicia () { pid_app_ecf finaliza $PidAplicativoEcf sleep 5 inicia } #finaliza - Funcao para reinicializar remotamente o pdvJava no display 0 finaliza () { pid_app_ecf kill -9 $PidAplicativoEcf 2>> /dev/null } #pid_app_ecf - Funcao para reinicializar remotamente o pdvJava no display 0 pid_app_ecf () { PidAplicativoEcf=$(ps ax | grep -i lnx -m 1 | cut -d " " -f 2) } Exibe_Valor () { Valor=$1 Prefixo=$2 Tamanho=$3 Preenche "E" "$Tamanho" " " "$(echo -n ${Valor:0:$(expr ${#Valor} - 2)},${Valor:$(expr ${#Valor} - 3):2})" #export Retorno=$Prefixo$(echo -n ${Valor:0:$(expr ${#Valor} - 2)},${Valor:$(expr ${#Valor} - 3):2}) export Retorno=$Prefixo$Retorno } Preenche () { Direcao=$1 NumeroCaracteres=$2 CaracterPreenchimento=$3 Valor=$4 [ -z "$1" ] && Direcao="E" [ -z "$2" ] && NumeroCaracteres="3" [ -z "$3" ] && CaracterPreenchimento="_" [ -z "$4" ] && Valor="000" if [ "$Direcao" == "E" ] || [ "$Direcao" == "e" ] ; then for ((iCaracter=${#Valor};iCaracter<=$NumeroCaracteres;iCaracter++)); do Valor=$CaracterPreenchimento$Valor done else for ((iCaracter=${#Valor};iCaracter<=$NumeroCaracteres;iCaracter++)); do Valor=$Valor$CaracterPreenchimento done fi export Retorno=$Valor } NumECF_TRAB1 () { Linha=$1 Pdv=${Linha:13:2} Pdv=${Pdv#0} export Retorno=$Pdv } Total_Cupom_M01AK_TRAB1 () { Linha=$1 export Retorno=${Linha:54:12} } Valor_Recebido_M02AK_TRAB1 () { Linha=$1 export Retorno=${Linha:50:12} } Troco_Fornecido_M02AL_TRAB1 () { Linha=$1 export Retorno=${Linha:62:12} } Valor_Vendido_M03AP_TRAB1 () { Linha=$1 export Retorno=${Linha:83:12} } Valor_Desconto_M03AQ_TRAB1 () { Linha=$1 export Retorno=${Linha:95:12} } Valor_GtInicial_M05AM_TRAB1 () { Linha=$1 export Retorno=${Linha:58:16} } Valor_GtFinal_M05AN_TRAB1 () { Linha=$1 export Retorno=${Linha:74:16} } Valor_Cancelamento_M05AO_TRAB1 () { Linha=$1 export Retorno=${Linha:90:12} } Valor_Desconto_M05AP_TRAB1 () { Linha=$1 export Retorno=${Linha:102:12} } # # Duel leTRA - Soma movimentos do arquivo TRAB1.SDF # Duel Inform?tica Ltda. # Authors: Gabriel Fernandes <gabriel@duel.com.br> # source duel_functions NomePrograma="leTRA" Data=$(date +%F) Proxima="selecionar" Versao="0.2" BackTitle="LeTRA - TRAB1.SDF v$Versao - Duel Inform?tica Ltda." Dialog="dialog" Temp="/tmp" ArquivoTemp="log" ScriptTemp="install" confirmacao "+--------------------------------------------------+\n| LeTRA - Verifica integridade dos movimentos de um arquivo TRAB1.SDF |\n| Duel Informatica Ltda. 'Duel' |\n+--------------------------------------------------+\n| AVISO DE USO |\n| |\n| Este programa nao e oficial e nao tem nada a ver com a Zanthus |\n| Nao ha garantias de funcionamento use por sua conta e risco |\n| Mas normalmente ele funciona muito bem e ta para o gasto. |\n| |\n| |\n| |\n| |\n+--------------------------------------------------+\n| |\n| Nao tenha medo, mas clique em sim para usar o programa assim mesmo! |\n| |\n+--------------------------------------------------+" [ $Retorno -ne 0 ] && exit #TRAB1_LINHAS=( `sed 's/^/"/g; s/$/" /g;' $TRAB1_CAMINHO | tr '\n' ' '` ) #TRAB1_LINHAS=( `sed 's/^/"/g; s/$/"/g;' $TRAB1_CAMINHO` ) #echo $TRAB1_LINHAS > saida if [ ! -f "$1" ] ; then echo "" echo "Duel Automacao Comercial" echo "" echo "Use: $0 /caminho/do/TRAB1.SDF" echo "Exemplo: $0 TRAB1.SDF" echo "" echo "suporte@duel.com.br - (48)3258-4446" echo "" exit 1 fi TRAB1_CAMINHO=$1 TRAB1_QTD_REG01="0" TRAB1_QTD_REG02="0" TRAB1_QTD_REG03="0" TRAB1_QTD_REG05="0" REG01_M01AK_CUPOM="000" REG02_M02AK_RECEBIDO="000" REG02_M02AL_TROCO="000" REG02_SALDO="000" REG03_M03AP_VENDIDO="000" REG03_M03AQ_DESCONTO="000" REG03_SALDO="000" REG05_M05AM_GTINICIAL="000" REG05_M05AN_GTFINAL="000" REG05_M05AO_CANCELAMENTO="000" REG05_M05AP_DESCONTO="000" REG05_SALDO="000" TRAB1_LINHAS[0]="" TRAB1_CONT_LINHAS="0" LINHA="0" for i in $(seq 99); do REG01_M01AK_PDV[$i]="000" REG02_M02AK_PDV[$i]="000" REG02_M02AL_PDV[$i]="000" REG02_SALDO_PDV[$i]="000" REG03_M03AP_PDV[$i]="000" REG03_M03AQ_PDV[$i]="000" REG03_SALDO_PDV[$i]="000" REG05_M05AM_PDV[$i]="000" REG05_M05AN_PDV[$i]="000" REG05_M05AO_PDV[$i]="000" REG05_M05AP_PDV[$i]="000" REG05_SALDO_PDV[$i]="000" done TRAB1_SDF_NUM_LINHAS=$(cat $TRAB1_CAMINHO | wc -l) let TRAB1_SDF_NUM_LINHAS++ while read TRAB1_LINHA ; do TRAB1_LINHAS[$TRAB1_CONT_LINHAS]=$TRAB1_LINHA NumECF_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" PDV=$Retorno case "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]:0:2}" in # Registro do tipo 1 01) let TRAB1_QTD_REG01++ Exibe_Valor "$REG01_M01AK_CUPOM" REG01_M01AK_CUPOM_ANTERIOR=$Retorno Total_Cupom_M01AK_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG01_M01AK_CUPOM=$(expr $REG01_M01AK_CUPOM + $Retorno) REG01_M01AK_PDV[$PDV]=$(expr ${REG01_M01AK_PDV[$PDV]} + $Retorno) ;; # Registro do tipo 2 02) let TRAB1_QTD_REG02++ Valor_Recebido_M02AK_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG02_M02AK_RECEBIDO=$(expr $REG02_M02AK_RECEBIDO + $Retorno) REG02_M02AK_PDV[$PDV]=$(expr ${REG02_M02AK_PDV[$PDV]} + $Retorno) Troco_Fornecido_M02AL_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG02_M02AL_TROCO=$(expr $REG02_M02AL_TROCO + $Retorno) REG02_M02AL_PDV[$PDV]=$(expr ${REG02_M02AL_PDV[$PDV]} + $Retorno) REG02_SALDO=$(expr $REG02_M02AK_RECEBIDO - $REG02_M02AL_TROCO) REG02_SALDO_PDV[$PDV]=$(expr ${REG02_M02AK_PDV[$PDV]} - ${REG02_M02AL_PDV[$PDV]}) ;; # Registro do tipo 3 03) let TRAB1_QTD_REG03++ Valor_Vendido_M03AP_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG03_M03AP_VENDIDO=$(expr $REG03_M03AP_VENDIDO + $Retorno) REG03_M03AP_PDV[$PDV]=$(expr ${REG03_M03AP_PDV[$PDV]} + $Retorno) Valor_Desconto_M03AQ_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG03_M03AQ_DESCONTO=$(expr $REG03_M03AQ_DESCONTO + $Retorno) REG03_M03AQ_PDV[$PDV]=$(expr ${REG03_M03AQ_PDV[$PDV]} + $Retorno) REG03_SALDO=$(expr $REG03_M03AP_VENDIDO - $REG03_M03AQ_DESCONTO) REG03_SALDO_PDV[$PDV]=$(expr ${REG03_M03AP_PDV[$PDV]} - ${REG03_M03AQ_PDV[$PDV]}) ;; 05) let TRAB1_QTD_REG05++ Valor_GtInicial_M05AM_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG05_M05AM_GTINICIAL=$(expr $REG05_M05AM_GTINICIAL + $Retorno) REG05_M05AM_PDV[$PDV]=$(expr ${REG05_M05AM_PDV[$PDV]} + $Retorno) Valor_GtFinal_M05AN_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG05_M05AN_GTFINAL=$(expr $REG05_M05AN_GTFINAL + $Retorno) REG05_M05AN_PDV[$PDV]=$(expr ${REG05_M05AN_PDV[$PDV]} + $Retorno) Valor_Cancelamento_M05AO_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG05_M05AO_CANCELAMENTO=$(expr $REG05_M05AO_CANCELAMENTO + $Retorno) REG05_M05AO_PDV[$PDV]=$(expr ${REG05_M05AO_PDV[$PDV]} + $Retorno) Valor_Desconto_M05AP_TRAB1 "${TRAB1_LINHAS[$TRAB1_CONT_LINHAS]}" REG05_M05AP_DESCONTO=$(expr $REG05_M05AP_DESCONTO + $Retorno) REG05_M05AP_PDV[$PDV]=$(expr ${REG05_M05AP_PDV[$PDV]} + $Retorno) REG05_SALDO=$(expr $REG05_M05AN_GTFINAL - $REG05_M05AM_GTINICIAL) REG05_SALDO=$(expr $REG05_SALDO - $REG05_M05AO_CANCELAMENTO) REG05_SALDO=$(expr $REG05_SALDO - $REG05_M05AP_DESCONTO) REG05_SALDO_PDV[$PDV]=$(expr ${REG05_M05AN_PDV[$PDV]} - ${REG05_M05AM_PDV[$PDV]}) REG05_SALDO_PDV[$PDV]=$(expr ${REG05_SALDO_PDV[$PDV]} - ${REG05_M05AO_PDV[$PDV]}) REG05_SALDO_PDV[$PDV]=$(expr ${REG05_SALDO_PDV[$PDV]} - ${REG05_M05AP_PDV[$PDV]}) ;; esac let TRAB1_CONT_LINHAS++ clear echo "LeTRA v$Versao - Verifica integridade dos movimentos de um arquivo TRAB1.SDF" echo "Duel Inform?tica Ltda." echo "" echo "Lendo arquivo $TRAB1_CAMINHO..." echo "Processando linha $TRAB1_CONT_LINHAS de $TRAB1_SDF_NUM_LINHAS, aguarde..." echo "" echo "Registros:" echo " 01 = $TRAB1_QTD_REG01" echo " 02 = $TRAB1_QTD_REG02" echo " 03 = $TRAB1_QTD_REG03" echo " 05 = $TRAB1_QTD_REG05" echo "" done < $TRAB1_CAMINHO echo "" echo "Resumo Geral:" Exibe_Valor "$REG01_M01AK_CUPOM" "R$" "12" echo "Registro 01: $Retorno" Exibe_Valor "$REG02_SALDO" "R$" "12" echo "Registro 02: $Retorno" Exibe_Valor "$REG03_SALDO" "R$" "12" echo "Registro 03: $Retorno" Exibe_Valor "$REG05_SALDO" "R$" "12" echo "Registro 05: $Retorno" echo "" echo "Resumo por PDV:" for i in $(seq 99); do Preenche "E" "1" "0" "$i" NUM_PDV_EXIBE=$Retorno if [ "${REG01_M01AK_PDV[$i]}" != "000" ] || [ "${REG02_SALDO_PDV[$i]}" != "000" ] || [ "${REG03_SALDO_PDV[$i]}" != "000" ] || [ "${REG05_SALDO_PDV[$i]}" != "000" ] ; then VALOR_PDV=${REG01_M01AK_PDV[$i]} Exibe_Valor "$VALOR_PDV" "R$" "8" echo -n "PDV$NUM_PDV_EXIBE 01: $Retorno" VALOR_PDV=${REG02_SALDO_PDV[$i]} Exibe_Valor "$VALOR_PDV" "R$" "8" echo -n " - 02: $Retorno" VALOR_PDV=${REG03_SALDO_PDV[$i]} Exibe_Valor "$VALOR_PDV" "R$" "8" echo -n " - 03: $Retorno" VALOR_PDV=${REG05_SALDO_PDV[$i]} Exibe_Valor "$VALOR_PDV" "R$" "8" echo " - 05: $Retorno" fi done echo "" echo "Fim do processamento."
Bashblog v3.0 - cria um microblog em HTML5
Migração de Aplicações para Ambiente Web - Uma Abordagem Prática
zsh: Validar IPv4 utilizando PCRE
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta