¿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 
       ...

1 Respuesta

Respuesta
1
Vaya pregunta. De antemano te sugiero tomes esto en consideración: 1) ¿Por qué en vez de estar abriendo y cerrando tabpages simplemente no lo ocultas y muestras?. 2) ¿Estás asegurando la limpieza de todos tus controles cuando te cambias de paciente?. 3) ¿Estos tabpages son userobjects?
Respuesta al inciso o numeral 3 de tu respuesta es, si es un userobject (objecto oculto) que es una ventana que tiene un datawindow. Ademas, estoy trabajando con las pfc (power foundation class -no se si se escribe así-) e igualmente con herencia de objetos.
Realice una prueba sin hacer closetab ni opentab sino que hice una función que recorriera los tabpage abierto y realizara un retrieve (con sus parámetros requeridos) a cada uno de lo datawindow que están empotrado en la página . el resultado de esto, es que lo realiza bien pero al dar click (en tv_1 ) en un componente de hc que no estaba previamente abierto ocurre el mismo error. Es decir, funciono a medias y sin zapato.
Opte por, esta solución no tan adecuada, si EL MEDICO había iniciado el proceso de diligneciamiento de un o varios componente de la hc de un paciente y el intentara escoger otro paciente no se lo permito, hice ese control. Ademas, le notifico que debe guardar esa hc o cerrar LA VENTANA Y vaya al menu y escoja la opción de iligenciamiento de la hc en consulta externa y tome un nuevo paciente. Si al guarda ese iligenciamiento, lo que hago es un close(parent) y el médico deb ir al menu y escoja la opción de diligenciamiento de la hc en consulta externa para un nuevo paciente y así no ocurre ningún error. Esta solución no me satisface para nada (no es beneficiosa al usuario final ).
Voy a intentar con ocultar y mostrar para ver si funciona. Gracias por la respuesta. Estamos QAP
A mí tampoco me gusta esa implementación, sobre todo con médicos que son usuarios bien complejos. No entiendo la necesidad de hacer retrieve a todos los datawindows de todos los tabpages (esto puede minimizar la velocidad del sistema), sería mejor que hicieras retrieve en el selectionchanged del tabpage que el usuario seleccionó.
Valida mejor lo que deseas hacer y evita realizar cierres y aperturas de ventanas innecesarias (implementa solo lo necesario, es lo más conveniente).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas