Escala, como fazer?
26/03/2006
0
Minha mãe é enfermeira, responsável pela tarefa de fazer a escala do pessoal no hospital. Ela faz tudo na mão. Eu queria criar um programa que fizesse isso automático, alguém poderia me dar uma ajuda para criar um programinha para construção de escalas?
São 14 funcionários no hospital (pequena clínica), são vários setores.
Quais dados vocês precisariam para iniciar?
Aguardo
Onjahyr
Posts
26/03/2006
Rm
Os dados de setor devem conter os horários as serem preenchidos nos diversos setores.
Para montar a escala voce pode usar uma serie lógica de Ifs ou coisa parecida ou então implementar um algoritmo de ´programação linear ou ´pesquisa operacional´ Se não está familiarizado com estes termos instale e estude o suplemento ´Solver´ do Excel.Se bem me lembro um dos exemplos de uso deste suplemento do excel é justamente a elaboração de escalas ou coisa parecida.Não sei se para Delphi existe alguma implementação disponivel destes procedimentos.De qualquer forma é um assunto fascinante (como diria o Dr.Spock).
Espero ter sido de alguma utilidade.
27/03/2006
Onjahyr
Vou analisar o Excel e ver se existe algum modelo pronto, de lá vou tentar fazer um programinha.
Falowww
Robson
28/03/2006
Onjahyr
28/03/2006
Rm
O solver era uma ideia se a tua opção fosse pela pesquisa operacional.
Pode ser pelos Ifs que comentei.Se for por pesquisa operacional>programação linear pode ver a lógica do ´Algoritmo Simplex´ para implmentar em teu programa.
Este caminho é o mais complexo que uma análise lógica com IFs
Espero que outros colegas te ajudem mais apropriadamente...
SDS/RM
29/03/2006
Rm
Turnos ou horarios de trabalho.Refira-se a eles como
1
2
3
Considerando 3 setores AAA,BBB,CCC
Tabela funcionários TBLFun01 com restrições de turno e setor
Codfun
Funcionário
RestrT1-Varchar 3-Restrição de Turno1 (SIM ou em branco)
RestrT2
RestT3
RestStr1- Varchar 3 Restrição de setor
RestStr2
RestStr3
Utilizado Varchar3 –Neste campo será marcado “SIM” quando o funcionário for pego para rodizio
Tabela escala TBLEscala
Coddia
Dia -Datetime
Turno1Setor1-Varchar 30 (aqui irá o nome do funcionário)
Turno2Setor1
Turno3Setor1
Turno1Setor2
Turno2Setor2
Turno3Setor2
Turno1Setor3
Turno2Setor3
Turno3Setor3
Exemplo um setor três turnos
Crie primeiro o calendário na tabela Escala
Marque as restrições na tabela funcionario
Funcionário RestrT1 RestrT2 RestrT3 RestStr1 RestStr2 RestStr3
João SIM SIM
Marcos SIM SIM
Lucas SIM
Isto é João não pode assumir o turno 1 nem o setor AAA.
Marcos não pode assumir o turno 2 nem o Setor CCC
Lucas só não pode assumir turno 3
O objetivo é preencher a Tabela escala obedecendo estas restrições.
Uma idéia pode ser (em button)ir ao inicio da TBLEscala.Ir ao inicio da TBLFun. Abrir um loop na TBLEscala.Então localizar cada funcionário que possa assumir Setor/Turno. Uma vez utilizado o funcionário fica marcado no campo Utilizado da TBLFun como “SIM” .A posterior busca deve ter em conta este campo (utilizado) TAMBEM como restrição.
Após preencher todos os campos da escala no dia prossegue o loop com next na TBlEscala.
Questão:Como buscar o funcionário com as restrições:>
Poderia ser por SQL com select where ,etc.(presumo) ou abrir um repeat dentro do loop acima mencionado com os Ifs que te falei
EXEMPLO para UM setor e UM turno
TBLEscala.First;
While not TBLEscala.eof do begin
TBLFun.first;
repeat
If (TBLFunRestrT1.value=’SIM’) or (TBLFunRestStr1.value=’SIM’) or (TBLFUtilizado.value=’SIM’) then BEGIN //TESTA RESTRIÇÕES
TBLFun.NEXT;
Until
(TBLFunRestrT1.value=’NAO’) AND (TBLFunRestStr1.value=’NAO’) AND (TBLFUtilizado.value=’NAO’) OR TBLFUN.eof //ACHA LIVRE
END;
TBLEscala.edit ;
TBLEscalaTurno1Setor1.Value:=TBLFunFuncionario.value;
TBLEscala.post;
Depois de ter feito todos setores/turnos
TBLEscala.next ;
End ;
Esta é a ideia básica.Não testei ,não sei se funciona e deve ter vários erros.(quando chega no fim TBLFun.eof- pode ocorrer de pegar o funcionario de qualquer jeito)Tambem existem questões especificas da escala que não sei como por ex :quando remarcar o funcionário como livre(utilizado=não)?
.Se quizer mesmo fazer vai dar algum trabalho.
Clique aqui para fazer login e interagir na Comunidade :)