[RESOLVIDO] Ocultar/Mostrar Campos Dinamicamente em GRIDs (Consultas)

Bom Pessoal , me surgiu uma necessidade de fazer que seja Dinâmico a ocultação de campos, y como bem sabem a macro apenas aceita o campo explícito Exemplo sc_field_display({meu_campo}, off); não posso passar uma Variável para a macro, pois não funciona.
Então investiguei y simulei a macro do SC O Uso desse código e por Responsabilidade do programador, não esta previsto Erros inesperados, atualizações NetMake ou outro fator que possa alterar o funcionamento deste método. Por tanto o uso y manutenção e por sua conta Sr. Programador :slight_smile:
Explicado tudo vamos la, mãos a obra…

No meu Caso vou ter apenas 1 consulta com vários campos y varias quebras, y de acordo com a quebra y outros fatores devo ocultar determinados campos y mostrar outros…

Aqui tem métodos que vocês podem mudar de acordo a sua necessidade…

1- Criar um método PHP chamado f_forma_array_campos($ar_campos) Recebendo um argumento chamado ar_campos

$ar_array = explode(",", $ar_campos); return $ar_array;

2- Criar um metodo PHP chamado f_mostrar_campos($ar_campos) Recebendo um argumento chamado ar_campos

if(isset($ar_campos)) { if(count($ar_campos) > 0) { foreach ($ar_campos as $campo) { $this->NM_cmp_hidden[$campo] = "on"; if (!isset($this->NM_ajax_event) || !$this->NM_ajax_event) { $_SESSION['sc_session'][$this->Ini->sc_page]['grid_view_rpt_cargas_uno']['php_cmp_sel'][$campo] = "on"; } } } }

3- Criar um metodo PHP chamado f_oculta_campo($ar_campos) Recebendo um argumento chamado ar_campos

if(isset($ar_campos)) { if(count($ar_campos) > 0) { foreach ($ar_campos as $campo) { $this->NM_cmp_hidden[$campo] = "off"; if (!isset($this->NM_ajax_event) || !$this->NM_ajax_event) { $_SESSION['sc_session'][$this->Ini->sc_page]['grid_view_rpt_cargas_uno']['php_cmp_sel'][$campo] = "off"; } } } }

4- Basta utilizá-los como querer, mais como?? segue exemplo, no meu caso coloquei no OnSriptInt para cada tipo de quebra ele ocula y mostra determinados campos

[code]$var_campos_ocultar = array();

switch ( sc_get_groupby_rule() ) {
case “empresa”:
[titulo] = “Reporte de Cargas X Empresas”;
f_oculta_campo(f_forma_array_campos(“nombre_cliente”)); //si eu quero ocultar 1 campo apenas coloco ele dentro da chamada
f_mostrar_campos(f_forma_array_campos(“nro_chapa,descripcion_producto”)); //si eu quero ocultar mais de um campo coloco entre , (virgulas) os campos
break;
case “empresa_chapa”:
[titulo] = “Reporte de Cargas X Empresas X Chapas”;
f_oculta_campo(f_forma_array_campos(“nombre_cliente,nro_chapa”));
f_mostrar_campos(f_forma_array_campos(“descripcion_producto”));
break;
case “chapa”:
[titulo] = “Reporte de Cargas X Chapas”;
f_oculta_campo(f_forma_array_campos(“nro_chapa”));
f_mostrar_campos(f_forma_array_campos(“nombre_cliente,descripcion_producto”));
break;
case “combustible”:
[titulo] = “Reporte de Cargas X Tipo de Combustible”;
f_oculta_campo(f_forma_array_campos(“descripcion_producto”));
f_mostrar_campos(f_forma_array_campos(“nombre_cliente,nro_chapa”));
break;
case “combustible_empresa”:
[titulo] = “Reporte de Cargas X Empresa X Tipo de Combustible”;
f_oculta_campo(f_forma_array_campos(“descripcion_producto,nombre_cliente”));
f_mostrar_campos(f_forma_array_campos(“nro_chapa”));
break;
default:
[titulo] = “Reporte de Cargas”;
f_mostrar_campos(f_forma_array_campos(“descripcion_producto,nombre_cliente,nro_chapa”));
break;
}[/code]

Espero que sirva para mais alguém…

Muito bom William.

Muito bom.

valeu Willian! muito bom!

obrigado…

Parabéns Willian muito obrigado por compartilhar tenha certeza de que será de grande valia para todos aqui do fórum.

Precisei fazer hoje isso, ai vi e testei que no SC 9.6 tem a macro sc_field_init_off

Consultas Grids:
Colocar no Evento onApplicationInit:

sc_field_init_off({PedidoID}, {ValorTotal});

Funciona 100%.

1 Curtida