Resolvido
1 votos
Gostaria de saber se é possível criar um relatório que liste os Pedidos de Venda de Encomenda e Entrega (Pedido/A ou /B) E que traga a Data de Entrega preenchida no Pedido de Venda Original que deu origem a esses pedidos automáticos após o faturamento.

Através do banco consigo chegar no resultado que preciso fazendo um select como no exemplo abaixo:

Pedido de venda original: 038821 | Data de entrega: 15 dias depois da data de emissão
Pedido de encomenda: 038821/A | Data de entrega: 30 dias depois da data de emissão (devido ao parâmetro da configuração geral que estipula o prazo de entrega para todos pedidos estar como padrão 30 dias)

select data_entrega from pedido_venda where cod_pedidov = left("038821/A",6)

resultado seria a data com 15 dias da emissão.

Porém no gerador de relatório talvez seja preciso criar um relacionamento entra a tabela de pedido_venda x pedido_venda do tipo:





Para depois criar o campo:

caption="Data de entrega do PV de origem"
fieldname="(select data_entrega from pedido_venda where cod_pedidov= left(${cod_pedidov},6))"
tablename="pedido_venda"
/>

Porém não consegui validar esse relacionamento e campo que incluí no mdmeta pedidovenda!personalizado
Postado em : Gerador de relatórios
Quarta, Junho 15 2016, 12:25 PM
Compartilhar este post:

Aceitar Resposta

Edson Reis
Edson Reis
Offline
Terça, Setembro 06 2016, 10:40 AM - #Link Permanente
Resolvido
1 votos
update pedido_venda pv set pv.data_entrega =
(select min(pv2.data_entrega) from pedido_venda pv2
inner join produto_pedidov ppv on ppv.pedidov=pv2.pedidov where ppv.saida=pv.auto_gerada_saida)
where pv.data_emissao='today' and pv.auto_gerada_saida is not null
A resposta está atualmente minimizada Show
Respostas (5)
  • Aceitar Resposta

    Quarta, Agosto 24 2016, 07:26 PM - #Link Permanente
    Resolvido
    0 votos
    Olá Edson, muito obrigado pela resposta, o campo no gerador de relatórios pelo que entendi e vi no seu teste (que testei também aqui no meu servidor) já supriria e resolveria metade dos nossos problemas.

    Porém me preocupa a outra metade, pois a data dos pedidos de entrega futura continuam incorretas em relação ao pedido pai, por isso a importância do UPDATE. Imagino que essa data será importante por exemplo para que a produção desses pedidos tenham datas inferiores a data de entrega do pedido pai (e não a da errada do filho). Fora a questão de consulta em tela.

    Tentei rodar o comando que me passou no IBExpert no servidor de homologação mas retornou um erro (imagem anexa) provavelmente na parte where ppv.saida=$.auto_gerada_saida)

    Gostaria de ter esse script temporário corrigindo a data dos pedidos incluindo uma condição para fazer update somente dos que estiverem com datas divergentes (where pv.data_entrega <> pv2.data_entrega) até chegarmos a uma solução definitiva.

    Sobre resolver isso com o consultor, já solicitei várias vezes uma solução durante as visitas e por e-mail para isso através de relatório, script e/ou banco mas nunca tive retorno, e agora começo a entender que é possível resolver (mesmo que paliativo). E mesmo que fosse esperar para resolver com consultor isso seria somente no mês que vem (data mais próxima que conseguiram me agendar...)
    A resposta está atualmente minimizada Show
  • Aceitar Resposta

    Edson Reis
    Edson Reis
    Offline
    Quarta, Agosto 24 2016, 12:36 PM - #Link Permanente
    Resolvido
    1 votos
    Pedro, bom dia!

    Vamos tentar solucionar este ítem de forma definitiva, fiquei aguardando para ver se outra pessoa ajudasse.

    Conforme explicado para criar um campo utilizando um select, o mais importante é descobrir qual Script utilizar.
    Antes é Importante entender seu processo:

    • Um pedido de venda é cadastrado, marcado como encomenda.
    • Assim que o pedido de encomenda é faturado, um pedido de entrega futura é criado.
    • A ligação entre o pedido de entrega futura e o pedido original, se dá através do campo AUTO_GERADA_SAIDA que está na tabela pedido_venda.
    • Então é preciso fazer um join que localiza o pedido pai, por este campo.
    • Para isto basta ligar com a tabela produto_pedidov, nesta tabela existe o campo SAÍDA, que a primeira nota fiscal é emitida.

    Opção 1: Criar campo no gerador utilizando extensibilidade utilizando a informação acima, criar o select acima e transformar em atributo
    select min(pv2.data_entrega) from pedido_venda pv2 inner join produto_pedidov ppv on ppv.pedidov=pv2.pedidov where ppv.saida=${auto_gerada_saida}
    Obs: foi necessário criar o atributo auto_gerada_saida


    Opção 2: Rodar comando para mudar a data do Filho com base na data de entrega do pedido pai.
    update pedido_venda pv set pv.data_entrega = (select min(pv2.data_entrega) from pedido_venda pv2 inner join produto_pedidov ppv on ppv.pedidov=pv2.pedidov where ppv.saida=$.auto_gerada_saida) where pv.cod_pedidov='040892/A'

    • Sugiro não usar a opção 2
    • Em anexo está o MDO extendido
    • Em anexo está o relatório de teste, onde testei na sua base de dados.


    Importante: este não é o procedimento padrão, normalmente um consultor deve visitar a empresa para realizar este atendimento mais técnico, mas vamos abrir esta exceção.

    Se sua pergunta foi respondida, clique em curtir e marcar que sua pergunta foi respondida..
    Curtiu
    1
    A resposta está atualmente minimizada Show
  • Aceitar Resposta

    Quarta, Agosto 24 2016, 10:43 AM - #Link Permanente
    Resolvido
    0 votos
    Além do comando SELECT funcionar como mencionado anteriormente, consegui montar o UPDATE em um ambiente de teste em MySQL 5.6 porém não consegui reproduzir o comando no IBExpert em minha base.

    Qual seria a versão do SQL?

    Alguém saberia o motivo do comando abaixo não funcionar? Qual parte está errada?

    Aqui o comando pode ser visto em funcionamento: http://sqlfiddle.com/#!9/ea62068/1

    CREATE TABLE pedido_venda
    (`cod_pedidov` varchar(8), `data_entrega` varchar(10))
    ;

    INSERT INTO pedido_venda
    (`cod_pedidov`, `data_entrega`)
    VALUES
    ('123456', '12.03.2017'),
    ('123456/A', '12.04.2017'),
    ('123456/B', '12.05.2017'),
    ('ABCDEF', '25.10.2018'),
    ('ABCDEF/1', '25.11.2018'),
    ('ABCDEF/2', '25.12.2018'),
    ('ZXYABC', '01.01.2019'),
    ('ZXYABC/1', '01.02.2019'),
    ('ZXYABC/2', '01.03.2019')
    ;

    UPDATE
    pedido_venda AS t1
    INNER JOIN
    pedido_venda AS t2
    SET
    t1.data_entrega = t2.data_entrega
    WHERE
    t2.cod_pedidov = left(t1.cod_pedidov,6)
    AND
    t1.data_entrega <> t2.data_entrega;


    No banco de dados utilizei somente o trecho do UPDATE e tentei algumas variações, inclusive tentando incluir um SELECT para buscar a t2.data_entrega mas sem sucesso até então.

    Uma vez resolvido o comando, o próximo passo seria deixar um Script no Agendador de Tarefas do Windows para fazer esse UPDATE a cada X minutos em todos pedidos de entrega e encomenda com data diferente da do pedido original.
    A resposta está atualmente minimizada Show
  • Aceitar Resposta

    Quinta, Junho 16 2016, 04:26 PM - #Link Permanente
    Resolvido
    0 votos
    Não estou conseguindo resolver o MDO.

    No Banco de Dados via comando SQL consegui encontrar o resultado com o INNER JOIN abaixo:

    select pv.cod_pedidov, pv.data_entrega, pvo.data_entrega
    from pedido_venda pvo
    inner join pedido_venda pv
    on left(pv.cod_pedidov,6)=pvo.cod_pedidov
    where pv.cod_pedidov='038376/A'


    Mas no MDO do pedidovenda!nome não consegui resolver, tentei usar:

    <attribute 
    name="DATA_ENTREGA_ORIGINAL"
    tablename="pedido_venda"
    fieldname="(select pvo.data_entrega
    from pedido_venda pvo
    inner join pedido_venda pv
    on left(pv.cod_pedidov,6)=$pvo.cod_pedidov
    where pv.cod_pedidov=$pv.cod_pedidov)"
    caption="custo_tabela"
    datatype="6"></attribute>


    Mas aparentemente ele reclama do "left", ver imagem.
    A resposta está atualmente minimizada Show
  • Aceitar Resposta

    Edson Reis
    Edson Reis
    Offline
    Quarta, Junho 15 2016, 03:17 PM - #Link Permanente
    Resolvido
    0 votos
    Pedro,
    Creio que novamente uma solução prática é criar os campos onde os subselects já tragam o resultado desejado.. e simplesmente clicar e arrastar este campo para dentro do relatório.

    Se vc analisar a resposta de sua pergunta anterior, verá que o uso do Subselect para criar atributo, te dá uma flexibilidade muito grande.
    Creio que este seja o melhor caminho para solucionar o seu problema.




    Título
    A resposta está atualmente minimizada Show
Sua Resposta

Copyright © 2016 Millennium Info™ - Todos os direitos reservados - Desenvolvido por TOTALLnet