Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-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: 25
José Luis Garcí Va camino a la fama
Ahora la última de las tres la tabla lotes de documentos (LOTESDOCUMENTOS)

Cita:
CREATE TABLE LOTESDOCUMENTOS (
ID INTEGER NOT NULL,
IDENTIFICADOR INTEGER NOT NULL, //............................................. FOREIGN KEY con el id de documentos
TIPODOCUMENTO T20 NOT NULL /* T20 = VARCHAR(20) */, //............................................. tipo de documento
NUMERODOCUMETO T20 NOT NULL /* T20 = VARCHAR(20) */, //............................................. código del documento
SERIE T3 NOT NULL /* T3 = VARCHAR(3) */, //............................................. Serie del documento
LOTE T20 NOT NULL /* T20 = VARCHAR(20) */, //............................................. número de lote
CANTIDAD INTEGER NOT NULL, //............................................. Cantidad de este artículo con este lote
CODIGOARTICULO T20 NOT NULL /* T20 = VARCHAR(20) */, //............................................. código del artículo
ADR T80 /* T80 = VARCHAR(80) */, //............................................. Descripción y texto ADR
EXCEPCION INTEGER, //............................................. Cantidad exceptuada del ADR
LIMITE INTEGER, //............................................. limite de carga en vehículo con medidas mínimas según el ADR
CADUCIDAD DATE, //............................................. fecha de caducidad de este lote
CAMPOLIBRE T80 /* T80 = VARCHAR(80) */ //............................................. Campo libre ya que la ley va cambiando o podemos necesitar
);


//******************************************************************************/
//* Foreign Keys */
//******************************************************************************/

//ALTER TABLE LOTESDOCUMENTOS ADD CONSTRAINT FK_LOTESDOCUMENTOS_1 FOREIGN KEY (IDENTIFICADOR) REFERENCES DETALLE (ID) ON DELETE CASCADE ON UPDATE CASCADE;
Como podemos ver tenemos una relación entre las tablas siendo de la siguiente manera

DOCUMENTOS.ID------>DETALLES.IDENTIFICADOR y
DETALLES.ID ------------------ LOTESDOCUMENTOS.IDENTIFICADOR

También contamos con los campos TIPODOCUMENTO, NUMERODOCUMETO y SERIE, para poder hacer sus búsquedas y relaciones en SQL.

Podríamos hacerlo creando un juego de tablas por tipo de documentos, que sería la manera más simple y rápida de hacer, pero esta manera, nos permite reducir consumo de recursos, ya que muchos campos son repetitivo, e incluso eliminar la tabla de LOTESDOCUMENTOS y unir sus campos a los de DETALLES, pero de esta manera es más clara.

Como siempre espero este clara la explicación actual y si hay dudas, comentarios, o consejos, rectificaciones, etc, ya sabéis, aquí estoy.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 09-07-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: 25
José Luis Garcí Va camino a la fama
Para que valláis abriendo boca una imagen del visor de documentos, sin estar activo aún muchos campos



en el apartado 1 veréis un DBtext, con el fondo en verde, realmente va en transparente, pero como no contiene datos aún, para controlar se u ancho

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


Para que este sistema funcione debemos usar en su llamada el siguiente sistema

Código Delphi [-]
procedure TFMenu.act_V_FacturasExecute(Sender: TObject);
//------------------------------------------------------------------------------
//**************************************************************[ Facturas ]****
// Gestión de Proveedores apto desde nivel 6
//------------------------------------------------------------------------------
begin
    VarSTipoDocumento:='FACTURA';
    FXPAF.PC.ActivePageIndex:=0;
    FXPAF.PC2.ActivePageIndex:=0;
    Acceso(6,FXPAF);
end;

Y el procedimiento acceso
Código Delphi [-]
function TFMenu.Acceso(NivelAc:Integer;MForm:TForm):Boolean;
//------------------------------------------------------------------------------
//*****************************************************[ funcion de acceso ]****
//------------------------------------------------------------------------------
begin
   if Nivel>=NivelAc then
   begin
      MForm.Show;
      Result:=true;
   end else
   begin
      ShowMessage('Debe tener nivel '+IntToStr(NivelAc)+' para poder acceder a este apartado');
      Result:=False;
   end;
end;

En algunos casos, deberemos confirmar con la clave de acceso al programa, la entrada en un apartado esto lo haremos de la siguiente manera

Código Delphi [-]
procedure TFMenu.ACT_Esp_RegularStockExecute(Sender: TObject);
//------------------------------------------------------------------------------
//*********************************************************[ REgular Stock ]****
// Regulación de Stock apto desde nivel 8 + clave de usuario
//------------------------------------------------------------------------------
begin
    if Acceso(8,FRegulaStock) then
    begin
      FRegulaStock.Hide;
      PostMessage(Handle, InputBoxMessage, 0, 0); // Para imputboxt con password chard
      if InputBox('Comprobando seguridad', 'Por favor indroduzca su clave de usuario', '')= VarSClaveUSuario then
         FRegulaStock.Show
      else
      begin
        ShowMessage('La clave de seguridad no es la adecuada,' + #13 +
            'no tiene permiso, para acceder a este apartado');
        FRegulaStock.Close;
      end;
    end;
end;


Para ello necesitamos estos cambios en nuestro programa

Código Delphi [-]
procedure TFMenu.InputBoxSetPasswordChar(var Msg: TMessage);
// Para imputboxt con password chard
// ------------------------------------------------------------------------------
// *****************[ Para convertir los caracteres en *  de un imput box]*******
// ------------------------------------------------------------------------------
var HInputForm, HEdit, HButton: HWND;
begin
  HInputForm := Screen.Forms[0].Handle;
  if (HInputForm <> 0) then
  begin
    HEdit := FindWindowEx(HInputForm, 0, 'TEdit', nil);
    SendMessage(HEdit, EM_SETPASSWORDCHAR, Ord('*'), 0);
  end;
  // ------------------------------------------------------------------------------
  // ****************************[ Otras partes importantes de este código ]*******
  // {Despues del uses}
  // const
  // InputBoxMessage = WM_USER + 200;    //Para imputboxt con password chard
  // {En el Type}
  // procedure InputBoxSetPasswordChar(var Msg: TMessage); message InputBoxMessage;
  // {USO CON LAS DOS LINEAS}
  // PostMessage(Handle, InputBoxMessage, 0, 0);    //Para imputboxt con password chard
  // if InputBox('Comprobando seguridad', 'Porfavor indroduzca su clave de usuario', '')  = VarClaveUSusario then
  // ------------------------------------------------------------------------------
end;

Espero os sea útil y como siempre espero vuestros comentarios.

Por cierto, que nadie se anima a valorar el trabajo, es una buena manera de saber, donde tengo que mejorar y todos podéis hacerlo, ni me ofende, ni me molesta y es un buen ejercicio, para ver con la perspectiva de los compañeros el trabajo que estoy realizando os recuerdo como pido que me valoréis el trabajo.

Cita:
í Si no es molestia, podrían hacerme el favor de valorar el trabajo hasta este momento, lo más sinceramente posible, el motivo, es que como siempre he dicho y he mantenido, yo no soy un experto y necesito saber cuales son mis puntos fuertes, para intentar mejorar.

Me gustaría que lo valorarais de la siguiente manera, del 1 al 10, siendo 1 la menor valoración claro, cada una de las siguientes facetas, y si se os ocurre alguna, ya sabéis.

Explicaciones
Claridad
Código
Tablas
Descripciones
Diseño
Conceptos
forma de aplicar los conceptos
y utilidad

Esto me permitirá, en cuanto al tutorial, intentar corregir y mejorarlo , si puedo y ha nivel personal, seguir aprendiendo y como no autoestima, que me la podéis hundir más o nivelar
No se si es la época o qué, pero parece que los compañeros, no están muy animados a participar, como hace un par de años, claro esta es mi opinión, humildemente.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #3  
Antiguo 09-07-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: 25
José Luis Garcí Va camino a la fama
Ya he explicado, esto en post anteriores, pero creo que es importante para el tutorial, así que nuevamente, expongo mi sistema de acceso a las diferentes partes del programa, si recordáis en la tabla usuarios (que por cierto, se me colo una S de más y se quedo como ususarios ) tenemos la estructura

Cita:
CREATE TABLE USUSARIOS (
ID INTEGER NOT NULL,
CLAVE T20 /* T20 = VARCHAR(20) */,
USUARIO T20 /* T20 = VARCHAR(20) */,
NIVEL INTEGER,
NOMBRE T80 /* T80 = VARCHAR(80) */
);
en ella existen dos apartados fundamentales, para el acceso, ojo todos son importantes, pero estos dos fundamentales, que son CLAVE y NIVEL, como es lógico, solicito el usuario y la clave, en un form de acceso, compruebo y si esta ok, cargo una serie de variables locales, con el usuario, la clave y el nivel, después la llamada a los diferentes apartados la hago con la función ACCESO, donde comprobamos e, nivel, con el que ponemos al apartado, todo desde un ActionList, para no tener que estar repitiendo código., si tenemos que volver a solicitar la clave uso un inputbox con la peculiaridad, de poner los caracteres como asteriscos, para ello uso las instrucciones que a parece en el procedure TFMenu.InputBoxSetPasswordChar(var Msg: TMessage);

De esta manera, si nos vamos a tomar un café y un compañero quiere acceder a un apartado, al que no tiene nivel y es delicado, aunque este activo el nivel de usuario, le solicitara la clave para acceder, con lo que se quedara con las ganas, creo que unas de las ventajas de este sistema es el ahorro de código, en apartados de seguridad.

Yo suelo usar el siguiente sistema para valorar el nivel de usuario

0...5 los valoro como acceso de visitante
6...7 Introductor de datos
8 Persona de mucha confianza
9 Acceso total

Claro esta que si tienes nivel 7 en vez de 6 puedes acceder a más apartados, o ver partes dentro de un apartado, que de otra manera no aparecen. Los apartados, que por tema de datos, o seguridad, siempre solicito clave de acceso e incluso en algún programa he usado la clave de acceso con un sistema de clave por fecha o clave diferencial.

Espero no haberos liado.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 15:07:14.


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