Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! Atualize hoje para o Scriptcase 9 e ganhe 35% de desconto! COMPRAR AGORA!

Autor Tópico: Undefined offset: 0.  (Lida 221 vezes)

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Undefined offset: 0.
« Online: Maio 18, 2017, 03:48:12 pm »
Estou tentando pegar os dados de um select apenas se retornar resultados. Porém quando não há retorno da erro de Undefined offset: 0.
Veja:

sc_lookup(dtvaloritens,"SELECT
                  SUM(i.fatvalortotal)
               FROM
                  tbl_faturamento_x_itens AS i
                    WHERE
                  i.fatcod = '[var_fatcod]'
                    AND
                  i.fatserie = '[var_fatserie]'
                    AND
                  i.orgcod = '[var_orgcod]'
               AND
                  i.prodcod =
                  (SELECT p.prodcod
                     FROM
                        tbl_produtos AS p
                     WHERE
                        p.prodcod = i.prodcod
                     AND
                        p.prodgerafinanceiro = '1')");

if (isset({dtvaloritens[0][0]})) {
   $varvalortotal={dtvaloritens[0][0]};
   $varvalorparcela = $varvalortotal/$varfatnumeroparcelas;
}

Mesmo assim continua aparecendo o erro  Undefined offset: 0.

Jailton

  • Expert
  • *****
  • Mensagens: 2450
Re:Undefined offset: 0.
« Responder #1 Online: Maio 18, 2017, 03:57:18 pm »
Use este código para fazer o sc_lookup:

/* Macro sc_lookup */

$sql ="
SELECT
    CodigoClienteID,
    NomeCliente,
    CPF
FROM
    clientes
";

sc_lookup(cli, $sql);

/* Erro no lookup */
if (FALSE === {cli}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({cli})) { /* EOF */

   sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");
}
else {

   /* Inclua aqui sua rotina de processamento */

    $_CodigoClienteID = {cli[0][0]};
    $_NomeCliente = {cli[0][1]};
    $_CPF = {cli[0][2]};
   
}
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Kleyber

  • Expert
  • *****
  • Mensagens: 2680
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #3 Online: Maio 18, 2017, 04:49:43 pm »
Veja bem, vou tratar por aqui pra ficar mais organizado. Desculpe ter tramitado no outro.
Seguinte.. Para o Kleyber:

1 - Execute a tua query com os valores nas variáveis pra ver se está funcionando corretamente;
R-> executa normalmente e traz nulo a soma, devido não existir nenhum produto com o parâmetro passado.

2 - Caso esteja funcionando corretamente, verifique as variáveis que estão sendo passadas para a query pra saber se estão de fato todas preenchidas;
R-> testei elas alterando o parâmetro para um existente e não deu o erro.

3 - Coloque todo o teu select em uma variável e coloque essa variável no sc_lookup. Depois use o if (isset({dtvaloritens}[0][0])).
R-> segue abaixo o código alterado conforme orientação. Mesmo assim continua o erro.

$sql = "SELECT
                  SUM(i.fatvalortotal)
               FROM
                  tbl_faturamento_x_itens AS i
                    WHERE
                  i.fatcod = '[var_fatcod]'
                    AND
                  i.fatserie = '[var_fatserie]'
                    AND
                  i.orgcod = '[var_orgcod]'
               AND
                  i.prodcod =
                  (SELECT p.prodcod
                     FROM
                        tbl_produtos AS p
                     WHERE
                        p.prodcod = i.prodcod
                     AND
                        p.prodgerafinanceiro = '1')"; /* aqui é o parâmetro que estou passando para verificar se irá gerar ou não o financeiro. que neste caso não irá gerar, porém não pode ocorrer erro*/

sc_lookup(dtvaloritens,$sql);
$varvalortotal = 0;

if (isset({dtvaloritens}[0][0])) { /*aqui tentei dessa forma que está e assim: {dtvaloresitens[0][0]}*/
   $varvalortotal={dtvaloritens[0][0]};
   $varvalorparcela = $varvalortotal/$varfatnumeroparcelas;
}

Tentei também fazer Jailton passou e ocorreu o mesmo erro.
O resultado do select em questão é NULO.

Kleyber

  • Expert
  • *****
  • Mensagens: 2680
Re:Undefined offset: 0.
« Responder #4 Online: Maio 18, 2017, 05:10:34 pm »
2 - Caso esteja funcionando corretamente, verifique as variáveis que estão sendo passadas para a query pra saber se estão de fato todas preenchidas;
R-> testei elas alterando o parâmetro para um existente e não deu o erro.

Aqui está o problema. Onde estão definidas estas variáveis: $varvalorparcela e $varfatnumeroparcelas?
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #5 Online: Maio 18, 2017, 05:21:22 pm »
Segue o código desse metodo completo para melhor entendimento:

sc_exec_sql("DELETE FROM tbl_recebimento_x_parcelas WHERE fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]");

sc_lookup(rstfatura,"SELECT
                                 fatdtlancamento,
                                 fatnumeroparcelas
                              FROM
                                 tbl_faturamento
                              WHERE
                                 fatcod = [var_fatcod]
                              AND
                                 fatserie = [var_fatserie]
                              AND
                                 orgcod = [var_orgcod]");

$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};

$sql = "SELECT
                  SUM(i.fatvalortotal)
               FROM
                  tbl_faturamento_x_itens AS i
                    WHERE
                  i.fatcod = '[var_fatcod]'
                    AND
                  i.fatserie = '[var_fatserie]'
                    AND
                  i.orgcod = '[var_orgcod]'
               AND
                  i.prodcod =
                  (SELECT p.prodcod
                     FROM
                        tbl_produtos AS p
                     WHERE
                        p.prodcod = i.prodcod
                     AND
                        p.prodgerafinanceiro = '1')";

sc_lookup(dtvaloritens,$sql);
$varvalortotal = 0;

if (isset({dtvaloritens[0][0]})) {
   $varvalortotal={dtvaloritens[0][0]};
   $varvalorparcela = $varvalortotal/$varfatnumeroparcelas;
}

if ($varvalortotal > 0) {
   
   for ($parc = 1; $parc <= $varfatnumeroparcelas; $parc++) {
      $dias=30*$parc;
      //$vardtvencimento = sc_data(date("dmY"), "ddmmaaaa", "+", $dias, 0, 0);
      $vardtvencimento = sc_data($varfatdtlancamento, "aaaa-mm-dd", "+", $dias, 0, 0);
      //$vardtvencimento = sc_date_conv($vardtvencimento,"ddmmaaaa","db_format");
      $now = date('Y-m-d H:i:s');

      sc_exec_sql("insert into tbl_recebimento_x_parcelas
(recparcela,orgcod,fatcod,fatserie,recdtlancamento,recdtvencimento,recvalorprincipal,recvalortotal,login) VALUES
   ($parc,[var_orgcod],[var_fatcod],[var_fatserie],'$varfatdtlancamento','$vardtvencimento','$varvalorparcela','$varvalorparcela','[usr_login]')");
   }
}

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #6 Online: Maio 18, 2017, 05:31:45 pm »
Não falei, mas minha versão do SC é 8.1.
Para o Jailton segue o codigo alterado conforme vc orientou:

sc_exec_sql("DELETE FROM tbl_recebimento_x_parcelas WHERE fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]");

sc_lookup(rstfatura,"SELECT
                                 fatdtlancamento,
                                 fatnumeroparcelas
                              FROM
                                 tbl_faturamento
                              WHERE
                                 fatcod = [var_fatcod]
                              AND
                                 fatserie = [var_fatserie]
                              AND
                                 orgcod = [var_orgcod]");

$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};

$sql = "SELECT
                  SUM(i.fatvalortotal)
               FROM
                  tbl_faturamento_x_itens AS i
                    WHERE
                  i.fatcod = '[var_fatcod]'
                    AND
                  i.fatserie = '[var_fatserie]'
                    AND
                  i.orgcod = '[var_orgcod]'
               AND
                  i.prodcod =
                  (SELECT p.prodcod
                     FROM
                        tbl_produtos AS p
                     WHERE
                        p.prodcod = i.prodcod
                     AND
                        p.prodgerafinanceiro = '1')";

sc_lookup(dtvaloritens,$sql);
$varvalortotal = 0;
$_dtvaloritens = {dtvaloritens[0][0]};

if (empty($_dtvaloritens)) {
//está entrando aqui, mas está dando o mesmo erro.
   $varvalortotal=0;
   $varvalorparcela=0;
} else {
   $varvalortotal=$_dtvaloritens;
   $varvalorparcela=$varvalortotal/$varfatnumeroparcelas;
   sc_error_message('Depois: '.$varvalortotal.'-');
}

if ($varvalortotal > 0) {
   
   for ($parc = 1; $parc <= $varfatnumeroparcelas; $parc++) {
      $dias=30*$parc;
      //$vardtvencimento = sc_data(date("dmY"), "ddmmaaaa", "+", $dias, 0, 0);
      $vardtvencimento = sc_data($varfatdtlancamento, "aaaa-mm-dd", "+", $dias, 0, 0);
      //$vardtvencimento = sc_date_conv($vardtvencimento,"ddmmaaaa","db_format");
      $now = date('Y-m-d H:i:s');

      sc_exec_sql("insert into tbl_recebimento_x_parcelas
(recparcela,orgcod,fatcod,fatserie,recdtlancamento,recdtvencimento,recvalorprincipal,recvalortotal,login) VALUES
   ($parc,[var_orgcod],[var_fatcod],[var_fatserie],'$varfatdtlancamento','$vardtvencimento','$varvalorparcela','$varvalorparcela','[usr_login]')");
   }
}

mesmo erro.

Jailton

  • Expert
  • *****
  • Mensagens: 2450
Re:Undefined offset: 0.
« Responder #7 Online: Maio 18, 2017, 05:49:45 pm »
Salva seu código original em arquivo texto e testa com este:

sc_exec_sql("DELETE FROM tbl_recebimento_x_parcelas WHERE fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]");

sc_lookup(rstfatura,"SELECT
                                 fatdtlancamento,
                                 fatnumeroparcelas
                              FROM
                                 tbl_faturamento
                              WHERE
                                 fatcod = [var_fatcod]
                              AND
                                 fatserie = [var_fatserie]
                              AND
                                 orgcod = [var_orgcod]");

$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};


/* Macro sc_lookup */

$sql ="
SELECT
   SUM(i.fatvalortotal)
FROM
    tbl_faturamento_x_itens AS i
WHERE
    i.fatcod = '[var_fatcod]' AND i.fatserie = '[var_fatserie]' AND
    i.orgcod = '[var_orgcod]' AND i.prodcod = (SELECT
                                                    p.prodcod
                                                FROM
                                                   tbl_produtos AS p
                                          WHERE
                                             p.prodcod = i.prodcod
                                          AND
                                             p.prodgerafinanceiro = '1')
";

sc_lookup(tot, $sql);

$_fatvalortotal={tot[0][0]};

if (empty($_fatvalortotal)) {
    $_fatvalortotal=0;
   $varvalorparcela=0;
} else {
    $varvalorparcela = $_fatvalortotal/$varfatnumeroparcelas;
}

Código: [Selecionar]
sc_exec_sql("DELETE FROM tbl_recebimento_x_parcelas WHERE fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]");

sc_lookup(rstfatura,"SELECT
                                 fatdtlancamento,
                                 fatnumeroparcelas
                              FROM
                                 tbl_faturamento
                              WHERE
                                 fatcod = [var_fatcod]
                              AND
                                 fatserie = [var_fatserie]
                              AND
                                 orgcod = [var_orgcod]");

$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};


/* Macro sc_lookup */

$sql ="
SELECT
SUM(i.fatvalortotal)
FROM
    tbl_faturamento_x_itens AS i
WHERE
    i.fatcod = '[var_fatcod]' AND i.fatserie = '[var_fatserie]' AND
    i.orgcod = '[var_orgcod]' AND i.prodcod = (SELECT
                                                    p.prodcod
                                                FROM
                                              tbl_produtos AS p
                      WHERE
                        p.prodcod = i.prodcod
                      AND
                        p.prodgerafinanceiro = '1')
";

sc_lookup(tot, $sql);

$_fatvalortotal={tot[0][0]};

if (empty($_fatvalortotal)) {
    $_fatvalortotal=0;
$varvalorparcela=0;
} else {
    $varvalorparcela = $_fatvalortotal/$varfatnumeroparcelas;
}
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #8 Online: Maio 19, 2017, 10:17:12 am »
Jailton, copiei e colei exatamente o código que me mandou no tramite 7 e continua o mesmo erro.
A versão do SC é 8.1 e PHP 5.2, não seria questão de versão não ?

Jailton

  • Expert
  • *****
  • Mensagens: 2450
Re:Undefined offset: 0.
« Responder #9 Online: Maio 19, 2017, 10:56:38 am »
Copie e guarde o seu código atual em um arquivo texto, o erro esta no inicio do seu código em:
$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};


Use este código no lugar para fazer o teste e depois complemente com a parte que falta dentro dele:
$sql ="
DELETE FROM
   tbl_recebimento_x_parcelas
WHERE
   fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]
";

sc_exec_sql($sql);


/* Macro sc_lookup */

$sql ="
SELECT
   fatdtlancamento,
   fatnumeroparcelas
FROM
   tbl_faturamento
WHERE
   fatcod = [var_fatcod] AND fatserie = [var_fatserie]
   AND orgcod = [var_orgcod]
";

sc_lookup(fatura, $sql);

/* Erro no lookup */
if (FALSE === {fatura}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({fatura})) { /* EOF */

   sc_error_message("Nenhuma Fatura Encontrada!<BR>");
}
else {

   /* Inclua aqui sua rotina de processamento */

    $varfatdtlancamento = {fatura[0][0]};
    $varfatnumeroparcelas = {fatura[0][1]};
   
   // COLOCAR OS OUTROS CÓDIGOS e CONTINUAR AQUI... para ele prosseguir com a lógica se somente achar os dados
   
   
}


Código: [Selecionar]
$sql ="
DELETE FROM
tbl_recebimento_x_parcelas
WHERE
fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]
";

sc_exec_sql($sql);


/* Macro sc_lookup */

$sql ="
SELECT
fatdtlancamento,
fatnumeroparcelas
FROM
tbl_faturamento
WHERE
fatcod = [var_fatcod] AND fatserie = [var_fatserie]
AND orgcod = [var_orgcod]
";

sc_lookup(fatura, $sql);

/* Erro no lookup */
if (FALSE === {fatura}) {
sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({fatura})) { /* EOF */

sc_error_message("Nenhuma Fatura Encontrada!<BR>");
}
else {

/* Inclua aqui sua rotina de processamento */

    $varfatdtlancamento = {fatura[0][0]};
    $varfatnumeroparcelas = {fatura[0][1]};

// COLOCAR OS OUTROS CÓDIGOS e CONTINUAR AQUI... para ele prosseguir com a lógica se somente achar os dados


}

O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Kleyber

  • Expert
  • *****
  • Mensagens: 2680
Re:Undefined offset: 0.
« Responder #10 Online: Maio 19, 2017, 02:18:26 pm »
Jailton, copiei e colei exatamente o código que me mandou no tramite 7 e continua o mesmo erro.
A versão do SC é 8.1 e PHP 5.2, não seria questão de versão não ?

SC 8.1 só deve ser usado com PHP 5.6
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #11 Online: Maio 19, 2017, 03:00:26 pm »
Mesmo erro Jailton. Veja o código como ficou agora:

$sql="DELETE FROM tbl_recebimento_x_parcelas WHERE fatcod = [var_fatcod] AND fatserie = [var_fatserie] AND orgcod = [var_orgcod]";

sc_exec_sql($sql);

$sql="SELECT
                                 fatdtlancamento,
                                 fatnumeroparcelas
                              FROM
                                 tbl_faturamento
                              WHERE
                                 fatcod = [var_fatcod]
                              AND
                                 fatserie = [var_fatserie]
                              AND
                                 orgcod = [var_orgcod]";

sc_lookup(rstfatura,$sql);

if (FALSE === {rstfatura}) {
   sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
}
elseif (empty({rstfatura})) { /* EOF */

   sc_error_message("Nenhuma Fatura Encontrada!<BR>");
}
else {
    $varfatdtlancamento={rstfatura[0][0]};
   $varfatnumeroparcelas={rstfatura[0][1]};
   
   $sql="SELECT
                  SUM(i.fatvalortotal)
               FROM
                  tbl_faturamento_x_itens AS i
                    WHERE
                  i.fatcod = '[var_fatcod]'
                    AND
                  i.fatserie = '[var_fatserie]'
                    AND
                  i.orgcod = '[var_orgcod]'
               AND
                  i.prodcod =
                  (SELECT p.prodcod
                     FROM
                        tbl_produtos AS p
                     WHERE
                        p.prodcod = i.prodcod
                     AND
                        p.prodgerafinanceiro = '1')";

   sc_lookup(dtvaloritens,$sql);

   if (FALSE === {dtvaloritens}) {
      sc_error_message("Ocorreu um erro no acesso ao banco de dados.<BR>");
   }
   elseif (empty({dtvaloritens})) { /* EOF */

      sc_error_message("Nenhuma Fatura Encontrada!<BR>");
   }
   else {
      $varvalortotal={dtvaloritens[0][0]};
      $varvalorparcela=$varvalortotal/$varfatnumeroparcelas;

      if ($varvalortotal > 0) {

         for ($parc = 1; $parc <= $varfatnumeroparcelas; $parc++) {
            $dias=30*$parc;
            //$vardtvencimento = sc_data(date("dmY"), "ddmmaaaa", "+", $dias, 0, 0);
            $vardtvencimento = sc_data($varfatdtlancamento, "aaaa-mm-dd", "+", $dias, 0, 0);
            //$vardtvencimento = sc_date_conv($vardtvencimento,"ddmmaaaa","db_format");
            $now = date('Y-m-d H:i:s');

            sc_exec_sql("insert into tbl_recebimento_x_parcelas
            (recparcela,orgcod,fatcod,fatserie,recdtlancamento,recdtvencimento,recvalorprincipal,recvalortotal,login) VALUES
      ($parc,[var_orgcod],[var_fatcod],[var_fatserie],'$varfatdtlancamento','$vardtvencimento','$varvalorparcela','$varvalorparcela','[usr_login]')");
         }
      } 
   }
}

Jailton

  • Expert
  • *****
  • Mensagens: 2450
Re:Undefined offset: 0.
« Responder #12 Online: Maio 19, 2017, 03:53:32 pm »
Ative modo Debug e veja o retorno das SQL para ver qual Query SQL não esta retornando os campos, corretamente, teste apenas
partes do código para ficar mais fácil achar, guarde ele todo em um arquivo texto, vá colando e testando pequenos trechos.
$varfatdtlancamento={rstfatura[0][0]};
$varfatnumeroparcelas={rstfatura[0][1]};


$varvalortotal={dtvaloritens[0][0]};




Observe as Query retornadas copie elas e execute no seu gerenciar de Banco de Dados, para validar elas:

« Última modificação: Maio 19, 2017, 03:57:04 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

pedronetocs

  • Novato
  • *
  • Mensagens: 18
Re:Undefined offset: 0.
« Responder #13 Online: Maio 19, 2017, 04:32:19 pm »
Faz mais de ano que não trabalha com o SC e fiquei bastante enferrujado.
Acredito que encontrei o que era, realmente com as funções que passou já é suficiente para resolver esse problema.
Era outro método que não estava me atentando a ele, que dependia desse método que analisamos aqui.

Agora sobre o debug, se tiver algum link ou procedimento de como debugar a aplicação eu gostaria muito de ver sobre. Pois facilitaria muito pra mim.

Desculpe pelo equivoco de minha parte e obrigado.

Jailton

  • Expert
  • *****
  • Mensagens: 2450
Re:Undefined offset: 0.
« Responder #14 Online: Maio 19, 2017, 05:09:14 pm »
Faz mais de ano que não trabalha com o SC e fiquei bastante enferrujado.
Acredito que encontrei o que era, realmente com as funções que passou já é suficiente para resolver esse problema.
Era outro método que não estava me atentando a ele, que dependia desse método que analisamos aqui.

Agora sobre o debug, se tiver algum link ou procedimento de como debugar a aplicação eu gostaria muito de ver sobre. Pois facilitaria muito pra mim.

Desculpe pelo equivoco de minha parte e obrigado.

Alem dos debugs do Scriptcase  'Telas que passei a print-screen', você pode fazer isso também:

Pode colocar nos códigos para ver o resultado:
1) echo 'SQL = '.$sql."<BR>";
    break;

2) var_dump($sql);
    break;

Ou usar essa biblioteca dBug que é um var_dump aperfeiçoado:
https://github.com/ospinto/dBug

Download: https://raw.githubusercontent.com/ospinto/dBug/master/dBug.php

Debugging é  A arte de encontrar e resolver bugs.
« Última modificação: Maio 19, 2017, 05:13:36 pm por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.