Criação de múltiplos registros por botão

Caros amigos,
A dúvida que tenho pode parecer já respondida em outros tópicos, porém não encontrei a resposta de maneira específica e juntei alguns pedaços dessas respostas para formular o código, mas sem êxito.

Necessidade: Permitir que o usuário ao selecionar um registro de contas a pagar, clique no botão Múltiplo e este crie registros na quantidade definida pelo número total de parcelas. Por exemplo, uma compra de um produto feita em dez parcelas. O usuário cadastra a primeira parcela, clica no botão Multiplo e o sistema deverá gravar as outras 9 parcelas restantes variando a data de vencimento.

Banco de dados: Postgree. Tabela com chave autoincremental (codigo).

Segue o código-fonte:

// Obter os valores do primeiro registro cadastrado

$codi = {codigo}; // codigo
$tipo = {tipo}; // tipo
$banc = ‘P’; // sempre P
$cent = {centro}; // codigo do centro de custo
$ncen = {nomecentro}; // nome do centro de custo
$cred = {credor}; // codigo do credor
$ncre = {nomecredor}; // nome do credor
$fatu = {fatura}; // fatura
$venc = {vencimento}; // data de vencimento
$paga = {pagamento}; // data de pagamento
$cheq = {cheque}; // cheque
$cont = {conta}; // conta bancária
$valr = {valorr}; // valor
$dola = {dolar}; // cotação do dolar
$valu = {valoru}; // valor em dolar
$desc = {descricao}; // descricao
$docu = {documento}; // os original quando a receber
$pars = {parcelas}; // numero total de parcelas
$parc = {parcela}; // numero da parcela
$form = {forma}; // forma de pagamento
$ultn = {codigo}; // repetir codigo

// Cria chave primaria da tabela ctaspagar apontando para o valor do campo código
// do último registro

sc_lookup(ds,“select max(codigo) from ctaspagar”);
$codi = ({ds}[0][0]);
echo “codigo = $codi”;
$codi++;
// neste ponto o echo apontou valor nulo exibindo: “codigo =” por consequência, não atribui um novo número para a próxima chave primária.

$parc = 1; //determina a qtde de loops
$mes = 1;
$vdata1 = sc_date ($venc, “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($parc <= $pars){
$venc = sc_date ($vdata1, “aaaa-mm-dd”, “+”, 0, $mes, 0); //determina o valor do $laco

//INCREMENTA O MES E GRAVA O REGISTRO

sc_exec_sql(“insert into ctaspagar values(’$codi’,’$tipo’,’$banc’,’$cent’,’$ncen’,’$cred’,’$ncre’,’$fatu’,’$venc’,’$paga’,’$cheq’,’$cont’,’$valr’,’$dola’,’$valu’,’$desc’,’$docu’,’$pars’,’$parc’,’$form’,’$ultn’)”);

$codi++; // incrementa o campo codigo
$parc++; // incrementa o próximo numero de parcela
$mes++; // incrementa o mês do próximo vencimento
}

Não acontece absolutamente nada e nem aparece erro em tela indicando algum erro de sintaxe, leitura de banco… nada. Agradeço por toda ajuda que vier!

Fiz todo este código dentro de um botão do tipo Ajax.
Também já fiz dentro de um botão do tipo PHP igualmente sem resultado algum.

Ola!
Ja experimentou colocar uns prints para ver se está realmente executando?
A “técnica” de debug que uso nestes casos é comentar o código e ir descomentando aos poucos.

Obrigado pela resposta, Fernando.
Eu utilizo justamente o echo, como está na fonte que postei. Por isso já descobri que ao clicar o tal botao ajax que criei a rotina não está indo pegar o último registro que é justamente a primeira função importante da rotina. Daí vêm as perguntas:

  1. É para ser um botão ajax? tem que ser php ou outro? Ou nenhum?
  2. Eu criei uma função chamada retorno() e a coloquei dentro de eventos OnApplicationInit e Onload justamente para pegar o último registro e também não executa, ou seja, há algo incorreto em alguma configuração do projeto? O que devo verificar? Lembrando que copiei a função justamente de um topico dito como resolvido.
  3. A sintaxe dos comandos está correta?
  4. Tem que ser colocado em outro tipo de Evento?
  5. É mais um erro do SC e por isso tem que ser usada outra forma?

Agradeço toda e qualquer ajuda.

Porque você não envia os dados para uma tabela temporária? Assim fica a saber sempre o resultado dos dados e podem ser posteriormente utilizados.

Obrigado pela resposta, Herberto.
Eu primeiro preciso saber porquê não é possível obter o último registro da tabela ctaspagar. Todo o resto vem exatamente depois disso. É isso o que estou errando. Você saberia me dizer onde na sintaxe ou outra coisa estou errado? Abraço!

Como pegar o último registro de uma tabela no banco de dados mySQL ?
Existem duas formas de retornar o último registro de uma tabela no banco de dados mySQL.

Pelo maior valor da chave primária da tabela ou campo ID, por exemplo:
SELECT MAX(ID) FROM tabela
Onde a variável ID é a chave primária e tabela é o nome de sua tabela.

Por ordem decrescente de seleção, por exemplo:
SELECT ID FROM tabela ORDER BY ID DESC LIMIT 1
Onde a variável ID é a chave primária e tabela é o nome de sua tabela.

Pelo último registro adicionado do comando INSERT, por exemplo:
INSERT INTO tabela (nome) VALUES ($nome)

SELECT LAST_INSERT_ID()
Os comandos devem ser executados juntos, caso contrário LAST_INSERT_ID retornará 0 como resultado.

Obrigado Herberto.
Meu primeiro post exibe o código fonte, onde sigo exatamente o comando “SELECT MAX(ID) FROM tabela” que vc colocou. Como digo lá, meu banco é POSTGRES, porém o comando deveria funcionar igualmente. Simplesmente não acontece nada.

Não conehço POSTGRES, tem de analisar a sintaxe

Marcelo , voce fez uma inclusão e depois gerou um botão é isso ?

Obrigado por responder, Zacariotto.
O esquema é o seguinte:

  1. Em um formulário há um botão de nome Multiplo.
  2. Eu trago para visualização um registro que eu deseje que sejam criadas copias seguidas, porém, incrementando o numero de parcela e a data de vencimento em + 1 mes para cada uma.
  3. Neste primeiro registro há o numero total de parcelas.
  4. Clico no botão e são criados tantos registros para quantas parcelas -1 existirem.

parabens vou tentar fazer

qto cobra para fazer um gerador de debitos para mim … rs
simples tenho as tabelas prontas
clinetes, contratos e o carne de debitos
só criar o form contratos e gerar os debitos nem boleto vou usar , ´e que to meio doente e não to tendo tempo

Miami , bão , voce lancou o form (formulario ) com os valores e eles serão gravados na tabela de itens , correto , mas qual evento voce usa para efetuar a gravação ?