Upload
phamcong
View
221
Download
0
Embed Size (px)
Citation preview
FLUXOGRAMA PARA CONSULTORES
USO NA PROGRAMAÇÃO LDR(r)
CR SISTEMAS LTDA.
AGOSTO/2011
HUMANUS® - MANUAL DE FLUXOGRAMA
2
ÍNDICE
Introdução............................................................................................ 03
O fluxograma........................................................................................ 04
Símbolo Terminal................................................................................... 07
Símbolo Conector................................................................................... 10
Símbolo Conector de Página.................................................................... 11
Símbolo de Ação (comando).................................................................... 12
Símbolo de Procedimento....................................................................... 12
Símbolo de Decisão................................................................................ 14
Símbolo de Seleção Múltipla.................................................................... 15
Símbolo de Seleção em Lista................................................................... 17
HUMANUS® - MANUAL DE FLUXOGRAMA
3
INTRODUÇÃO
O fluxograma é uma ferramenta muito útil para representar graficamente uma sequência de
passos (ou comandos, ou instruções) para resolver um problema. Portanto, através de um
fluxograma pode-se desenhar um algoritmo, especialmente um que represente um programa
de computador.
A linguagem LDR(r) do HUMANUS(r), apesar de simples e orientada ao consultor, é uma
linguagem de programação. Uma regra correta pode ser representada por um fluxograma e
um fluxograma deve poder ser implementado numa Regra. Há, portanto, uma relação direta
bidirecional entre Regra e fluxograma.
Ema face disso, resolvemos escrever este Manual de Fluxograma para Consultores, a fim
de facilitar a representação de soluções de cálculos da folha de pagamento que devem ser
implementados como Regras escritas em LDR(r) associadas às Rubricas.
Adicionalmente, o fluxograma é útil para o consultor ainda não familiarizado com a LDR(r) para
analisar e compreender o que faz uma regra escrita por outra pessoa (ou as regras-padrão do
sistema).
Nas páginas seguintes descreveremos os diversos símbolos gráficos dos fluxogramas e sua
relação com os comandos e funções da LDR(r), bem como daremos exemplos de técnicas de
fluxogramação.
Este manual é adicional à Introdução a Programação em LDR(r).
HUMANUS® - MANUAL DE FLUXOGRAMA
4
O FLUXOGRAMA
O fluxograma é uma representação gráfica das ações e decisões que devem ser executadas
para resolver um problema. Este problema pode ser de qualquer natureza, variando a
complexidade do fluxograma na razão direta da complexidade do problema. É óbvio que para
representar soluções para certas classes de problemas existem, atualmente, ferramentas
gráficas mais especializadas do que o fluxograma.
Para programas de computador, em especial pequenos programas como são as Regras escritas
em LDR(r), o fluxograma é muito indicado.
Como o nome diz, o fluxograma descreve um fluxo que deve ser escrito (e lido) na ordem da
seta que aponta a linha de execução. Pode haver (e normalmente há) diversos caminhos
(fluxos) num fluxograma, mas apenas um e tão somente um é executado em cada
momento. O caminho lógico (fluxo) é determinado pelo conteúdo dos dados que são
testados nas condições que decidem os desvios que são realizados. Isto é muito importante.
Há um conjunto finito de símbolos (consagrados) para representar as ações e decisões num
fluxograma. No presente manual, além dos símbolos-padrão, acrescentamos símbolos que
representam os comandos e funções da LDR(r).
Terminal. Símbolo de início e de término do fluxo. Deve haver
apenas um início e pode haver mais de um ponto de término. No
caso de finalizar o fluxo, representa o comando PARE.
Conector. Representa um rótulo para desvio incondicional, um
ponto a partir do qual segue o fluxo.
Página. Representa um conectar para outra página. É usado para
indicar que o fluxo continua na página seguinte ou na página de
número “n”, onde o número é escrito no interior no símbolo.
Ação. Representa uma ação ou comando, como atribuição numa
variável ou registrador, na ordem de execução apontada pela
seta.
HUMANUS® - MANUAL DE FLUXOGRAMA
5
Procedimento. Representa uma sub-rotina ou função, cuja
estrutura interna não é conhecida. Na LDR(r) representa uma
Regra chamada pelo comando EXECUTE ou por uma Função da
linguagem.
Decisão. Símbolo para decisão, também chamado desvio
condicional. Na LDR(r), representa o comando SE...SENAO.
Seleção Múltipla. Símbolo para o comando CASO...SEJA específico
da LDR(r). No losango se indica o dado cujo conteúdo deve ser
testado; em cada triângulo se indica um valor (conteúdo)
possível para o dado sendo testado. O fluxo continua após o
conector.
Seleção em Lista. Símbolo para o comando EXEC...SE específico
da LDR(r). No símbolo trapezoidal vai o dado cujo conteúdo deve
ser igual a lista de constantes, no formato dado=[constantes]. O
retângulo representa o conjunto de comandos a serem
executados. O fluxo segue após o conector.
Símbolos do fluxograma.
A seguir examinaremos cada símbolo em particular, com exemplos de comandos da LDR(r),
usando como modelo inicial a regra R108 do HUMANUS(r), que efetua o cálculo do valor das
horas noturnas, na composição das horas a serem pagas para um colaborador. A regra R108
em LDR(r) está reproduzida abaixo. Vamos escrever o fluxograma correspondente a cada
estrutura da linguagem, passo a passo.
REGRA: R108 [Calc. Horas Noturnas]
/ cálculo das horas noturnas
se RI0057 = 0 / não há movimento
Pare
senao
se RI0055 <> 0
#108R=#108R
#108V=#108V
Pare / o valor foi informado
fim
fim
se RI0057 = 1 / gerado pelo sistema (horário)
#108R = mult(#108R ; RI0051)
HUMANUS® - MANUAL DE FLUXOGRAMA
6
senao
#108R=#108R
fim
V1=mult(#611V ; 0,20)
#108V = mult( #108R ; V1)
HUMANUS® - MANUAL DE FLUXOGRAMA
7
SÍMBOLO TERMINAL
Usado como símbolo de INÍCIO.
Deve ser usado para marcar o início do fluxograma e os pontos de término. Todo fluxo deve ter
apenas um ponto de início, caso em que o símbolo contém a palavra início em seu interior.
Todo fluxo deve ter um nome significativo (no caso, o título da regra), colocado como
comentário em um dos lados do símbolo de início.
Veja o exemplo para a regra R108 (original), abaixo:
Usado como símbolo de TÉRMINO (FIM).
Nos pontos de término, contém a palavra fim ou pare. Um fluxograma pode ter um ou mais
pontos de encerramento, podendo ser indicado diretamente pelo símbolo de término na linha
de execução, como no exemplo da figura abaixo, que mostra a regra R108 modificada:
HUMANUS® - MANUAL DE FLUXOGRAMA
8
No caso, o símbolo de término contém o comando “pare” da LDR(r), indicando que a
execução para naquele ponto.
Uma boa técnica consiste em utilizar símbolos conector numerador para indicar desvio para o
fim do fluxo de execução, como no exemplo abaixo:
HUMANUS® - MANUAL DE FLUXOGRAMA
9
Vamos analisar o que o fluxograma nos diz:
Explicação extra:
os registradores internos (RI) 54 e 55 representam os campos de Referência e Valor da
rubrica à qual a regra em execução está associada e contém os valores eventualmente
lançados via movimento da folha. O RI0057 indica apenas se a rubrica recebeu lançamento via
movimento ou via sistema em algum desses campos: se contiver zero, nada foi lançado, caso
contrário houve informação. Para mais detalhes consulte a ajuda da LDR(r).
<início>
<testa se a rubrica 108 está vazia (sem lançamento)>
se VERDADEIRO: (RI57=0) <desvia o fluxo para o conector 1 (um)>.
se FALSO: <houve lançamento: onde?>
<testa se o campo Valor (RI0055) da rubrica 108 recebeu lançamento>
se VERDADEIRO: (RI55<>0)<atribui os campos de Referência e Valor da rubrica
nela mesma para forçar a acumulação nas bases>
<desvia o fluxo para o conector 1 (um)>
se FALSO: <segue o fluxo até o final>.
<conector 1 (um): encerra>
<fim>
HUMANUS® - MANUAL DE FLUXOGRAMA
10
Esta técnica é útil quando o fluxo contém um conjunto de instruções de encerramento comuns
a todos os passos, que devem ser executadas antes do final da regra. Veja o comando
Conector a seguir.
SÍMBOLO CONECTOR.
Uma possível utilização do símbolo conector foi vista nos exemplos acima, para definir pontos
de encerramento do fluxo.
O símbolo conector é usado para indicar pontos do fluxograma para onde o fluxo deve ser
desviado. No ponto destino do desvio deve ser colocado o conector contendo em seu interior o
nome do “rótulo”, que é a identificação do ponto.
Na LDR(r), este desvio é comandado pela instrução de desvio incondicional “desvie para”.
Veja a ajuda da LDR(r) para mais detalhes.
Vamos analisar o exemplo da regra R108 modificada para salvar na Referência de uma rubrica
auxiliar um valor que indique qual foi a operação realizada pela regra. Vamos dizer que a
variável TPOP indica o tipo de operação:
TPOP=0 - sem lançamento
TPOP=1 - lançado apenas a referência, cálculo pela regra
TPOP=2 - lançado o valor, que é assumido pela regra.
Assim, para qualquer caso, a regra tem que passar por um ponto onde atribuir o valor da
variável TPOP a rubrica auxiliar escolhida. Digamos que seja a rubrica 700. Então, por
qualquer dos remos do fluxo executados, todos passarão pelo rótulo :SAIDA, onde o conteúdo
da variável TPOP(numérica) será atribuído à referência da Rubrica 700. Veja a regra e o fluxo
abaixo.
REGRA: R108 [Calc. Horas Noturnas]
/ cálculo das horas noturnas
/ modificada para exemplificar uso do desvio incondicional
/ agosto/2011 | Carravetta
se RI0057 = 0 / não há movimento
TPOP = 0
Desvie para :SAIDA: / desvia para a saída
senao
se RI0055 <> 0
#108R=#108R
#108V=#108V
TPOP = 2 / assume valor informado
Desvie para :SAIDA: / desvia para a saída
fim
fim
se RI0057 = 1 / gerado pelo sistema (horário)
#108R = mult(#108R ; RI0051)
senao
HUMANUS® - MANUAL DE FLUXOGRAMA
11
#108R=#108R
fim
V1=mult(#611V ; 0,20)
#108V = mult( #108R ; V1)
:SAIDA:
#700R = TPOP / salva o tipo de processamento realizado
Fluxograma modificado para mostrar o uso do comando Desvio e Conector rótulo.
CONECTOR DE PÁGINA
O conector de página é usado para indicar a continuação do fluxograma em outra página. Só
faz sentido em fluxos muito extensos, que podem ocupar várias folhas de papel. Está sendo
HUMANUS® - MANUAL DE FLUXOGRAMA
12
mostrado aqui apenas para efeito de apresentação e conhecimento por parte do consultor. Na
prática, se um fluxograma de uma regra ocupar várias páginas desconfie: alguma coisa não
está bem definida ou o problema não está bem entendido. As regras devem ser pequenas e
não ultrapassam o equivalente a duas folhas de ofício.
SÍMBOLO DE AÇÃO
É o símbolo mais usado em fluxograma, juntamente com o de decisão. Cada retângulo
representa uma ou mais ações (comandos) que devem ser executados. Tipicamente, os
comandos colocados num retângulo são a atribuição de valores em variáveis, registradores
ou rubricas.
Quando se quiser representar um bloco de comandos, usa-se apenas um retângulo grande e
se coloca todos os comandos em seu interior.
Este símbolo aparece bem nos exemplos da regra R108 mostrados nas explanações dos
símbolos precedentes.
SÍMBOLO DE PROCEDIMENTO
Este símbolo representa a chamada de uma função ou de uma regra. No caso da LDR®, este
símbolo pode ser usado para representar no fluxograma a chamada de qualquer das funções
integrantes da linguagem (chama-se de funções built-in).
Um caso particular de representação por este símbolo é o comando EXECUTE que invoca a
execução de uma regra independente. Consulte a ajuda para maiores detalhes deste comando.
REGRA: R117 [Calcula Ad. Déc. Terceiro Sal.]
/calcula adiant. 13 Salário
se RI0032 = 0 / se não houverem avos 13o.
Pare
fim
/ apuração da méd. de comissão
D0=CalcData ( RI0029 ; -1 ; "m" ) / competência anterior
/ calcula média dos últimos 6 meses da rubrica 137 (valor) sem correção
/ considerando data de admissão e gerando memória das médias
V0=CalcMedia ( 137; 1 ; " " ; 0 ; D0 ; 6 ; 6 ; 1 ; 1 )
HUMANUS® - MANUAL DE FLUXOGRAMA
13
V1=soma(V0; #640V)
V2=mult(V1 ; 0,5)
V3=divide( V2 ; 12)
V4=mult(V3 ; RI0032)
/ busca adtos. já concedidos
V5=ParteData(RI0029 ; "a")
D1=MontaData ( 01 ; 01 ; V5 ) / monta início do ano corrente
V6=CalcMedia (211; 1; " " ; 1; D1; 11; 1; 0; 0) / busca adtos.
V7=CalcMedia (212; 1; " " ; 1; D1; 11; 1; 0; 0)
V8=CalcMedia (117; 1; " " ; 1; D1; 11; 1; 0; 0)
V6=soma(V6; V7)
V6=soma(V6; V8)
/==========
#696V=V6 / demonstr. adtos. concedidos
/==========
se V4 > V6
V9=subtrai(V4 ; V6)
senao
V9=0
fim
#117R=RI0032
#117V=V9
Abaixo está a representação da parte inicial da regra em fluxograma
HUMANUS® - MANUAL DE FLUXOGRAMA
14
SÍMBOLO DE DECISÃO
Este o mais importante e mais usado símbolo de um fluxograma e corresponde, na mesma
proporção, ao comando mais usado nas regras, pois representa a tomada de decisão. Este
símbolo é chamado também de desvio condicional (pois representa um desvio no fluxo
baseado na avaliação de uma condição).
A maior parte do trabalho das regras é testar o conteúdo de um dado e tomar uma decisão
sobre que tipo de cálculo ou operação deve ser realizado.
Uma condição é uma expressão que, ao ser avaliada (resolvida), retorna sempre um valor
VERDADEIRO ou FALSO. Em face deste retorno, o fluxo de execução segue um caminho ou
outro (por isso, se diz condicional).
A regra R108 mostra várias vezes esta estrutura. Vamos examinar em detalhes e de forma
comparativa o fluxo e o comando correspondente.
se RI0057 = 0 / “S” não há movimento
Pare
Senão / “N”
se RI0055 <> 0
#108R=#108R / “S” bloco
#108V=#108V
Pare / o valor foi informado
Fim / “N” senão implícito
fim
A condição RI57=0? é avaliada. Se for verdadeira o fluxo segue o ramo “S” (VERDADEIRO) e
encontra o comando pare e encerra. Se a condição for falsa, o fluxo sai pelo ramo “N” (FALSO)
e executa o próximo comando SE...SENAO. Neste comando, a condição é RI55<>0? Se for
verdade, o fluxo segue pelo ramo “S” e executa o bloco de comandos de atribuição e o
comando pare e encerra aí o fluxo. Se for falso, segue pelo ramo “N”, que no caso é vazio (ou
seja, não tem comandos) e representa o fluxo principal. Na regra, em LDR® à direita, o fluxo
segue no próximo comando após a segunda palavra fim, que fecha o primeiro comando se. Na
LDR, cada comando se deve ter o seu encerramento marcado pela palavra fim.
HUMANUS® - MANUAL DE FLUXOGRAMA
15
/ gerado pelo sistema (horário)
se RI0057 = 1
#108R = mult(#108R ; RI0051)
senao
#108R=#108R
fim
V1=mult(#611V ; 0,20)
#108V = mult( #108R ; V1)
No exemplo acima, a condição a ser avaliada é RI57=1? Se for verdade, o fluxo segue o ramo
“S” e é feita a atribuição na referência da rubrica 108 e depois desvia para o comando no
ponto A (esse ponto está indicado apenas para fins didáticos, não é um rótulo). Se a condição
resultar falso, sai pelo ramo “N” e executa a atribuição da referência da rubrica 108 nela
mesma (apenas para acumular nas bases) e segue o fluxo. Veja que depois desse comando, o
fluxo segue nos comandos seguintes, a partir do ponto A.
Comparando com a LDR®, à direita, o ponto A é representado pela palavra fim do comando
se, pois a execução da regra segue na atribuição V1 = mult(...).
Podem ser colocadas várias decisões aninhadas umas dentro das outras. É óbvio que isto
aumenta a complexidade do fluxo, diminui a clareza, dificultando a sua compreensão.
SÍMBOLO SELEÇÃO MULTIPLA
Este símbolo é uma construção particular para a LDR® e representa o comando de seleção
múltipla CASO...SEJA. Sua função é simplificar os testes de uma condição quando uma
estrutura de dados pode apresentar vários diferentes conteúdos. Este comando evita o uso de
dezenas de comandos de decisão, que tornaria o código muito confuso.
A condição de base (CASO) é colocada no losango. Para cada possível condição é inserido o
símbolo triângulo (SEJA): se resultar verdadeiro, os comandos são executados até encontrar a
próxima condição ou o fim. O conector implícito indica o ponto onde segue o fluxo principal.
Note que apenas uma condição pode ser verdade ou nenhuma. Se nenhuma condição for
satisfeita o fluxo segue a partir do conector implícito.
HUMANUS® - MANUAL DE FLUXOGRAMA
16
A regra R103 do HUMANUS® exibe o uso desta construção.
REGRA: R103 [Calc. Horas com S.H. Composto]
/ Horas com base no salário-hora composto
se RI0057 = 0 / não há movimento
Pare
senao
se RI0055 <> 0
Caso RI0056
Seja = 103 :
#103R=#103R
#103V=#103V
Seja = 104 :
#104R=#104R
#104V=#104V
Seja = 105 :
#105R=#105R
#105V=#105V
Seja = 445 :
#445R=#445R
#445V=#445V
Seja = 446 :
#446R=#446R
#446V=#446V
Fim
Pare / o valor foi informado
fim
fim
Caso RI0056
Seja = 103 : / 50 %
V1 = mult( #103R ; 1,50)
#103V = mult( V1 ; #610V)
#103R=#103R
Seja = 104 : / 80 %
V1 = mult( #104R ; 1,80)
#104V = mult(V1 ; #610V)
#104R=#104R
Seja = 105 : / 100 %
V1 = mult( #105R ; 2,00)
#105V = mult(V1 ; #610V)
#105R=#105R
Seja = 445 : / faltas
#445V = mult(#445R ; #610V)
#445R=#445R
Seja = 446 : / faltas abonadas
#446V = mult(#446R ; #610V)
#446R=#446R
Fim
O fluxograma parcial da regra R103 ilustra o uso do símbolo.
HUMANUS® - MANUAL DE FLUXOGRAMA
17
SÍMBOLO DE SELEÇÃO EM LISTA
A exemplo do comando CASO...SEJA, este símbolo é uma construção particular para a LDR® e
não é encontrado no conjunto de símbolos de fluxogramas tradicionais. A seleção em lista
(EXEC SE) também visa a facilitar a execução de um bloco de comandos usando apenas uma
condição, no caso testando se o conteúdo de um dado está contido numa lista de constantes:
se estiver, os comandos do bloco são executados, caso contrário o fluxo desvia para o primeiro
HUMANUS® - MANUAL DE FLUXOGRAMA
18
comando após o bloco ou encerra.
A regra R118 usa este comando para selecionar a condição de parada da regra.
REGRA: R118 [Calc. Décimo Terceiro]
/Calcula 13 salário
se RI0032 = 0 / se não houverem avos 13o.
Pare
fim
se RI0039 = 3 / rescisão
Exec Se RI0045 Em ["01"; "13"] / causas sem 13o. salário
Pare
fim
fim
/ apuração da méd. de comissão
D0=CalcData ( RI0029 ; -1 ; "m" ) / competência anterior
/ calcula média dos últimos 6 meses da rubrica 137 (valor) sem correção
/ considerando data de admissão e gerando memória das médias
V0=CalcMedia ( 137; 1 ; " " ; 0 ; D0 ; 6 ; 6 ; 1 ; 1 )
VA=ParteData(RI0029 ; "a")
D1=MontaData ( 01 ; 01 ; VA )
/ apuração méd. rem. var.para férias baseada em horas
V1=CalcMedia ( 103; 0 ; " " ; 1 ; D1 ; 12 ; 12 ; 1 ; 1 )
V1=mult(V1; 1,5)
V2=CalcMedia ( 104; 0 ; " " ; 1 ; D1 ; 12 ; 12 ; 1 ; 1 )
V2=mult(V2; 1,8)
V3=CalcMedia ( 105; 0 ; " " ; 1 ; D1 ; 12 ; 12 ; 1 ; 1 )
V3=mult(V3; 2,0)
V1=soma(V1 ; V2)
V1=soma(V1 ; V3)
SH=divide(V0 ; RI0002)
SH=Soma(SH ; #609V)
V4=Mult(V1 ; SH) / méd. em horas, transf. em valor
V5=soma(V0; V4) / rem. variável
V6=soma(V5; #640V)
V6=divide( V6 ; 12) / valor de um avo
/ tratamento 13 sobre av. prévio
se RI0039 <> 3 / não é rescisão
#118R=RI0032
#118V=mult(V6 ; RI0032)
senao
se RI0044 = 0 / aviso não é indenizado
#118R=RI0032
#118V=mult(V6 ; RI0032)
senao
V1 = V6
V2 = {RI0043 \ 30} / calcula nro. de avos indenizados
V3 = Arredonda(2 ; V2) / trunca parte fracionária
V2={V2 - V3} / preserva fração
se V2 >= 0,50 / se fração maior ou igual a 0,5 soma mais 1 avo
V3 = {V3 + 1}
fim
#140R=V3
#140V={V1 * V3} / cálculo 13. indenizado
se RI0032 = 1
#118R=0
HUMANUS® - MANUAL DE FLUXOGRAMA
19
#118V=0
senao
#118R=subtrai(RI0032 ; V3)
#118V={V1 * #118R}
fim
fim
fim
O fluxograma parcial da regra R118 abaixo exibe a construção do símbolo para o comando
EXEC SE.
O conteúdo do registrador 45 é comparado com cada constante da lista: se for igual a um
deles, o comando no bloco é executado (no caso, o comando pare encerra a regra).
Em todos os comandos (CASO...SEJA e EXEC SE) o tipo do dado sendo testado deve ser
compatível com a expressão da condição. Se não for, um erro de compilação será lançado pelo
tradutor da LDR®.
HUMANUS® - MANUAL DE FLUXOGRAMA
20
© 2011 by CR Sistemas Ltda.
1ª. Edição, agosto de 2011.
Material elaborado por Carlos Alberto Carravetta
Todos os direitos reservados. Este material não pode ser copiado, reproduzido ou distribuído,
por quaisquer meios, sem prévia autorização escrita de CR Sistemas Ltda.