× Linguagem de Programação ADVPL

Perguntas MATA103 - Dúvida no PE -> MT103VPC

Mais
10 anos 2 meses atrás - 10 anos 2 meses atrás #24977 por Darkbeo
Boa Tarde a todos!

Referente ao Post antigo, alguém teria alguma ideia de como fazer para exibir um único registro por fez na ordem do mais antigo para o mais novo?

Exemplo:

Produto: 09.5074

Pedido .... Data .... QTD
123456 .... 20140907 .... 21
456789 .... 20140908 .... 104
654321 .... 20140921 .... 164
987654 .... 20150101 .... 207

Preciso lançar um Documento de Entrada deste produto onde tenha 200 peças, seria necessário pegar 3 pedidos (21+104+75) para bater os 200, isso se eu pegar dos PC mais antigos para os mais novos. Então estou querendo fazer da seguinte forma, ao inserir um "Doc Entrada" pressiono F6 e ira exibir somente o registro 123456, ao pressionar novamente o F6 na linha debaixo será exibido somente o próximo registro [456789] e assim sucessivamente.

Segue o código atual que estou utilizando, porém ele só exibe o primeiro registro [123456] e quando a qtd é toda utilizada ele não exibe mais nenhum.
#include "rwmake.ch"
#include "topconn.ch"
#include "fileio.ch"

#IFNDEF CRLF
  #DEFINE CRLF ( chr(13)+chr(10) )
#ENDIF

/*
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma  ³MT103VPC  ºAutor  ³Valdemir Jose       º Data ³  09/04/13   º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDesc.     ³   Exibe ou não o Pedido de compra                          º±±
±±º          ³   .T. = Exibe                                              º±±
±±º          ³   .F. = Não Exibe                                          º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso       ³ AP                                                         º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
*/
User Function MT103VPC() //  U_MT103VPC()
Local lRet := .T.
Local aArea:= GetArea()
Local cQry := ""
Local cCod := ""
Local aCol1:= {}
Local aSQL1:= {}
Local nQtd := 0

If FunName() == "MATA103"

  If Type ("M->D1_COD") == "C"
    cCod := M->D1_COD
  Else
    cCod := aCols[n, GDFieldPos("D1_COD")]
  EndIf
  
  If SELECT("PEPC") > 0
    dbSelectArea("PEPC")
    dbCloseArea()
  Endif
  cQry := "SELECT TOP 1 C7.C7_PRODUTO, C7.C7_FORNECE, C7.C7_LOJA, " + chr(13)
  cQry += "       C7.C7_QUANT, C7.C7_QUJE, C7.C7_QTDACLA, " + chr(13)
  cQry += "       (C7.C7_QUANT - C7.C7_QUJE - C7.C7_QTDACLA) AS RESTO, " + chr(13)
  cQry += "       C7.C7_NUM, C7.C7_DATPRF AS DATA " + chr(13)
  cQry += "  FROM "+RetSQLname('SC7')+" C7 " + chr(13)
  cQry += " WHERE C7.C7_FILIAL = '"+xFilial("SC7")+"' " + chr(13)
  cQry += "   AND C7.C7_FORNECE = '"+cA100FOR+"' " + chr(13)
  cQry += "   AND C7.C7_LOJA = '"+cLoja+"' " + chr(13)
  cQry += "   AND C7.C7_PRODUTO = '"+cCod+"' " + chr(13)
  cQry += "   AND (C7.C7_QUANT - C7.C7_QUJE - C7.C7_QTDACLA) > 0 " + chr(13)
  cQry += "   AND C7.C7_RESIDUO = ' ' " + chr(13)
  cQry += "   AND C7.C7_CONAPRO <> 'B' " + chr(13)
  cQry += "   AND C7_TPOP <> 'P' " + chr(13)
  cQry += "   AND C7.D_E_L_E_T_ = ' ' " + chr(13)
  cQry += " ORDER BY C7.C7_DATPRF ASC "

  TCQuery cQry NEW ALIAS PEPC
  dbSelectArea("PEPC")
  dbgotop()

  If SC7->(C7_FORNECE+C7_LOJA+C7_PRODUTO) = cA100FOR+cLoja+cCod .And. SC7->C7_DATPRF = SToD(PEPC->DATA)
    lRet := .T.
  Else
    lRet := .F.
  EndIf
Else
  lRet := .T.
EndIf

PEPC->( dbCloseArea() )
RestArea(aArea)

Return lRet

Agradeço pela atenção de todos, Obrigado.
Ultima edição: 10 anos 2 meses atrás por Darkbeo. Razão: Correções

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 meses atrás #24999 por admin
Respondido por admin no tópico MATA103 - Dúvida no PE -> MT103VPC
Cara eu entendi seu problema, mas o buraco é mais embaixo, precisaria de algum vetor para adicionar os pedidos que já foram selecionados e suas respectivas quantidades, até tenho uma idéia de como fazer isso, mas ia ser muito punk, precisaria criar um vetor antes de chamar a tela do documento de entrada e neste vetor acrescentar, o item, o codigo do produto, o pedido que já foi selecionado, e a quantidade do mesmo, e na sua query vc precisaria a cada passagem eliminar os pedidos que já foram selecionados para aquele determinado produto.

Precisaria encontrar um ponto de entrada na abertura da tela de documento de entrada e criar tipo assim:

aPedSel := {}

depois um ponto de entrada qdo a pessoa seleciona o pedido de compras,

AAdd(aPedSel,{cItem,cCod,cPedido,nQuant})

e na query sempre deixar de buscar estes pedidos selecionados:

C7_NUM NOT IN(" + cPedidos (essa variavel seria a montagem de todos os pedidos já selecionados

tipo "'002300','20030','220039')"


Olha até dá pra fazer mas é um puta trabalhão :whistle: :whistle:

bom espero ter dado uma luz ai :)

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.080 segundos
Joomla templates by a4joomla