Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ukow

Remessa Santander

Recommended Posts

Olá.

Algum de vocês já fez um arquivo remessa para o banco Santander?

 

Estou desenvolvendo um mas tem somente um erro que infelizmente é obrigatório.

Segundo o layout do banco, no arquivo Trailler deve-se fazer uma soma dos valores para cada boleto e exibir esse valor no final.

 

Aqui tem o link do layout: http://cantagalo.pr.gov.br/skin/upload/201308221336142.pdf

 

E aqui segue o código para remessa: https://dl.dropboxusercontent.com/u/75002660/boleto_remessa_php.php

 

Alguém sabe como posso fazer para concluir isso com base no meu código?

 

Observem que utilizo uma variável chamada $i que uso para gerar um número sequencial pra cada boleto gerado através de um loop, e fora desse loop ele continua com a soma de +1 para cara linha; acham que isso pode ajudar alterando na questão de valor?

 

Não sei se tem muita lógica mas se puderem me ajudar somente nessa questão da soma de valores eu agradeço, pois é algo novo que só o Santander utiliza, e até o momento só havia mexido com Itau, Bradesco etc, que não necessitam desse cálculo.

 

Apanho um pouco pra PHP então agradeço a quem me dar uma luz :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não utilize repositórios terceiros para postar seu código, coloque aqui no tópico para podermos ajudá-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não utilize repositórios terceiros para postar seu código, coloque aqui no tópico para podermos ajudá-lo.

 

Ai está :D

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Remessa</title>
</head>
<body>

<?php
/*
* @descr: Arquivo de remessa para cobranca no padrao CNAB 400 vers. 7.0 ITAU
*/

$Pasta = "d:/web/LocalUser/fadtech/www/smart/ratimbumateneu/boleto/";

$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source =d:/web/LocalUser/fadtech/www/smart/ratimbumateneu/banco/mp.mdb");

$dbq = "d:/web/LocalUser/fadtech/www/smart/ratimbumateneu/banco/mp.mdb";
$db_connection = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbq", "ADODB.Connection", "", "");


function limit($palavra,$limite)
{
if(strlen($palavra) >= $limite)
{
$var = substr($palavra, 0,$limite);
}
else
{
$max = (int)($limite-strlen($palavra));
$var = $palavra.complementoRegistro($max,"brancos");
}
return $var;
}

function sequencial($i)
{
if($i < 10)
{
return zeros(0,5).$i;
}
else if($i >= 10 && $i < 100)
{
return zeros(0,4).$i;
}
else if($i >= 100 && $i < 1000)
{
return zeros(0,3).$i;
}
else if($i >= 1000 && $i < 10000)
{
return zeros(0,2).$i;
}
else if($i >= 10000 && $i <= 100000)
{
return zeros(0,1).$i;
}
}

function valor($Valor)
{
if($Valor < 10)
{
return zeros(0,12).$Valor;
}
else if($Valor >= 10 && $Valor < 100)
{
return zeros(0,11).$Valor;
}
else if($Valor >= 100 && $Valor < 1000)
{
return zeros(0,10).$Valor;
}
else if($Valor >= 1000 && $Valor < 10000)
{
return zeros(0,9).$Valor;
}
else if($Valor >= 10000 && $Valor < 100000)
{
return zeros(0,8).$Valor;
}
else if($Valor >= 100000 && $Valor < 1000000)
{
return zeros(0,7).$Valor;
}

}

function numero_boleto($Nr_boleto)
{
if($Nr_boleto < 10)
{
return zeros(0,7).$Nr_boleto;
}
else if($Nr_boleto >= 10 && $Nr_boleto < 100)
{
return zeros(0,6).$Nr_boleto;
}
else if($Nr_boleto >= 100 && $Nr_boleto < 1000)
{
return zeros(0,5).$Nr_boleto;
}
else if($Nr_boleto >= 1000 && $Nr_boleto < 10000)
{
return zeros(0,4).$Nr_boleto;
}
else if($Nr_boleto >= 10000 && $Nr_boleto <= 100000)
{
return zeros(0,3).$Nr_boleto;
}
else if($Nr_boleto >= 100000 && $Nr_boleto <= 1000000)
{
return zeros(0,2).$Nr_boleto;
}
else if($Nr_boleto >= 1000000 && $Nr_boleto <= 10000000)
{
return zeros(0,1).$Nr_boleto;
}
else if($Nr_boleto >= 10000000 && $Nr_boleto <= 100000000)
{
return zeros(0,0).$Nr_boleto;
}
}


function mes($mes_lanc)
{
if($mes_lanc < 10)
{
return zeros(0,1).$mes_lanc;
}
else if($mes_lanc >= 10)
{
return zeros(0,0).$mes_lanc;
}
}

function mes1($mes_venc)
{
if($mes_venc < 10)
{
return zeros(0,1).$mes_venc;
}
else if($mes_venc >= 10)
{
return zeros(0,0).$mes_venc;
}
}

function dia($dia_lanc)
{
if($dia_lanc < 10)
{
return zeros(0,1).$dia_lanc;
}
else if($dia_lanc >= 10)
{
return zeros(0,0).$dia_lanc;
}
}

function dia1($dia_venc)
{
if($dia_venc < 10)
{
return zeros(0,1).$dia_venc;
}
else if($dia_venc >= 10)
{
return zeros(0,0).$dia_venc;
}
}

function cpf($CPF){
if($CPF >= 100000000 && $CPF <= 1000000000){
return zeros(0,5).$CPF;
    }
else if($CPF >= 1000000000 && $CPF <= 10000000000){
return zeros(0,4).$CPF;
    }
else if($CPF >= 10000000000 && $CPF <= 100000000000){
return zeros(0,3).$CPF;
    }
else if($CPF >= 100000000000 && $CPF <= 1000000000000){
return zeros(0,2).$CPF;
    }
else if($CPF >= 1000000000000 && $CPF <= 10000000000000){
return zeros(0,1).$CPF;
    }
else if($CPF >= 10000000000000 && $CPF <= 100000000000000){
return zeros(0,0).$CPF;
    }
}


function zeros($min,$max)
{
$x = ($max - strlen($min));
for($i = 0; $i < $x; $i++)
{
$zeros .= '0';
}
return $zeros.$min;
}

function complementoRegistro($int,$tipo)
{
if($tipo == "zeros")
{
$space = '';
for($i = 1; $i <= $int; $i++)
{
$space .= '0';
}
}
else if($tipo == "brancos")
{
$space = '';
for($i = 1; $i <= $int; $i++)
{
$space .= ' ';
}
}

return $space;
}

$fusohorario = 3; // como o servidor de hospedagem é a dreamhost pego o fuso para o horario do brasil
$timestamp = mktime(date("H") - $fusohorario, date("i"), date("s"), date("m"), date("d"), date("Y"));

$DATAHORA['PT'] = gmdate("d/m/Y H:i:s", $timestamp);
$DATAHORA['EN'] = gmdate("Y-m-d H:i:s", $timestamp);
$DATA['PT'] = gmdate("d/m/Y", $timestamp);
$DATA['EN'] = gmdate("Y-m-d", $timestamp);
$DATA['DIA'] = gmdate("d",$timestamp);
$DATA['MES'] = gmdate("m",$timestamp);
$DATA['ANO'] = gmdate("y",$timestamp);
$HORA = gmdate("H:i:s", $timestamp);
$HORA1 = gmdate("His", $timestamp);
$HORA['Seg'] = gmdate("s", $timestamp);

define("REMESSA",$Pasta."/remessa/",true);

$filename = REMESSA.$DATA['DIA'].$DATA['MES'].$DATA['ANO'].$HORA['Seg'].".REM";
$conteudo = '';
$remessa = $DATA['DIA'].$DATA['MES'].$DATA['ANO'].$HORA['Seg'];

## REGISTRO HEADER
#NOME DO CAMPO #SIGNIFICADO #POSICAO #PICTURE
$conteudo .= '0'; // tipo de registro id registro header 001 001 9(01)
$conteudo .= 1; // operacao tipo operacao remessa 002 002 9(01)
$conteudo .= 'REMESSA'; // literal remessa escr. extenso 003 009 X(07)
$conteudo .= '01'; // codigo servico id tipo servico 010 011 9(02)
$conteudo .= limit('COBRANCA',15); // literal cobranca escr. extenso 012 026 X(15)
$conteudo .= 'CÓDIGO DE TRANSMISSAO'; // codigo de transmissao 027 046 9(20)
$conteudo .= limit('RAZAO SOCIAL',30);//nome da empresa 047 076 X(30)
$conteudo .= '033'; // codigo banco Nº BANCO CÂMARA COMP. 077 079 9(03)
$conteudo .= limit('SANTANDER SA',15); // nome do banco por ext. 080 094 X(15)
$conteudo .= $DATA['DIA'].$DATA['MES'].$DATA['ANO'];//data geracao arquivo 095 100 9(06)
$conteudo .= complementoRegistro(16,"zeros");// zeros complemento d registro 101 116 9(16)
$conteudo .= complementoRegistro(275,"brancos"); // brancos complemento registro 117 391 X(47)
$conteudo .= complementoRegistro(3,"zeros"); // numeroremessa opcional 392 394 9(003)
$conteudo .= sequencial(1); // numero sequencial registro no arquivo 395 400 9(06)

$conteudo .= chr(13).chr(10); //essa é a quebra de linha

### DADOS DOS CLIENTES PARA TESTE
//$clientes[] = array("BOLETO001","Cliente A","11111111111","100,00");
//$clientes[] = array("BOLETO002","Cliente B","22222222222","200,00");
//$clientes[] = array("BOLETO003","Cliente C","33333333333","300,00");
//$clientes[] = array("BOLETO004","Cliente D","44444444444","400,00");

$mes = $_GET['mes'];
$ano = $_GET['ano'];
$nome = $_GET['nome'];

// Select dos Lançamentos
$sqV = ("SELECT * FROM Vw_lancamento_boleto where id_lancamento <> 0 and vr_parcela <> 0");
if($mes != ''){
$sqV = $sqV ."and month(dt_vencimento) =".$mes;
}
if($ano != ''){
$sqV = $sqV ."and year(dt_vencimento) =".$ano;
}
if($nome != ''){
$sqV = $sqV ."and nome like '%".$nome."%'";
}


$rs = odbc_exec($db_connection,$sqV);

$i = 2;
//Loop-----------------------------------------------------------------------------
while (odbc_fetch_row($rs)) {

$id_parceiro = odbc_result($rs, "id_parceiro");
$id_lancamento = odbc_result($rs, "id_lancamento");

// Select dos Dados do Sacado
$la = ("SELECT * FROM vw_lancamento where id_lancamento =".$id_lancamento );
$lanc = $conn->Execute($la);

//Emissão
$data_lanc1 = $lanc['dt_lancamento'];
$data_lanc = explode('/', $data_lanc1);
$dia_lanc1 = $data_lanc[0];
$mes_lanc1 = $data_lanc[1];
$ano_lanc1 = $data_lanc[2];
$ano_lanc = substr($ano_lanc1,2,2);

if ($dia_lanc1 < 10 ){
     $dia_lanc = '0'.$dia_lanc1;
}
else if ($dia_lanc1 >= 10){
     $dia_lanc = $dia_lanc1;
}

if ($mes_lanc1 < 10 ){
     $mes_lanc = '0'.$mes_lanc1;
}
else if ($mes_lanc1 >= 10){
     $mes_lanc = $mes_lanc1;
}

$emissao = $dia_lanc . $mes_lanc . $ano_lanc ;

//Vencimento
$data_venc1 = $lanc['dt_vencimento'];
$data_venc = explode('/', $data_venc1);
$dia_venc1 = $data_venc[0];
$mes_venc1 = $data_venc[1];
$ano_venc1 = $data_venc[2];
$ano_venc = substr($ano_venc1,2,2);

if ($dia_venc1 < 10 ){
     $dia_venc = '0'.$dia_venc1;
}
else if ($dia_venc1 >= 10){
     $dia_venc = $dia_venc1;
}

if ($mes_venc1 < 10 ){
     $mes_venc = '0'.$mes_venc1;
}
else if ($mes_venc1 >= 10){
     $mes_venc = $mes_venc1;
}

$vencimento = $dia_venc . $mes_venc . $ano_venc ;

// Atribuindo Valor
$Valor1 =$lanc['vr_parcela'];
$Valor2 = number_format($Valor1, 2, '.', '');
$Valor = preg_replace("/\D/","", $Valor2);

// Select dos Dados do Sacado
$dados = ("SELECT * FROM vw_parceiro where id_parceiro =".$id_parceiro );
$cadastro = $conn->Execute($dados);

if ($cadastro['tipo'] == 'A'){
$nome = $cadastro['RespNome'];    
$CPF_char = $cadastro['RespCPF'];
$CEP_char = $cadastro['CEP'];
$tipo = $cadastro['tipo'];
}
else if ($cadastro['tipo'] != 'A'){
$nome = $cadastro['nome'];    
$CPF_char = $cadastro['cpf'];
$CEP_char = $cadastro['CEP'];
$tipo = $cadastro['tipo'];
}

// Select do Número do Boleto
$boleto = ("SELECT * FROM vw_ultimo_boleto");
$Nr = odbc_exec($db_connection,$boleto);

$Nr_B = odbc_result($Nr, "nr_documento");
$Nr_boleto = $Nr_B + 1;


if($CPF_char != "" and $CEP_char != "" and $cadastro['endereco'] != "" and $cadastro['Bairro'] != "" and $cadastro['Cidade'] != "" and $cadastro['UF'] != "" ){
    
//Atualiza o Lançamento
$INSERT2 ="UPDATE lancamento SET id_situacao_lancamento= 8, remessa= 8, nr_remessa=".$remessa.", nr_documento=".$Nr_boleto." WHERE id_lancamento = ".$id_lancamento;
$Update2 = odbc_exec($db_connection,$INSERT2);
    
$CPF1 = preg_replace("/\D/","", $CPF_char);
$PriCPF = (int)substr($CPF1, 0, 1 );

if($tipo == 'A'){
if($PriCPF == 0){
$U = (int)substr($CPF1, 0, 1 );
$D = (int)substr($CPF1, 1, 1 );
$T = (int)substr($CPF1, 2, 1 );
$Q = (int)substr($CPF1, 3, 1 );
$C = (int)substr($CPF1, 4, 1 );
$S = (int)substr($CPF1, 5, 1 );
$Se = (int)substr($CPF1, 6, 1 );
$O = (int)substr($CPF1, 7, 1 );
$N = (int)substr($CPF1, 8, 1 );
$De = (int)substr($CPF1, 9, 1 );
$On = (int)substr($CPF1, 10, 1 );

$CPF = $D . $T . $Q . $C . $S . $Se . $O . $N . $De . $On;}
else{
$CPF = $CPF1;}
}
else if($tipo != "A"){
if($PriCPF == 0){
$U = (int)substr($CPF1, 0, 1 );
$D = (int)substr($CPF1, 1, 1 );
$T = (int)substr($CPF1, 2, 1 );
$Q = (int)substr($CPF1, 3, 1 );
$C = (int)substr($CPF1, 4, 1 );
$S = (int)substr($CPF1, 5, 1 );
$Se = (int)substr($CPF1, 6, 1 );
$O = (int)substr($CPF1, 7, 1 );
$N = (int)substr($CPF1, 8, 1 );
$De = (int)substr($CPF1, 9, 1 );
$On = (int)substr($CPF1, 10, 1 );
$Un = (int)substr($CPF1, 11, 1 );
$Dn = (int)substr($CPF1, 12, 1 );
$Tn = (int)substr($CPF1, 13, 1 );

$CPF = $D . $T . $Q . $C . $S . $Se . $O . $N . $De . $On. $Un. $Dn. $Tn;}
else{
$CPF = $CPF1;}
}
    
$CEP = preg_replace("/\D/","", $CEP_char);    
    
## REGISTRO DETALHE (OBRIGATORIO)
#NOME DO CAMPO #SIGNIFICADO #POSICAO #PICTURE
$conteudo .= 1; // tipo registro id registro transacac. 001 001 9(01)
$conteudo .= '02'; // codigo inscricao tipo inscricao empresa 002 003 9(02)
$conteudo .= 'CNPJ';// cnpj da empresa 004 017 9(14)
$conteudo .= 'AGENCIA'; // juncao de agencia movimento e cobranca codigo de transmissao 018 037 9(20)
$conteudo .= complementoRegistro(25,"brancos");//NOTA 15 complem regist 38 62 X(25)
$conteudo .= numero_boleto($Nr_boleto); // NOSSO NUMERO / ID TITULO DO BANCO NOTA 3 063 070 9(08)
$conteudo .= complementoRegistro(6,"zeros"); // Data segundo desconto 071 076 X(06)
$conteudo .= complementoRegistro(1,"brancos"); // brancos complemento registro 077 077 X(01)
$conteudo .= '4'; // informa??o multa 078 78 9(01)
$conteudo .= '0002'; // percentual multa por atraso 079 82 9(2)v9(2)
$conteudo .= '00'; // unidade valor moeda 083 84 9(02)
$conteudo .= complementoRegistro(13,"zeros"); // valor do titulo em outra unidade 085 097 9(8)v9(5)
$conteudo .= complementoRegistro(4,"brancos"); // brancos complemento registro 098 101 X(04)
$conteudo .= complementoRegistro(6,"zeros"); // data para cobranca multa 102 107 9(06)
$conteudo .= '5'; // codigo carteira 108 108 9(01)
$conteudo .= '01'; // codigo ocorrencia 109 110 9(02)
$conteudo .= limit($Nr_boleto,10); // nº documento / nº documento de cobranca NOTA 18 111 120 X(10)
$conteudo .= $vencimento; // vencimento data venc. titulo NOTA 7 121 126 9(06)
$conteudo .= valor($Valor); // nº sequencial do regsitro no arquivo 395 400 9(06)
$conteudo .= '033'; // banco numero cobrador 140 142 9(02)
$conteudo .= complementoRegistro(5,"zeros"); // codigo da agencia cobradora 143 147 9(05)
$conteudo .= '01'; // especia de documento 148 149 9(02)
$conteudo .= 'N'; // tipo de aceite 150 150 9(01)
$conteudo .= $emissao; // data emissao titulo NOTA 31 151 156 9(06)
$conteudo .= '00'; // primeira instrucao 157 158 9(02)
$conteudo .= '00'; // segunda instrucao 159 160 9(02)
$conteudo .= '0000000000001';// Valor de mora a ser cobrado por dia de atraso 161 173 9(11)V9(02)
$conteudo .= complementoRegistro(6,"zeros"); // Data limite para concess?o de desconto 174 179 9(06)
$conteudo .= '0000000000000';// valor desconto a ser concedido NOTA 13 180 192 9(11)V9(02)
$conteudo .= '0000000000000'; // valor I.O.F RECOLHIDO P NOTAS SEGURO NOTA 14 193 205 9(11)V9(02)
$conteudo .= '0000000000000'; // abatimento a ser concedido NOTA 13 206 218 9(11)V9(02)
$conteudo .= '01'; // tipo inscricao sacado 219 220 9(02)
$conteudo .= cpf($CPF); // numero de inscricao cpf ou cnpj 221 234 9(14)
$conteudo .= limit($nome,40); // nome nome do sacado NOTA 15 235 264 X(30)
$conteudo .= limit($cadastro['Endereco'],40); // logradouro rua numero e compl sacado 275 314 X(40)
$conteudo .= limit($cadastro['Bairro'],12); // bairro bairro do sacado 315 326 X(12)
$conteudo .= limit($CEP,8); // cep cep do sacado 327 334 9(08)
$conteudo .= limit($cadastro['Cidade'],15); // cidade cidade do sacado 335 349 X(15)
$conteudo .= limit($cadastro['UF'],2); // estado uf do sacado 350 351 X(02)
$conteudo .= complementoRegistro(30,"brancos"); // sacador avalista 386 391 X(06)
$conteudo .= complementoRegistro(1,"brancos"); // complemento do documento 382 382 X(01)
$conteudo .= 'I'; // identificador complemeto 283 283 9(01)
$conteudo .= '51'; // complemeto 284 285 9(02)
$conteudo .= complementoRegistro(6,"brancos"); // brancos complemento 386 391 X(06)
$conteudo .= '00'; // numero de dias para protesto 292 293 9(02)
$conteudo .= complementoRegistro(1,"brancos"); // brancos complemento 394 394 X(01)

$conteudo .= sequencial($i); // numero sequencial do registro no arquivo 395 400 9(06)

$conteudo .= chr(13).chr(10); //essa é a quebra de linha
$i = $i + 1;

}

/*
## REGISTRO DETALHE (OPCIONAL)

#NOME DO CAMPO #SIGNIFICADO #POSICAO #PICTURE
$conteudo .= 4; // tipo transacao id do registro 001 001 9(01)
$conteudo .= ''; // codigo de inscr tipo inscr. empresa NOTA 1 002 003 9(02)
$conteudo .= ''; // numero de inscr cpf ou cnpj 004 017 9(14)
$conteudo .= ''; // agencia mantenedora conta 018 021 9(04)
$conteudo .= '00'; // zeros complemento de registro 022 023 9(02)
$conteudo .= ''; // conta da empresa 024 028 9(05)
$conteudo .= ''; // DAC autoconf conta 029 029 9(01)
$conteudo .= 109; // n carteira no banco NOTA 5 030 032 9(03)
$conteudo .= ''; // nosso número id titulo banco NOTA 3 033 040 9(08)
$conteudo .= ''; // dac nosso numero NOTA 3 041 041 9(01)
$conteudo .= ''; // sequencia n seq. tipo 4 titulo 042 043 9(02)

$conteudo .= ''; // agencia (01) agencia conta credito 044 047 9(04)
$conteudo .= ''; // conta (01) conta p credito 048 054 9(07)
$conteudo .= ''; // dac (1) autoconf conta credito 055 055 9(01)
$conteudo .= ''; // valor (1) valor p credito NOTA 32 056 068 9(11)V9(02)

$conteudo .= ''; // agencia (2) 069 072 9(04)
$conteudo .= ''; // conta (2) 073 079 9(07)
$conteudo .= ''; // dac (2) 080 080 9(01)
$conteudo .= ''; // valor (2) 081 093 9(11)V9(02)

$conteudo .= ''; // agencia (3) 094 097 9(04)
$conteudo .= ''; // conta (3) 098 104 9(07)
$conteudo .= ''; // dac (3) 105 105 9(01)
$conteudo .= ''; // valor (3) 106 118 9(11)V9(02)

$conteudo .= ''; // agencia (4) 119 122 9(04)
$conteudo .= ''; // conta (4) 123 129 9(07)
$conteudo .= ''; // dac (4) 130 130 9(01)
$conteudo .= ''; // valor (4) 131 143 9(11)V9(02)

$conteudo .= ''; // agencia (5) 144 147 9(04)
$conteudo .= ''; // conta (5) 148 154 9(07)
$conteudo .= ''; // dac (5) 155 155 9(01)
$conteudo .= ''; // valor (5) 156 168 9(11)V9(02)

$conteudo .= ''; // agencia (6) 169 172 9(04)
$conteudo .= ''; // conta (6) 173 179 9(07)
$conteudo .= ''; // dac (6) 180 180 9(01)
$conteudo .= ''; // valor (6) 181 193 9(11)V9(02)

$conteudo .= ''; // agencia (7) 194 197 9(04)
$conteudo .= ''; // conta (7) 198 204 9(07)
$conteudo .= ''; // dac (7) 205 205 9(01)
$conteudo .= ''; // valor (7) 206 218 9(11)V9(02)

$conteudo .= ''; // agencia (8) 219 222 9(04)
$conteudo .= ''; // conta (8) 223 229 9(07)
$conteudo .= ''; // dac (8) 230 230 9(01)
$conteudo .= ''; // valor (8) 231 243 9(11)V9(02)

$conteudo .= ''; // agencia (9) 244 247 9(04)
$conteudo .= ''; // conta (9) 248 254 9(07)
$conteudo .= ''; // dac (9) 255 255 9(01)
$conteudo .= ''; // valor (9) 256 268 9(11)V9(02)

$conteudo .= ''; // agencia (10) 269 272 9(04)
$conteudo .= ''; // conta (10) 273 079 9(07)
$conteudo .= ''; // dac (10) 280 280 9(01)
$conteudo .= ''; // valor (10) 281 293 9(11)V9(02)

$conteudo .= ''; // agencia (11) 294 297 9(04)
$conteudo .= ''; // conta (11) 298 304 9(07)
$conteudo .= ''; // dac (11) 305 305 9(01)
$conteudo .= ''; // valor (11) 306 318 9(11)V9(02)

$conteudo .= ''; // agencia (12) 319 322 9(04)
$conteudo .= ''; // conta (12) 323 329 9(07)
$conteudo .= ''; // dac (12) 330 330 9(01)
$conteudo .= ''; // valor (12) 331 343 9(11)V9(02)

$conteudo .= ''; // agencia (13) 344 347 9(04)
$conteudo .= ''; // conta (13) 348 354 9(07)
$conteudo .= ''; // dac (13) 355 355 9(01)
$conteudo .= ''; // valor (13) 356 368 9(11)V9(02)

$conteudo .= ''; // agencia (14) 369 372 9(04)
$conteudo .= ''; // conta (14) 373 379 9(07)
$conteudo .= ''; // dac (14) 380 380 9(01)
$conteudo .= ''; // valor (14) 381 393 9(11)V9(02)

$conteudo .= ''; // tipo de valor informado NOTA 32 394 394 9(01)
$conteudo .= ''; // numero sequencial de registro no arquivo 395 400 9(06)
*/
/*
IMPORTANTE:
· O arquivo pode conter tanto títulos de cobrança normal como títulos de cobrança com rateio de crédito;
· Para instruções de protesto, os títulos com rateio de crédito seguem os mesmos procedimentos dos títulos sem rateio;
· O rateio de crédito pode ser por percentual ou em valor (vide Nota 32);
· Títulos com rateio de crédito – Para cada Registro Detalhe Obrigatório (Tipo de Registro "1") podem ser utilizados até 3 (três) Registros
Tipo "4" para indicação dos detalhes do rateio de crédito (máximo de 30 contas por título). Caso a Agência/Conta/Dac do cedente e Nº
da Carteira/Nosso Número do título, informados nos registros Tipo "4" não coincidam com os dados do respectivo registro Tipo "1", a
entrada do título é aceita sem rateio de crédito (os registros Tipo "4" são desprezados);
· A entrada do título é rejeitada nos casos em que a soma dos valores ou percentuais de rateio (informados nos registros Tipo "4")
ultrapasse o valor nominal do título do registro Tipo "1";
· Caso os registros de rateio (Tipo "4") não apresentem agências/contas de crédito, os registros Tipo 4 são desprezados e o título será
tratado como entrada de cobrança normal, sem rateio;
· A agência/conta do cedente e sua respectiva agência/conta centralizadora de crédito da cobrança, não podem estar entre as
agências/contas beneficiárias do rateio de crédito;
· Títulos com rateio de crédito não aceitam instruções de Desconto ou de Abatimento e não permitem alteração dos valores nominal e de
crédito;
· Não haverá incidência de CPMF quando a raiz do CPNJ da conta do cedente for igual a da conta de crédito do rateio.
*/
/*
$conteudo .= chr(13).chr(10); //essa é a quebra de linha

## REGISTRO DETALHE (OPCIONAL)

#NOME DO CAMPO #SIGNIFICADO #POSICAO #PICTURE
$conteudo .= 5; // tipo de registro id reg transac 001 001 9(01)
$conteudo .= ''; // endereco de email do sacado NOTA 29 002 121 X(120)
$conteudo .= ''; // codigo de inscr sacador/avalista NOTA 30 122 123 9(02)
$conteudo .= ''; // numero de inscr sacador/avalista NOTA 30 124 137 9(14)
$conteudo .= ''; // logradouro sacador/avalista NOTA 30 138 177 X(40)
$conteudo .= ''; // bairro sacador/avalista NOTA 30 178 189 X(12)
$conteudo .= ''; // cep sacador/avalista NOTA 30 190 197 9(08)
$conteudo .= ''; // cidade sacador/avalista NOTA 30 198 212 X(15)
$conteudo .= ''; // estado sacador/avalista NOTA 30 213 214 X(02)
$conteudo .= complementoRegistro(180,"brancos");// brancos complem regist 215 394 X(180)
$conteudo .= ''; // numero sequencial do registro no arquivo 395 400 9(06)
*/
/*
IMPORTANTE:
· Este registro é opcional e deverá ser enviado apenas quando o Cedente desejar que o BOLETO de
cobrança seja entregue pelo Banco Itaú ao Sacado por e-mail e/ou, em substituição ou complemento
dos dados referentes ao Sacador/Avalista, quando de sua existência; e
· Sempre que for informado, deverá ser na seqüência do registro obrigatório de cobrança (Código de
Registro '1') a que seus dados se referem;
· As informações constantes neste registro não são informadas no "arquivo retorno";
· Quando as informações referentes ao "Sacador / Avalista" tiverem sido indicadas nos registros "1" e "5",
prevalecerá sempre a do registro "5";
· Na fase de testes não é possível o envio do BOLETO via e-mail, para tanto, este será emitido e
consistido fisicamente.
*/
}// fecha loop de clientes

//$conteudo .= chr(13).chr(10); //essa é a quebra de linha

## REGISTRO TRAILER DE ARQUIVO

//CORRETO LAYOUT ITAU
#NOME DO CAMPO #SIGNIFICADO #POSICAO #PICTURE
$conteudo .= 9; // tipo de registro id registro trailer 001 001 9(01)
$conteudo .= sequencial($i-1); // nº sequencial do regsitro no arquivo 395 400 9(06)
$conteudo .= complementoRegistro(13,"zeros"); // nº sequencial do regsitro no arquivo 395 400 9(06)
$conteudo .= complementoRegistro(374,"zeros"); // brancos complemento de registro 002 394 X(393)
$conteudo .= sequencial($i); // nº sequencial do regsitro no arquivo 395 400 9(06)
$conteudo .= chr(13).chr(10); //essa é a quebra de linha


/* TENTATIVA SEM SUCESSO
$conteudo .= '9201341 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000000010000000800000000000000 '.sequencial($i);
*/

// Em nosso exemplo, nós vamos abrir o arquivo $filename
// em modo de adição. O ponteiro do arquivo estará no final
// do arquivo, e é pra lá que $conteudo irá quando o
// escrevermos com fwrite().
// 'w+' e 'w' apaga tudo e escreve do zero
// 'a+' comeca a escrever do inicio para o fim preservando o conteudo do arquivo

if (!$handle = fopen($filename, 'w+'))
{
erro("Não foi possível abrir o arquivo ($filename)");
}

// Escreve $conteudo no nosso arquivo aberto.
if (fwrite($handle, "$conteudo") === FALSE)
{
    echo "<script type='text/javascript'>
alert('Não foi possível escrever no arquivo ($filename)');
</script>";
}
fclose($handle);

$arquivo= $remessa ; // defina o nome do arquivo
$arq=fopen($filename,"w"); // defina a pasta do arquivo
$base= $filename; // para o download
fputs($arq,$conteudo);
fclose($arq);

//----------------------------------------------------------------
?>

<table width="1008" align="center" cellspacing=0 cellpadding=0 border=0><tr><td><DIV ALIGN="CENTER">
<?php


echo "<br /><br /><br /><br /><br /><br /><br /><br />Remessa Gerada com Sucesso<br />Aguarde o download...<br /><br />
<meta http-equiv=\"refresh\" content=\"0;url=download.php?nome=".$arquivo."&mes=".$mes."&ano=".$ano."\" />";

echo "<a href='redirect.asp?mes=$mes&ano=$ano&nome=$nome'>Clique aqui para Continuar</a><br /><br /><br /><br /><br /><br /><br /><br />";



?>
</DIV></td></tr></table>

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use uma variável auxiliar para somar os valores da variável $Valor. E imprima ao final das contas de um cliente. É isso que você precisa?

 

Também lhe apresento a função str_pad, vai te economizar muitas linhas do início do seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use uma variável auxiliar para somar os valores da variável $Valor. E imprima ao final das contas de um cliente. É isso que você precisa?

 

Também lhe apresento a função str_pad, vai te economizar muitas linhas do início do seu código.

 

Creio que sim, mas como faria essa soma?

 

Já tentei criando uma variável chamada $resultado, com a função de $resultado = $Valor + $Valor; porém ele só soma o valor do último boleto gerado no loop ( exemplo, ultimo boleto 10,00R$, soma 10+10 $resultado=20 ), preciso que ele respeite todos os valores do loop, porém quando for inserir esse resultado, deve ser fora do loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sua regra está bem errada. A ideia de utilizar a variável $resultado está ok. Mas se cada variável $Valor é referente a um registro, por que você está somando ele duas vezes ($Valor + $Valor)?

$resultado += $valor;

Só faça uma regra para zerar a variável [inline] $resultado [/inline] quando mudar o cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

WOOOOOOOOOOOOW!

Deu certo! Muito obrigado meeeeeeesmo Gabriel!

Estava tendo muita dor de cabeça tentando resolver isso, sou novo com PHP e tal; você me salvou! HAHAHA

Obrigado de verdade cara! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.