Acrescer Mês e ano em uma data

Jovito, não entendo… Quando testo o Script no Blank ele funciona que uma beleza! Mas quando eu atribuo as variáveis do SC ele da erro de conexão ao banco de dados, olha só como estou fazendo:

No blank faço assim:

[code]$idunidade = ‘1’;
$idconta_bancaria = ‘1’;
$documento = ‘1’;
$descricao = ‘descricao’;
$idcentro_custo_d = ‘1’;
$iddepartamento = ‘2’;
$idfornecedor = ‘1’;
$data_conta = ‘06-05-2013’;
$valor = ‘400’;
$multa = ‘’;
$juros = ‘’;
$desconto = ‘’;
$observacao = ‘observacao’;
$banco = ‘Banco do Brasil’;
$replica = ‘S’;
$parcelas = 10;
$data = explode(’-’, $data_conta);
$intervalo = 30;

for($i = 1 ;$i < $parcelas+1; $i++){

$data = explode('-', date("d-m-Y", mktime(0, 0, 0, $data[1], $data[0]+$intervalo, $data[2])));
$data_vencimento = date("Y-m-d", mktime(0, 0, 0, $data[1], $data[0] + $intervalo, $data[2])); 

sc_exec_sql("

INSERT INTO contas_pagar
(idunidade,
idconta_bancaria,
documento,
descricao,
idcentro_custo_d,
iddepartamento,
idfornecedor,
data_conta,
valor,
observacao,
banco,
replica,
parcelas,
nparcelas,
data_vencimento)
VALUES
($idunidade,
$idconta_bancaria,
$documento,
$descricao,
$idcentro_custo_d,
$iddepartamento,
$idfornecedor,
$data_conta,
$valor,
$observacao,
‘$banco’,
‘$replica’,
$parcelas,
$i,
$data_vencimento)

");
}[/code]

Porém na aplicação eu mudo apenas as variáveis:

$idunidade = {idunidade}; $idconta_bancaria = {idconta_bancaria}; $documento = {documento}; $descricao = {descricao}; $idcentro_custo_d = {idcentro_custo_d}; $iddepartamento = {iddepartamento}; $idfornecedor = {idfornecedor}; $data_conta = {data_conta}; $valor = {valor}; $multa = {multa}; $juros = {juros}; $desconto = {desconto}; $observacao = {observacao}; $banco = {banco}; $replica = {replica}; $parcelas = {parcelas}; $data = explode('-', {data_vencimento}); $intervalo = {intervalo};

Podes me dar uma luz ?

Abração!

Sim esqueci de postar o erro:

No debug aparece isso:

(pdo-mysql): INSERT INTO contas_pagar (idunidade, idconta_bancaria, documento, descricao, idcentro_custo_d, iddepartamento, idfornecedor, data_conta, valor, observacao, banco, replica, parcelas, nparcelas, juros, multa, data_vencimento) VALUES (1, 1, 001, Testando o sistema, 39, 1, 1, 2013-05-06, 1500.00, Teste, ‘Banco do Brasil’, ‘S’, 10, 1, 0.00, 0.00, 2013-07-05)

e o erro é:

1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘o sistema, 39, 1, 1, 2013-05-06, 1500.00, Teste, ‘Banco do Brasil’, ‘S’,’ at line 1

Não sei onde estou errando!

Você não está encapsulando os valores.

Olá Haroldo, poxa bom te ver por aqui!
Não estou encapsulando ? Como assim? Não entendi!

Rode seu debug e veja o resultado da query.

pelo que entendi a data, por exemplo não esta entre aspas simples.

Resolvido! Tem que colocar aspas no que for STRING e DECIMAL. Sendo assim ficou:

$idunidade,
$idconta_bancaria,
‘$documento’,
‘$descricao’,
$idcentro_custo_d,
$iddepartamento,
$idfornecedor,
$data_conta,
‘$valor’,
‘$multa’,
‘$juros’,
‘$desconto’,
‘$observacao’,
‘$banco’,
‘$replica’,
$parcelas,
$parc,
$data_vencimento

[font=impact][size=15pt][size=15pt]Que legal Fred
Ficou muito bom.
Pena que o colega aaguiar, não quiz compartilhar a solução, acho que resolveu guardar para prosperidade.
Bom enfim parabéns a você e o Jovito.[/size][/size][/font]

Fala Pessoal,

Desculpa ai, mas estes dias foram um pouco complicados para mim! Só vi hoje que o tinham 26 respostas no post.

Eu criei um método GerarParcelas com os parâmetros $diavencimento, $parcelas



    $gravadata         = {PrimeiroVencimento};
	
	sc_lookup(ds,"select max(parcelatitulo) from tablicencatitulos 
					where idlicenca = {idlicenca}");


	$num = {ds[0][0]} + 1;

 
  for($x = $num; $x <= $Parcelas + $num; $x++)
  {
    
		$dia = $diavencimento;  
	  	$mes = date("m",strtotime($gravadata)) + 1;
        $ano = date("Y",strtotime($gravadata));
	  
	  sc_exec_sql("
	  
	  		INSERT INTO tablicencatitulos
			
			(   
				parcelatitulo,
			    idlicenca,
				licenca,
				datavencimento,
				valortitulo,
				status

			)

			VALUES
			
			(
				$x,
				{idlicenca},
				'{licenca}',
				'$gravadata',
				{valormanutencao},
				'A'

			)

	  ");
	  
	    if ($mes == 13) { //se passar do mês 12, então inicia com o mes 1 do próximo ano
            $mes = 1;
            $ano = $ano + 1;    
        }
        
        if ($dia == 30 && $mes == 2){ //fevereiro não pode ter 30 dias não é. kkk
            $gravadata = $ano."-".$mes."28";
        }else{
            $gravadata = $ano."-".$mes."-".$dia;
        }
		
	  	  
  }

depois foi só criar um botão na aplicação, do tipo PHP e chamar o método passando os parâmetros solicitados.

Espero que ainda esteja em tempo de ajudar alguém, vi que o pessoal postou algumas soluções muito interessantes também.

Eu utilizo macro do sc_date(), ela calcula correto independente da quantidade de dias dos meses.

// GERA PARCELAS VENCENDO DE 30 EM 30 DIAS
if({parcelas} > 1 and {gerar_parcelas} == ‘1’){
$valor_parc = round({valor} / {parcelas}, 2);
$valor_parc1 = round($valor_parc + {valor} -($valor_parc * {parcelas}),2);
$parc = 1;
$dias = 0;
$venc = {data_vencimento};
while({parcelas} >= $parc){
if($parc == 1){
$valor_parcela = $valor_parc1;
}else{
$valor_parcela = $valor_parc;
}
sc_exec_sql(“insert into fin_contas_pagar_receber_lanc
values(’$id’,{pagar_receber_id},’{fornecedor_id}’,’{tipo_documento_id}’,’{numero_documento}’,
‘{historico}’,’{torneio_id}’,’$conta’,’$venc’,’$parc’,’{parcelas}’,
‘$valor_parcela’,Null,0,Null,’’,‘S’)”);
$dias = $dias + 30;
$id++;
$parc++;
$venc = sc_date ({data_vencimento}, “aaaa-mm-dd”, “+”, $dias, 0, 0); //INCREMENTA O DIA
}
}

[size=14pt][font=verdana]NOSSA AGORA SIM FICOU CHIC COM A PARTICIPAÇÃO DE TODOS…
LEGAL…[/font][/size]