
Programa de gestión desde 0 (Activo)
#101
Posted 27 July 2013 - 11:44 AM
Me haces acordar al famoso mago enmascarado que relevaba como se hacían los trucos de magia.
Algo similar ocurre aquí.
Pues bien, no debes sentirte mal por haber expuesto este extenso tutorial. No lo haces de mala intención ¡todo lo contrario! Lo haces con las mejores intenciones para que quienes están metiéndose en el tema tenga un poco más de preparación y de donde agarrarse.
Tampoco es que estás dando todo de todo, tu simplemente aportas un norte. Luego ya es responsabilidad de quien lo lee el cómo complementar lo que sabe con lo leído y en como innovar.
Saludos,
#102
Posted 28 July 2013 - 02:25 AM
Aquí la primera
[DELPHI]CREATE TABLE RETENCIONES (
ID INTEGER NOT NULL,
NUMERODOCUMENTO T20 NOT NULL /* T20 = VARCHAR(20) */, //Número del documento (siempre Factura)
SERIE T3 NOT NULL /* T3 = VARCHAR(3) */, //Serie de la factura
FECHA DATE NOT NULL, //Fecha de la factura
CODIGOCLIENTE T20 NOT NULL /* T20 = VARCHAR(20) */, //Código del cliente
SUBTOTAL POR NOT NULL /* POR = NUMERIC(15,4) */, //Subtotal de la factura
IMPUESTOS POR NOT NULL /* POR = NUMERIC(15,4) */, //Total de impuestos
NUMERORETENCION INTEGER NOT NULL, //Número asignado a esta retención (este campo es único)
PORCENTAJERETENCION POR NOT NULL /* POR = NUMERIC(15,4) */, //Porcentaje a retener el cliente de nuestra factura
TOTALRETENIDO POR NOT NULL /* POR = NUMERIC(15,4) */, //Importe de la retención echa por el cliente
CAMPOLIBRE T80 /* T80 = VARCHAR(80) */ //Campo libre para lo que nos haga falta
);[/DELPHI]
#103
Posted 28 July 2013 - 02:34 AM
NUMERORETENCION T20 /* T20 = VARCHAR(20) */,
NUMEROFINANCIADO T20 /* T20 = VARCHAR(20) */,
NUMERORUTA T20 /* T20 = VARCHAR(20) */
#104
Posted 29 July 2013 - 01:03 AM



#105
Posted 29 July 2013 - 07:01 AM
Exactamente por el compañero Javier en su post
Entre el "abuelo cebolleta" y Casimiro, en vez del ClubDelphi parece la editorial bruguera.
Saludos
PD: este comentario seguramente que sólo lo entendamos los "juveniles"
Me hizo gracia y lo asimile y aplique.
De todas maneras si creo que puedo llegar a ser un poco tostón muchas veces, incluso salvo raras intervenciones de otros compañeros esto parece un monologo.
De todas maneras me alegro de que te guste y espero que ademas te sea útil.
#106
Posted 29 July 2013 - 11:35 PM
[DELPHI]CREATE TABLE FINANCIADO (
ID INTEGER NOT NULL,
FECHA DATE, //Fecha de emisión de la financiación, sólo desde la factura
NUMERODOCUMENTO T20 NOT NULL /* T20 = VARCHAR(20) */, //Solo Facturas
IMPORTEFINANCIADO POR NOT NULL /* POR = NUMERIC(15,4) */, //Cantidad a financiar
CODIGOCLIENTE T20 NOT NULL /* T20 = VARCHAR(20) */, //Código del cliente
MININOTA VARCHAR(150), //Texto aclaratorio
INTERESESDEMORA POR /* POR = NUMERIC(15,4) */, //Porcentaje de intereses a cargar por demora en el pago mensual
TIPODOCUMENTO T20 NOT NULL /* T20 = VARCHAR(20) */, //Factura
SERIE T20 NOT NULL /* T20 = VARCHAR(20) */, //Serie del número de documento
NUMEROFINANCIADO T20 /* T20 = VARCHAR(20) */ //Número de de financiado
);[/DELPHI]
#107
Posted 29 July 2013 - 11:38 PM
[DELPHI]CREATE TABLE FINANCIADODETALLE (
ID INTEGER NOT NULL,
IDENTIFICADOR INTEGER NOT NULL, //Es la clave foranea i conecta con el ID de financiado
FECCHAPAGO DATE, //Fecha prevista del pago a partir de la cual empieza a cobrar los intereses de demora
FORMAPAGO T80 /* T80 = VARCHAR(80) */, //Forma de pago establecida
IMPORTE POR /* POR = NUMERIC(15,4) */ //Importe de este pago
);[/DELPHI]
Por cierto en la tabla FINANCIADO el campo NUMEROFINANCIADO es único
#108
Posted 30 July 2013 - 02:48 AM
[DELPHI]NUMEROCOMISION T20 /* T20 = VARCHAR(20) */ //para documentos de pago de comisiones[/DELPHI]
y ahora la tabla de comisiones
[DELPHI]CREATE TABLE COMISIONES (
ID INTEGER NOT NULL,
CODIGOEMPLEADO T20 /* T20 = VARCHAR(20) */, //Código del empleado que tiene que ser un agente
NUMERODOCUMENTO T20 /* T20 = VARCHAR(20) */, //Número del documento FACTURA
TIPODOCUMENTO T20 /* T20 = VARCHAR(20) */, //Tipo de documento FACTURA
SERIE T3 /* T3 = VARCHAR(3) */, //Serie de la FACTURA
COMISION POR /* POR = NUMERIC(15,4) */, //Porcentaje de la comisión
IMPORTECOMISION POR /* POR = NUMERIC(15,4) */, //Importe bruto de la comisión
MININOTA VARCHAR(150), //Para pequeñas notas en la comisión
PAGADAS LOG /* LOG = CHAR(1) */, //Si esta ya ha sido pagada
FECHAPAGO DATE, //Fecha en la que se realizo el pago
NUMEROPAGO T20 /* T20 = VARCHAR(20) */, //Número del documento de pago
FECHA DATE, //Fecha es la misma que de la factura
RETENCIONES POR /* POR = NUMERIC(15,4) */ //Porcentaje a retener (para HACIENDA) de las comisiones
);[/DELPHI]
#109
Posted 30 July 2013 - 02:49 AM
[DELPHI]CREATE TABLE CONFI (
ID INTEGER NOT NULL,
EMPRESA T80 /* T80 = VARCHAR(80) */,
CALLE T80 /* T80 = VARCHAR(80) */,
CODIGOPOSTAL T10 /* T10 = VARCHAR(20) */,
POBLACION T80 /* T80 = VARCHAR(80) */,
PROVINCIA T80 /* T80 = VARCHAR(80) */,
TELEFONO T20 /* T20 = VARCHAR(20) */,
TELEFONO2 T20 /* T20 = VARCHAR(20) */,
LOGO IMG /* IMG = BLOB SUB_TYPE 0 SEGMENT SIZE 80 */,
WEB T80 /* T80 = VARCHAR(80) */,
EMAIL T80 /* T80 = VARCHAR(80) */,
MOVIL T20 /* T20 = VARCHAR(20) */,
FAX T20 /* T20 = VARCHAR(20) */,
CIF T20 /* T20 = VARCHAR(20) */,
REGISTROMERCANTIL T80 /* T80 = VARCHAR(80) */,
NOTA MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
COLORA T20 /* T20 = VARCHAR(20) */,
COLORB T20 /* T20 = VARCHAR(20) */,
COLORACTIVO T20 /* T20 = VARCHAR(20) */,
COLORNOACTIVO T20 /* T20 = VARCHAR(20) */,
NUMEROPRESUPUESTO T20 /* T20 = VARCHAR(20) */,
NUMEROPEDIDO T20 /* T20 = VARCHAR(20) */,
NUMEROALBARAN T20 /* T20 = VARCHAR(20) */,
NUMEROFACTURA T20 /* T20 = VARCHAR(20) */,
NUMEROLOTE T20 /* T20 = VARCHAR(20) */,
NUMEROCLIENTE T20 /* T20 = VARCHAR(20) */,
NUMEROPROVEEDOR T20 /* T20 = VARCHAR(20) */,
NUMEROAGENTE T20 /* T20 = VARCHAR(20) */,
NUMEROALMACEN T20 /* T20 = VARCHAR(20) */,
NUMEROALMACENPORDEFECTO T20 /* T20 = VARCHAR(20) */,
LARGOLOTE INTEGER,
LAGONUMEROS INTEGER,
SERIE T3 /* T3 = VARCHAR(3) */,
SERIE2 T3 /* T3 = VARCHAR(3) */,
SERIE3 T3 /* T3 = VARCHAR(3) */,
USARSERIEYEAR LOG /* LOG = CHAR(1) */,
LDPD1 MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
LDPD2 MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
LDPD3 MEMO /* MEMO = BLOB SUB_TYPE 1 SEGMENT SIZE 80 */,
NOMBREMONEDA T10 /* T10 = VARCHAR(20) */,
NOMBREIMPUESTO T10 /* T10 = VARCHAR(20) */,
DESCRIPCIONIMPUESTO1 T20 /* T20 = VARCHAR(20) */,
IMPUESTO1 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONIMPUESTO2 T20 /* T20 = VARCHAR(20) */,
IMPUESTO2 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONIMPUESTO3 T20 /* T20 = VARCHAR(20) */,
IMPUESTO3 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONIMPUESTO4 T20 /* T20 = VARCHAR(20) */,
IMPUESTO4 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONRECARGOEQUIVALENCIA1 T20 /* T20 = VARCHAR(20) */,
RECARGOEQUIVALENCIA1 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONRECARGOEQUIVALENCIA2 T20 /* T20 = VARCHAR(20) */,
RECARGOEQUIVALENCIA2 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONRECARGOEQUIVALENCIA3 T20 /* T20 = VARCHAR(20) */,
RECARGOEQUIVALENCIA3 POR /* POR = NUMERIC(15,4) */,
DESCRIPCIONRECARGOEQUIVALENCIA4 T20 /* T20 = VARCHAR(20) */,
RECARGOEQUIVALENCIA4 POR /* POR = NUMERIC(15,4) */,
MODOCOPIADESEGURIDAD T20 /* T20 = VARCHAR(20) */,
NUMERORETENCION T20 /* T20 = VARCHAR(20) */,
NUMEROFINANCIADO T20 /* T20 = VARCHAR(20) */,
NUMERORUTA T20 /* T20 = VARCHAR(20) */,
NUMEROCOMISION T20 /* T20 = VARCHAR(20) */
);[/DELPHI]
#110
Posted 05 August 2013 - 01:24 AM
IMPORTEDOCUMENTO POR /* POR = NUMERIC(15,4) */ //Importe del documento sobre el que se paga la comisión
se podría omitir este campo y hacer la búsqueda por SQL, en el momento necesario, pero es más practico, tenerla metida en la misma tabla, el consumo de recursos es mínimo, evitando el consumo de memoria por el motor de la BD para hacer la consulta
#111
Posted 06 August 2013 - 10:40 PM
Su visor

y el apartado de datos
[img width=800 height=513]http://nsae01.casimages.net/img/2013/08/07/130807064026725230.jpg[/img]
y como siempre el código en https://gist.github....onymous/6171193
#112
Posted 06 August 2013 - 10:51 PM

y su código
https://gist.github....onymous/6171280
#113
Posted 06 August 2013 - 10:55 PM
#114
Posted 06 August 2013 - 11:01 PM

y el código https://gist.github....onymous/6171325
#115
Posted 06 August 2013 - 11:05 PM
#116
Posted 08 August 2013 - 12:07 PM

Aquí con una letra seleccionada
[img width=798 height=600]http://nsae01.casimages.net/img/2013/08/08/130808080946316969.jpg[/img]
El código en https://gist.github....onymous/6187111
y la función ActQAgenda
[DELPHI]//-----------------------------------------------------------------------------
//*********************************************************[ ActQAgenda ]******
// 14/06/2012 JLGT Para modificar la sentencia de un querry para agendas
//-----------------------------------------------------------------------------
// Estudiando como poder hacer mi código mas corto se me ocurrio esta función
// para usar un los IBQerry, para mi base de datos Firebird. para el uso de agendas
// El tema es que cada vez que utilizo un querry y lo modifico tengo que
// escribir unas 20 lineas y mediante este sistema, logro reducirlo a una sola
// ya que es un, código repetitivo y soló varia el nombre del query y la
// sentencia Sql, cree esta función
//-----------------------------------------------------------------------------
// [QRY] Tibquery a actualizar
// [TAB] El tabcontrol que lo llama
// [Campo] Nombre del Campo por el que funcionara el TabControl
// [TxtSql] Cadena de texto con sentencia SQL
// [MostrarMEnsaje] Si muestra el mensaje de la Exception
// [RetornarMEnsaje] Si retorna la cadena Sql que da el Error
// [RetornarQuerry] Si retorna El querry a la cadena sql de antes del error
//-----------------------------------------------------------------------------
// Base de datos a usar CLIENTES usar en el tabChage
// if ActQAgenda(IBQuerry1,Tabcontrol1,'Nombre','Select * form Clientes')=true then
// showmessage('Cambio OK') else showmessage('El cambio a fallado');
//- ---[DETALLE]---------------------------------------------------------------
// El grid al que este unido debe tener los campos fijados para evitar un error
//-----------------------------------------------------------------------------
Function ActQAgenda(QRY:TIBQuery; TAB:TTabControl;Campo:String;TxtSql:string; MostrarMensaje:boolean=VMiLogico;Retornarmensaje:boolean=VMiLogico; RetornarQuerry:boolean=VMiLogico): Boolean;
var AntSql:string;
Letraagenda: string;
begin // Cuando cambiamos en la agenda
try
try
Letraagenda := TAB.Tabs[TAB.TabIndex];
if TAB.TabIndex = 0 then
BEGIN
QRY.Active:=false;
QRY.SQL.Clear;
QRY.SQL.Text:=TxtSql;
QRY.Active:=true;
Result:=true;
END else
BEGIN
AntSql:=QRY.SQL.Text;
QRY.Active:=false;
QRY.SQL.Clear;
QRY.SQL.Text:=TxtSql+' where UPPER('+Campo+') Between :LDESDE and :LHASTA';
QRY.ParamByName('LDESDE').AsString := Letraagenda;
QRY.ParamByName('LHASTA').AsString := Letraagenda + '||Z';
QRY.Active:=true;
Result:=true;
END;
except
on E: Exception do
begin
if MostrarMensaje=true then
begin
ShowMessage('Se ha producido un error: ' + Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error: ' + E.Message+ Chr(13) + Chr(13)
+' '+ Chr(13) + Chr(13)
+'Se volvera al estado anterior');
end;
QRY.Active:=False;
Result:=false;
end;
end;
finally
if Result=false then
begin
if Retornarmensaje=true then ShowMessage('Sentencia Sql que ha dado Error' + Chr(13) + Chr(13)+ QRY.SQL.Text);
if RetornarQuerry=true then
begin
QRY.Active:=false;
QRY.SQL.Clear;
QRY.SQL.Text:=TxtSql;
QRY.Active:=true;
end;
end;
end;
end;[/DELPHI]
#117
Posted 08 August 2013 - 12:10 PM
#118
Posted 09 August 2013 - 12:48 AM
CREATE TABLE VEHICULOS (
ID INTEGER NOT NULL,
MATRICULA T10 NOT NULL /* T10 = VARCHAR(20) */, //Matricula del vehículo
MARCA T20 NOT NULL /* T20 = VARCHAR(20) */, //Maraca del vehículo
TARA T10 /* T10 = VARCHAR(20) */, //tara de carga
SEGURO T40 /* T40 = VARCHAR(40) */, //Seguro del vehículo
NUMEROPOLIZA T40 /* T40 = VARCHAR(40) */, //Número de la póliza del seguro
TELEFONOSEGURO T20 /* T20 = VARCHAR(20) */, //Teléfono de la compañía de seguro
EMPRESA T80 /* T80 = VARCHAR(80) */ //Dueño del vehículo
);
#119
Posted 09 August 2013 - 01:47 AM
Comenzamos con vehículos

El código en https://gist.github....onymous/6191865
#120
Posted 09 August 2013 - 01:58 AM

Como podemos ver pongo la imagen con las dos pestañas abiertas, los botones de la derecha son independientes en cada pestaña y de los datos de la izquierda, tenemos (peso bultos y cantidad)
Peso, es el total del peso de esta mercancía que no podrá exceder el limite de la misma si tiene limite
Bultos, es el número de bultos, no confundir con la cantidad, ya que si llevamos garrafas de 5L por ejemplo y van en cajas (pongamos que 4 por caja) 5 cajas son 20 garrafas
Cantidad, se refiere al número de unidades, siguiendo con el ejemplo anterior 20 serían las unidades
Puede pasar que el número de bultos y unidades sean las mismas, tanto por que van sueltas como por el formato de la unidad, pero en ningún caso un palet es una unidad
El código en https://gist.github....onymous/6191905
y por último la carta de portes en el word llamada desde el programa, por supuesto podéis usar otro sistema, tanto de report como de llamada
[img width=800 height=435]http://nsae01.casimages.net/img/2013/08/09/130809100312473637.jpg[/img]