git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/branches/D2007-DA5@21 0c75b7a4-871f-7646-8a2f-f78d34cc349f
67 lines
1.8 KiB
ObjectPascal
67 lines
1.8 KiB
ObjectPascal
unit uReferenciasUtils;
|
|
|
|
interface
|
|
|
|
uses
|
|
uDAInterfaces, uDADataTable, uDABusinessProcessor;
|
|
|
|
function darReferenciaSiguiente(const Referencia: String): String;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
|
|
{ Se utiliza en las reglas de negocio del servidor y
|
|
devuelve la conexión utilizada por el BusinessProcessor para
|
|
procesar los deltas. }
|
|
function darReferenciaSiguiente(const Referencia: String): String;
|
|
var
|
|
ParteEntera, ParteCaracter: String;
|
|
Semaforo: Boolean;
|
|
i, LongitudParteEntera: Integer;
|
|
begin
|
|
//Por defecto la parte caracter será todo
|
|
ParteCaracter := Copy(Referencia, 1, length(Referencia));
|
|
Semaforo:= false;
|
|
for i := 0 to length(Referencia) do
|
|
begin
|
|
if (Referencia[i] in ['0','1','2','3','4','5','6','7','8','9']) then
|
|
begin
|
|
if not Semaforo then
|
|
begin
|
|
//Cogemos el resto de la cadena suponiendo que no hay más caracter
|
|
ParteEntera := Copy(Referencia, i, length(Referencia)+1);
|
|
Semaforo := true;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
//Volvemos a asignar la parte caracter ya que hemos encontrado otro
|
|
//e inicializamos el semáforo para volver a coger la parte entera si encontramos
|
|
//algún número
|
|
ParteCaracter := Copy(Referencia, 1, i);
|
|
Semaforo := False;
|
|
end;
|
|
end;
|
|
|
|
LongitudParteEntera := Length(ParteEntera);
|
|
//Si no tenemos ningún número en parte entera asignamos 1 por defecto
|
|
try
|
|
i := StrToInt(ParteEntera);
|
|
except
|
|
i := 1;
|
|
end;
|
|
|
|
//Incrementamos y rellenamos con ceros, en el caso de ser necesario
|
|
Inc(i);
|
|
ParteEntera := IntToStr(i);
|
|
for i:=Length(ParteEntera) to LongitudParteEntera-1 do
|
|
ParteEntera := '0' + ParteEntera;
|
|
|
|
Result := ParteCaracter + ParteEntera;
|
|
end;
|
|
|
|
|
|
end.
|