Gerar detalhes de um pedido

Olá pessoal,

Tenho as seguintes tabelas:

a004_formapagto

  • FPagto_ID
  • FPagto_Nome (à Vista, A Prazo, …)

a005_condicoespagto

  • CPagto_ID
  • FPagto_ID
  • CPagto_Dia (1, 15, 30, 45, …)

d001_planilhas

  • Planilha_ID
  • Cliente_ID
  • FPagto_ID
  • Planilha_DtCompetencia
  • Planilha_Valor

d002_detalhes

  • Detalhe_ID
  • Planilha_ID
  • Detalhe_Parcela
  • Detalhe_Valor
  • Detalhe_Vencimento

O que estou precisando fazer?

Criar um botão na aplicação FrmCadPlanilhas que faça o processo abaixo e abra a aplicação FrmCadDetalhes;
Criar uma variável vlParcela com partida inicial de 0 (zero);
Gerar a consulta abaixo e, com base nela, percorre-la e incrementando a variável vlParcela (vlParcela = vlParcela + 1) parra fazer os inserts na tabela d002_detalhes:

SELECT A.Planilha_ID, A.FPagto_ID, A.Planilha_DtCompetencia,
A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X WHERE X.FPagto_ID = B.FPagto_ID) AS VALOR,
ADDDATE( A.Planilha_DtCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO
B.FPagto_Nome, C.CPagto_Dia
FROM d001_planilhas A
INNER JOIN a004_formapagto B ON (B.FPagto_ID = A.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (C.FPagto_ID = B.FPagto_ID)
WHERE A.Planilha_ID = {Planilha_ID}

Não sei se consegui ser claro, mas é isso. Se houver uma forma mais prática, favor postem aqui.

Grato,

Ilano

É o seguinte pessoal,

Não tenho conhecimentos em PHP, mas olhando diversas postagens cheguei ao código abaixo:

sc_lookup(ds,“SELECT COUNT(*) FROM a005_condicoespagto
WHERE FPagto_ID = ‘{FPagto_ID}’”);

$vlContar = {ds[0][0]};

sc_lookup(ds,"SELECT
A.Planilha_ID,
A.Fabrica_ID,
A.Cliente_ID,
A.Code_ID,
A.FPagto_ID,
A.Status_ID,
A.Planilha_Data,
A.Planilha_DataCompetencia,
A.Planilha_DataTransacao,
A.Planilha_Valor,
A.Planilha_Pago,
A.Planilha_Descricao,
B.FPagto_Nome,
C.CPagto_Dia,
A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X
WHERE X.FPagto_ID = B.FPagto_ID) AS VLR_PARCELA,
ADDDATE( A.Planilha_DtCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO
FROM d001_planilha A
INNER JOIN a004_formapagto B ON (A.FPagto_ID = B.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (B.FPagto_ID = C.FPagto_ID)
WHERE A.Planilha_ID = ‘{Planilha_ID}’ ");

while($vlParcela <= $vlContar)
{
sc_exec_sql(“INSERT INTO d002_detalhes (Detalhe_Parcela, Detalhe_Valor,
Detalhe_DtVencimento, Detalhe_DtPagamento,
Detalhe_Descricao, Detalhe_Pago) values
‘$vlParcela’, ‘{ds[0][14]}’, ‘{ds[0][15]}’,
null, null, 0)”);
$vlParcela++;

}

Com certeza sabia que havia algo errado, mesmo assim tentei. Mas acho que não estou tão longe do resultado esperado não. Foi retornado o seguinte erro:

Undefined variable: vlParcela
Undefined variable: vlParcela
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘’’, ‘[0][14]’, ‘[0][15]’, null, null, 0)’ at line 1
{SC_DB_ERROR_INI}View SQL{SC_DB_ERROR_MID}INSERT INTO d002_detalhes (Detalhe_Parcela, Detalhe_Valor, Detalhe_DtVencimento, Detalhe_DtPagamento, Detalhe_Descricao, Detalhe_Pago) values ‘’, ‘[0][14]’, ‘[0][15]’, null, null, 0){SC_DB_ERROR_CLS}Close{SC_DB_ERROR_END}

Alguém poderia me dar uma mãozinha?

Grato!

Onde está definida a variável $vlParcela?

Amigo Fica a dica.
o scriptcase da uma mãozinha, mais é necessário conhecer a linguagem php, suas funcoes para poder fazer algo mais elaborado.
Att Arquimedes

Olá Kleyber,

Certo, coloquei $vlParcela = 1; antes do WHILE, mas agora deu o erro:

Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘1’, ‘[0][14]’, ‘[0][15]’, null, null, 0)’ at line 1

E agora, o que está errado?

Pois é Arquimedes, eu tô tentando amigo. Pelo menos tô fuçando, estudando e tudo mas, como você sabe, todo começo é difícil assim mesmo e é por isso que recorremos aos fóruns.

Troque isto:

‘$vlParcela’, ‘{ds[0][14]}’, ‘{ds[0][15]}’,

Por isto:

‘$vlParcela’, ‘{ds[0][13]}’, ‘{ds[0][14]}’,

No SELECT a ordem dos campos sempre começa por 0.

Kleyber,

Cara, fez os inserts porém, o campo Detalhe_Valor trouxe zero e o Detalhe_DtVencimento nulo. Onde estou errando agora? Já verifiquei as colunas, tá tudo direitinho.

Depois de sua observação “No SELECT a ordem dos campos sempre começa por 0” notei também outra coisa:

ds[0][14] onde, 0 é a linha e 14 a coluna, certo?

Então pensei: vou criar uma variável $vlLinha e alterei o WHILE para:

$vlLinha = 0;

while($vlParcela <= $vlContar)
{
sc_exec_sql(“INSERT INTO d002_detalhes (Planilha_ID, Detalhe_Parcela, Detalhe_Valor,
Detalhe_DtVencimento, Detalhe_DtPagamento,
Detalhe_Descricao, Detalhe_Pago) values (
‘{Planilha_ID}’, ‘$vlParcela’, ‘{ds[$vlLinha][13]}’, ‘{ds[$vlLinha][14]}’,
null, null, 0)”);
$vlParcela++;
$vlLinha++;

}

Bem, ele fez os inserts novamente e novamente aqueles campos, citados anteriormente, não foram alimentados como o esperado e agora, com essa mudança no código, me retorna a mensagem abaixo:

Undefined variable: vllinha
Undefined variable: vllinha
Undefined variable: vllinha
Undefined variable: vllinha

Eu fiz alguma besteira ou o código não está consistente. Por favor, sinto que estou bem próximo mas tem algo que não está batendo aí.

Tem que tirar as aspas para valores numéricos:

sc_exec_sql(“INSERT INTO d002_detalhes (Planilha_ID, Detalhe_Parcela, Detalhe_Valor,
Detalhe_DtVencimento, Detalhe_DtPagamento,
Detalhe_Descricao, Detalhe_Pago) values (
‘{Planilha_ID}’, ‘$vlParcela’, {ds[$vlLinha][13]}, ‘{ds[$vlLinha][14]}’,
null, null, 0)”);

Agora complicou! Está retornando o erro:

Atenção Fechar
Undefined variable: vllinha
Undefined variable: vllinha
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘[][14] , ‘[][15]’, null, null, 0)’ at line 1
{SC_DB_ERROR_INI}View SQL{SC_DB_ERROR_MID}INSERT INTO d002_detalhes (Planilha_ID, Detalhe_Parcela, Detalhe_Valor, Detalhe_DtVencimento, Detalhe_DtPagamento, Detalhe_Descricao, Detalhe_Pago) values ( ‘1’, ‘1’, [][14] , ‘[][15]’, null, null, 0){SC_DB_ERROR_CLS}Close{SC_DB_ERROR_END}

Por quê acontece esses devaneios? Quero dizer, não fiz alteração nenhuma, apenas tirei as aspas que você falou. E, pelo que vi, a variável $vlLinha também não está incrementando.

Bom dia pessoal,

Alguém tem mais alguma sugestão? Está muito perto! O que preciso melhorar nesse código? Por quê a variável $vlLinha está sendo considerada indefinida?

ilanocf,

Veja se a grafia dessa variável está correta. Pra analisar melhor, poste o seu código completo aqui.

Vou meter a colher no meio rss…
Faz o que o Kleyber pediu jogue todo o codigo seu aqui para ver, jogue ele entre [\code] [/code] para podermos definir melhor, borre a barra invertida então seu codigo estara dentro de um cuadro para Codigos

O código é só esse! Será que é isso, o código está incompleto?
Criei um botão do tipo PHP e passei o código postado aqui.

sc_lookup(ds,"SELECT COUNT(*) FROM a005_condicoespagto
WHERE FPagto_ID = '{FPagto_ID}'");

$vlContar = {ds[0][0]};

sc_lookup(ds,"SELECT
A.Planilha_ID,
A.Fabrica_ID,
A.Cliente_ID,
A.Code_ID,
A.FPagto_ID,
A.Status_ID,
A.Planilha_Data,
A.Planilha_DataCompetencia,
A.Planilha_DataTransacao,
A.Planilha_Valor,
A.Planilha_Pago,
A.Planilha_Descricao,
B.FPagto_Nome,
C.CPagto_Dia,

A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X
WHERE X.FPagto_ID = B.FPagto_ID) AS VLR_PARCELA,

ADDDATE(A.Planilha_DtCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO

FROM d001_planilha A
INNER JOIN a004_formapagto B ON (A.FPagto_ID = B.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (B.FPagto_ID = C.FPagto_ID)
WHERE A.Planilha_ID = '{Planilha_ID}' ");

$vlParcela = 1;
$vlLinha = 0;

while($vlParcela <= $vlContar)
   {
      sc_exec_sql("INSERT INTO d002_detalhes (Detalhe_Parcela, Detalhe_Valor,
               Detalhe_DtVencimento, Detalhe_DtPagamento,
               Detalhe_Descricao, Detalhe_Pago) values 
               '$vlParcela', {ds[$vlLinha][14]}, '{ds[$vlLinha][15]}',
               null, null, 0)");
      $vlParcela++;
	  $vlLinha++;
      
   }

Pelo código postado a única coisa que vejo é isto:

‘$vlParcela’, {ds[$vlLinha][14]}, ‘{ds[$vlLinha][15]}’,

que deveria ser:

‘$vlParcela’, {ds[$vlLinha][13]}, ‘{ds[$vlLinha][14]}’,

Quanto a $vlLinha, pode ser por conta justamente da numeração do array que está errada.

Pois é kleyber, fiz a mudança que você disse mas dá outro erro:


Atenção
Undefined variable: vllinha
Undefined variable: vllinha
Erro ao acessar o banco de dados
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘1’, [][13] , ‘[][14]’, null, null, 0)’ at line 1
{SC_DB_ERROR_INI}View SQL{SC_DB_ERROR_MID}INSERT INTO d002_detalhes (Detalhe_Parcela, Detalhe_Valor, Detalhe_DtVencimento, Detalhe_DtPagamento, Detalhe_Descricao, Detalhe_Pago) values ‘1’, [][13] , ‘[][14]’, null, null, 0){SC_DB_ERROR_CLS}Close{SC_DB_ERROR_END}

Outra coisa, a contagem das colunas sempre começa por 0 (zero), certo? Então veja o select:

sc_lookup(ds,"SELECT
(0) A.Planilha_ID,
(1) A.Fabrica_ID,
(2) A.Cliente_ID,
(3) A.Code_ID,
(4) A.FPagto_ID,
(5) A.Status_ID,
(6) A.Planilha_Data,
(7) A.Planilha_DataCompetencia,
(8) A.Planilha_DataTransacao,
(9) A.Planilha_Valor,
(10) A.Planilha_Pago,
(11) A.Planilha_Descricao,
(12) B.FPagto_Nome,
(13) C.CPagto_Dia,

(14) A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X
WHERE X.FPagto_ID = B.FPagto_ID) AS VLR_PARCELA,

(15) ADDDATE( A.Planilha_DtCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO

FROM d001_planilha A
INNER JOIN a004_formapagto B ON (A.FPagto_ID = B.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (B.FPagto_ID = C.FPagto_ID)
WHERE A.Planilha_ID = '{Planilha_ID}' ");

Então não podem ser 13 e 14 mas sim 14 e 15 não é não?

A questão é que, se o resto do código está certo, porque então ainda assim não executa? Não dá pra entender! Até eu mesmo estou me achando chato por causa disso. Teria outra forma de se realizar isso?

faça em uma Procedure no Banco de Dados :slight_smile:

Galera, consegui andar um pouco mais. Finalmente consegui fazer os inserts, sem erros, sem nada!
Então qual é o problema??? Não estou conseguindo incrementar a linha do registro.
Meu código ficou assim:

sc_lookup(ds,"SELECT COUNT(*) FROM a005_condicoespagto
WHERE FPagto_ID = '{FPagto_ID}'");

$vlContar = {ds[0][0]};


sc_lookup(ds,"SELECT
A.Planilha_ID,
A.Fabrica_ID,
A.Cliente_ID,
A.Code_ID,
A.FPagto_ID,
A.Status_ID,
A.Planilha_Data,
A.Planilha_DataCompetencia,
A.Planilha_DataTransacao,
A.Planilha_Valor,
A.Planilha_Pago,
A.Planilha_Descricao,
B.FPagto_Nome,
C.CPagto_Dia,

A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X
WHERE X.FPagto_ID = B.FPagto_ID) AS VLR_PARCELA,

ADDDATE(A.Planilha_DataCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO

FROM d001_planilha A
INNER JOIN a004_formapagto B ON (A.FPagto_ID = B.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (B.FPagto_ID = C.FPagto_ID)
WHERE A.Planilha_ID = '{Planilha_ID}' ");

$vlParcela = 1;
$vlLinha = 0;
$vlValor = 0;
$vlData = '';


while($vlParcela <= $vlContar)
   {
	  
	  $vlValor = {ds[0][14]};
	  $vlData = {ds[0][15]};
	  
	  sc_exec_sql("INSERT INTO d002_detalhes (Planilha_ID, Detalhe_Parcela, Detalhe_Valor,
               Detalhe_DtVencimento, Detalhe_DtPagamento,
               Detalhe_Descricao, Detalhe_Pago) values (
			   '{Planilha_ID}', '$vlParcela', '$vlValor', '$vlData',
               null, null, 0)");
	  
      $vlParcela++;
	  $vlLinha++;      
   }

O incremento que deveria ser {ds[$vlLinha][15]} é que não está rolando. Só falta isso para finalizar, aí fecho esse post, finalmente!

Finalmente!!! Deu tudo certo! Agora o meu código ficou assim:

sc_lookup(ds,"SELECT COUNT(*) FROM a005_condicoespagto
WHERE FPagto_ID = '{FPagto_ID}'");

$vlContar = {ds}[0][0];


sc_lookup(ds,"SELECT
A.Planilha_ID,
A.Fabrica_ID,
A.Cliente_ID,
A.Code_ID,
A.FPagto_ID,
A.Status_ID,
A.Planilha_Data,
A.Planilha_DataCompetencia,
A.Planilha_DataTransacao,
A.Planilha_Valor,
A.Planilha_Pago,
A.Planilha_Descricao,
B.FPagto_Nome,
C.CPagto_Dia,

A.Planilha_Valor / (SELECT COUNT(*) FROM a005_condicoespagto X
WHERE X.FPagto_ID = B.FPagto_ID) AS VLR_PARCELA,

ADDDATE(A.Planilha_DataCompetencia, INTERVAL C.CPagto_Dia DAY) AS VENCIMENTO

FROM d001_planilha A
INNER JOIN a004_formapagto B ON (A.FPagto_ID = B.FPagto_ID)
INNER JOIN a005_condicoespagto C ON (B.FPagto_ID = C.FPagto_ID)
WHERE A.Planilha_ID = '{Planilha_ID}' ");

$vlParcela = 1;
$vlLinha = 0;
$vlValor = 0;
$vlData = '';


while($vlParcela <= $vlContar)
   {
	  /* Essa é a forma correta de incrementar as colunas */
          $vlValor = {ds}[$vlLinha][14];
	  $vlData = {ds}[$vlLinha][15];
	
	  sc_exec_sql("INSERT INTO d002_detalhes (Planilha_ID, Detalhe_Parcela, Detalhe_Valor,
               Detalhe_DtVencimento, Detalhe_DtPagamento,
               Detalhe_Descricao, Detalhe_Pago) values (
			   '{Planilha_ID}', '$vlParcela', '$vlValor', '$vlData',
               null, null, 0)");
	  
      $vlParcela++;
	  $vlLinha++;      
   }