Fórum Ajuda com Onexit #430632

07/12/2012

0

Olá Pessoal.
Mais uma vez Preciso da ajuda de vocês

no onexit do meus sistemas eu preciso que ele verifica Quatro Procedimentos

VerificaPagamentoProgramado;
VerificaFeriado;
IsFimDeSemana(DM.cdsContasPagarDT_VENCIMENTO.AsString);
LimiteDiario;

Exemplo:
Quando ele encontra feriado ele muda a data para + 1, só que ele não volta o loop para o primeiro que é VerificaPagamentoProgramado ele já avança para IsFimDeSemana, o mesmo acontece se ele encontra sabado ou domindo ele não volta para o VerificaPagamentoProgramado avança para LimiteDiario.

O que eu faço....

Grato a Todos.
Márcio Lima

Márcio Lima

Responder

Posts

07/12/2012

Claudia Nogueira

Onde está incrementando a data e qual o retorno de cada função?
Responder

Gostei + 0

07/12/2012

Márcio Lima

Olá Amiga, mais uma vez me ajudando.

Segue abaixo o Codigo Fonte de cada Procedimento. Espero que entenda.

VerificaPagamentoProgramado;
VerificaFeriado;
IsFimDeSemana(DM.cdsContasPagarDT_VENCIMENTO.AsString);
LimiteDiario;



--------------------------------

procedure TfrmPedidoCompra.VerificaPagamentoProgramado;
const
DiasSemana: array[1..7] of string = ('Domingo','Segunda-feira','Terça-Feira', 'Quarta-Feira', 'Quinta-Feira', 'Sexta-Feira', 'Sábado');
Var
Dia, Mes,Pagamento : String;
iNumDia: integer;
begin
VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);
L_DIA_SEMANA.Caption := VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);

Dia := formatdatetime('dd',strtodatetime(DBEdit49.text));
Mes := formatdatetime('mm',strtodatetime(DBEdit49.text));

iNumDia := DayOfWeek(StrToDate(DM.cdsContasPagarDT_VENCIMENTO.AsString));

DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' SELECT PG.ID_LOJA,L.FANTASIA, PG.DIA_MES,PG.DESCRICAO_PAGAMENTO FROM TB_PAGAMENTO_PROGRAMADO PG'+
' LEFT OUTER JOIN TB_LOJAS L ON (L.ID_LOJA = PG.ID_LOJA) '+
' WHERE PG.DIA_MES = '+Dia+
' AND PG.ID_LOJA = '+DM.cdsPedidoID_LOJA.AsString;
DM.cdsDinamica.Open;

Pagamento := DM.cdsDinamica.Fields[3].AsString;

if DM.cdsDinamica.IsEmpty then //verfica paramento programado
begin
end
else
begin
if DM.cdsPedidoID_LOJA.AsString <> '' then //Procura Feriado Por Loja
begin
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' Select F.DESC_FERIADO from TB_FERIADO F where extract(DAY from F.DT_FERIADO) = '+Dia +
' AND extract(MONTH from F.DT_FERIADO) = '+Mes +
' AND F.ID_LOJA = '+DM.cdsPedidoID_LOJA.AsString;
DM.cdsDinamica.Open;

if DM.cdsDinamica.IsEmpty then //verifica feriado geral
begin
//Procura Por Feriado Nacional
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' Select F.DESC_FERIADO from TB_FERIADO F where extract(DAY from F.DT_FERIADO) = '+Dia +
' AND extract(MONTH from F.DT_FERIADO) = '+Mes + ' and F.ID_LOJA IS NULL ';
DM.cdsDinamica.Open;

if DM.cdsDinamica.IsEmpty then
begin

DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' SELECT PG.ID_LOJA,L.FANTASIA, PG.DIA_MES,PG.DESCRICAO_PAGAMENTO FROM TB_PAGAMENTO_PROGRAMADO PG'+
' LEFT OUTER JOIN TB_LOJAS L ON (L.ID_LOJA = PG.ID_LOJA) '+
' WHERE PG.DIA_MES = '+Dia+
' AND PG.ID_LOJA = '+DM.cdsPedidoID_LOJA.AsString;
DM.cdsDinamica.Open;

Pagamento := DM.cdsDinamica.Fields[3].AsString;

if DM.cdsDinamica.IsEmpty then
begin
end
else
begin
if iNumDia in [7] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 3;
DBEdit49.OnExit(Self);
end;
if iNumDia in [8] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

if iNumDia in [6] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 4;
DBEdit49.OnExit(Self);
end;
if iNumDia in [1] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

if iNumDia in [2] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [3] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [4] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [5] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

end;
end
else
begin
if iNumDia in [7] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 3;
DBEdit49.OnExit(Self);
end;

if iNumDia in [8] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

if iNumDia in [6] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 4;
DBEdit49.OnExit(Self);
end;
if iNumDia in [1] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

if iNumDia in [2] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [3] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [4] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
if iNumDia in [5] then //
begin
ShowMessage('Data não Permitida.Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;
end;
end
else
begin
if iNumDia in [7] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 3;
DBEdit49.OnExit(Self);
end;

if iNumDia in [8] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end;

if iNumDia in [6] then
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 4;
DBEdit49.OnExit(Self);
end
else
begin
ShowMessage('Data não Permitida. Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString+#13
+' e Existe(m) Pagamento(s) Programado(s)'+#13+
' '+Pagamento+#13+
' O Sistema Irá Localizar uma Data Próxima.');

DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 2;
DBEdit49.OnExit(Self);
end
end;
end
else
begin
end;
end;
---------------------------

procedure TfrmPedidoCompra.VerificaFeriado;
Var
Dia, Mes : String;
begin
VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);
L_DIA_SEMANA.Caption := VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);

Dia := formatdatetime('dd',strtodatetime(DBEdit49.text));
Mes := formatdatetime('mm',strtodatetime(DBEdit49.text));

if DM.cdsPedidoID_LOJA.AsString <> '' then //Procura Feriado Por Loja
begin
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' Select F.DESC_FERIADO from TB_FERIADO F where extract(DAY from F.DT_FERIADO) = '+Dia +
' AND extract(MONTH from F.DT_FERIADO) = '+Mes +
' AND F.ID_LOJA = '+DM.cdsPedidoID_LOJA.AsString;
DM.cdsDinamica.Open;

if DM.cdsDinamica.IsEmpty then
begin
//Procura Por Feriado Nacional
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText := ' Select F.DESC_FERIADO from TB_FERIADO F where extract(DAY from F.DT_FERIADO) = '+Dia +
' AND extract(MONTH from F.DT_FERIADO) = '+Mes + ' and F.ID_LOJA IS NULL ';
DM.cdsDinamica.Open;

if DM.cdsDinamica.IsEmpty then
begin
end
else
begin
ShowMessage('Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString);
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 1;
DBEdit49.OnExit(Self);
end;
end
else
begin
ShowMessage('Esta Data é Feriado '+DM.cdsDinamica.Fields[0].AsString);
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 1;
DBEdit49.OnExit(Self);
end;
end
else
begin
end;
end;



---------------------------------------------------

function IsFimDeSemana(sData: string) : boolean;
const
DiasSemana: array[1..7] of string = ('Domingo','Segunda-feira','Terça-Feira', 'Quarta-Feira', 'Quinta-Feira', 'Sexta-Feira', 'Sábado');
var
iNumDia: integer;
begin
VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);

iNumDia := DayOfWeek(StrToDate(DM.cdsContasPagarDT_VENCIMENTO.AsString));
if iNumDia in [1,7] then
begin
ShowMessage('Esta data cai num dia de: '+DiasSemana[iNumDia]);
result := true;
end else
result := false;
if iNumDia in [1] then
begin
ShowMessage('Não Será Permitido lançamentos no Domingo'+#13+
'O Sistema Irá Localizar o Próximo Dia Útil');
DM.cdsContasPagarDT_VENCIMENTO.Value := DM.cdsContasPagarDT_VENCIMENTO.Value + 1;

ShowMessage('Data Localizada '+DM.cdsContasPagarDT_VENCIMENTO.AsString);
Exit;
end;
if iNumDia in [7] then
begin
ShowMessage('Não Será Permitido lançamentos no Sábado'+#13+
'O Sistema Irá Localizar o Próximo Dia Útil');
DM.cdsContasPagarDT_VENCIMENTO.Value := DM.cdsContasPagarDT_VENCIMENTO.Value + 2;

ShowMessage('Data Localizada '+DM.cdsContasPagarDT_VENCIMENTO.AsString);
Exit;
end;
end;

-----------------------------

procedure TfrmPedidoCompra.LimiteDiario;
var
VlTotal,vlLimite : Extended;
begin
// valido
VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);
L_DIA_SEMANA.Caption := VerFimSemana(dm.cdsContasPagarDT_VENCIMENTO.AsDateTime);

if DM.cdsPedidoID_LOJA.IsNull then
begin
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText :=' SELECT SUM(CP.VL_TITULO) '+
' FROM TB_CONTAS_PAGAR CP WHERE CP.STATUS <>''B'''+
' AND CP.DT_VENCIMENTO = '+QuotedStr(FormatDateTime('MM/DD/YYYY',DM.cdsContasPagarDT_VENCIMENTO.Value))+
' AND CP.ID_GRUPO_LOJA ='+DM.cdsPedidoID_GRUPO_LOJA.AsString;
DM.cdsDinamica.Open;
end
else
begin
DM.cdsDinamica.Close;
DM.cdsDinamica.IndexFieldNames:='';
DM.cdsDinamica.CommandText :=' SELECT SUM(CP.VL_TITULO) '+
' FROM TB_CONTAS_PAGAR CP WHERE CP.STATUS <>''B'''+
' AND CP.DT_VENCIMENTO = '+QuotedStr(FormatDateTime('MM/DD/YYYY',DM.cdsContasPagarDT_VENCIMENTO.Value))+
' AND CP.ID_LOJA ='+DM.cdsPedidoID_LOJA.AsString;
DM.cdsDinamica.Open;
end;
if DM.cdsDinamica.Fields[0].IsNull then
VlTotal := 0
else
VlTotal := DM.cdsDinamica.Fields[0].AsFloat;

if DM.cdsPedidoVL_DIARIO_PAGMETO.IsNull then
vlLimite := DM.cdsPedidoVL_DIARIO_PAGMETO_1.AsFloat
else
vlLimite := DM.cdsPedidoVL_DIARIO_PAGMETO.AsFloat;

if VlTotal + DM.cdsContasPagarVL_TITULO.AsFloat >= vlLimite then
begin
ShowMessage('LIMITE DIARIO EXCEDIDO');
DM.cdsContasPagarDT_VENCIMENTO.AsDateTime := DM.cdsContasPagarDT_VENCIMENTO.AsDateTime + 1;
DBEdit49.SetFocus;
end;
end;

---------------------------------------
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar