Ver Mensaje Individual
  #1  
Antiguo 16-04-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 273
Reputación: 16
darkamerico Va por buen camino
Red face Duda con un TCheckListBox

Hola amigos, estoy realizando un sistema de Registro y Seguimiento de Reclamos, este sistema basicamente comienza cuando se ingresa el codigo del cliente, todos nuestros clientes tienen su codigo en una BD.

El aspecto de la pantalla principal es la siguiente:

VER

-------

Bien, estoy trabajando con un TChecklistbox (que aparece en la parte superior derecha de la pantalla, el cual es llenado en el evento OnActivate del formulario, de la siguiente forma:

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
begin
   lstDocsCliente.Items.Clear;
  while not DmMysql.q_DocsCliente.Eof do
  begin
    lstDocsCliente.Items.Add(DmMysql.q_DocsCliente.FieldByName('id_Doc').AsString + '.' + DmMysql.q_DocsCliente.FieldByName('documento').AsString);
    DmMysql.q_DocsCliente.Next;
  end;
end;

El personal encargado, marca los documentos que el cliente esta presentando y presiona el boton Grabar, que realiza el siguiente codigo:


Código Delphi [-]
procedure TForm1.btnGrabaDocsClick(Sender: TObject);
var
  i,idDoc, posPunto, idDocXCliente:integer;
begin
  DmMysql.q_DELDocs.Close;
  DmMysql.q_DELDocs.Params[0].AsInteger:=StrToInt(lblIDReclamo.Caption);
  DmMysql.q_DELDocs.ExecSQL;

  for i := 0 to lstDocsCliente.Count-1 do
  begin
    if(lstDocsCliente.Checked[i])then
    begin
      posPunto:=pos('.',lstDocsCliente.Items.Strings[i]);
      idDoc:=StrToInt(copy(lstDocsCliente.Items.Strings[i],0,posPunto-1));

      DmMysql.q_CalcIDDocXCliente.Close;
      DmMysql.q_CalcIDDocXCliente.Open;

      if(length(DmMysql.q_CalcIDDocXCliente.FieldbyName('idDocXCliente').AsString)=0)then
        idDocXCliente:=1
      else
        idDocXCliente:=DmMysql.q_CalcIDDocXCliente.FieldbyName('idDocXCliente').AsInteger;

      DmMysql.q_INSDocXRec.Close;
      DmMysql.q_INSDocXRec.Params[0].AsInteger:=idDocXCliente;
      DmMysql.q_INSDocXRec.Params[1].AsInteger:=StrtoInt(lblIDReclamo.Caption);
      DmMysql.q_INSDocXRec.Params[2].AsInteger:=idDoc;
      DmMysql.q_INSDocXRec.Params[3].AsString:=DateToStr(cboFechaPres.Date);
      DmMysql.q_INSDocXRec.Params[4].AsString:=txtGlosaReclamo.Text;
      DmMysql.q_INSDocXRec.execSQL;
    end;
  end;
  showMessage('Documentos Registrados!');
end;

Ok Hasta aqui el trabajo se realiza correctamente, la parte que me falta es que cuando el personal digite el codigo de un cliente con un proceso de reclamo ABIERTO, deben marcarse los checks de los documentos que fueron previamente grabados. Ello se realiza en el evento KeyPress del TEdit (1) donde se coloca el Codigo del Cliente, llamado txtRC, alguien que me de una mano en este procedimiento, este fragmento de codigo realiza parte del trabajo, pero no he podido solucionarlo, solamente marca el primer documento...

Código Delphi [-]
procedure TForm1.txtRCKeyPress(Sender: TObject; var Key: Char);
begin
  if (Key=#13) and (length(txtRC.Text)>0) then
  begin
      DMMySQL.q_DocsClienteXReclamo.Close;
      DMMySQL.q_DocsClienteXReclamo.Params[0].AsInteger:=StrToInt(lblIDReclamo.Caption);
      DMMySQL.q_DocsClienteXReclamo.Open;

      for i := 0 to lstDocsCliente.Count-1 do
      begin
        posPunto:=pos('.', lstDocsCliente.Items[i]);
        while not DMMySQL.q_DocsClienteXReclamo.Eof do
        begin
          if(StrToInt(copy(lstDocsCliente.Items[i],0,PosPunto-1))=DMMySQL.q_DocsClienteXReclamo.FieldByName('iddocCliente_fk').AsInteger)then
            lstDocsCliente.Checked[i]:=true;
          DMMySQL.q_DocsClienteXReclamo.Next;
        end;
      end;
end;
end;

Gracias compañeros.

Americo
Responder Con Cita