Ir al contenido


Foto

Programa de gestión desde 0 (Activo)


  • Por favor identifícate para responder
156 respuestas en este tema

#81 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 01:53

Ahora los botones Modificar y borrar de detalle

[DELPHI]
procedure TFXPAF.SBDetalleModificarClick(Sender: TObject);
// ------------------------------------------------------------------------------
// *******************************************[ Editar el actual registro ]******
// ------------------------------------------------------------------------------
begin
  if DsDetalle.DataSet.IsEmpty<>true then
  begin
    DsDetalle.DataSet.Edit;
    FExtPPAF.Show;
    FExtPPAF.DBEdit1.SetFocus;
  end else  ShowMessage('No existen datos para poder editar');
end;

procedure TFXPAF.SBDetalleBorrarClick(Sender: TObject);
// ------------------------------------------------------------------------------
// **********************************[ Borrar el Actual Registro Desgloce ]******
// ------------------------------------------------------------------------------
begin // Cambiar por el mensaje elegido
  if not DsDetalle.DataSet.IsEmpty then
  begin
    if (MessageBox(0, '¿Esta seguro  de eliminar el registro detalle?', // Aqui no se porque me manda la última comilla simple y la coma a la linea de abajo, por favor subir al final de la linea anterior
        'Eliminar Registro', MB_ICONSTOP or MB_YESNO or MB_DEFBUTTON2) = ID_No) then
      Abort
    else
    begin
      DsDetalle.DataSet.Delete;
      ShowMessage('El registro ha sido eliminado');
    end;
  end
  else ShowMessage('No existen datos para eliminar');
end;
[/DELPHI]
  • 0

#82 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 02:16

Debido a que voy a usar este método más de una vez he modificado el código del botón nuevo y creado una nueva función para este módulo

[DELPHI]procedure TFXPAF.SBDetalleNuevoClick(Sender: TObject);
// ------------------------------------------------------------------------------
// *********************************************************[ Nuevo Detalle ]****
// ------------------------------------------------------------------------------
var I:Integer;
begin
  if CambiarEstado=0 then
  begin
    DsDetalle.DataSet.Insert;
    FExtPPAF.ListView1.Items.Clear;
    for I := 1 to FExtPPAF.StringGrid1.RowCount - 1 do  FExtPPAF.StringGrid1.Rows[i].Clear;
    FExtPPAF.Show;
    FExtPPAF.DBEdit1.SetFocus;
  end;
end;[/DELPHI]

Después del cambio es como queda este procedure y ahora la function

[DELPHI]function TFXPAF.CambiarEstado: Integer;
//------------------------------------------------------------------------------
//*********************************************************[ CambiarEstado ]****
// Nos permite comprobar si los datos necesarios estan rellenos
//------------------------------------------------------------------------------
var varIPaso:Integer;
begin
  varIPaso:=0;  //Si sigue a 0 grabará y pasará al siguiente
  if DsPrincipal.DataSet.State in [DsInsert] then
  begin { Si esta en insercion, lo salvamos y editamos, para que acepte los cambios posteriores }
    if DM.IBDDocumentosIDDIRECCIONES.IsNull then
    begin
      if IBQDirecciones.IsEmpty then DM.IBDDocumentosIDDIRECCIONES.Value:=0
                                else DM.IBDDocumentosIDDIRECCIONES.Value:=IBQDirecciones.FieldByName('IDDIRECCIONES').Value;
    end;
    DSPrincipal.DataSet.FieldByName('NUMERODOCUMENTO').Value:=DBNNumeroDocumento.Text;
    DSPrincipal.DataSet.FieldByName('SERIE').Value:=DBNSerie.Text;
    if DSPrincipal.DataSet.FieldByName('CODIGOCLIENTE').IsNull then varIPaso:=1;
    if DSPrincipal.DataSet.FieldByName('CODIGOAGENTE').IsNull then varIPaso:=2;
    if DSPrincipal.DataSet.FieldByName('FECHA').IsNull then varIPaso:=3;
    if DSPrincipal.DataSet.FieldByName('FORMADEPAGO').IsNull then varIPaso:=4;
    if DSPrincipal.DataSet.FieldByName('NUMEROPROTECCIONDATOS').IsNull then varIPaso:=5;
    if varIPaso=0 then
    begin
      DsPrincipal.DataSet.Post;
      DsPrincipal.DataSet.Edit;
    end else
    begin
      case varIPaso of
          1:begin
              ShowMessage('Falta por rellenar el código de cliente');
              DBNCodigoCliente.SetFocus;
            end;
          2:begin
              ShowMessage('Falta por rellenar el código de agente/comercial');
              DBNCodigoComercial.SetFocus;
            end;
          3:begin
              ShowMessage('Falta por rellenar la fecha');
              DBNFecha.SetFocus;
            end;
          4:begin
              ShowMessage('Falta por rellenar la forma de pago');
              DBNFormaPago.SetFocus;
            end;
          5:begin
              ShowMessage('Falta por rellenar el número de protección de datos');
              NDBSENumeroProteccionDatos.SetFocus;
            end;
      end;
      end;
  end;
  if varIPaso=0 then Result:=0 else Result:=1;  //0 = OK, 1 = problema
end;[/DELPHI]
  • 0

#83 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 02:54

Ahora insertar un comentario

[DELPHI]procedure TFXPAF.SBInsertarComentarioClick(Sender: TObject);
// ------------------------------------------------------------------------------
// ************************************************[ Insertar Comentario ]*******
// ------------------------------------------------------------------------------
var VarScadena: string;
begin
  VarScadena := InputBox('Comentario a insertar', 'Su comentario', '');
  if VarScadena <> '' then
  begin
    if CambiarEstado=0 then
    begin
      DsDetalle.DataSet.Insert;
      DsDetalle.DataSet.FieldByName('CODIGOARTICULO').value:='COM.';
      DsDetalle.DataSet.FieldByName('DESCRIPCIONARTICULO').value:=VarScadena;
      DsDetalle.DataSet.FieldByName('CANTIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('PRECIOUNIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('IMPUESTO').value:=0;
      DsDetalle.DataSet.FieldByName('DESCUENTO').value:=0;
      DsDetalle.DataSet.FieldByName('COMISION').value:=0;
      DsDetalle.DataSet.FieldByName('PESOUNIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('MODIFICADO').value:=0;
      DsDetalle.DataSet.FieldByName('SERVICIO').value:='N';
    end;
  end;
end;[/DELPHI]
  • 0

#84 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 04:54

Para el botón de muestras este es el código

[DELPHI]procedure TFXPAF.SBInsertarMuestraClick(Sender: TObject);
// ------------------------------------------------------------------------------
// **************************************************[ Insertar Muestra ]*******
// ------------------------------------------------------------------------------
begin
  if CambiarEstado=0 then FEntrMuestra.Show;
end;[/DELPHI]


Esta la imagen sin extender y extendido

Imagen Enviada


y aquí como siempre el código https://gist.github....onymous/6061538
  • 0

#85 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 05:06

Una pequeña modificación del código

En FXPAF  -Nuevo -
[DELPHI]procedure TFXPAF.desgloceBlanco;
//------------------------------------------------------------------------------
//********************************************************[ DesgloceBalnco ]****
// Deja el registro con valores a vacio, negatiovo o 0 para evitar errores
// Tabla detalles
//------------------------------------------------------------------------------
begin
      DsDetalle.DataSet.FieldByName('CANTIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('PRECIOUNIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('IMPUESTO').value:=0;
      DsDetalle.DataSet.FieldByName('DESCUENTO').value:=0;
      DsDetalle.DataSet.FieldByName('COMISION').value:=0;
      DsDetalle.DataSet.FieldByName('PESOUNIDAD').value:=0;
      DsDetalle.DataSet.FieldByName('MODIFICADO').value:=0;
      DsDetalle.DataSet.FieldByName('SERVICIO').value:='N';
end;

[/DELPHI]


y modificar
[DELPHI]

procedure TFXPAF.SBInsertarComentarioClick(Sender: TObject);
// ------------------------------------------------------------------------------
// ************************************************[ Insertar Comentario ]*******
// ------------------------------------------------------------------------------
var VarScadena: string;
begin
  VarScadena := InputBox('Comentario a insertar', 'Su comentario', '');
  if VarScadena <> '' then
  begin
    if CambiarEstado=0 then
    begin
      DsDetalle.DataSet.Insert;
      DsDetalle.DataSet.FieldByName('CODIGOARTICULO').value:='COM.';
      DsDetalle.DataSet.FieldByName('DESCRIPCIONARTICULO').value:=VarScadena;
      desgloceBlanco;
    end;
  end;
end;
[/DELPHI]

y en UMuestraEntrega modificar

[DELPHI]procedure TFEntrMuestra.SB_SalirClick(Sender: TObject);
//------------------------------------------------------------------------------
//****************************************************[ Salir y actualizar ]****
//------------------------------------------------------------------------------
var VarSTipoForm:string;
begin
    case RadioGroup1.ItemIndex of
      0:VarSTipoForm:='Ml.';
      1:VarSTipoForm:='L.';
      2:VarSTipoForm:='Gr.';
      3:VarSTipoForm:='Kg.';
      4:VarSTipoForm:='Ud.';
    end;
    if Edit1.Text<>'' then
    begin
      FXPAF.DsDetalle.dataset.insert;
      FXPAF.desgloceBlanco;
      FXPAF.DsDetalle.dataset.FieldByName('IDENTIFICADOR').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('ID').Value;
      FXPAF.DsDetalle.dataset.FieldByName('TIPODOCUMENTO').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('TIPODOCUMENTO').Value;
      FXPAF.DsDetalle.dataset.FieldByName('NUMERODOCUMENTO').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('NUMERODOCUMENTO').Value;
      FXPAF.DsDetalle.dataset.FieldByName('SERIE').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('SERIE').Value;
      FXPAF.DsDetalle.dataset.FieldByName('CODIGOARTICULO').Value:='MU';
    FXPAF.DsDetalle.dataset.FieldByName('DESCRIPCIONARTICULO').Value:='Muestra de '+Edit1.text+' ['+Edit2.Text+' '+VarSTipoForm+']';
  FXPAF.DsDetalle.dataset.FieldByName('CANTIDAD').Value:=SpinEdit1.Value;
      FXPAF.DSLoteDocumento.DataSet.Insert;  // Grabamos los datos del lote
      FXPAF.DSLoteDocumento.DataSet.FieldByName('TIPODOCUMENTO').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('TIPODOCUMENTO').Value;
      FXPAF.DSLoteDocumento.DataSet.FieldByName('NUMERODOCUMETO').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('NUMERODOCUMENTO').Value;
      FXPAF.DSLoteDocumento.DataSet.FieldByName('SERIE').Value:=FXPAF.DSPrincipal.DataSet.FieldByName('SERIE').Value;
      FXPAF.DSLoteDocumento.DataSet.FieldByName('LOTE').Value:=Label5.Caption;
      FXPAF.DSLoteDocumento.DataSet.FieldByName('CANTIDAD').Value:=SpinEdit1.Value;
      FXPAF.DSLoteDocumento.DataSet.FieldByName('CODIGOARTICULO').Value:='MU';
FXPAF.SetFocus;
  FEntrMuestra.Close;
    end else ShowMessage('Debe rellenar los datos primeramente, si lo que desea es salir, pulse en cancelar');
end;[/DELPHI]
  • 0

#86 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 23 julio 2013 - 05:15

y hoy por último el botón comentario con fecha

[DELPHI]procedure TFXPAF.SBInstertarComentarioFechaClick(Sender: TObject);
// ------------------------------------------------------------------------------
// **************************************[ Insertar Comentario con fecha ]*******
// ------------------------------------------------------------------------------
var VarScadena: string;
begin
  VarScadena := Inputdate('Comentario con fecha', 'Su comentario');
  if VarScadena <> '' then
  begin
    if CambiarEstado=0 then
    begin
      DsDetalle.DataSet.Insert;
      DsDetalle.DataSet.FieldByName('CODIGOARTICULO').value:='COM./FE.';
      DsDetalle.DataSet.FieldByName('DESCRIPCIONARTICULO').value:=VarScadena;
      desgloceBlanco;
    end;
  end;
end;[/DELPHI]

y la función a la que hace llamada

[DELPHI]//------------------------------------------------------------------------------
//*************************************************************[ Imputdate ]****
//  Parte de la idea original de  Felipe Monteiro  del 25/05/2006
// bajada de http://www.planetade...utbox-com-combo)
//------------------------------------------------------------------------------
// J.L.G.T. 05/08/2012 Basando me en el código de Felipe Monteiro , lo adapte a
// mis necesidades, creando un imput de doble entrada en mi caso para insertar
// Comentarios Con fecha
//------------------------------------------------------------------------------
//  [Acaption]  String    Texto en la barra del caption
//  [Aprompt]    String    Texto aclaratorio para elmensaje o petición
//  [Separadores]  Boolean    Muestra la fecha entre separadores []
//------------------------------------------------------------------------------
//---EJEMPLO--------------------------------------------------------------------
//  procedure TForm1.Button1Click(Sender: TObject);
//  begin
//    Label1.Caption:=Inputdate('Comentario con fecha','Comentario');
//  end;
//------------------------------------------------------------------------------
function Inputdate(const ACaption, APrompt: string; Separadores:Boolean =true): string;
  function GetCharSize(Canvas: TCanvas): TPoint;
  var
    I: Integer;
    Buffer: array[0..51] of Char;
  begin
    for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
    for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
    GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
    Result.X := Result.X div 52;
  end;

var
  Form: TForm;
  Prompt: TLabel;
  Combo: TDateTimePicker;
  Ed: TEdit;
  Labelfec2: TLabel;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
  R: TRect;
begin
  Result := '';
  Form  := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetCharSize(Canvas);
      BorderStyle := bsDialog;
      FormStyle :=fsStayOnTop;
      Caption    := ACaption;
      ClientWidth := MulDiv(195, DialogUnits.X, 4);
      Position    := poScreenCenter;
      Prompt      := TLabel.Create(Form);
      with Prompt do
      begin
        Parent  := Form;
        Caption  := APrompt;
        Left    := MulDiv(8, DialogUnits.X, 4);
        Top      := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(180, DialogUnits.X, 4);
        WordWrap := True;
      end;
      Ed:=TEdit.Create(Form);
      with Ed do
      begin
        Parent := Form;
        Left      := Prompt.Left;
        Top      := Prompt.top+Prompt.Height+5;
        Width    := MulDiv(180, DialogUnits.X, 4);
        Text      :='';
      end;
      Labelfec2  := TLabel.Create(Form);
      with Labelfec2 do
      begin
        Parent  := Form;
        Caption  := 'Fecha';
        Left    := Prompt.Left;
        Top      := ED.top+ED.Height+5;
        WordWrap := True;
      end;
      Combo := TDateTimePicker.Create(Form);
      with Combo do
      begin
        Parent := Form;
        Left      := Prompt.Left;
        Top      := Labelfec2.top+Labelfec2.Height+5;
        Width    := MulDiv(178, DialogUnits.X, 4);
      end;
      ButtonTop    := combo.top+Combo.Height+10;;
      ButtonWidth  := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        Parent      := Form;
        Caption    := 'OK';
        ModalResult := mrOk;
        default    := True;
        SetBounds(MulDiv(Prompt.Left-2, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        Parent      := Form;
        Caption    := 'Cancelar';
        ModalResult := mrCancel;
        Cancel      := True;
        SetBounds(MulDiv(137, DialogUnits.X, 4), ButtonTop,ButtonWidth, ButtonHeight);
        Form.ClientHeight := 140;
      end;
      if ShowModal = mrOk then
      begin
        if Separadores then Result:=Ed.Text+' [ '+DateToStr(Combo.Date)+' ]'
                      else Result:=Ed.Text+' '+DateToStr(Combo.Date);
      end;
    finally
      Form.Free;
    end;
end;[/DELPHI]

Como podéis ver estoy dejando para el final los botones cancelar y confirmar, tanto del detalle como del principal.
Ya va quedando menos, pero sigo diciendo que esta es la parte más complicada.

Lo próximo es meternos con la entrada de artículos, que la haremos por partes, primero meteremos el artículo en si, despues veremos el tema de los lotes y el ADR y por último, los cálculos y los botones de grabación y cancelar en cuanto al detalle.

En cuanto al principal, queda toda la gestión de cálculos, Comisiones, financiado, retenciones, impuestos, etc y sus botones claro.
  • 0

#87 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 04:10

Buenos compañeros, aquí esta una parte fundamental del programa, la introducción de los artículos en nuestros documentos, en este móiulo, tenemos desde la gestión de trazabilidad (parte inicial Selección y creación), con sus vencimientos ADR, comisiones, etc.

Esta es la pantalla

Imagen Enviada

Como podéis ver debemos usar un formulario aparte, ya que a diferencia de una factura, de las que se han venido usando hasta la fecha, tenemos muchos datos más que manejar, pero muchos de ellos, solo los tendremos que usar inicialmente, ya después su uso es automático.

Como siempre el código aquí https://gist.github....onymous/6078466
  • 0

#88 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 04:41

Realmente este módulo podríamos decir que hace el 50% del trabajo en documentos, por eso vamos a detenernos y comentar sus partes, para ellos vamos a apoyarnos en la siguiente imagen numerada

Imagen Enviada

No vamos a comentar el código, que ya esta colocado en el post anterior, pero vamos a por los diferentes puntos.

0) Es el panel que contiene los datos, realmente de ellos directamente manejamos 2 o 3, siendo el principal el código del artículo, ya que el resto, se rellena más por clicks del ratón y otros apartados que directamente.

Al lado del código vemos un botón que abre el formulario de artículos.

1,2,3) son campos de lectura, el 1 y 2, además son informativos, ya que no es de esta manera como se guardara la información, pero es como la presentaremos en nuestro documento +-.

4) Los precios, como podemos ver ene este apartado, tenemos tanto los precios como el rapel y descuentos, en esta pantalla no se ve (ya que aún no lo hemos tratado), pero sobre este cliente, en este artículo si tiene un precio especial, aparecería en la parte baja como Precio Esp. Cliente (Linea 274 del código) y aparecería esta como seleccionada, también tenemos  un check a la izquierda que indica el precio seleccionado, pero podemos cambiarlo en cualquier momento.

5) Este es un panel, que nos da información tanto del documento, cliente y comercial.

6) Esta es la madre del cordero, aquí nos muestra la información de todos los lotes de productos que hemos introducido, para este código de artículo, podemos ver que nos indica el lote, la fecha (de entrada), la cantidad de entrada, las unidades que hay disponibles  (no aparecen las que estén a 0 o por debajo), y la fecha de caducidad (podemos ver que algunas no tienen datos en este apartado, es debido a las diferentes pruebas iniciales, pero realmente siempre aparecería este dato) y por último la cantidad de artículos que vamos a usar de  cada lote.

Realmente el único elemento que vamos a usar es el último, si la cantidad que ponemos es mayor que la disponible para dicho lote, nos avisa y ajusta este al disponible del mismo.

7) Botón de salir y no pasar ninguno de estos datos.

8) Botón de salir y  pasar todos estos datos.

9) Buscar, el de la derecha abre el dialogo "buscar por" según elijamos en Descripción o Código (la búsqueda es mediante un LOCATE) y el de la izquierda abre el dialogo de búsquedas ya usado anteriormente en varios módulos que hacemos mediante SQL. (este módulo, lo publicare nuevamente al terminar ya que sigue teniendo varios cambios según avanzamos, aunque la mayoría ya los hemos visto en partes anteriores)

10,12) Este botón abre una pequeña ventana, para introducir un lote manualmente y registrarlo, lo mismo  que el apartado 12, pero es mucho más claro el 10 que el 12, este apartado lo veremos a continuación.

11) Botón que abre el módulo de entrada de productos/artículos, que ya hemos visto anteriormente

12) ya lo hemos tratado en el apartado 10


Como siempre si existe alguna duda, me tenéis a vuestra dispocición
  • 0

#89 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 04:44

El módulo comentado en el post anterior

Imagen Enviada

y su código https://gist.github....onymous/6078637

Como podéis ver su código es bastante reducido
  • 0

#90 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 05:19

Como podéis ver hasta el momento no hemos usado en ningún momento un CommitRetaing, ni un Commit, para que los datos sean grabados fisícamentes, al finalizar el documento, pero claro esta si entramos en entradas o en artículos y creamos uno nuevo, se realizará un CommitRetaing (Lo estoy escribiendo todo de cabeza, así que perdonar si no esta bien), con lo cual los datos a los que pasemos con el post serán grabados, para evitar dentro de lo posible esto, me gusta poner un dialogo previo que avise de tal circunstancia, pero eso debéis seleccionarlo o solucionarlo vosotros a vuestra manera.

Me han preguntado por email, si el programa estará completo, os pongo mi respuesta al tema, depende para que lo uséis, como programa de gestión estándar si, para una empresa de lo mio (química cosmética y productos de limpieza), le faltan apartados, pero lo principal si lo estoy dando. Claro esta como ya he dicho en varias ocasiones, no voy a poner los módulos de impresión.

Otro tema que me ha puesto la misma persona, es el tema de por que doy tanta información, al parecer le molesta por el tema de que se dedica a vender programas y con la información que doy, le parece útil, ya que hay partes que el desconocía, pero que puedo crear una mayor competencia al preparar más personas para la venta de programas de gestión. Mi respuesta ha sido, que si realmente logro preparar, una sola persona, que gracias a este tutorial, sea capaz de crear y vender un programa de gestión, me hará sentir muy orgulloso y feliz de haber realizado este tutorial. En cuanto a la competencia, ya existe y creo que cada persona, deberá adaptar dicho tutorial, a su manera de trabajar, con lo que cada programa sera visualmente diferente y probablemente su código, también variará sustancialmente.

Pretendo dar unos conceptos y aplicación de los mismos al código y espero conseguirlo, no llevamos mucho más de dos meses con este tema y creo que se lleva un buen ritmo y hemos avanzado mucho, por lo menos eso espero, ya que tengo que compartir mi tiempo, entre hacer el programa y llevarlo al tutorial y explicarlo y por supuesto mi familia y trabajo.

Siento si hay gente que se molesta, pero es una aportación lo que hago, creo que debe tomarse como tal y considero, que es un poco egoísta la aptitud de este señor. de todas maneras, ya lo he comentado otras veces en el club, me han acusado, de plagiar y de otras muchas cosas, la verdad es que la mayoria de los compañeros, creo que saben que nunca ha sido mi intención ni plagiar, ni fastidiar a nadie.

De hecho llevo un montón de años (desde el 2003) y no suelo participar en temas que yo no he abierto, ya que temo meter la pata y por que estoy seguro de  que muchos compañeros tienen mejores respuestas que las que yo doy, sin embargo, creo que he abierto algunos temas interesante y otros no, pero siempre he facilitado mi código y los componentes creados por mi, como no queráis la sangre también :cool:

La verdad es que es algo que me molesta, la aptitud de estos elementos, aún así, nunca he dado los nombres de dichos elementos ni sus emails y no voy hacerlo ahora, pero me gustaría que ciertas personas, se limitarán a exponer sus ideas y comentarios sobre dichos temas en los hilos abiertos sobre los que tratan y no sobre mi email.
  • 0

#91 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 05:22

Por cierto, procuro ser claro y no cortar parte de mis explicaciones, por lo que mis post pueden ser pesados y molestos, en eso si estoy de acuerdo, con dicha persona y le pido disculpas si molesta a más compañeros, pero procuro ser educado, no como alguno.
  • 0

#92 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2013 - 07:51

Me han preguntado por email, si el programa estará completo, os pongo mi respuesta al tema, depende para que lo uséis, como programa de gestión estándar si, para una empresa de lo mio (química cosmética y productos de limpieza), le faltan apartados, pero lo principal si lo estoy dando. Claro esta como ya he dicho en varias ocasiones, no voy a poner los módulos de impresión.


Bueno amigo, creo que algo a lo que estaremos siempre expuestos es a la crítica. Esta no siempre nos puede gustar, pero creo que es un proceso natural al publicar contenido de nuestra autoría. Lo que si creo amigo mio es que por encima de toda crítica, buena o mala, lo que haces es admirable. Poca gente de verdad se anima a compartir conocimiento y seguramente por ello quien escribió a tu correo se sintió molesto al ver que compartes algo que para él es crucial.  No lo juzgo, sus razones debe tener ya sean válidas o no.

Lo que si me gustaría decirte es que más allá de las críticas que puedas recibir, continues con esta enorme labor. A mi de manera personal me gusta mucho y aunque no he podido complementar tu hilo del diseño de pantallas a pesar de querer hacerlo, puedo decirte que sigo tus explicaciones cada que las publicas.

Así que ánimo amigo. :)



  • 0

#93 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 25 julio 2013 - 08:12

Gracias Poliburro, admito las criticas, pero esto ha sido como un ataque personal, la persona que lo escribió estaba bastante molesta, por aportar tanto los conocimientos como el código y ojo yo creo que mi código es muy simple por lo que me quedo a cuadros, por los comentarios, de este señor en particular.

En cuanto a lo de compartir, puedo decir que recibo mucho más de lo que doy, por lo que me parece una aportación mínima comparado con lo que recibo.

Como ya digo

Otro tema que me ha puesto la misma persona, es el tema de por que doy tanta información, al parecer le molesta por el tema de que se dedica a vender programas y con la información que doy, le parece útil, ya que hay partes que el desconocía, pero que puedo crear una mayor competencia al preparar más personas para la venta de programas de gestión. Mi respuesta ha sido, que si realmente logro preparar, una sola persona, que gracias a este tutorial, sea capaz de crear y vender un programa de gestión, me hará sentir muy orgulloso y feliz de haber realizado este tutorial. En cuanto a la competencia, ya existe y creo que cada persona, deberá adaptar dicho tutorial, a su manera de trabajar, con lo que cada programa sera visualmente diferente y probablemente su código, también variará sustancialmente.


Si ayudo a una sola persona, a la que realmente le sea util este tutorial, como para  sacar un programa a la venta, gracias a el, mi objetivo esta más que cumplido.
  • 0

#94 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 25 julio 2013 - 08:14

Que absurda y patética puede ser la gente. Si está preocupado por la competencia es porque ha de ser muy malo su sistema.

Ni hablar, en ésta vida hay de todo. Tu sigue adelante amigo josé Luis (y)

Saludos


  • 0

#95 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 julio 2013 - 07:23

Saludos.

Como han comentado los demás compañeros, siempre habrá críticas lo importante aquí es como te sientes tu haciendo esta enorme labor aportando a la comunidad.

El 99.99% de este tipo de críticas son de personas mediocres, vanas e incluso poco o nada preparadas y como tal hay que tratarlos. La mejor manera es IGNORAR a estas personas, en tu caso particular la manera mas sencilla es realizar los siguientes pasos:
1.- Acceder a tu cuenta de correo electrónico.
2.- Visualizar el listado de nuevos correos.
3.- Seleccionar (marcar) el correo de este "genio".
4.- Oprimir el botón de eliminar/borrar.

Veras que con estos pequeños pasos sentirás un enorme alivio, el cual te permitiría continuar  con esta gran labor.

En mi país, no sé si ocurre en los demás, a los autobuses del transporte publico los dueños por lo regular le etiquetan diversas frases, una de esas frases "cae como anillo al dedo" a esta situación:

Si te causo envidia, trabaja como yo.

Desart Keep Moving Forward
  • 0

#96 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 26 julio 2013 - 07:27

Si te causo envidia, trabaja como yo.

Desart Keep Moving Forward


(y)  (y)  (y)  (y)  (y)  (y)  (y)  (y)  (y)  (y)
  • 0

#97 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 26 julio 2013 - 08:04

Gracias Compañeros por vuestro apoyo, normalmente, paso, lo que no entiendo es que no me comentan las cosas en el mismo foro, haciéndolo (según lo veo yo ) por lo privado de manera que parece un ataque.

Realmente considero, que lo que hago, es simplemente la unión de un montón de código que esta en la red y que yo lo he ido adaptando a mis necesidades, claro que hay algo de código propio, pero es seguro, que habrá mejores formas de hacerlo.

En fin lo tengo en el listado de correos a rechazar, así que espero no siga por ahí, de todas maneras, sigo con lo que tengo que hacer.  un saludo compañeros.
  • 0

#98 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 26 julio 2013 - 09:01

Gracias Compañeros por vuestro apoyo, normalmente, paso, lo que no entiendo es que no me comentan las cosas en el mismo foro, haciéndolo (según lo veo yo ) por lo privado de manera que parece un ataque.

Realmente considero, que lo que hago, es simplemente la unión de un montón de código que esta en la red y que yo lo he ido adaptando a mis necesidades, claro que hay algo de código propio, pero es seguro, que habrá mejores formas de hacerlo.

En fin lo tengo en el listado de correos a rechazar, así que espero no siga por ahí, de todas maneras, sigo con lo que tengo que hacer.  un saludo compañeros.


Es más fácil expresar las cosas sin que los demás vean el verdadero YO de la gente, de lo que puedes estar seguro amigo José Luis es que tu publicación ha impactado mucho, para algunos bien y para otros mal, pero así es la vida misma, eso es lo que le da sabor a las cosas :)

Saludos
  • 0

#99 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 27 julio 2013 - 04:18


Gracias Compañeros por vuestro apoyo, normalmente, paso, lo que no entiendo es que no me comentan las cosas en el mismo foro, haciéndolo (según lo veo yo ) por lo privado de manera que parece un ataque.

Realmente considero, que lo que hago, es simplemente la unión de un montón de código que esta en la red y que yo lo he ido adaptando a mis necesidades, claro que hay algo de código propio, pero es seguro, que habrá mejores formas de hacerlo.

En fin lo tengo en el listado de correos a rechazar, así que espero no siga por ahí, de todas maneras, sigo con lo que tengo que hacer.  un saludo compañeros.


Es más fácil expresar las cosas sin que los demás vean el verdadero YO de la gente, de lo que puedes estar seguro amigo José Luis es que tu publicación ha impactado mucho, para algunos bien y para otros mal, pero así es la vida misma, eso es lo que le da sabor a las cosas :)


Saludos


Gracias Compañero, solo espero, que primero no les duela mucho el impacto :) y segundo que sean más lo que sea para bien  que los que sean para mal ;)
  • 0

#100 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 27 julio 2013 - 04:20

Pongo una nueva función que me parece interesante y empezare a usar, en el tutorial, que por cierto me llevara unos días seguir publicando, ya que quiero terminar el módulo de documentos.



delphi
  1. //------------------------------------------------------------------------------
  2. //*************************************************[ CamposObligatorios ]****
  3. //  Parte de la idea original de  Ricardo S.    [27/07/2013]
  4. // bajada de [url=http://www.planetadelphi.com.br/dica/1281/fun%C3%A7%C3%A3o-que-informa-os-campos-obrigat%C3%B3rios-que-n%C3%A3o-foram-preenchidos,-boa]http://www.planetadelphi.com.br/dica/1281/fun%C3%A7%C3%A3o-que-informa-os-campos-obrigat%C3%B3rios-que-n%C3%A3o-foram-preenchidos,-boa[/url]
  5. //------------------------------------------------------------------------------
  6. // Pequeñas modificaciones y adaptado por mi permitiendo comprobar si hat Campos
  7. // obligatorios pendientes de rellenar
  8. //------------------------------------------------------------------------------
  9. //  [DS]  TDataSource  Originalmente era de un TQuerry
  10. //  [NoField] string     Podemos elegir un campo para que lo omita por
  11. // ejemplo 'ID', por defecto =''
  12. //------------------------------------------------------------------------------
  13. //---EJEMPLO--------------------------------------------------------------------
  14. //  if CamposObligatorios(DsDetalle,'ID')=true then DsDetalle.dataset.post;
  15. //------------------------------------------------------------------------------
  16. function CamposObligatorios(DS:TDataSource; NoField:string=''):Boolean;
  17. var j:Byte;
  18.     Msg:String;
  19. begin
  20.   Msg:='';
  21.   Result:=False;
  22.   with DS.DataSet do
  23.   begin
  24.         for j:=0 to FieldCount -1 do
  25.         if  ((Fields[j].Required) and  (Fields[j].AsString = '')) and (Fields[j].FieldName<>NoField) then
  26.         begin
  27.           if Msg <> '' then Msg:=Msg+' - ';
  28.           Msg:=Msg+Fields[j].FieldName;
  29.         end;
  30.   end;
  31.   if Msg <> '' then ShowMessage('Atención, el/los campo/s :'+ #13+Msg+' No contiene datos')
  32.     else Result:=True;
  33. end;


  • 0




IP.Board spam blocked by CleanTalk.