Duplicar pedido Mestre/Detalhe

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.

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.

Obrigado , vou tentar desenvolver em cima dessa sua ideia.

Valeu pena ajuda!!!

José Gitz

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.
”);
}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 )

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

George Carvalho

Sim são, cod_prof, especialidade, prolabore é Money(currency)

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 "";

/* Erro no lookup /
if (FALSE === {resultado}) {
sc_error_message(“Ocorreu um erro no acesso ao banco de dados.
”);
}
elseif (empty({resultado})) { /
EOF */
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
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})”);
}

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();
}

[b]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:[/b]
[i]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.
”);
}
elseif (empty({resultado})) { /
EOF */
sc_error_message(“Nenhum valor foi retornado pelo banco.
”);
}
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})”);
}
}
[/i]

Esta rotina básica esta funcionado, falta dar alguns refinamentos e outros teste mais esta funcionado como desejado.

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 “”;

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");

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

?

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=$maximo_id);

?

sem aspas na variavel?

tem que tirar as aspas ???

testasse?

testei tb… com aspas sem aspas, aspas simples ’ … não mais por onde testar… tirei a interrogação do id e ele direcionou para o id correto, mais dá varios erros em varios campos obrigatorios… se voce preenche os mesmos, ainda acusa os erro… vlw pela atenção que está dando

Testando um parâmetro manual funciona?

sc_redir(cad_os_ser_novo.php,id=1);

Fala brother…

ai deu certo… mandando para um id que ja existe redireciona certinho… o negocio está então no max(id), vou dar mais uma olhada nesse parametro e depois retorno se der certo ou errado os testes… obrigado e até +