Como você faria? [Resolvido]

(Heraclito) #1

To com a seguinte dificuldade:

Tenho uma tabela de caixas e uma tabela de locais onde estas caixas devem ficar (prateleira, estante…)

o que to querendo é permitir que o usuário selecione num combobox ou um campo de captura o local pra onde as caixas vão, e numa lista de caixas selecionar as que irão para esse local.

to tentando usar uma Consulta com um botão “Run” para percorrer a lista de caixas selecionadas, mas não consigo permitir que o usuário defina o destino antes.

Alguém tem alguma sugestão?


Solução: Utilizei um formulário do tipo consulta exibindo ao mesmo tempo o filtro e o grid, adicionei no formulário do filtro um campo DESTINO e a função sc_set_global() para para usar o valor do campo destino no botão Run do Grid. O histórico da movimentação armazenei na minha tabela de logs convencional.

Grato aos que ajudaram, inclusive ao Haroldo que passou a dica da função sc_set_global().

(Arquimedes) #2

voce tem que cria uma nova tabela de movimento
nessa tabela informar que a caixa veio de um lugar e esta indo para outro com data e que usuario movimentou essa caixa, posteriomente voce ira utilizar uma consulta de movimento da dessas caixa

tabela movimento
codigo --------- pk tabela
lugar_movimento-- codigo lugar
lugar_destino ----codigo lugar
data_movimento – date currante _date
usuario_movimento-- codigo_usuario sessao usuario

voce tem que cria um mestre detalhe de destino de caixa
voce cria um formulario com os dados da caixa
depois cria um gride com os dado da tabela movimento

(Cleyton Euler) #3

Talvez um controle antes desta grid com a lista de destinos numa select e no onValidate vc levanta uma global com este destino e chame a grid, via ligação ou via sc_redir(). No código do botão RUN vc usa a global para referenciar o destino.

(Heraclito) #4

Grato ai pelo apoio,

Ainda não resolvi, to tentando fazer semelhante a este exemplo aqui que tem no site do SC http://www.netmake.com.br/sistemas/v5/exemplos_pt_br/grid12/grid12.php

no meu caso eu adicionei um campo formulário de filtro para selecionar o destino mas na rotina de processamento do botão “run” que adicionei no formulário consulta não to conseguindo ler o valor que está no campo destino no formulário filtro.

Alguém sabe como eu posso fazer isso?

(Heraclito) #5

coema:
Da forma que vc sugeriu eu tentei, entretanto não aparece o botão “run”, e nem como eu selecionar as caixas que pretendo mover. Na consulta original aparece, mas no formulário detalhe do mestre/detalhe não aparece. até mesmo o filtro não funciona. Talvez seja um bug.

(Arquimedes) #6

nao é bug, o que acontecendo é erro de logica, a ideia do botao é boa, mais o mestre detalhe seria bem melhor.
Pensa comigo, voce tem um local para onde irao varias caixas diferentes entao na razao estar 1 para N.
Para utilizar o mestre detalhe do scriptcase voce cria um formulario (para os lugares) , e cria uma gride (para movimentos) contendo um campo para receber o codigo dos lugares
eu faria assim

CREATE TABLE lugares (
codigo_lugar int(11) NOT NULL auto_increment,
nome_lugar varchar(50) NOT NULL,
PRIMARY KEY (codigo_lugar)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE caixas (
codigo_caixa int(11) NOT NULL auto_increment,
nome_caixa varchar(50) NOT NULL,
PRIMARY KEY (codigo_caixa)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE movimentos (
codigo int(11) NOT NULL auto_increment,
codigo_destino varchar(2) NOT NULL,
codigo_caixa varchar(2) NOT NULL,
data_movimento timestamp NOT NULL default ‘0000-00-00 00:00:00’ on update CURRENT_TIMESTAMP,
PRIMARY KEY (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

voce cria o formulario de LUGARES, vai em layout cria um bloco chamado movimento_caixas, depois voce cria uma gride de editavel da tabela MOVIMENTOS,
volta no formulario de LUGARES vai em mestre detalhes cria um novo mestre detalhe com o nome destinos_caixas, AI VEM O X DA QUESTAO no campo codigo da proxima tela voce seleciona o campo codigo do lado esquerdo e do lado direito voce seleciona codigo_destino, pronto estar feito sua ligacao mestre detalhe

link para fonte de pesquisa
http://www.scriptcase.com.br/site/samples/tutoriais/form/form38.php

(Heraclito) #7

coema grato pelas dicas ai,

da forma que vc explicou por ultimo teria como eu fazer um processamento em lote? pq existirão situações nas quais o usuário precisara mudar de lugar mais de 1000 caixas, por isso que to com a idéia de usar um mecanismo de filtro e processar todos os registros que estiverem selecionados no grid, o problema é que não to conseguindo ler o local de destino que ta no formulário filtro pra informar no rotina que executarei o update dentro do botão run;

(Arquimedes) #8

ao cadastrar uma caixa para um determinado lugar, voce estar defenindo que ele estar com um codigo de um lugar, ai na sua consulta voce teria apenas que fazer uma clausura where do tipo
where
codigo_destino = [lugar]
a consulta ira exibir todas as caixas pertencente a um determinado lugar exemplo;

                  tabela movimento
   campo caixa                campo lugar

–caixa de remedios – departamento de saude
–caixa de fraudas – departamento de saude
–caixa de pregos – departamento de manutencao

(Arquimedes) #9

a consula ficaria mais ou menos assim

select
l.descricao as Lugar
from
caixa c,
movimento m,
lugares
where
c.codigo = m.codigo_caixa and
l.codigo = m.codigo_destino and
m.codigo_destino =[lugar]