Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2007
efelix efelix is offline
Miembro
 
Registrado: jul 2006
Posts: 84
Poder: 18
efelix Va por buen camino
Generar automaticamente número de factura

Hola a todos, hace tiempo que no estaba por el foro, pero me ha surgido una interrogante, espero que me puedan ayudar como siempre lo han hecho. Disculpen si el tema no pertenece a este foro. El problema es el siguiente:
Estoy tratando de automatizar el proceso de facturación de mi organización, la cual se dedica a la prestación de servicios, hasta el momento este proceso se lleva a cabo de forma manual.
En mi empresa existen varios grupos de trabajo, cada uno de los cuales factura, pero de manera consecutiva con relación a la facturación total, es decir yo diseñé la base de datos con dos carácteres para identificar al grupo, guión y luego un número. Para entrar en mas detalle, st-1, es el grupo servicios técnicos con la factura 1. Este es el diseño que elegí para el número de la factura, que como se desprende verán que es un campo tipo texto. Me pregunto si es posible que cuando vaya a introducir una nueva factura es posible mediante código que se genere el consecutivo, es decir, si ya está la factura st-1 cuando le de al botón agregar nueva factura me ponga st-2. Espero me hayan entendido. Muchas gracias.
Responder Con Cita
  #2  
Antiguo 03-04-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Puedes hacer una tabla con dos campos distintos (Tipo, Consecutivo) donde Tipo tendrá los diferentes tipos de documentos llamese (ST, FV) o lo que sea y en consecutivo debe ir el numero por el que va la factura e ir incrementando dicho campo según sea necesario (Puede ser un campo autoincremental).
Ahora bien, si no manejas tablas y te la haz arreglado de alguna manera para no hacerlo pues nos cuentas y entre todos te ayudaremos a crear una función que te devuelva el incremento como lo necesitas.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 03-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Autoincrementos no creo que pueda servir, ya que pueden quedar huecos y en números de factura, no se permite.

No creo que sea nada complejo.
Código Delphi [-]
function Incrementa(nFactura:string):string;
begin
  if Length(nFactura) > 3 then
    Result := copy(nfactura, 1, 3) + intToStr(strToint(copy(nfactura, 3, 255))+1);
end;

El problema más grave es recuperar el número de factura más alto de un grupo, ya que al ser texto, la ordenación de un String no tiene nada que ver con integer.

La forma de salvar este obstaculo, es añadir ceros por la izquierda, así se puede pedir un listado de nFactura ordenado descendente. El primer nFactura será el que se incrementa.

Código:
st-00000001
st-00010000
Aquí 10.000 es el último al pedir una ordenación AScendente.

Sin embargo, manteniendo el orden ASCendente, aquí no se obtienen los mismos resultados:
Código:
st-13
st-10000
st-1
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 03-04-2007
lgarcia lgarcia is offline
Miembro
 
Registrado: jul 2004
Posts: 479
Poder: 20
lgarcia Va por buen camino
Generacion automatica factura

Hola:

Otra variante puede ser porque imagino que pueden estar facturando varias personas a la vez, es que cuando el facturador entre en el formulario insertar un registro con los datos minimos tales como fecha, consecutivo, etc y cuando se guarde realizar un update con el resto de los datos del formulario con el id que debes haber obtenido cuando se hizo el insertar inicial. De esta forma garantizas reservar un consecutivo unico. Lo otro que tienes que hacer es para los casos en que no se termine de llenar el formulario por cualquier motivo es eliminar el registro y asi garantizas recuperar el consecutivo.

Este codigo en SQL lo resolvi de esta forma
Código:
CREATE PROCEDURE [insert_Bolsos]
 (@recepcionista_  [int],
  @fecha_   [datetime],
  @servicio_   [int],
  @ruta_   [int],
  @tipo_   [int],
  @id_   int Output,
  @consecutivo_  int Output)
AS 
SELECT @consecutivo_ = MAX(consecutivo) FROM dbo.Bolsos WHERE (fecha = CONVERT(DATETIME, @fecha_, 102))
IF @consecutivo_ is Null SET @consecutivo_ = 1
ELSE SET @consecutivo_ = @consecutivo_ + 1
  
INSERT INTO [Sala].[dbo].[Bolsos] 
  ([recepcionista],
  [fecha],
  [servicio],
  [ruta],
  [tipo],
  [consecutivo])
 
VALUES 
  (@recepcionista_,
  @fecha_,
  @servicio_,
  @ruta_,
  @tipo_,
  @consecutivo_)
SELECT @id_ = @@IDENTITY
GO
Saludos
Luis Garcia
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
Problema Con campo Numero factura josejose Varios 1 01-02-2007 15:44:46
cerrar automáticamente emiliu Varios 5 27-11-2005 16:37:12
Fallo Nº Factura y Linea Factura CarmaZone Tablas planas 5 26-05-2005 11:17:19
Ejecutar procedimiento automaticamente Javi2 Varios 2 08-07-2004 13:02:02
Cambiar de edit automaticamente CRIS Internet 1 12-07-2003 23:44:01


La franja horaria es GMT +2. Ahora son las 12:29:15.


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