Imprimi Página | Fechar janela

MT105FIM

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44263
Data da Impressão: sexta-feira, 29 de março de 2024 at 08:56


Topico: MT105FIM

Postado por: FR_LACERDA
Assunto: MT105FIM
Data Postagem: quarta-feira, 24 de maio de 2023 at 11:54

Pessoal bom dia, estou com a seguinte duvida, quero que toda solicitação criada no armazém e que esteja com o Armazém ti, caiu como bloqueada, mas ai que começa meu problema, quando eu crio a solicitação so bloqueia o ultimo item da solicitação.

Segue código, se puderem me ajudar agradeço..

#INCLUDE ‘PROTHEUS.CH‘


User Function MT105FIM()


     Local _AreaCP          :=SCP->(getarea())


     Local nFilial
     Local cProduto
     Local nNumSa         := SCP->CP_NUM
     Local cArmazem
     Local cItem
     Local nOpcap           := PARAMIXB
   

     DbSelectArea(‘SCP‘)
     SCP->(DbSetOrder(2))

     While !SCP->(eof())
          nFilial        := SCP->CP_FILIAL
          cProduto     := SCP->CP_PRODUTO
          
          cArmazem      := SCP->CP_LOCAL
          cItem           := SCP->CP_ITEM

          IF SCP->(dbSeek(CP_FILIAL+CP_PRODUTO+nNumSa+CP_ITEM))
               IF cArmazem == ‘TI‘

                    IF nOpcap == 1

                         DbSelectArea("SCP")
                         (Reclock("SCP",.F.))

                         CP_STATSA := ‘B‘
                         Msunlock()
                         SCP->(DbCloseArea())

                         //     msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")
                    ELSEIF nOpcap == 2
                         DbSelectArea("SCP")
                         dbSetOrder(2)
                         SCP->(dbSeek(CP_FILIAL+CP_PRODUTO+CP_NUM+CP_ITEM))

                         DbSelectArea("SCP")
                         (Reclock("SCP",.F.))
                         CP_STATSA := ‘B‘
                         Msunlock()
                         SCP->(DbCloseArea())

                         //     msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")


                    ENDIF
               ENDIF
          ENDIF
          SCP->(DbSkip())
     ENDDO
     Restarea(_AreaCP)

Return



Respostas:

Postado Por: EMERSON.EN
Data Postagem: quarta-feira, 24 de maio de 2023 at 13:17

#INCLUDE 'PROTHEUS.CH'


User Function MT105FIM()
Local _AreaCP := SCP->(getarea())
Local nNumSa := SCP->CP_NUM
Local cFilSCP := xFilial("SCP")

     SCP->(dbSetOrder(1)) // CP_FILIAL+CP_NUM+CP_ITEM+CP_EMISSAO
     SCP->(dbSeek(cFilSCP+nNumSa))

     WHILE !SCP->(EOF()) .AND. (SCP->CP_FILIAL = cFilSCP) .AND. (SCP->CP_NUM = nNumSa)
          IF SCP->CP_LOCAL == 'TI'
               Reclock("SCP",.F.)
               SCP->CP_STATSA := 'B'
               SCP->(Msunlock())
               // msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")
          ENDIF
          SCP->(dbSkip())
     ENDDO

     Restarea(_AreaCP)

Return




Postado Por: FR_LACERDA
Data Postagem: quarta-feira, 24 de maio de 2023 at 14:06

Boa tarde amigo Emerson.


Deu tudo certinho, vou so aplicar a regra que estou fazendo aqui, muito obrigado por essa força, eu estava tendo dificuldade no while.


Vou validar os outros pontos aqui, e logo vou posta o codigo que fiz com base no seu.



Postado Por: TPEREIRA
Data Postagem: quarta-feira, 24 de maio de 2023 at 16:35

Tente assim


#include "PROTHEUS.CH"

User Function MT105FIM()
   Local _AreaCP := SCP->(getarea())
   Local nFilial
   Local cProduto
   Local nNumSa := SCP->CP_NUM
   Local cArmazem
   Local cItem
   Local nOpcap := PARAMIXB

   DbSelectArea("SCP")
   SCP->(DbSetOrder(2))

   While !SCP->(eof())
      nFilial := SCP->CP_FILIAL
      cProduto := SCP->CP_PRODUTO

      cArmazem := SCP->CP_LOCAL
      cItem := SCP->CP_ITEM

      IF SCP->(dbSeek(CP_FILIAL+CP_PRODUTO+nNumSa+CP_ITEM))
        IF cArmazem == "TI"
            IF nOpcap == 1
               DbSelectArea("SCP")
               (Reclock("SCP", .F.))

               CP_STATSA := "B"
               Msunlock()
               SCP->(DbCloseArea())

               // msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")
            ELSEIF nOpcap == 2
               DbSelectArea("SCP")
               dbSetOrder(2)
               SCP->(dbSeek(CP_FILIAL+CP_PRODUTO+CP_NUM+CP_ITEM))

               DbSelectArea("SCP")
               (Reclock("SCP", .F.))
               CP_STATSA := "B"
               Msunlock()
               SCP->(DbCloseArea())

               // msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")
            ENDIF
        ENDIF
      ENDIF
      SCP->(DbSkip())
   ENDDO
   Restarea(_AreaCP)

   Return



Postado Por: FR_LACERDA
Data Postagem: quinta-feira, 1 de junho de 2023 at 09:38

Bom dia, turma!

Com a solução do Emerson conseguir resolver meu problema, e a solução Pereira abriu mais minha logica, agradeço imensamente a ajuda dos amigos, segue codigo que eu usei para resolver meu problema:

User Function MT105FIM()
     Local AreaCP      := SCP->(getarea())
     Local nNumSa      := SCP->CP_NUM
     Local cFilSCP      := xFilial("SCP")
     Local cArmazem     := SuperGetMv("MV_AMZTI",.F., .F.)
     Local nOpcap        := PARAMIXB

     SCP->(dbSetOrder(1)) // CP_FILIAL+CP_NUM+CP_ITEM+CP_EMISSAO
     SCP->(dbSeek(cFilSCP+nNumSa))

     WHILE !SCP->(EOF()) .AND. (SCP->CP_FILIAL = cFilSCP) .AND. (SCP->CP_NUM = nNumSa)
          IF SCP->CP_LOCAL == cArmazem
               IF nOpcap == 1
                    Reclock("SCP",.F.)
                    SCP->CP_STATSA := ‘B‘
                    SCP->(Msunlock())
                    //SAINC(nNumSa)
                    // msginfo("Solicitação ao Armazem Nº " + nNumSa +" Bloqueada, solicite liberação do Gestor","Aviso")
               ELSEIF nOpcap == 2
                    Reclock("SCP",.F.)
                    SCP->CP_STATSA := ‘B‘
                    SCP->(Msunlock())
                    //SAALT(nNumSa)
               ENDIF
          //     TstEW(nNumSa)
          ELSEIF SCP->CP_LOCAL != cArmazem
               Reclock("SCP",.F.)
               SCP->CP_STATSA := ‘L‘
               SCP->(Msunlock())
          ENDIF
          SCP->(dbSkip())
     ENDDO

     Restarea(AreaCP)

Return




Imprimir Página | Fechar Janela