Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2011
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Sumar un Numero real Una Cadena

Buenos dias a Todos

Mi Inquietud es la Siguiente: Estoy utilizando delphi7 y SqlServer Express 2008 y necesito que al momento de grabar las facturas en la base de datos, asignarle un Número de Comprobante Fiscal a cada una de ellas el cual es un String que contiene números y letras y debo incrementarlo en uno cada vez que se genera una nueva factura.

El Número de comprobante Fiscal tiene la Siguiente estructura "A010010010100000001" Donde los primero 11 caracteres son fijos y los demas 8 corresponden a la Secuencia.

Para almacenas esta información utilizo una tabla llamada <Serie> la cual tiene los Siguientes Campos:

Inicial, varchar(19)
Final, varchar(19)
último Utilizado varchar(19)

En el Campo Inicial y final ya tengo la Secuencia que voy a utilizar antes de empezar a Facturar
Ej: Inicial = A010010010100000001 y Final = A010010010100000050

En el Campo último utilizado debo ir guardando cual fue el Ultimo Número de comprobante fiscal que se asigno a las Facturas.

Lo que necesito sabes es como puedo A esta Cadena(A010010010100000001) Sumarle uno y obtener como resultado la siguiente cadena (A010010010100000002).

Muchas Gracias de Antemano a Todos por Su valioso tiempo y ayuda.
Responder Con Cita
  #2  
Antiguo 22-12-2011
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola: A ver si entendí la pregunta

Aqui va el algoritmo

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var Original,AConvertir, Nuevo: String;
    ValorAnterior, NuevoValor: Int64;
    i : Integer;
begin
  // Valor original en formato string
  Original := Edit1.Text;
  // Tomo solo la parte que interesa
  AConvertir := Copy(Original,12,08);
  // y la borro
  Delete(Original,12,08);
  // Convierto el resultante a entero
  ValorAnterior := StrToInt(AConvertir);
  // le sumo uno
  Inc(ValorAnterior);
  // y lo asigno a una variable
  NuevoValor := ValorAnterior;
  //  completo una variable string con ceros antes del valor resultante;
  for i := 1 to (8-Length(IntToStr(NuevoValor))) do
    Insert('0',Nuevo,I);
  // y le agrego el numero final como string
  Nuevo := Nuevo+IntToStr(NuevoValor);
  // Despues le agrego eso nuevo a la cadena que le habia quidato el final
  Edit2.Text := Original+Nuevo;
end;


Para probarlo inicia una nueva aplicacion y agrega dos TEdit y un boton donde pegas este codigo. (lo probe con el texto de tu mensaje y pareciera que anda). Saludos
Responder Con Cita
  #3  
Antiguo 22-12-2011
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
Muchas Gracias Martin, lo voy a probar y te dejo saber como me fue, pero muchas gracias por tu ayuda y por tu tiempo.
Responder Con Cita
  #4  
Antiguo 23-12-2011
hondaalberto hondaalberto is offline
Miembro
 
Registrado: sep 2010
Ubicación: República Dominicana
Posts: 67
Poder: 14
hondaalberto Va por buen camino
La lógica esta buena pero lo que necesito hacer es Tomar el número de Comprobante Fiscal desde la tabla serie y hacer el incremento de la Cadena tomando en cuenta el último utilizado, no digitarlo en un edit, porque la idea es que al momento de registrar la factura de forma automatica tengo que incrementar el Número de comprobante y asignarselo a la nueva factura.
Responder Con Cita
  #5  
Antiguo 23-12-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Alberto.

Lo ideal sería hacerte un procedimiento almacenado al efecto pero no conozco la sintáxis de SqlServer. Desde Delphi podrías hacer algo como:
Código Delphi [-]
function TForm1.ProxNroComprobante: string;
begin
  with TuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT NRO_COMPROBANTE FROM TABLA_SERIE'); // supongo la tabla con un registro
    Open;
    Result:= 'A0100100101' +
      StringOfChar('0', 8 - Length(FieldByName('NRO_COMPROBANTE').AsString)) +
      IntToStr(FieldByName('NRO_COMPROBANTE').AsInteger + 1 );
    Close;
  end;
end;
Donde NRO_COMPROBANTE sería el campo de la tabla (TABLA_SERIE) de donde se tóma el número de comprobante fiscal.

Ejemplo de uso:
Código Delphi [-]
   NuevaFactura.AsString:= ProxNroComprobante;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 23-12-2011 a las 18:11:17.
Responder Con Cita
  #6  
Antiguo 23-12-2011
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
Empezado por hondaalberto Ver Mensaje
La lógica esta buena pero lo que necesito hacer es Tomar el número de Comprobante Fiscal desde la tabla serie y hacer el incremento de la Cadena tomando en cuenta el último utilizado, no digitarlo en un edit, porque la idea es que al momento de registrar la factura de forma automatica tengo que incrementar el Número de comprobante y asignarselo a la nueva factura.
Esta bien Alberto, la idea era que vieras como se podria recortar el numero de factura guardado que contiene letras, convertirlo en entero, sumarle uno y generar un nuevo string con el nuevo numero. Lo que dice ecfisa es correcto pero yo tampoco conozco SQL Server.

El procedimiento tambien lo puedes hacer como una funcion donde le das el numero que tenes guardado y te da el nuevo donde luego se lo pasarias como parametro para el nuevo registro.-
Responder Con Cita
  #7  
Antiguo 24-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Solo una pregunta que siempre termina por ser un problema cuando guardamos en algun lado la última factura generada: la concurrencia. Para un solo puesto de facturación no hay problema pero de uno a mil la cosa se complica. Lo mejor es desarollar el mecanismo de asignación directamente en el servidor o bien obtener ese último dato justo antes de guardar la factura. En MySQL por ejemplo tengo un campo autoincrementado que me mantiene todo bajo control ya que el programa cliente le pide un folio, este se lo asigna y asi continua con los demás de manera que nunca hay que llevar el control manualmente. O bien que de antemano te conste que la factura tiene el folio deseado en cuyo caso no vale la pena tal control, pero lo que comentas se trata de factura electrónica.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 24-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Como recomendación, siempre que en el folio convivan letras y números hay que tratar de divirlos hasta donde se pueda, en tu caso bastan 2 campos: serie (char) y folio (longint), tanto por código como por SQL puedes hacer la concatenación para obtener el código completo y te olvidas de conversiones más adelante
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Convertir numero en cadena rex JAVA 7 25-10-2007 03:28:11
Modulo de un numero real Apetelinau Varios 1 11-09-2007 13:47:42
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
Como sumar un campo entero y un real Maury Manosalva OOP 2 31-05-2007 19:41:14
Insertar Numero Real en Access Franklim SQL 1 03-04-2004 15:11:40


La franja horaria es GMT +2. Ahora son las 17:43:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi