Gerar Boleto

boa tarde , to precisando muito de ajuda nessa query , coloquei no blank para gerar o boleto mas ñ funciona, alguém pode me dizer o que estou fazendo errado?

sc_lookup(dslogin,"SELECT boleto.id_boleto, boleto.codigo_empresa , boleto.valor ,
boleto.vencimento ,
boleto.nossonumero, empresa.codigo_empresa, empresa.endereco, empresa.cep,
empresa.bairro, empresa.cidade , empresa.estado
FROM boleto INNER JOIN empresa ON boleto.id_boleto = empresa.codigo where
boleto.id_boleto = ‘$id’ and boleto.codigo_empresa = ‘[cod_empresa]’ ");

if (isset({dslogin})) // Row found
{

$id = {dslogin[0][0]};
$cod_empresa = {dslogin[0][1]};
$valor_boleto = {dslogin[0][2]};
$data_vencimento = {dslogin[0][3]};
$numero_documento = {dslogin[0][4]};
$endereco = {dslogin[0][6]};
$cep = {dslogin[0][7]};
$cidade = {dslogin[0][9]};
$estado = {dslogin[0][10]};

}

Camila,

Coloque em modo debug a aplicação e cole o select aqui.

Pode ser que algumas das varia’veis não estejam com valor, por exemplo $id.

criei essa tela de listagem de boleto, onde cada empresa terá seu boleto no inicio do mês quando clico em gerar boleto , o boleto vem com o erro a query de cima estar dentro da app blank.


lis.png

Não consegui encontrar o ERRO de query.
Oque pode estar errado é a lógica da query, como não temos conhecimento das tabelas fica difícil identificar.

Dê mais detalhes;

Qual a ação esperada?
O que não está fazendo?

//teste

Faz esse comando após o lookup, vamos ver oque está retornando.:

var_dump({dslogin}); 
exit;

//dúvida

Realmente a FK das tabelas é essa; “boleto.id_boleto = empresa.codigo” ?

Almeida,

Existe uma função cadastrar boleto, e outra como listagem de boleto (app consulta) , em listagem de boleto trás todos boletos cadastrado de determinada empresa, o problema é o seguinte quando traz a listagem dos boletos , os boleto tem valor e data de vencimento diferente(obvio), clico no primeiro gera normal o valor e a data, mas nos restantes a data e o valor vem com a data e o valor do primeiro.

sim as FK são “boleto.id_boleto = empresa.codigo”

Estão sendo passado algum parâmetro pela ligação, se sim, tente limpar esses parâmetros após gerar o boleto. Pode ser algum variável global não alterando o valor.

Pode ser também o relacionamento do SQL está buscando apenas esse valor e dada do primeiro

Camila,

o campo boleto.codigo_empresa é numérico? Estou perguntando isto porque na tela que mostraste está trazendo:

boleto.codigo_empresa = ‘BURBURINHO’

E pode ser isso que esteja dando problema no join.

Kleyber,

boleto.codigo_empresa é varchar.

E o campo “boleto.id_boleto”?

o boleto.id_boleto é INT

Que FK louca é essa. RSRS

As FK tem que ser o mesmo valor e mesmo tipo em ambas tabelas.
Tem um erro grave de Estrutura SQL ai. Coloque aqui pra gente os creates das 2 tabelas.

CREATE TABLE boleto (
id_boleto int(11) NOT NULL AUTO_INCREMENT,
codigo_empresa varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
id_status_boleto int(10) NOT NULL,
ano int(4) NOT NULL,
mes int(2) NOT NULL,
vencimento datetime DEFAULT NULL,
valor double(20,2) DEFAULT NULL,
pago char(1) COLLATE latin1_general_ci DEFAULT NULL,
data_pagto datetime DEFAULT NULL,
valor_pago double(20,2) DEFAULT NULL,
data_cadastro datetime DEFAULT NULL,
hora_cadastro varchar(20) COLLATE latin1_general_ci DEFAULT NULL,
valor_original double(20,2) DEFAULT NULL,
juros_mora double(20,2) DEFAULT NULL,
isento char(1) COLLATE latin1_general_ci DEFAULT NULL,
juros double(20,2) DEFAULT NULL,
multa double(20,2) DEFAULT NULL,
nossonumero varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
vencimento_real datetime DEFAULT NULL,
percentual_multa double(20,2) DEFAULT NULL,
desconto_abatimento double(20,2) DEFAULT NULL,
outras_deducoes double(20,2) DEFAULT NULL,
outros_acrescimos double(20,2) DEFAULT NULL,
mensagem_boleto varchar(2000) COLLATE latin1_general_ci DEFAULT NULL,
excluir_boleto char(1) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (id_boleto),
KEY codigo_empresa (codigo_empresa),
KEY id_status_boleto (id_status_boleto)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

CREATE TABLE empresa (
codigo int(11) NOT NULL AUTO_INCREMENT,
codigo_empresa varchar(255) DEFAULT NULL,
descricao varchar(255) DEFAULT NULL,
data_cadastro datetime DEFAULT NULL,
codigo_usuario_cadastro int(11) DEFAULT NULL,
data_deletado datetime DEFAULT NULL,
codigo_usuario_deletado int(11) DEFAULT NULL,
deletado int(11) DEFAULT NULL,
limite_musica_pedido int(10) unsigned DEFAULT NULL,
senha_administracao varchar(255) DEFAULT NULL,
valor_ficha_musica double(5,2) DEFAULT NULL,
valor_ficha_video double(5,2) DEFAULT NULL,
path_imagens_webservice varchar(255) DEFAULT NULL,
pasta_imagens_webservice varchar(255) DEFAULT NULL,
cpf_cnpj varchar(255) DEFAULT NULL,
nome_razao_social varchar(255) DEFAULT NULL,
nome_fantasia varchar(255) DEFAULT NULL,
endereco varchar(255) DEFAULT NULL,
bairro varchar(255) DEFAULT NULL,
cidade varchar(255) DEFAULT NULL,
estado varchar(255) DEFAULT NULL,
cep varchar(15) DEFAULT NULL,
fone varchar(255) DEFAULT NULL,
cpf_responsavel varchar(255) DEFAULT NULL,
nome_responsavel varchar(255) DEFAULT NULL,
fone_responsavel varchar(255) DEFAULT NULL,
celular_responsavel varchar(255) DEFAULT NULL,
email_responsavel varchar(255) DEFAULT NULL,
latitude varchar(255) DEFAULT NULL,
longitude varchar(255) DEFAULT NULL,
limite_pedido_mesa int(11) DEFAULT ‘1’,
tempo_pedido_mesa int(11) DEFAULT ‘15’,
tempo_carencia_midia int(11) DEFAULT ‘15’,
horario_limite_tarde time DEFAULT NULL,
horario_limite_noite time DEFAULT NULL,
data_atualizacao datetime DEFAULT NULL,
ip_empresa varchar(255) DEFAULT NULL,
tempo_intervalo_ocioso int(11) DEFAULT ‘10’,
duracao_max_midia int(11) DEFAULT ‘10’,
bloqueada char(1) DEFAULT ‘1’,
imagem_empresa varchar(255) DEFAULT NULL,
tempo_limite_usuario int(11) DEFAULT NULL,
codigo_forma_funcionamento int(11) NOT NULL DEFAULT ‘1’,
limite_midia_usuario int(11) DEFAULT ‘3’,
url_facebook varchar(255) DEFAULT NULL,
imagem_empresa_large varchar(255) DEFAULT NULL,
valor_mensalidade double(15,2) DEFAULT NULL,
dia_vencimento int(2) DEFAULT ‘5’,
PRIMARY KEY (codigo),
KEY empresa_index4332 (codigo_empresa)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

Não conheço sua estrutura, mas pelas nomeclaturas creio que oque relaciona suas duas tabelas é o campo: “codigo_emrpesa”.
Camila, não sei se você sabe mas quando se faz um LEFT JOIN, RIGHT OU INNER oque relaciona a 1tb com a 2tb é uma FK(Foreign Key), tem que ser uma chave com valor COMUM entre as duas tabelas, ou seja, um valor que será IGUALMENTE na 1tb e na 2tb.

Outra coisa, na tabela empresa o campo codigo_empresa, não vi uma UK para ele, ou seja, pode haver 2 empresas diferentes com o mesmo código?

  • Se sim, seu select vai retornar um boleto 2 vezes, na primeira vez com os dados de uma empresa, na segunda vez com os dados da outra empresa.

Então teste esse SQL.

SELECT 
  boleto.id_boleto,  
  boleto.codigo_empresa , 
  boleto.valor,
  boleto.vencimento , 
  boleto.nossonumero, 
  empresa.codigo_empresa, 
  empresa.endereco, 
  empresa.cep, 
  empresa.bairro, 
  empresa.cidade , 
  empresa.estado
FROM boleto INNER  JOIN empresa ON boleto.codigo_empresa = empresa.codigo_empresa
WHERE boleto.id_boleto = '$id' and 
 boleto.codigo_empresa = '[cod_empresa]'

Melhoramento do código:
Poderia ser usado esse relacionamento ao invés desse seu, o resultado será o mesmo, apenas é uma melhoria.

FROM boleto INNER  JOIN empresa USING(codigo_empresa)

Comando USING:
Serve para relacionar uma tabela com outra, aonde as FK sejam exatamente iguais.

Almeida,
já tinha tentado dessa forma , mas ele da esse erro:

ERRO
Undefined offset: 2
ERRO
Undefined offset: 1

Camila, esse erro pode ser algum atributo/variável/campo inexistente, que está sendo chamdo em algum lugar, ou
até mesmo a query errada.

Coloque sua aplicação em modo-debug, veja se algo vai dar errado na query. Analise as chamadas de atributo/variável/campo, pode ser algum escrito de forma incorreta.