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