Usar For no sc_lookup para incluir todos os registros?

(Fernando.Oliveira) #1

Na minha aplicacao master/detail ao atualizar o status preciso fazer um lookup para trazer os dados e depois inserir em uma tabela(movimento). sendo que os dados sao os do detail e preciso inserir todas as linhas ou seja se odetail conter 5 produdos preciso incluir 5 linhas na tabela(movimento). como posso fazer isso? tenho o seguinte codigo com o FOR mais so esta incluindo o 1 registro do detail o restante nao inclui.

sc_lookup(dsC,“select status_pedido from pedidos where id_pedido = {id_pedido}”);
$status = {dsC[0][0]};
if($status == ‘V’){
sc_lookup(ds,“select id_produto,id_unidade,qtd_itens from pedidos_itens where id_pedido = {id_pedido}”);

{
$contador= count({ds});
for($x=0;$x<$contador;$x++)
{
$id_produto = {ds[$x][0]};
$id_unidade = {ds[$x][1]};
$qtd_itens = {ds[$x][2]};
{
sc_lookup(dsp,“select estoque_atual from produtos where id_produto = ‘$id_produto’”);
{
$contadorA= count({dsp});
for($z=0;$z<$contadorA;$z++)
{
$estoque_atual = {dsp[$z][0]};

$atualiza = $estoque_atual + $qtd_itens;

sc_exec_sql(“UPDATE produtos SET estoque_atual = $atualiza WHERE id_produto = ‘$id_produto’”);
sc_exec_sql(“INSERT INTO estoque_movimento (id_cliente,data_movimento, id_produto, quantidade,unidade,evento,usuario,dt_usuario,qtd_atual)
VALUES({id_cliente},now(), ‘$id_produto’, $qtd_itens,’$id_unidade’,‘3’,’$usuario’,now(),’$atualiza’)”);
}
}
}
}
}
}

if($status <> ‘B’)
{
sc_exec_sql(“UPDATE clientes SET dt_ultima_compra = now() WHERE id_cliente = {id_cliente}”);
}

ESTE CODIGO ESTA EM UM METODO E O MESMO ESTA DENTRO DO ONAFTERUPDATE.

(Fernando.Oliveira) #2

RESOLVIDO!!!

(Haroldo) #3

POSTE SUA SOLUÇÃO. PODE SER DE AJUDA A OUTROS.

(robertobru) #4

Peço a gentileza de mostrar a solução que você encontrou.
Obrigado

(rayfcrols) #5

Estou a procura tmb de um solução do tipo

(Reação Web) #6

Me ajudaria se voce tivesse postado a solução!

(Fernando.Oliveira) #7

Neste caso foi feito o select que estava dentro do for junto do principal.

Obs.: Lembrando esta forma que estava no script postado, funcionava e depois de uma atualização do SC parou de funcionar.

uma outra opção é tentar usar o sc_select. Não sei se essa funciona corretamente.

(wanderlanlima) #8

Fiz assim:

No Botão “Fecha Nota” no master:

//seleciona os itens (produtos da nota)
sc_select(dsprodutos, “select id_produto,id_unidade,qtd_itens from pedidos_itens where id_pedido = {id_pedido}”);

//laço para incluir os produtos
while (!$dsprodutos->EOF)
{
$produto = $dsprodutos->fields[0];
$unidade = $dsprodutos->fields[1];
$qtd = $dsprodutos->fields[2];

//verifica se o produto já existe no estoque
sc_lookup(dsEstoque, “select estoque_atual from produtos where id_produto = ‘$produto’”);

if (empty({dsEstoque})) //se não existir inclui com a quantidade
  {
   //pega o id maior
   sc_lookup(dsNovoEstoque, "select max(est_codigo) from estoque");

   $registros = {dsNovoEstoque}[0][0];
   
   //se estoque vazio
   if ($registros == null)
     {
      $registros = 0;
     }
   
   // gera novo id
   $registros = $registros + 1;
    
   //insere o novo produto                
   sc_exec_sql("INSERT INTO amx.estoque
        	(est_codigo, est_qtd, pro_codigo, est_unidade)
            VALUES
	         ($registros, $qtd, $produto, $unidade)");
  }
else 
  {
   //se não incrementa a quantidade do produto já existente em estque       
   sc_exec_sql("UPDATE amx.estoque
               SET data_alteracao = now(), 
	           est_qtd = est_qtd + $qtd, 
	           usuario_alteracao = '[var_usuario_amx]'
             WHERE (pro_codigo = $produto) 
	       AND (nua_codigo = $nuance)
	       AND (crd_codigo = 8)
                   AND (cel_codigo = 8)
                   AND (set_codigo = 57)");
  }      

//vai para o proximo
$dsprodutos->MoveNext();
}
//fecha o dataset
$dsprodutos->Close();