Autor Tópico: (RESOLVIDO) - Invalid argument supplied for foreach()  (Lida 2643 vezes)

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
(RESOLVIDO) - Invalid argument supplied for foreach()
« Online: Fevereiro 03, 2014, 11:23:46 am »
Prezados, já tenho uma app para tratar parcelamentos e funciona muito bem.. no entanto estou fazendo uma outra app aqui
usando o mesmo código só que nao funciona..sempre dá erro : Invalid argument supplied for foreach()
Código: [Selecionar]
//ESSE GRUPO DE CODIGO GERA AS PARCELAS
sc_lookup(ds_p,"SELECT descricao, quantidade
FROM
  dbo.prazos_pagamento
WHERE
    (idprazo = '{condicao}')");
$CondicaoPagto = {ds_p[0][0]}; // aqui retorno os valores por ex: 30/60
$numero = {ds_p[0][1]};// aqui retorno o numero de parcelas = 2


sc_lookup(dataset,"SELECT idcontas, idcliente, valor, obs, login, forma_pagamento, identificador
FROM         dbo.contas_receber
WHERE     (idcontas = [conta])");

$conta = {dataset[0][0]};
$cliente         = {dataset[0][1]};
$valor = {dataset[0][2]};
$obs = {dataset[0][3]};
$login = {dataset[0][4]};
$forma = {dataset[0][5]};
$identificador         = {dataset[0][6]};

// até aqui esta funcionando tudo....
$condicao=explode("/",$CondicaoPagto);
  $parcela = 1;

$lancamento = Date('Ymd G:i:s');
foreach($condicao as $dias)// a partir daqui dá o erro...e nao estou achando onde está
{

$vencimentoF = sc_date_conv({vencimento},"ddmmaaaa","aaaammdd");
$vencimento = sc_date($vencimentoF, "aaaammdd "," + ", $dias, 0, 0);
$valorparcela = $valor / $numero;
$insert_table  = 'contas_receber';      // Table name
$insert_fields = array(   // Field list, add as many as needed
              'idcliente'         => "'$cliente'",
'data_lancamento' => "'$lancamento'",
'vencimento' => "'$vencimento'",
'valor' => "'$valorparcela'",
'obs' => "'$obs'",
'login' => "'$login'",        //REVISEI E TODOS OS CAMPOS ESTAO CORRETOS COM A TABELA
'status' => "'1'",
'parcela' => "'$parcela'",
'forma_pagamento' => "'$forma'",
'identificador'         => "'$identificador'",

 );
// Insert record
$insert_sql = 'INSERT INTO ' . $insert_table
    . ' ('   . implode(', ', array_keys($insert_fields))   . ')'
    . ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';

sc_exec_sql($insert_sql);
$parcela++;
}

ONDE ESTÁ A O ERRO?
« Última modificação: Fevereiro 03, 2014, 12:19:01 pm por Jean Matos »
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6264
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Invalid argument supplied for foreach()
« Responder #1 Online: Fevereiro 03, 2014, 11:41:53 am »
provavelmente um dos seus selects não esta retornando valor, furando o foreach

Coloque em modo debug e analise os selects.



Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Invalid argument supplied for foreach()
« Responder #2 Online: Fevereiro 03, 2014, 12:03:33 pm »
Já estou rodando no debug...

(mssqlnative): SELECT idcontas, idcliente,convert(char(23),vencimento,121), valor, obs, login, forma_pagamento, identificador FROM dbo.contas_receber WHERE (idcontas = 12) 
12 2 2014-02-10 1000 jean.matos 3 89FD0F9209
(mssqlnative): SELECT   descricao,   quantidade FROM dbo.prazos_pagamento WHERE (idprazo = '6') 
00/30/60  tem que executar o $condicao=explode("/",$CondicaoPagto); só que nao esta dando retorno..  só retorna "Array"
3

as saidas estao corretas.
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6264
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Invalid argument supplied for foreach()
« Responder #3 Online: Fevereiro 03, 2014, 12:04:31 pm »
coloque após o explode:

var_dump($condicao);

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Invalid argument supplied for foreach()
« Responder #4 Online: Fevereiro 03, 2014, 12:07:00 pm »
coloque após o explode:

var_dump($condicao);

Retorna : string(1) "6"
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Invalid argument supplied for foreach()
« Responder #5 Online: Fevereiro 03, 2014, 12:17:10 pm »
parece que resolvi..
o SC é meio tosco em algumas coisas..  ele confunde $condicao com {condicao}
daí mudei para {prazo}.. vualá...
Mas tb..hoje é segunda feira... o teor de sangue nas veias alcoólicas ainda está alto..
Obrigado Novamente.

Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Invalid argument supplied for foreach()
« Responder #6 Online: Fevereiro 03, 2014, 12:20:15 pm »
parece que resolvi..
o SC é meio tosco em algumas coisas..  ele confunde $condicao com {condicao}
daí mudei para {prazo}.. vualá...
Mas tb..hoje é segunda feira... o teor de sangue nas veias alcoólicas ainda está alto..
Obrigado Novamente.
codigo completo e funcionando

//ESSE GRUPO DE CODIGO GERA AS PARCELAS



sc_lookup(dataset,"SELECT idcontas, idcliente,vencimento, valor, obs, login, forma_pagamento, identificador
FROM         dbo.contas_receber
WHERE     (idcontas = [conta])");

   $conta          = {dataset[0][0]};
   $cliente       = {dataset[0][1]};
   $valor          = {dataset[0][2]};
   $vence          = {dataset[0][3]};
   $obs          = {dataset[0][4]};
   $login         = {dataset[0][5]};
   $forma          = {dataset[0][6]};
   $identificador    = {dataset[0][7]};


   sc_lookup(ds_p,"SELECT   descricao,   quantidade
            FROM
                  dbo.prazos_pagamento
            WHERE
                  (idprazo = {prazo})");
$CondicaoPagto   = {ds_p[0][0]};
$numero         = {ds_p[0][1]};   
      
      
   $condicao=explode("/",$CondicaoPagto);
      $parcela = 1;

$lancamento = Date('Ymd G:i:s');
foreach($condicao as $dias)
   {
      
      $vencimentoF = sc_date_conv($vence,"ddmmaaaa","aaaammdd");
      $vencimento = sc_date($vencimentoF, "aaaammdd "," + ", $dias, 0, 0);
      $valorparcela = $valor / $numero;
      $insert_table  = 'contas_receber';      // Table name
      $insert_fields = array(   // Field list, add as many as needed
        'idcliente'       => "'$cliente'",
      
   
 );
// Insert record
$insert_sql = 'INSERT INTO ' . $insert_table
    . ' ('   . implode(', ', array_keys($insert_fields))   . ')'
    . ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';

sc_exec_sql($insert_sql);
$parcela++;
}
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 6264
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:(RESOLVIDO) - Invalid argument supplied for foreach()
« Responder #7 Online: Fevereiro 03, 2014, 12:21:18 pm »
fica como sugestão:

toda variavel local que criar use um prefixo padrão, eu por exemplo usaria $_condicao.


Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:(RESOLVIDO) - Invalid argument supplied for foreach()
« Responder #8 Online: Fevereiro 03, 2014, 12:22:47 pm »
fica como sugestão:

toda variavel local que criar use um prefixo padrão, eu por exemplo usaria $_condicao.

Correto... passarei a usar desta forma..Obrigado novamente.
TFA.
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775