LeTRA - cálculo de valores do arquivo de venda do PDV

Publicado por Gabriel Fernandes (última atualização em 06/10/2009)

[ Hits: 5.595 ]

Homepage: http://cd2.com.br

Download leTRA.sh




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!

  



Esconder código-fonte

#!/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."

Scripts recomendados

Substituir strings em arquivos ascII

Script para limpar os caches do proxy (squid)

NetScan - o seu scanner de rede!

Script em Bash para gerenciar as novas versões do Java e permitir escolher a versão pa

Sincronização entre Servidores de Impressão


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts