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.