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

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

[ Hits: 5.341 ]

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 <[email protected]>
#

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 <[email protected]>
#

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 "[email protected] - (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

script para criar Maildir

Algoritmo para calcular notas com array

Script de Instalação Zabbix Server - Debian

Administrar squid com autenticação, simples e objetivo.

Backup Facil e rapido


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário