¿El closetab y opentab de un control tab?
En power builder 9.0 al aplicar el closetabpage a todo los tabpage de un tab y luego al mismo control tab le voy agregando tabpage con opentab, ¿a este no se visualiza su datawindows porque pasa?
Tengo una ventana diagramada a tres columna de esta forma:
Un dw_external (parte superior izquierda) con nombre dw_pcnte
columnas
1era columna un treeview con nombre tv_1
2da columna un tabcontrol con nombre tab_1
3era columna un treeviewv con nombre tv_2.
Funcionamiento.
1. Debe seleccionarse un paciente del dw_pcnte
2. Inmediatamente, se armar los componentes de la historia clínica (HC) del paciente
para ser diligenciada por el medico (esto se muestra en el control tv_1)
3. Al dar click en un componente de la HC del control tv_1 se va creando una pestanna en el tab_1 mostrando el datawindows para capturar los datos o información asociada a este instrumento de recolección de datos. Este paso se repite en la media que sea demandado por el medico que diligencia la HC
4. Una vez que esta seguro que se ha finalizado la atención del paciente, se graba
y se comienza nuevamente los pasos del 1 al 4.
Todo esto lo hace correctamente la interface gráfica, el error o el funcionamiento inadecaudo es: al tomar un nuevo paciente se cierran todas los tabpage del tab_1, para este nuevo paciente se hacen los pasos 1,2 ok y el tercero es defectuoso y por ende igualmente el cuarto, debido a que se crea la pestanna pero no se muestra el datawindows en el control tab_1.
Para entender esto y encontrar el punto de inflexión se debe tener en cuenta lo siguiente:
1.Al seleccionar un nuevo paciente se ejecuta el evento postitemchanged() del control dw_pcnte,
si el nuevo paciente que se elige es diferente al anterior se cierran todas las pestannas del control tab_1 y se hace una apertura nuevamente del control tab. Esto se hace con esta sintaxis:
if is_id_pcnte_antrior<>is_id_pcnte and is_id_pcnte_antrior<>'0' then
ll_tme=ll_tme+1
em_1.text=string(ll_tme)
messagebox("ll_tme",ll_tme)
parent.event pfc_crrar_tabpage() /*cierra los tabpage del tab_1
parent.event pfc_abrir_tabpage() /*inicia los tabpage del tab_1
end if
is_id_pcnte_antrior=is_id_pcnte
esto lo realiza correctamente
2. Cuando se arma los componentes de la HC y se da click en un de ello se ejecuja el evento selectionchanged() y es aquí donde no funciona correctamente, la sintaxis es
{
string ls_dw,ls_cdgo_det_cmpnnte_hc
TreeViewItem item_actual
long posx,posy,cont
int li_index,li_row
boolean lb_sw
GetItem(newhandle,item_actual)
ls_cdgo_det_cmpnnte_hc=item_actual.data
li_index=long(ls_cdgo_det_cmpnnte_hc)+2
li_row=5
lb_sw=false
do while lb_sw=false and li_row<=li_index
if indeces[li_row]=li_index then
lb_sw=true
else
li_row=li_row+1
end if
loop
indeces[li_index]=li_index
ii_actual=li_index
if lb_sw=false then
if nv_hc.of_retrieve_det_cmpnnte_hc(ls_cdgo_det_cmpnnte_hc) then
is_dw=nv_hc.of_get_nmbre_dw_hc()
if not isnull(is_dw) and item_actual.children=false then
il_ttaltabpge=il_ttaltabpge+1
ltab_tab.opentab ( luo_tabpage [li_index] , 0)
luo_tabpage [li_index].text = nv_hc.of_get_text_dw_hc()
luo_tabpage [li_index].backcolor = ltab_tab.backcolor
// luo_tabpage [li_index].powertiptext = nv_hc.of_get_nmbre_dw_hc()
luo_tabpage [li_index].picturename = nv_hc.of_get_pctre_dw_hc()
luo_tabpage[li_index].dw_1.dataobject = is_dw /*en esta linea del codigo es donde se genera el inconveniente
luo_tabpage[li_index].dw_1.hscrollbar =true
luo_tabpage[li_index].dw_1.vscrollbar =true
luo_tabpage[li_index].dw_1.livescroll =true
luo_tabpage[li_index].dw_1.hsplitscroll =true
luo_tabpage[li_index].dw_1.Of_SetUpdateable (true)
luo_tabpage[li_index].dw_1.of_settransobject ( sqlca)
lpo_objs [li_index] = luo_tabpage[li_index].dw_1
ldw_current = luo_tabpage [li_index].dw_1
if is_dw='d_mnt_pcnte_hc' then
luo_tabpage[li_index].dw_1.retrieve(gs_emprsa,is_id_pcnte,is_tpo_id)
else
luo_tabpage [li_index].dw_1.Event pfc_addrow()
if is_dw<>'d_mnt_pcnte_hc' and is_dw<>'d_mnt_hc_rips' then
luo_tabpage [li_index].dw_1.Object.cdgo_emprsa [luo_tabpage [li_index].dw_1.getrow()] = gs_emprsa
luo_tabpage [li_index].dw_1.Object.cdgo_scrsal [luo_tabpage [li_index].dw_1.getrow()] = gs_scrsal
luo_tabpage [li_index].dw_1.Object.id_pcnte [luo_tabpage [li_index].dw_1.getrow()] = is_id_pcnte
luo_tabpage [li_index].dw_1.Object.tpo_id [luo_tabpage [li_index].dw_1.getrow()] = is_tpo_id
luo_tabpage [li_index].dw_1.Object.nmro_mvmnto [luo_tabpage [li_index].dw_1.getrow()] = il_mvmnto
luo_tabpage [li_index].dw_1.Object.usrio [luo_tabpage [li_index].dw_1.getrow()] = gnv_app.of_GetUserId()
luo_tabpage [li_index].dw_1.Object.fcha_cntrol [luo_tabpage [li_index].dw_1.getrow()] = f_get_datetime()
ELSE
luo_tabpage [li_index].dw_1.Object.cdgo_emprsa [luo_tabpage [li_index].dw_1.getrow()] = gs_emprsa
if is_dw<>'d_mnt_pcnte_hc' then
luo_tabpage [li_index].dw_1.Object.cdgo_scrsal [luo_tabpage [li_index].dw_1.getrow()] = gs_scrsal
luo_tabpage [li_index].dw_1.object.nmro_id_prfsnal [luo_tabpage [li_index].dw_1.getrow()] = is_id_prfsnal
end if
luo_tabpage [li_index].dw_1.Object.usrio_ingrso [luo_tabpage [li_index].dw_1.getrow()] = gnv_app.of_GetUserId()
luo_tabpage [li_index].dw_1.Object.fcha_ingrso [luo_tabpage [li_index].dw_1.getrow()] = f_get_datetime()
end if
...
Tengo una ventana diagramada a tres columna de esta forma:
Un dw_external (parte superior izquierda) con nombre dw_pcnte
columnas
1era columna un treeview con nombre tv_1
2da columna un tabcontrol con nombre tab_1
3era columna un treeviewv con nombre tv_2.
Funcionamiento.
1. Debe seleccionarse un paciente del dw_pcnte
2. Inmediatamente, se armar los componentes de la historia clínica (HC) del paciente
para ser diligenciada por el medico (esto se muestra en el control tv_1)
3. Al dar click en un componente de la HC del control tv_1 se va creando una pestanna en el tab_1 mostrando el datawindows para capturar los datos o información asociada a este instrumento de recolección de datos. Este paso se repite en la media que sea demandado por el medico que diligencia la HC
4. Una vez que esta seguro que se ha finalizado la atención del paciente, se graba
y se comienza nuevamente los pasos del 1 al 4.
Todo esto lo hace correctamente la interface gráfica, el error o el funcionamiento inadecaudo es: al tomar un nuevo paciente se cierran todas los tabpage del tab_1, para este nuevo paciente se hacen los pasos 1,2 ok y el tercero es defectuoso y por ende igualmente el cuarto, debido a que se crea la pestanna pero no se muestra el datawindows en el control tab_1.
Para entender esto y encontrar el punto de inflexión se debe tener en cuenta lo siguiente:
1.Al seleccionar un nuevo paciente se ejecuta el evento postitemchanged() del control dw_pcnte,
si el nuevo paciente que se elige es diferente al anterior se cierran todas las pestannas del control tab_1 y se hace una apertura nuevamente del control tab. Esto se hace con esta sintaxis:
if is_id_pcnte_antrior<>is_id_pcnte and is_id_pcnte_antrior<>'0' then
ll_tme=ll_tme+1
em_1.text=string(ll_tme)
messagebox("ll_tme",ll_tme)
parent.event pfc_crrar_tabpage() /*cierra los tabpage del tab_1
parent.event pfc_abrir_tabpage() /*inicia los tabpage del tab_1
end if
is_id_pcnte_antrior=is_id_pcnte
esto lo realiza correctamente
2. Cuando se arma los componentes de la HC y se da click en un de ello se ejecuja el evento selectionchanged() y es aquí donde no funciona correctamente, la sintaxis es
{
string ls_dw,ls_cdgo_det_cmpnnte_hc
TreeViewItem item_actual
long posx,posy,cont
int li_index,li_row
boolean lb_sw
GetItem(newhandle,item_actual)
ls_cdgo_det_cmpnnte_hc=item_actual.data
li_index=long(ls_cdgo_det_cmpnnte_hc)+2
li_row=5
lb_sw=false
do while lb_sw=false and li_row<=li_index
if indeces[li_row]=li_index then
lb_sw=true
else
li_row=li_row+1
end if
loop
indeces[li_index]=li_index
ii_actual=li_index
if lb_sw=false then
if nv_hc.of_retrieve_det_cmpnnte_hc(ls_cdgo_det_cmpnnte_hc) then
is_dw=nv_hc.of_get_nmbre_dw_hc()
if not isnull(is_dw) and item_actual.children=false then
il_ttaltabpge=il_ttaltabpge+1
ltab_tab.opentab ( luo_tabpage [li_index] , 0)
luo_tabpage [li_index].text = nv_hc.of_get_text_dw_hc()
luo_tabpage [li_index].backcolor = ltab_tab.backcolor
// luo_tabpage [li_index].powertiptext = nv_hc.of_get_nmbre_dw_hc()
luo_tabpage [li_index].picturename = nv_hc.of_get_pctre_dw_hc()
luo_tabpage[li_index].dw_1.dataobject = is_dw /*en esta linea del codigo es donde se genera el inconveniente
luo_tabpage[li_index].dw_1.hscrollbar =true
luo_tabpage[li_index].dw_1.vscrollbar =true
luo_tabpage[li_index].dw_1.livescroll =true
luo_tabpage[li_index].dw_1.hsplitscroll =true
luo_tabpage[li_index].dw_1.Of_SetUpdateable (true)
luo_tabpage[li_index].dw_1.of_settransobject ( sqlca)
lpo_objs [li_index] = luo_tabpage[li_index].dw_1
ldw_current = luo_tabpage [li_index].dw_1
if is_dw='d_mnt_pcnte_hc' then
luo_tabpage[li_index].dw_1.retrieve(gs_emprsa,is_id_pcnte,is_tpo_id)
else
luo_tabpage [li_index].dw_1.Event pfc_addrow()
if is_dw<>'d_mnt_pcnte_hc' and is_dw<>'d_mnt_hc_rips' then
luo_tabpage [li_index].dw_1.Object.cdgo_emprsa [luo_tabpage [li_index].dw_1.getrow()] = gs_emprsa
luo_tabpage [li_index].dw_1.Object.cdgo_scrsal [luo_tabpage [li_index].dw_1.getrow()] = gs_scrsal
luo_tabpage [li_index].dw_1.Object.id_pcnte [luo_tabpage [li_index].dw_1.getrow()] = is_id_pcnte
luo_tabpage [li_index].dw_1.Object.tpo_id [luo_tabpage [li_index].dw_1.getrow()] = is_tpo_id
luo_tabpage [li_index].dw_1.Object.nmro_mvmnto [luo_tabpage [li_index].dw_1.getrow()] = il_mvmnto
luo_tabpage [li_index].dw_1.Object.usrio [luo_tabpage [li_index].dw_1.getrow()] = gnv_app.of_GetUserId()
luo_tabpage [li_index].dw_1.Object.fcha_cntrol [luo_tabpage [li_index].dw_1.getrow()] = f_get_datetime()
ELSE
luo_tabpage [li_index].dw_1.Object.cdgo_emprsa [luo_tabpage [li_index].dw_1.getrow()] = gs_emprsa
if is_dw<>'d_mnt_pcnte_hc' then
luo_tabpage [li_index].dw_1.Object.cdgo_scrsal [luo_tabpage [li_index].dw_1.getrow()] = gs_scrsal
luo_tabpage [li_index].dw_1.object.nmro_id_prfsnal [luo_tabpage [li_index].dw_1.getrow()] = is_id_prfsnal
end if
luo_tabpage [li_index].dw_1.Object.usrio_ingrso [luo_tabpage [li_index].dw_1.getrow()] = gnv_app.of_GetUserId()
luo_tabpage [li_index].dw_1.Object.fcha_ingrso [luo_tabpage [li_index].dw_1.getrow()] = f_get_datetime()
end if
...
Respuesta de Franklin Marín
1