Autor Tópico: Duplicar pedido Mestre/Detalhe  (Lida 5321 vezes)

zegitz

  • Novato
  • *
  • Mensagens: 10
Duplicar pedido Mestre/Detalhe
« Online: Fevereiro 04, 2010, 03:21:50 pm »
Olá Pessoal ,

Minha dúvida é a seguinte:

Hoje uso um  formulário Mestre/Detalhe pra gerar alguns pedidos. Gostaria de agilizar o processo de preenchimento do itens no form detalhe criando um campo que busque pelo ID do pedido todos os itens de um pedido anterior e insira eles neste novo pedido. Como posso fazer isso?

Agradeço qualquer ajuda.

Rodrigo Lins

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 504
    • Overalt I.T
Re: Duplicar pedido Mestre/Detalhe
« Responder #1 Online: Fevereiro 08, 2010, 10:43:50 am »
Bom Dia,

Você pode utilizar um evento ajax do tipo onchange no campo do código do Pedido, e fazer uso da macro sc_lookup neste evento, onde você irá fazer um select no determinado pedido e depois atribuir aos demais campos as informações retornadas.

Ex.

sc_lookup(verifica_pedido,"SELECT produto, valor FROM tb_itens_pedido WHERE Cod_Pedido = {Cod_Pedido}");

if(!empty({verifica_pedido})) {

     {campo_produto} = {verifica_pedido[0][0]};
     {campo_valor} = {verifica_pedido[0][1]};

}


Espero ter ajudado.

Rodrigo Lins.

zegitz

  • Novato
  • *
  • Mensagens: 10
Re: Duplicar pedido Mestre/Detalhe
« Responder #2 Online: Fevereiro 08, 2010, 04:49:26 pm »
Obrigado , vou tentar desenvolver em cima dessa sua ideia.

Valeu pena ajuda!!!


José Gitz

rayfcrols

  • Intermediário
  • ***
  • Mensagens: 193
Re: Duplicar pedido Mestre/Detalhe
« Responder #3 Online: Março 03, 2010, 09:30:06 am »
Pessoal estou tentando desenvolver um rotina para a duplicação do M/D e não esta funcionado de maneira alguma eis o meu codigo que foi adicionado no afterInsert do mestre :


sc_lookup(verifica_lanc,"SELECT cod_prof,prolabore_prof,especialidade_prof FROM tb_lancamentos_prof WHERE num_lanc = {n_lanc_base}");

if(empty({verifica_lanc})) {
sc_error_message("Tem alguma coisa errada,nenhum valor foi retornado pelo banco.<BR>");
}else{
     {cod_prof} = {verifica_lanc [0][0]};
     {prolabore_prof} = {verifica_lanc [0][1]};
     {especialidade_prof} = {verifica_lanc [0][2]};   
     sc_exec_sql("INSERT INTO tb_lancamentos_prof (cod_prof,prolabore_prof,especialidade_prof) VALUES ({cod_prof},{prolabore_prof},{especialidade_prof})");
 } 

OBS: lembrando que n_lanc_base é um campo no form pai/mestre em que eu informo o n° do pedido a importar, e que no sc_sql_exec esta dando o seguinte erro:

Erro ao acessar o banco de dados
[Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated.
INSERT INTO tb_lancamentos_prof (cod_prof,prolabore_prof,especialidade_prof) VALUES (371 ,832.95 ,5 )

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #4 Online: Março 03, 2010, 09:39:55 am »
Seus campos cod_prof, prolabore_prof, especialidade_prof são numericos?

George Carvalho
George Carvalho
Porto de Galinhas/PE

rayfcrols

  • Intermediário
  • ***
  • Mensagens: 193
Re: Duplicar pedido Mestre/Detalhe
« Responder #5 Online: Março 03, 2010, 09:59:51 am »
Sim são, cod_prof, especialidade, prolabore é Money(currency)



Seus campos cod_prof, prolabore_prof, especialidade_prof são numericos?

George Carvalho

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #6 Online: Março 03, 2010, 10:20:03 am »
Você esta tentando gravar um registro com os mesmos dados do registro lido, não ta dando duplicidade?

George Carvalho
George Carvalho
Porto de Galinhas/PE

rayfcrols

  • Intermediário
  • ***
  • Mensagens: 193
Re: Duplicar pedido Mestre/Detalhe
« Responder #7 Online: Março 03, 2010, 12:03:31 pm »
Você esta tentando gravar um registro com os mesmos dados do registro lido, não ta dando duplicidade?

George Carvalho

Não, é prq ainda não incrementei a função do gravar o num_lanc novo, cara .. muito obrigado por ta acompanhando este topico, to tentando de tudo pra resolver este meu problema, já consequi fazer com que grave no banco de dados mais a função só esta gravando o primeiro registro tenho que dar alguma especie de loob que não sei como fazer, meu codigo esta assim :

sc_lookup(resultado, "
SELECT
   cod_prof,
   prolabore_prof,
   obs_prof,
   especialidade_prof
FROM
   tb_lancamentos_prof
WHERE
   (num_lanc = {n_lanc_base})
");
$resl = {resultado [0][0]};
echo "<script> alert($resl); </script>";


/* Erro no lookup */
if (FALSE === {resultado}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({resultado})) { /* EOF */
   sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {
     {num_lanc} = {num_lanc_temp};
     {cod_prof} = {resultado [0][0]};
     {prolabore_prof} = {resultado [0][1]};
     {obs_prof} = {resultado [0][2]};
     {especialidade_prof} = {resultado [0][3]};   
sc_exec_sql("INSERT INTO tb_lancamentos_prof (num_lanc,cod_prof,prolabore_prof,obs_prof,especialidade_prof) VALUES ({num_lanc},{cod_prof},{prolabore_prof},'{obs_prof}',{especialidade_prof})");   
}

George Carvalho

  • Expert
  • *****
  • Mensagens: 1373
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #8 Online: Março 03, 2010, 02:44:36 pm »
Não sei quem vai controlar o loop, tenho uma rotina que gera um loop baseado na quantidade de parcelas, segue abaixo e espero que sirva como exemplo.

$id = 0;

sc_select(dataset1, select convenio,autorizacao,matricula,parcelas,valor_parcela,data_venda from clientes_vendas);
   
if ({dataset1} === false)
{
    echo "Erro de acesso a tabela de Vendas = " . {dataset1_erro};
}else  {
  while (!$dataset1->EOF)
  {
    $convenio      = $dataset1->fields[0];
    $autorizacao   = $dataset1->fields[1];
    $matricula      = $dataset1->fields[2];
    $parcelas       = $dataset1->fields[3];
    $valor_parcela = $dataset1->fields[4];

    $laco = 1;
    $mes = 2;
   
    while ($laco <= $parcelas) //  QTD DE LOOP
    {
      $venc = sc_date ($dataset1->fields[5], "aaaa-mm-dd", "+", 0, $mes, 0); //INCREMENTA O MES
      $id++;
      sc_exec_sql("Insert into clientes_parcelas values('$id','$convenio','$autorizacao','$matricula','$parcelas','$valor_parcela','$laco','$venc',0)");
      $laco++;
      $mes++;
    } 
  $dataset1->MoveNext();
  }
$dataset1->Close();
}
« Última modificação: Março 03, 2010, 02:50:14 pm por gcarvalho »
George Carvalho
Porto de Galinhas/PE

rayfcrols

  • Intermediário
  • ***
  • Mensagens: 193
Re: Duplicar pedido Mestre/Detalhe
« Responder #9 Online: Março 03, 2010, 04:36:34 pm »
Valeu gcarvalho v/c ajudou muito mais eu já tinha conseguido que rotina funcione, só não tinha tido tempo de  ter te reportado antes.
 Valeu mesmo,

Para os Interessado esta assim a minha solução:

1 - No Evento eu lanço o num_lanc como variável global e chamo a função de importar o lançamento;
2 - a função importa_lancamento encontra-se assim:

sc_lookup(resultado, "
SELECT
   cod_prof,
   prolabore_prof,
   especialidade_prof
FROM
   tb_lancamentos_prof
WHERE
   (num_lanc = {n_lanc_base})
");

/* Erro no lookup */
if (FALSE === {resultado}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({resultado})) { /* EOF */
   sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {
for ($i = 0; $i < $conta; $i++) { 
     {num_lanc} = [num_lanc_temp];
     {cod_prof} = {resultado [$i][0]};
     {prolabore_prof} = {resultado [$i][1]};
     {especialidade_prof} = {resultado [$i][2]};
   sc_exec_sql("INSERT INTO tb_lancamentos_prof (num_lanc,cod_prof,prolabore_prof,especialidade_prof) VALUES ({num_lanc},{cod_prof},{prolabore_prof},{especialidade_prof})");   
   }
}



Esta rotina básica esta funcionado, falta dar alguns refinamentos e outros teste mais esta funcionado como desejado. 
« Última modificação: Março 03, 2010, 04:38:32 pm por rayfcrols »

zegitz

  • Novato
  • *
  • Mensagens: 10
Re: Duplicar pedido Mestre/Detalhe
« Responder #10 Online: Maio 28, 2010, 06:26:09 pm »
ae pessoal consegui resolver o meu problema com esse codigo:

sc_confirm(Confirma a duplicação deste pedido?);
sc_exec_sql("INSERT INTO adm_pedidos (FabricaId,ValorPedido,Feito,Ref,Cond,Loja,DataPedido,Status)
VALUES('[FabricaId]','[ValorPedido]','[Feito]','[Ref]','[Cond]','CD',now(),'AGUARDANDO')");

sc_lookup(ped,"select PedidoID,Ref,Item,Cor,Tam,Qnt,PrecoUnit,Total from adm_pedido_itens where PedidoID = [PedidoID]");

sc_lookup(novoid, "SELECT max(PedidoID) FROM adm_pedidos");

$novoid = {novoid[0][0]};

$y = count({ped});
for($x=0;$x<$y;$x++){

$PedidoID = {ped[$x][0]};
$Ref = {ped[$x][1]};
$Item = {ped[$x][2]};
$Cor = {ped[$x][3]};
$Tam = {ped[$x][4]};
$Qnt = (int){ped[$x][5]};
$PrecoUnit = {ped[$x][6]};
$Total = {ped[$x][7]};

sc_exec_sql("INSERT INTO adm_pedido_itens (PedidoID,Ref,Item,Cor,Tam,Qnt,PrecoUnit,Total)
VALUES('$novoid','$Ref','$Item','$Cor','$Tam','$Qnt','$PrecoUnit','$Total')");
}
echo "<script>alert('Pedido $novoid criado com Sucesso!');</script>";

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #11 Online: Outubro 18, 2010, 05:09:49 pm »
Gostaria de redirecionar para o formulario que ele criou (IdNovoPedido) após o botão OK.

Tentei sc_redir mais deu erro :

sc_lookup(ult_id,"SELECT max(id) from adm_os");
$max_id=$ult_id[0][0];
sc_redir(cad_os_ser_novo.php,{id}="$max_id");

ae pessoal consegui resolver o meu problema com esse codigo:

sc_confirm(Confirma a duplicação deste pedido?);
sc_exec_sql("INSERT INTO adm_pedidos (FabricaId,ValorPedido,Feito,Ref,Cond,Loja,DataPedido,Status)
VALUES('[FabricaId]','[ValorPedido]','[Feito]','[Ref]','[Cond]','CD',now(),'AGUARDANDO')");

sc_lookup(ped,"select PedidoID,Ref,Item,Cor,Tam,Qnt,PrecoUnit,Total from adm_pedido_itens where PedidoID = [PedidoID]");

sc_lookup(novoid, "SELECT max(PedidoID) FROM adm_pedidos");

$novoid = {novoid[0][0]};

$y = count({ped});
for($x=0;$x<$y;$x++){

$PedidoID = {ped[$x][0]};
$Ref = {ped[$x][1]};
$Item = {ped[$x][2]};
$Cor = {ped[$x][3]};
$Tam = {ped[$x][4]};
$Qnt = (int){ped[$x][5]};
$PrecoUnit = {ped[$x][6]};
$Total = {ped[$x][7]};

sc_exec_sql("INSERT INTO adm_pedido_itens (PedidoID,Ref,Item,Cor,Tam,Qnt,PrecoUnit,Total)
VALUES('$novoid','$Ref','$Item','$Cor','$Tam','$Qnt','$PrecoUnit','$Total')");
}
echo "<script>alert('Pedido $novoid criado com Sucesso!');</script>";

Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Diogo Toscano

  • Administrator
  • Expert
  • *****
  • Mensagens: 590
    • :: ScriptCase ::
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #12 Online: Outubro 18, 2010, 06:15:01 pm »
sc_redir(cad_os_ser_novo.php,id={ult_id[0][0]});

?

Eduardo Alves

  • Avançado
  • ****
  • Mensagens: 262
    • SLords Informatica
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #13 Online: Outubro 18, 2010, 06:24:00 pm »
perdão.. isso foi um teste que eu fiz...na verdade está assim

{
sc_lookup(ult_id, "SELECT max(id) FROM adm_os");
echo    $maximo_id=$ult_id[0][0];
}

sc_redir(cad_os_ser_novo.php,?id="$maximo_id"); 

tentei colocar um _blank para ver o que estava vindo e deu o seguinte erro:

{
sc_lookup(ult_id, "SELECT max(id) FROM adm_os");
echo    $maximo_id=$ult_id[0][0];
sc_redir(cad_os_ser_novo.php,?id="$maximo_id", "_blank");


}


Notice: Undefined variable: nmgp_url_saida in C:\Arquivos de programas\netmake\v5\wwwroot\scriptcase\app\ERP_CENTRAXI\cad_os_ser_novo\cad_os_ser_novo.php on line 1387

o que pode ser isso ???

  
sc_redir(cad_os_ser_novo.php,id={ult_id[0][0]});

?
« Última modificação: Outubro 18, 2010, 07:08:51 pm por Eduardo Alves »
Eduardo Alves
Gestor de TI e Segurança de Dados
Tel: (11) 8400-0224 (TIM) – Nextel: Id: 5 * 4522
email: analista@slords.com.br skype: analista.slords
www.slords.com.br

Diogo Toscano

  • Administrator
  • Expert
  • *****
  • Mensagens: 590
    • :: ScriptCase ::
    • Email
Re: Duplicar pedido Mestre/Detalhe
« Responder #14 Online: Outubro 18, 2010, 07:21:11 pm »
sc_redir(cad_os_ser_novo.php,?id=$maximo_id);

?

sem aspas na variavel?