Código
Eu criei uma função dentro do Delphi, pega o Autoincremento e anexar o ano, ou o mes, ou o dia.
Para fazer isto no entanto, o seu campo autoincremento tem que ser do tipo Varchar e não númerico, isto porque ele vai acrescentar o caractere "/".
Na função, um dos parâmetros que voce vai fornecer é se voce quer anexar o Dia, o Mes ou Ano.
Antes de mais nada, necessário é que voce declare a Unit DateUtils na seção Uses da sua Unit.
Eis a função: }
function TfrmTemplate.NextDoc(Num, Calendar: string): string;
var
S, D: integer;
Ano, Mes, Dia: string;
begin
Ano := '/' + IntToStr(YearOf(Date));
if MonthOf(Date) < 10 then
Mes := '/0' + IntToStr(MonthOf(Date))
else
Mes := '/' + IntToStr(MonthOf(Date));
if DayOf(Date) < 10 then
Dia := '/0' + IntToStr(DayOf(Date))
else
Dia := '/' + IntToStr(DayOf(Date));
if Calendar = 'Ano' then Calendar := Ano;
if Calendar = 'Mes' then Calendar := Mes;
if Calendar = 'Dia' then Calendar := Dia;
if (Num <> '') and (Calendar = Copy(Num, Pos('/', Num), Length(Calendar))) then begin
D := (Pos('/', Num) - 1);
S := StrToInt(Copy(Num, 1, D)) + 1;
FmtStr(Num, '%.' + IntToStr(D) + 'd', [S]);
Result := Num + Calendar;
end else
Result := '0001' + Calendar;
end;
{ Onde o parâmetro Num, vai ser o valor do campo Autoincremento, especificamente do último registro, apanhado de uma instrução Select assim: }
Select Max(Codigo) as Maior From Tabela
{ Ai voce vai passar como parâmetro para função assim: }
NextDoc(IBQuery1Maior.Value, "Ano");
{ Ora, mas a função Max do SQL não pega o maior valor númerico de um campo númerico ? Não só campos númericos, porém em se tratatando de campos Strings, no caso do SQL (Varchar), ele vai comparar a maior cadeia do código ASCII dentro do campo.
A função vai comparar o ano ou dia ou o mes, de acordo com o segundo parâmetro passado, com o ano ou mes ou dia da data atual do sistema, se for diferente, ele acrescenta ele coloca "0001/Ano atual", se o ano for igual, ele acrescenta mais um na numeração mantendo o ano ou mes ou dia.
Esperimente usar a função assim }
NextDoc("0035/2007", "Ano");
// Ou assim
NextDoc("0048/2006", "Ano");
Um abraço a todos
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009