Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Empezamos ahora con artículos

Estructura de la base de datos

Cita:
CREATE TABLE ARTICULOS (
ID INTEGER NOT NULL,
CODIGO T20 /* T20 = VARCHAR(20) */, //Código del artículo
PRODUCTO T80 /* T80 = VARCHAR(80) */, //Nombre del producto
COSTE POR /* POR = NUMERIC(15,4) */, //Coste del producto
CODIGOPROVEEDOR T20 /* T20 = VARCHAR(20) */, //Código del proveedor
PV1 POR /* POR = NUMERIC(15,4) */, //Precio de venta tarifa 1
PV2 POR /* POR = NUMERIC(15,4) */, //Precio de venta tarifa 2
PV3 POR /* POR = NUMERIC(15,4) */, //Precio de venta tarifa 3
PV4 POR /* POR = NUMERIC(15,4) */, //Precio de venta tarifa 4
PV5 POR /* POR = NUMERIC(15,4) */, //Precio de venta tarifa 5
DTO1 POR /* POR = NUMERIC(15,4) */, //Descuento de venta tarifa 1
DTO2 POR /* POR = NUMERIC(15,4) */, //Descuento de venta tarifa 2
DTO3 POR /* POR = NUMERIC(15,4) */, //Descuento de venta tarifa 3
DTO4 POR /* POR = NUMERIC(15,4) */, //Descuento de venta tarifa 4
DTO5 POR /* POR = NUMERIC(15,4) */, //Descuento de venta tarifa 5
FAMILIA T20 /* T20 = VARCHAR(20) */, //Familia del artículo
CODIGOBARRAS39 T20 /* T20 = VARCHAR(20) */, //Código de barras libre
CODIGOBARRASEAN13 T20 /* T20 = VARCHAR(20) */, //Códigos de barra estándar Ean 13
PESO POR /* POR = NUMERIC(15,4) */, //Peso del formato del producto
PROPIO LOG /* LOG = CHAR(1) */, //Si es un artículo de fabricación propia
TRAZABILIDAD LOG /* LOG = CHAR(1) */, //Si lleva trazabilidad
SERVICIO LOG /* LOG = CHAR(1) */, //Si es un servicio
CADUCO LOG /* LOG = CHAR(1) */, //Si el artículo es caduco (se lleva la caducidad con el lote
TIPOIMPUESTO INTEGER, //Tipo de aimpuesto aplicable (va con el nombre del impuesto en configuración)
COMISIONMAXIMA POR /* POR = NUMERIC(15,4) */, //Comisión máxima a pagar en este artículo, prevalece sobre la comisión en el agente
DTOMAXIMO POR /* POR = NUMERIC(15,4) */, //Descuento máximo del artículo (prevalece sobre los descuentos en clientes o aplicados en DTO1...DTO5)
RAPEL1 INTEGER, //Rapel de ventas en tarifa 1
RAPEL2 INTEGER, //Rapel de ventas en tarifa 2
RAPEL3 INTEGER, //Rapel de ventas en tarifa 3
RAPEL4 INTEGER, //Rapel de ventas en tarifa 4
RAPEL5 INTEGER, //Rapel de ventas en tarifa 5
ADR VARCHAR(150) CHARACTER SET NONE, //Descripción de la frase de adr
ADREXEPCION INTEGER, // formatos que estan exentos del adr según el propio ADR
ADRLIMITE INTEGER //Limite de mercancía a transportar por un conductor y vehículo sin el carnet y permiso de mercancías peligrosas
);
Rapel: Los clientes que se les hace descuento por rapel, deben hacerles albaranes, unificando a la hora de facturar, la mercancía por código, de manera que si el total de unidades vendidas es igual o superior al rapel de su tarifa se aplica el precio de esta tarifa, en caso contrario se aplica el PVP normal.

Escala de Rapel: Es cuando el cliente parte de un precio normal y según sus ventas finales a la hora de facturar se aplica la tarifa según el rapel alcanzado (no lo he usado nunca y nunca me lo han pedido)


Ahora la tabla NOTAS
Cita:
CREATE TABLE NOTAS (
ID INTEGER NOT NULL,
NOMBREMODULO T20 /* T20 = VARCHAR(20) */, //Nombre del módulo
CODIGO T20 /* T20 = VARCHAR(20) */, //Código del módulo al que pertenece
DESCRIPCION T20 /* T20 = VARCHAR(20) */, //Descripción dentro del modulo, (Avisos, Notas, Alertas,etc.)
NOTAS MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */ //Campo memo para notas
);
Y por último La tabla imágenes

Cita:
CREATE TABLE IMAGENES (
ID INTEGER NOT NULL,
NOMBREMODULO T20 /* T20 = VARCHAR(20) */, //Nombre del módulo
CODIGO T20 /* T20 = VARCHAR(20) */, //Código del módulo al que pertenece
DESCRIPCION T20 /* T20 = VARCHAR(20) */, //Descripción dentro del modulo, (Foto, interior, exterior, detalle, etc.)
IMAGENES IMG /* IMG = BLOB SUB_TYPE 0 SEGMENT SIZE 80 */ //Imagen a mostrar
);
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 07-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Me gustaría saber si esta quedando claro lo que llevo explicado, o tengo que ser más claro.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #3  
Antiguo 07-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.068
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo lo entiendo bien, y eso que soy bastante torpe

Gracias, muy completo, la verdad
Responder Con Cita
  #4  
Antiguo 08-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Hola compañero antes de seguir considero oportuno poner algunas imágenes del programa de facturación que hice para mi antigua empresa.

Primero veréis que hay datos tachados, por que lo que os muestro son con información real y hay que respetar la protección de datos, así que pido disculpas, aun así creo que queda bastante claro

Para empezar una imagen del tema de los lotes



Como podéis ver marco en rojo el lote del producto que buscamos, en verde sería el maestro (en este caso es el mismo que hemos introducido) y en naranja el lote derivado que vemos que es el 120402, se puede dar el caso que el lote 120401, tenga el derivado que tenga, pero también tenga un maestro que pueda ser por ejemplo el 120399.

Ya que hablo de mi antiguo programa, que por cierto este que empiezo nuevo es por hacerlo más sencillo y eficaz, os pongo una imagen de un proceso que más abajo os explico.



como podéis ver se trata de la edición de Facturas, con datos reales, os pongo imagen del menú, del visor de documentos (presupuestos, pedidos, albaranes y facturas), del editor de documentos y por último el editor de artículos, que contiene aparte de la información habitual, contiene lotes disponible (La única condición será que 1º el stock disponibles sea igual o superior a 1 y 2º que la fecha de caducidad sea inferior a la actual), por supuesto esto lo veis en el apartado llamado lotes y vencimientos, después del Stringrid hay una última linea que nos permite introducir un lote de forma manual (Se da en más de una ocasión, de que aun no hemos dado la entrada de la mercancía y tengamos que facturarla))
Por otro lado en el apartado precios veréis algo que es muy poco común, por un lado 5 tarifas de precios (esto es normal) y por otro precio especial del cliente, esto si os dais cuenta no esta en la estructura ni de clientes, ni en la de artículos, si no que esta en una tabla independiente y para que se muestre debe darse las siguientes condiciones el código del cliente y el del artículo, pero ya lo veremos mucho más adelante.

Por cierto algo que es muy posible que en breve sea obligatorio en la facturación y demás documentos de ventas, es que deben tener el peso por artículos, el total de la factura y una hoja de ruta detallando la factura, peso total de la misma y peso total de mercancía transportada. Pero aún no es obligatorio.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"

Última edición por José Luis Garcí fecha: 08-06-2013 a las 00:36:39.
Responder Con Cita
  #5  
Antiguo 08-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Cambios a realizar en la unidad UBAncos de Bancos

debe quedar de la siguiente manera:
Código Delphi [-]
procedure TFBancos.DSPrincipalDataChange(Sender: TObject; Field: TField);
//------------------------------------------------------------------------------
//******************************************************[ Datasorce change ]****
//------------------------------------------------------------------------------
begin
   if (not (DsPrincipal.DataSet.State in [dsEdit,dsInsert])) and (FBancos.Active) then
   begin
       Label12.Caption :=ceros(DBEdit5.Text,4)+'/'+ ceros(DBEdit6.Text,4)+'/'+ceros(DBEdit7.Text,2)+'/'+ceros(DBEdit8.Text,10);
   end;
end;

y

Código Delphi [-]
procedure TFBancos.DBEdit5Change(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************************[ Change Dbedit5 ]****
// Comprueba el digíto de control
//------------------------------------------------------------------------------
begin
  TDBEdit(Sender).Text:=EditLogico(tedit(TDBEdit(Sender)), '0123456789');
  if (DBEdit5.Text<>'') and (DBEdit6.Text<>'') and (DBEdit8.Text<>'') and (FBancos.Active) then
  begin
    DBEdit7.Field.Value:=StrToInt( IntToStr(CalculaDC(ceros(DBEdit5.Text,4)+ ceros(DBEdit6.Text,4),ceros(DBEdit8.Text,10))));
  end;
   Label12.Caption :=ceros(DBEdit5.Text,4)+'/'+ ceros(DBEdit6.Text,4)+'/'+ceros(DBEdit7.Text,2)+'/'+ceros(DBEdit8.Text,10);
  if (Length(DBEdit5.Text)>=4) and (Sender=DBEdit5) then DBEdit6.SetFocus;
  if (Length(DBEdit6.Text)>=4) and (Sender=DBEdit6) then DBEdit8.SetFocus;
end;

Como podéis comprobar me faltaba en ambos casos and (FBancos.Active) para evitar que cargue datos sin estar activo
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #6  
Antiguo 09-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Se que puede parecer un tostón este hilo, pero estamos hablando de miles de lineas y conceptos que no se pueden dejar de lados, aparte de eso, como creo que nos pasa a todos, vamos mejorando métodos y el código, o corrigiendo errores según vamos avanzando, así que no me queda otro remedio sino ir poniendo los diferentes cambios

Vamos ahora con artículos

Como siempre la imagen



Como podéis ver no pongo la pestaña facturado, ya que aún no tenemos preparado la facturación y como en todos el código que llevo puesto, no pondré el código de impresión, por que al tener múltiples operadores a la hora de imprimir, que cada uno use y diseñe el que le gusta.

El código https://gist.github.com/anonymous/5743472

Funciones usada de mi archivo fun_dbgrid.pas

Código Delphi [-]
function GridImagen(Grid:TDBGrid; Campo:TField; Rect:TRect; Column:TColumn; State:TGridDrawState):Boolean;
begin
  if Column.Field = Campo then
  begin
    if not (gdSelected in State) then // se não for a célula selecionada
      Grid.Canvas.FillRect(Rect); // limpa a célula
    with TPicture.Create do
    begin
      Assign(Campo);
      Grid.Canvas.StretchDraw(Rect,Bitmap); // desenha imagem
      Free;
    end;
     Result:=True;
  end else  Result:=False;
 end;


function MemoGridB(Grid:TDBGrid; Campo:TField; Rect:TRect; Column:TColumn; State:TGridDrawState):Boolean;
var FixRect:TRect;
begin
  fixRect:=Rect; // declara uma variável local fixRect : TRect
  Dec(fixRect.Bottom,2);
  if Column.Field=Campo then
  begin
    if not (gdSelected in State) then
      Grid.Canvas.FillRect(Rect);
    DrawText(Grid.Canvas.Handle,pchar(Campo.AsString), length(campo.AsString),fixRect,DT_WORDBREAK);
     Result:=True;
  end else  Result:=False;
end;
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 09-06-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Ahora le toca al apartado de notas



tengo un pequeño error en este módulo que aún no he encontrado, que es que no muestra las imágenes de los botones y no se si tendré que rehacerlo, pero la ida esta hay y los botones son los de siempre y el código no varia.

el código https://gist.github.com/anonymous/5743504

y de este apartado nada más
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
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
llamar un programa desde otro programa en un computador con dos monitores RONPABLO Varios 0 10-10-2011 18:20:51
Cargar tu programa desde otro programa rmendoza83 Varios 7 05-01-2009 19:51:33
Lanzar programa desde mi programa Pablo Carlos API de Windows 32 09-09-2004 13:56:26
Ejecutar un programa externo desde un programa de Delphi Roger_Fernandez Varios 3 02-09-2004 18:05:36
ISC ERROR CODE:335544344 I/O error for file "c:\gestion\gestion.gdb" eliasterrero Firebird e Interbase 2 28-06-2004 12:20:25


La franja horaria es GMT +2. Ahora son las 22:37:31.


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