(RESOLVIDO) - Copiar Registro com RUN

Prezados, nem lembro se já perguntei.
Mas preciso em uma determinada lista pegar alguns registros e enviar para um formulário mestre/detalhe…
como armazeno essa Array ?
Na minha Grid tenho vários produtos de um determinado centro de custo… logo já tenho a informação básica do form mestre (centro de custo) e os produtos que irão para o detalhe…
HELP… nao estou enxergando como fazer isso.

Jean,

Acho que com o botão RUN na grid você vai escolher o que precisa pra enviar… Daí é só gravar nas tabelas (mestre/detalhe).

Sim… no entanto quero entender a lógica do funcionamento…

Cenário:

Listo 100 produtos do centro de custo “Obra 01”
Desses 100 produtos escolho 30 produtos com suas respectivas quantidades.

Ao acionar o RUN Envio o codido do centro de custo “Obra 01” para o formulário Compras.
Envio simultaneamente os produtos com suas respectivas quantidade para o form Detalhe_compras.

Nem faço ideia de como o RUN transporta isso do grid para tabela…

Dentro de um dos métodos do botão RUN (não me lembro agora, não estou na minha máquina), você vai usar o INSERT pra mandar para as tabelas.

Consegui fazer um POG aqui…
estou publicando no meu canal do youtube…
http://www.youtube.com/channel/UCW64zxaiHKt3E1P_nVdH1aA

alguem aí pra dar uma dica de como melhorar isso ?

Jean…

assisti seu video… quer melhorar o processo do botão run?

Conselho: Não faça inserts na onrecord, faça tudo na onfinsh.

Como ?

OnScriptInit: //preparar variáveis

[iw]=Array(); //-> Variaveis global(Sessão: Não, Get: Não, Post:Não, Opcional: Sim, Saída).
[iw][“i”]=0; // Iniciando meu contador de registros selecionados no select

Botão Run/OnRecord: // Executado para cada registro selecionado ao clicar no botão run.

$_i=[iw][“i”]=[iw][“i”]+1; //Mais um no contador
[iw][$_i][“valor”]={Valor}; //Guardando campos do registro selecionado
[iw][$_i][“desc”]={Descricao};
[iw][$_i][“fornec”]={id_fornecedor};
[iw][$_i][“empresa”]={empresaid};

Botão Run/OnFinish: // Executado por último:

$_values="";
IF (ISSET($_REQUEST[‘PHPSESSID’])) $_phpsessid=@$_REQUEST[‘PHPSESSID’];
IF (!ISSET($_phpsessid)||EMPTY($_phpsessid)) $_phpsessid=session_id(); //pegando sessão do php

for ($_i = 1; $_i <= [iw][“i”]; $_i++) { // montando os values da instrução INSERT.
$_values.="(’".$_phpsessid."’,".[iw][$_i][“empresa”].",".[iw][$_i][“fornec”].",".[iw][$_i][“valor”].",’".[iw][$_i][“desc”]."’,‘P’),";
}
$_values=trim($_values,","); //removendo as virgulas externas

$_ins="INSERT INTO fin_recibo (sessao,empresa_id,clifor_id,valor,descricao,tipo) VALUES ".$_values; // inserindo todos os registros selecionados
sc_exec_sql($_ins);

sc_redir(recibo_all_pdf.php,"","_blank"); // desviando para aplicação pdf para imprimir os registros inseridos.

//aqui vc faz todo seu processo, grava o mestre, pego seu id, insere seus itens e pode até desviar direto para o form mestre detalhe.

Ok… farei essa implementação… desculpa a POG, mas em quase 2 anos de SC é a primeira APP que crio usando o RUN…logo não sei nada sobre ele… preciso entender a lógica do mesmo…
na implementação que propus vou ter o risco da concorrencia de usuario visto que gero primeiro a tabela filho…por isso pedi dicas de como fazer o uso correto do RUN.

Obrigado por enquanto.

está ocorrendo um erro que nao estou sabendo corrigir.

$_values="";

for ($_i = 1; $_i <= [iw][“i”]; $_i++) { // montando os values da instrução INSERT.
$_values.="(’".[iw][$_i][“produto”].",".[iw][$_i][“especificacao”].",".[iw][$_i][“quantidade”].",".[iw][$_i][“quantidade”].",".$_rm.",".[iw][$_i][“unidade”]."’),";
}
$_values=trim($_values,","); //removendo as virgulas externas

$_ins="INSERT INTO tblDetalheRM (cod_compos_compon,id_descricao_componente,quantidade,dtqcomprar,idrm,codunidade) VALUES ".$_values; // inserindo todos os registros selecionados
sc_exec_sql($_ins);

Observe que os valores em Azul parecem duplicados mas nao… tenho que mandar o valor de um campo para dois campos.

está gerando o seguinte erro;

ERRO
Erro ao acessar o banco de dados
SQLState: 21S01 Error Code: 109 Message: [Microsoft][SQL Server Native Client 10.0][SQL Server]Existem mais colunas na instru‡Æo INSERT do que valores especificados na cl usula VALUES. O n£mero de valores da cl usula VALUES deve corresponder ao n£mero de colunas especificado na instru‡Æo INSERT.
INSERT INTO tblDetalheRM (cod_compos_compon,id_descricao_componente,quantidade,dtqcomprar,idrm,codunidade) VALUES (‘19,TESTE,10.00,10.00,129,12’)…esta retornando os valores que preciso mas ainda assim dá o erro.

OBS: a tabela de destino no banco tem varios outros campos…tenho que me referir a eles tb ?

Corrigido.

Não observei o tipo de dado… estava esquecendo das aspas simples em tipo de dado texto.

Em alguns minutos estará postado o vídeo com a melhoria .

http://www.youtube.com/channel/UCW64zxaiHKt3E1P_nVdH1aA

Nossa muito boa dia… Parabéns a todos.