Inserir vários registros de uma vez

(jcesarml) #1

Boa tarde, alguém sabe como eu posso inserir vários registros de uma vez?
Eu preciso de um formulário que eu informe quantas mensalidades e o valor para um cliente cadastrado no sistema.

Agradeço.

(Cleyton Euler) #2

Formulário multiplos registros ou um controle com estrutura de repetição inserindo na tabela.

(jcesarml) #3

Agradeço pela atenção Cleiton, realmente estou tentando com formulário multiregistros, mas não sei como inserir 10 registros de uma vez sem ter que clicar em inserir um a um, sobre o controle descrito o que seria essa alternativa?

(rrma) #4

Fica complicado sem entender o contexto do form, mas sugiro que dê uma lida no help da macro sc_exec_sql, aí fica a seu critério em qual evento disparar as inclusões.
Se precisar de mais ajuda nos dê detalhes da sua necessidade.
Um abraço.
Rodrigo

(jcesarml) #5

Um cliente A faz uma compra, sendo que no formulário prestações eu preciso que o sistema gere por exemplo: 30 mensalidades para o cliente A, seriam 30 registros inseridos na tabela, todos de uma vez.
Agradeço.

(Cleyton Euler) #6

Parceiro,

Faz isso com alguma estrutura de repetição do PHP.

var_cliente = 1
var_parcelas = 30
var_parcela_valor = 30

enquanto var_parcelas for igual a 30

insere um registro no banco para o cliente 1 com o valor 30
decremeta var_parcelas

próximo registro

Veja as estruturas de repetição do PHP e use a que vc achar melhor para o seu código.

(jcesarml) #7

Agradeço, mas teria um código de exmplo para demontrar a sua explicação? Agradeço.

(Cleyton Euler) #8

Posta como está tentando fazer, que ajudamos!!!

(jcesarml) #9

OK. Eu criei um formulário mestre, dentro deste eu criei um formulário Mestre/detalhe multiregistro que, dentro de um frame, cria parcela para este cliente do formulário principal. Até aqui está funcionando perfeitamente. Tem um botão dentro desse frame para criar a parcela, mas eu preciso de um botão que pergunte quantas parcelas e automaticamente já abra os registros com os vencimentos de 30 em 30 dias. Exempo: Adicione 10 registros com vctos em 01/02/2011, 01/03/2011, etc.
Hoje eu preciso adicionar 10 registros um a um de forma braçal.

Agradeço.

(rrma) #10

Usa a macro macro sc_exec_sql no onAfterInsert do form mestre pra inserir os registros na tabela detalhe, daí quando abrir o form detalhe os registros já estarão lá. Pra fazer o calculo dos vencimentos vc usa a macro sc_date.

(Arquimedes) #11

ola, estou com o mesmo problema, gostaria de sabe se voce conseguio a solução

(jcesarml) #12

Coema, até hoje não consegui a solução. Eu gostaria de ver algum exemplo com essas idéias citadas para eu tentar entender, mas não consegui nenhum.

(Cleyton Euler) #13

Vamos supor que vc vendeu um produto em 10x para um cliente.

Vc escreve um código que divide o valor da venda por 10. Depois vc manda gravar 10 vezes um registro na tabela contas a receber, por exemplo, com o valor da parcela e os dados complementares, cliente, data de vencimento, etc. Para isto vc usar uma estrutura de repetição.

Então vc precisa:
Dividir o valor total da venda por 10
Gravar na tabela respectiva 10 registros, incrementando a data de vencimento

Como ja foi dito, vc vai trabalhar com sc_exec_sql, sc_date e para gravar em lote, acho que o laço FOR é o ideal.

(jcesarml) #14

Agradeço Cleyton, vou quebrar um pouquinho a cabeça e tentar fazer esse código. Obrigadão.

(George Carvalho) #15

Amigo, a lógica é a mesma do post http://www.netmake.com.br/forum/index.php?topic=2945.0

É só adaptar para sua necessidade, em vez de enviar o e-mail grave o registro.

(jcesarml) #16

Graças a ajuda o George Carvalho resolvi com o código abaixo.
Alterei conforme minhas necessidades e chamei o método com um botão no formulário mestre.

//ds_parcela - pega os valores da tabela de cadastro

sc_lookup(ds_parcela, “SELECT valor_liq_cadastro, venc1_cadastro, PLANO_ID, qtde_mens_cadastro from cadastro WHERE CADASTRO_ID = {CADASTRO_ID}”);

//baseado no ds_parcela, informa os seguintes valores aos campos

$valor = {ds_parcela[0][0]}; //valor da mensalidade
$vdata = {ds_parcela[0][1]}; //primeiro vencimento
$plano = {ds_parcela[0][2]}; //plano do contrato
$parc = {ds_parcela[0][3]}; // número de parcelas

// mensagem de erro

if(false === {ds_parcela}){
sc_error_message(“Erro no acesso a tabela CADASTRO!” . {ds_mensa_erro});
return;
}

//Gera parcelas - cria chave primaria da tabela cobranca

sc_lookup(ds_parc_id,“select max(cobranca_id_cob)+1 from cobranca”);

if(false === {ds_parc_id}){
sc_error_message(“Erro no acesso da tabela de cobranca!” . {ds_parc_id_erro});
return;
}

if({ds_parc_id[0][0]} == 0){
$id = 1;
}else{
$id={ds_parc_id[0][0]};
}

$laco = 1; //determina a qtde de loops
$mes = 1;
$vdata1 = sc_date ($vdata, “aaaa-mm-dd”, “-”, 0, $mes, 0); //faz o sistema gerar parcelas a partir da data de vencimento informada no formulário cadastral e não 30 dias após
while($laco <= $parc){
$venc = sc_date ($vdata1, “aaaa-mm-dd”, “+”, 0, $mes, 0); //determina o valor do $laco

//INCREMENTA O MES

  sc_exec_sql("insert into cobranca
               values('$id','{CADASTRO_ID}','$venc','$valor','1','',Null,'{PLANO_ID}',Null,Null,'$valor',Null)");
                                 
           
  $id++;
  $laco++;
  $mes++;

}

Obrigado George

(George Carvalho) #17

Por nada.