LeTRA - cálculo de valores do arquivo de venda do PDV
Publicado por Gabriel Fernandes (última atualização em 06/10/2009)
[ Hits: 6.007 ]
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."
Configurando IPTABLES de forma simples
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (42)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (5)
Preciso recuperar videos *.mp4 corrompidos (0)









