Problemas em calculos dinamicos quando usado em Totalizadores

(deepcat) #1

Olá,

Estamos enfrentando problemas ha alguns meses no processo de migracao de uma solucao para o ambiente do SC5 relacionada a calculos dinamicos.
Como compramos o produto tambéma a apenas alguns meses, procuramos trabalhar bastante no processo de compreender o funcionamento da ferramenta e buscar solucoes e até mesmo novas opções para as dificuldades que enfrentamos, mas nesta ultima estamos a mais de uma duas semanas tentando compreender ou solucionar de alguma forma e simplesmente nao encontramos uma alternativa viavel quando avaliamos o que já temos em producao em clientes disponibilizado em implementação Delphi.
Bom, o que acontece é o seguinte. Temos uma tabela de veiculos e outra de entregas realizadas relacionadas a cada veiculo cadastrado a partir de sua placa.

VEICULOS
-> PLACA
-> DESCRICAO
-> VALOR_POR_ENTREGA

ENTREGAS
-> PLACA
-> DATA_DA_ENTREGA
-> QTDENTREGA

Como cada veiculo custa um valor diferente para a entrega que irá realizar, entao temos o valor por entrega cadastrado na tabela de cadastro do veiculo.
Na sequencia, todos saem para fazer entregas e ao final temos de um periodo cruzamos a quantidade de entregas por placa com o valor por placa cadastrado no cadastro do veiculo e temos nosso relatorio no formato

ENTREGAS
-> PLACA
-> DATA_DA_ENTREGA
-> QTDENTREGA
-> ((COALESCE(VEICULOS.VALOR_POR_ENTREGA, 0) * ENTREGAS.QTDENTREGA)

A select para isto foi testada de varias formas e em todas as formas testadas funcionaram em todos os recursos do SC5, menos quando clicamos na coluna resultante para ser somada no totalizador.

Primeira SELECT

SELECT
ENTREGAS.PLACA,
ENTREGAS.DATA_DA_ENTREGA,
ENTREGAS.QTDENTREGA,
(COALESCE(VEICULOS.VALOR_POR_ENTREGA, 0) * ENTREGAS.QTDENTREGA) AS SALDODINAMICO
FROM ENTREGAS
LEFT JOIN VEICULOS ON VEICULOS.PLACA = ENTREGAS.PLACA

Segunda SELECT

SELECT
ENTREGAS.PLACA,
ENTREGAS.DATA_DA_ENTREGA,
ENTREGAS.QTDENTREGA,
(SELECT (COALESCE(VEICULOS.VALOR_POR_ENTREGA, 0) * ENTREGAS.QTDENTREGA) FROM VEICULOS WHERE VEICULOS.PLACA = ENTREGAS.PLACA) AS SALDODINAMICO
FROM ENTREGAS

E a terceira SELECT aplicada no LOOKUP de um campo tipo “NOVO CAMPO” (decimal) criado no SC5

SELECT (COALESCE(VEICULOS.VALOR_POR_ENTREGA, 0) * {ENTREGAS.QTDENTREGA}) FROM VEICULOS WHERE VEICULOS.PLACA = ‘{ENTREGAS.PLACA}’

Bom, conforme mencionei, todas elas funcionam em todos os recursos do SC5, mas

NAS DUAS PRIMEIRAS SELECTS que fazem parte da SQL da consulta, a ferramenta SC5 gera uma aplicacao que nao funciona (inicia pelo filtro e apos o submit do filtro dá uma mensagem conforme abaixo)

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Program Files\netmake\v5\wwwroot\scriptcase\app\sc_tickets\grid_consulta_entregas\grid_consulta_entregas_resumo.class.php on line 1765

NA ULTIMA SELECT, que faz parte de um campo decimal “NOVO CAMPO”, a ferramenta sequer gera a aplicacao. Conforme mencionei, se eu nao clicar neste campo para totalizador tudo funciona, mas se eu clicar ela deixa de gerar a aplicacao com a mensagem abaixo.

Gerando Fonte: grid_consulta_entregas (sc_tickets)

Aplicação: Iniciando geração…
Aplicação: Recuperando informações sobre os campos…
Aplicação: Recuperando informações da aplicação…
Consulta: Iniciando geração…
Aplicação: Gerando funções de lookup…
Consulta: Iniciando geração…
Aplicação: Gerando arquivo de inicialização…
Consulta: Gerando Grid…
Consulta: Gerando Detalhe…
Aplicação: Gerando funções de sumarização…
2 = include_once(C:\Program Files\netmake\v5\wwwroot\scriptcase\prod\third\adodb/drivers/adodb-pdosqlite.inc.php) [function.include-once]: failed to open stream: No such file or directory
C:\Program Files\netmake\v5\wwwroot\scriptcase\prod\third\adodb\adodb.inc.php 4028

E no geral ficamos sem ter mais o que tentar, pelo menos dentro do conhecimento que temos.
É claro que podemos criar um campo de totalizador na tabela de entregas, mas isto tiraria o dinamismo (os clientes querem poder mudar o valor dos veiculos a qualquer momento e desejam que isto se propague imediatamente em sua proxima consulta) e significaria uma reescrita da estratégia, armazenamento dos dados e consulta de quase 50% de todos os relatorios da aplicacao que estamos migrando.
Isto significa na prática para nós perder tudo o que esperavamos do SC5, pois nos renderá muito desempenho de um lado mas nos obrigará a realizar mudanças muito impactantes no produto que estamos portando para a web. Este produto já funciona bem e desejavamos migrá-lo para a web.
Menciono isto pois realmente gostamos da ferramenta e neste momento confesso que já esgotamos todas as nossas ideias de adaptação para tentar contornar o problema.

Paga não dizer que nao encontramos nenhuma saida, na linha de problema mencionado resultante da aplicacao das duas primeiras selects, se abrirmos o codigo fonte gerado

C:\Program Files\netmake\v5\wwwroot\scriptcase\app\sc_tickets\grid_consulta_entregas\grid_consulta_entregas_resumo.class.php on line 1765

Nesta linha mencionada (1765) encontramos o problema

nmgp_Form_Num_Val($valor_campo, “.”, “,”, “6”, “S”, “2”, “”“N:4”, “-”);

Esse “”“N:4” precisa de uma vírgula, ficando “”, “N:4”
ficando entao:

nmgp_Form_Num_Val($valor_campo, “.”, “,”, “6”, “S”, “2”, “”, “N:4”, “-”);

Amigos, se substituirmos todas estas ocorrencias no arquivo grid_consulta_entregas_resumo.class.php tudo funciona…
Poxa, se a ferramenta escrevesse essa virgula sozinha para nós seria perfeito.
Não fazemos ideia do motivo pelo qual isso ocorre, só conseguimos definir este padrao de comportamento.
No caso das consultas, como elas funcionam para todo o resto (o problema só ocorre quando tentamos usar o campo dinamico em um totalizador) então penso que não seja algo que escrevemos errado. (ou não, sei lá…)
Sabemos que escrever SQL usando AS “nomedocampo” dá um bocado de outros problemas, mas se tirarmos ele das duas primeiras consultas, entao o SC5 tenta chamaro campo como variavel dentro do php como
$(COALESCE(VEICULOS.VALCONTRANSPORTADO,0)___1)

Tem algo que possamos fazer ou é um bug ?

(thiagojfg) #2

Rapaz… ja tive problema parecido… vai no campo do scriptcase e coloca o campo para não usar configurações regionais… é um bugzinho mesmo.

(Diogo Toscano) #3

poderia verificar se esse problema ainda ocorre?

(deepcat) #4

Olá Diogo,

Amigo, nao tenho certeza se o problema ainda ocorre. Nas telas onde estava ocorrendo o problema eu usei a dica do colega acima e resolveu. Sempre que crio novas telas conforme mencionado, já aplico logo a tecnica que é para “rodar direitinho”.
Vou verificar esta questão e coloco aqui no forum se foi resolvido ou não. São varias telas que tenho com esta gambiarra mas basta testar em uma.
Contudo, neste momento, estou focado em tentar resolver o problema do post http://www.netmake.com.br/forum/index.php?topic=2422.0
Temos que colocar a solucao para rodar em ambiente linux e me estourou este problema. Durante a demonstracao. Ainda bem que não haviamos fechado nada ainda, pois se eu nao encontrar solucao, pelo menos nao estrago a relacao com o cliente. Mas tendo em vista isto, fique tranquilo que assim que solucionar faço os testes e informo aqui.

Grato pela atencao