[RESOLVIDO] ERRO unexpected '$this' (T_VARIABLE)

Testei com a data chumbada no código ‘01/11/2007’ e nada tbm… Muito estranho, pois no ORacle foi na boa. O {dataset} continua vazio somente com aqueles dados de parâmetros internos e meus dados nada…

Apague este campo do Controle: PERIODO_CONTROLE

Crie ele novamente, só para teste não use Select só deixe o campo somente como data:
Formato Interno:
AAAA-MM-DD

Ai veja com o 'echo SQL = ’ o que vai mostrar.

Fiz isso tbm mas não resolveu… o echo que eu dei no OnValidate não aparece nada nem $sql nem uma string qlqr (pq eu testei tbm…).
No modo debug ele ja mostra o $sql dentro de um output Ajax ela até pegou a data mas a informação nao veio … ficou igual quando eu coloquei a data direto na mão dentro do $sql.

Claro que o echo no onValidate não vai aparecer o código esta $sql esta entro do ‘botão’ que você criou, e nunca não vai passar pelo OnValidate.

Cole agora o código inteiro do botão aqui, e liste essa consulta aqui, mostrando umas datas como estão dentro da VIEW para vermos como elas estão lá os dados a formatação, para
poder formatar ‘certo’ o $sql, agora só falta 1% pra finalizar.

Desculpe minha inexperiência… :frowning:

código botão AJAX:

[code]/QUERY PARA SELECIONAR OS VALORES PARA CALCULAR O PREÇO MÉDIO PRODUÇÂO RAC/

$sql=“SELECT
EMPRESAS_IDEMPRESAS,
ENCARGOS,
VENDAINTERNAT,
VENDAINTERNAR,
PERIODO,
ANO,
MES
FROM
ROOT.PRECO_MEDIO_DADOS
WHERE
PERIODO=’{PERIODO_CONTROLE}’”;

sc_select (dados, $sql);

/VERIFICA EXCESSÃO CASO NAO TENHA DADOS NO SELECT/
if(empty({dados}))
{
sc_alert(‘ERRO na busca de dados!!!’);
}
else
{
echo ‘

’;
print_r({dados});
echo ‘
’;
 foreach({dados} as $dt)
 {
     //Aqui o resultado será linha por linha e acessado por
     {ENCARGOS}=$dt[1];//campo1 linha a linha
     {VENDAINTERNAT}=$dt[2];//campo2 linha a linha
    {VENDAINTERNAR}=$dt[3];//campo3 linha a linha
   
   
   
   [preco_medio_global] = ((( VENDAINTERNAR / 1000 ) /VENDAINTERNAT ) / ENCARGOS );
  
   
   

   
  /**
   * Update a record on another table
   

  // SQL statement parameters
  $update_table  = 'PRODUCAORAC';      // Table name
  $update_where  = "PERIODO={MES}"; // Where clause
  $update_fields = array("PRECO_MEDIO = [preco_medio_global]");

  // Update record
  $update_sql = 'UPDATE ' . $update_table
     . ' SET '   . implode(', ', $update_fields)
     . ' WHERE ' . $update_where;
  sc_exec_sql($update_sql); */
   
}

}
[/code]

Resultado da consulta da VIEW:

Código da View:

  CREATE OR REPLACE FORCE VIEW "ROOT"."PRECO_MEDIO_DADOS" ("EMPRESAS_IDEMPRESAS", "ENCARGOS", "VENDAINTERNAT", "VENDAINTERNAR", "PERIODO", "ANO", "MES") AS 
  SELECT
   cr.EMPRESAS_IDEMPRESAS,
   cr.ENCARGOS,
   pr.VENDAINTERNAT,
   pr.VENDAINTERNAR,
   pr.PERIODO,
   cr.ANO,
   cr.MES
FROM
   COMPLEMENTORAC cr, PRODUCAORAC pr
WHERE
   cr.EMPRESAS_IDEMPRESAS IN (SELECT EMPRESAS_IDEMPRESAS FROM COMPLEMENTORAC) AND
   cr.ANO = TO_CHAR(pr.PERIODO, 'YYYY') AND
   cr.MES = TO_CHAR(pr.PERIODO, 'MM') AND pr.EMPRESAS_IDEMPRESAS = cr.EMPRESAS_IDEMPRESAS;

código do Select na view com data 01/11/2007:

SELECT EMPRESAS_IDEMPRESAS, ENCARGOS, VENDAINTERNAT, VENDAINTERNAR, PERIODO, ANO, MES FROM ROOT.PRECO_MEDIO_DADOS WHERE PERIODO='01/11/2007';

Grato, por ter colocado o que pedi aqui, agora fica mas fácil para entender.

// Colocar formato interno do campo: PERIODO_CONTROLE como: DD/MM/AA

Agora copia e guarda todo o seu código que esta dentro deste botão em
um arquivo texto e salva.

Agora remove o código do botão e coloca isso:
/QUERY PARA SELECIONAR OS VALORES PARA CALCULAR O PREÇO MÉDIO PRODUÇÂO RAC/

$sql=“SELECT
EMPRESAS_IDEMPRESAS,
ENCARGOS,
VENDAINTERNAT,
VENDAINTERNAR,
PERIODO,
ANO,
MES
FROM
ROOT.PRECO_MEDIO_DADOS
WHERE
PERIODO=’{PERIODO_CONTROLE}’”;

echo 'SQL = '.$sql."
";

break;

Faça o teste, veja se ele vai montar a SQL corretamente com a data que você digitar no campo do controle, marque ela como ‘campo obrigatório’ no SC.


Depois que der certo a SQL, como você vai formatar este campo: PERIODO_CONTROLE, você falou que queria usar um SELECT? MM/AAAA

Cola aqui o código CREATE inteiro que usou para criar a VIEW, vamos otimizar ele para pesquisas.

Bom dia!

segue o código do $sql que está no echo:

SQL = SELECT EMPRESAS_IDEMPRESAS, ENCARGOS, VENDAINTERNAT, VENDAINTERNAR, PERIODO, ANO, MES FROM ROOT.PRECO_MEDIO_DADOS WHERE PERIODO='01/11/AA'

Só não sei pq não está entrando o ANO, fiz do jeito que vc falou Jailton.

Código da View:

CREATE OR REPLACE FORCE VIEW "ROOT"."PRECO_MEDIO_DADOS" ("EMPRESAS_IDEMPRESAS", "ENCARGOS", "VENDAINTERNAT", "VENDAINTERNAR", "PERIODO", "ANO", "MES") AS SELECT cr.EMPRESAS_IDEMPRESAS, cr.ENCARGOS, pr.VENDAINTERNAT, pr.VENDAINTERNAR, pr.PERIODO, cr.ANO, cr.MES FROM COMPLEMENTORAC cr, PRODUCAORAC pr WHERE cr.EMPRESAS_IDEMPRESAS IN (SELECT EMPRESAS_IDEMPRESAS FROM COMPLEMENTORAC) AND cr.ANO = TO_CHAR(pr.PERIODO, 'YYYY') AND cr.MES = TO_CHAR(pr.PERIODO, 'MM') AND pr.EMPRESAS_IDEMPRESAS = cr.EMPRESAS_IDEMPRESAS;

Preciso configurar para entrar a data do PERIODO_ALVO como MM/AAAA num combo pois o sistema antigo funciona assim e o cliente quer que seja do mesmo jeito, sendo assim o dia deve ser sempre 01/11/07, 01/12/07… e assim por diante.

Apaga a VIEW antiga: DROP VIEW ROOT.PRECO_MEDIO_DADOS

E recria ela assim:

CREATE OR REPLACE FORCE VIEW “ROOT”.“VIEW_PRECO_MEDIO_DADOS” (“EMPRESAS_IDEMPRESAS”, “ENCARGOS”, “VENDAINTERNAT”, “VENDAINTERNAR”, “PERIODO”, “ANO”, “MES”) AS
SELECT
cr.EMPRESAS_IDEMPRESAS,
cr.ENCARGOS,
pr.VENDAINTERNAT,
pr.VENDAINTERNAR,
TO_CHAR(pr.PERIODO, ‘MM’)||’/’||TO_CHAR(pr.PERIODO, ‘YYYY’) AS PERIODO,
cr.ANO,
cr.MES
FROM
COMPLEMENTORAC cr, PRODUCAORAC pr
WHERE
cr.EMPRESAS_IDEMPRESAS IN (SELECT EMPRESAS_IDEMPRESAS FROM COMPLEMENTORAC) AND
cr.ANO = TO_CHAR(pr.PERIODO, ‘YYYY’) AND
cr.MES = TO_CHAR(pr.PERIODO, ‘MM’) AND pr.EMPRESAS_IDEMPRESAS = cr.EMPRESAS_IDEMPRESAS;

Agora no ‘CONTROLE’ que você criou muda exclui o campo PERIODO_CONTROLE e recria ele como TEXTO 7 CARACTERES, e seleciona ele para ‘TIPO SELECT’

Seleciona SELECT automatico e cola isso NELE:

SELECT
DISTINCT
PERIODO
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS
ORDER
BY ANO DESC, MES

** Pronto pode testar Criar no BOTÃO, e pegar a $sql testada e ver se ficou certo.

No botão o $sql vai ficar assim:

$sql=“SELECT
EMPRESAS_IDEMPRESAS,
ENCARGOS,
VENDAINTERNAT,
VENDAINTERNAR,
PERIODO,
ANO,
MES
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS
WHERE
PERIODO=’{PERIODO_CONTROLE}’”;

echo 'SQL = '.$sql."
";

break;

** Observação sempre na base de dados que criar uma VIEW: começa o nome dela com VIEW_ e ser for uma tabela temporária com TMP_, isso ajuda a organizar o SGDB e o dBA agradece, ehehe
http://www.fabioprado.net/2013/07/quero-ser-dba-por-onde-devo-comecar.html

Opa a view funcionou no SGDB de boa… mas o campo tipo select do PERIODO_CONTROLE não deu certo:

ORA-01791: not a SELECTed expression

Ele estourou esse erro acima, o SQL do lookup foi este que vc me passou:

SELECT
DISTINCT
PERIODO
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS
ORDER
BY ANO DESC, MES

Configurou o campo assim:

Se foi igual e não funcionou ai faz assim, cria outra VIEW, vai ficar com 2, aquela primeira e mais esta:
CREATE OR REPLACE FORCE VIEW “ROOT”.“VIEW_PRECO_MEDIO_DADOS_PERIODO” (“PERIODO”) AS
SELECT
DISTINCT
PERIODO
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS
ORDER
BY ANO DESC, MES;

Ai usa no lookup do SELECT coloca:
SELECT
PERIODO
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS_PERIODO

  • Nas bases que eu uso com PDO ele aceita direto no SELECT.

Então eu testei essa SQL do PERIODO no SGDB e tbm não funciona… só se eu tirar o DISTINCT ai vai.
O Erro é o mesmo: ORA-01791: not a SELECTed expression

Procurei na internet o que causa o erro pelo que eu entendi é porque ta tentando usar o ORDER By só que com uma coluna de outra tabela no caso a COMPLEMENTORAC e o PERIODO pertence à PRODUCAORAC.

Outra pergunta, esse lookup aí vai me dar um combo para mês e outro para ano mas só dos que estão no banco(ano max:2014, foi o que veio no teste sem o DISTINCT)? Pq eu preciso de um combo normal de mês e ano que contenha os anos por exemplo de 2010 até 2025.

O DISTINCT no ORACLE deveria funcionar em cima da primeira VIEW criada normalmente, o SELECT DISTINC era para pegar somente o que tinha cadastrado nas tabelas.

Mas como você quer data futura, deixa queto isso e faz assim:

Exclui o CAMPO PERIODO controle e faz ele como data e testa:

E faz o teste no botão, se tá pegando certo:

$sql=“SELECT
EMPRESAS_IDEMPRESAS,
ENCARGOS,
VENDAINTERNAT,
VENDAINTERNAR,
PERIODO,
ANO,
MES
FROM
ROOT.VIEW_PRECO_MEDIO_DADOS
WHERE
PERIODO=’{PERIODO_CONTROLE}’”;

echo 'SQL = '.$sql."
";

break;

Acredito que tenha funcionado, mas não coloquei a opção combo box para a data, deixei pra colocar na mão msm digitado… segue o echo do $sql :

SQL = SELECT EMPRESAS_IDEMPRESAS, ENCARGOS, VENDAINTERNAT, VENDAINTERNAR, PERIODO, ANO, MES FROM ROOT.VIEW_PRECO_MEDIO_DADOS WHERE PERIODO='11/2007'

Agora ja dá pra voltar com o código antigo exceto o SQL que irei manter este acima… certo?

Coloca a opção para combo na data pra testar também, ai testa o código antigo com este SQL novo e coloca como ‘RESOLVIDO’ no tópico.

Então testei com o combo e não vai nem a pau… Era o mesmo erro que eu ja tinha me deparado antes

SQL = SELECT EMPRESAS_IDEMPRESAS, ENCARGOS, VENDAINTERNAT, VENDAINTERNAR, PERIODO, ANO, MES FROM ROOT.VIEW_PRECO_MEDIO_DADOS WHERE PERIODO=''

Sabe o que poderia ser? Eu somente mudei para combo tanto para mês quanto para o ano do PERIODO_CONTROLE.

Volta para a DATA e testa, ai se com combo não mostra envia para: bugs@netmake.com.br

Bom vou deixar sem combo mesmo e ver no que dá. Ainda estou tendo problemas no restante do código mas isso fica para o próximo post… rsrsrs. Se não vai ficar muita coisa pra ver nesse tópico.

Obrigado pela Força Jailton!