Árvore de páginas

Ponto-de-Entrada: AVALREGR - Define para bloqueio de armazéns e produtos


Versões:Microsiga Protheus 11
Compatível Países:Brasil
Sistemas Operacionais:Todos
Compatível às Bases de Dados:Todos
Idiomas:Espanhol , Inglês


Descrição: O ponto de entrada AVALREGR e utilizado para definir regra especifica definida pelo cliente para a realização de bloqueios de armazéns e produtos. Com este ponto de entrada e possível realizar bloqueio por consumo, produção e poder de terceiros.

Programa Fonte: AVALREGR.PRW

Sintaxe:

AVALREGR - Define para bloqueio de armazéns e produtos ( [ cCodOrig ], [ cLocOrig ], [ cTesOrig ], [ lHelp ], [ cCodDest ], [ cLocDest ], [ cTesDest ], [ cFilOrig ], [ cFilDest ] , [ cOP ]) --> lBloqueio


Parâmetros:


Nome
Tipo
Descrição
Default
Obrigatório
Referência
cCodOrig
Caracter
Código do Produto Origem





cLocOrig
Caracter
Armazém Origem





cTesOrig
Caracter
TES Origem





lHelp
Lógico
Indica se exibe Help na Tela





cCodDest
Caracter
Código do Produto Destino





cLocDest
Caracter
Armazém Destino





cTesDest
Caracter
TES Destino





cFilOrig
Caracter
Filial Origem





cFilDest
Caracter
Filial Destino





cOP
Caracter
Código da ordem de produção






Retorno: lBloqueio (logico)

True = Bloqueio Movimento / False = Permite Movimento


Exemplos
//Abaixo segue um exemplo utilizando a regra padrão de bloqueio
#INCLUDE "RWMAKE.CH"

USER FUNCTION AVALREGR()

Local lBloqueio := .F.
Local cFilBkp   := cFilAnt
Local aAreaAnt  := GetArea()
Local aAreaSB2  := SB2->(GetArea())
Local aAreaSF4  := SF4->(GetArea())
Local cTpBlqPro := '2'
Local cTpBlqTer := '3|4|5'
Local cTipoOrig := ''
Local cTipoDest := ''
Local cCodOrig  := PARAMIXB[1]	// Codigo do Produto Origem 
Local cLocOrig  := PARAMIXB[2]	// Codigo do Armazem de Origem
Local cTesOrig  := PARAMIXB[3]	// Codigo da TES de Origem
Local lHelp     := PARAMIXB[4]	// Indica se deseja mostrar Help
Local cCodDest  := PARAMIXB[5]	// Codigo do Produto Destino
Local cLocDest  := PARAMIXB[6]	// Codigo do Local Destino
Local cTesDest  := PARAMIXB[7]	// Codigo da TES de Destino
Local cFilOrig  := PARAMIXB[8]	// Codigo da Filial de Origem
Local cFilDest  := PARAMIXB[9]	// Codigo da Filial Destino
Local cOP       := PARAMIXB[10] // Codigo da ordem de produção

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Validacao padrao de bloqueio de produtos/armazens                      ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If SB2->(FieldPos("B2_TIPO")) > 0 .And. SB2->(FieldPos("B2_BLOQUEI")) > 0	
    Do Case	// Analise de bloqueio para MOVIMENTOS INTERNOS		
        Case !Empty(cCodOrig) .And. Empty(cCodDest) .And. Empty(cTesOrig) .And. Empty(cTesDest)		
            dbSelectArea("SB2") 
            dbSetOrder(1) 
            If dbSeek(xFilial("SB2")+cCodOrig+cLocOrig) 
                If Empty(cOp) .And. SB2->B2_BLOQUEI $ '2|4' //Bloqueia Consumo	
                    If lHelp 
                        Help(" ",1,"BLOQLOC1")
                    EndIf
                    lBloqueio := .T.
                ElseIf !Empty(cOp) .And. SB2->B2_BLOQUEI $ '3|4'	//Bloqueia Producao
                    If lHelp
                     Help(" ",1,"BLOQLOC2")
                    EndIf
                    lBloqueio := .T.
                EndIf
            EndIf		// Analise de bloqueio para MOVIMENTOS INTERNOS	(TRANSFERENCIAS)		
        
        Case !Empty(cCodOrig) .And. !Empty(cCodDest) .And. Empty(cTesOrig) .And. Empty(cTesDest) // Analisa Movimento de ORIGEM
            dbSelectArea("SB2")
            dbSetOrder(1)
            If dbSeek(xFilial("SB2")+cCodOrig+cLocOrig)
                If Empty(cOp) .And. SB2->B2_BLOQUEI $ '2|4' //Bloqueia Consumo
                    If lHelp 
                        Help(" ",1,"BLOQLOC1")
                    EndIf
                    lBloqueio := .T.
                ElseIf !Empty(cOp) .And. SB2->B2_BLOQUEI $ '3|4' //Bloqueia Producao
                    If lHelp
                        Help(" ",1,"BLOQLOC2")
                    EndIf 
                    lBloqueio := .T.
                EndIf
                cTipoOrig := If(Empty(SB2->B2_TIPO),"1",SB2->B2_TIPO)             
			EndIf // Analisa Movimento de DESTINO
            
            dbSelectArea("SB2")
            dbSetOrder(1)
            If !lBloqueio .And. dbSeek(xFilial("SB2")+cCodDest+cLocDest)
                If Empty(cOp) .And. SB2->B2_BLOQUEI $ '2|4' //Bloqueia Consumo
                    If lHelp
                        Help(" ",1,"BLOQLOC1")
                    EndIf 
                    lBloqueio := .T.
                ElseIf !Empty(cOp) .And. SB2->B2_BLOQUEI $ '3|4' //Bloqueia Producao
                    If lHelp 
                        Help(" ",1,"BLOQLOC2") 
                    EndIf
                    lBloqueio := .T.
                EndIf
                cTipoDest := If(Empty(SB2->B2_TIPO),"1",SB2->B2_TIPO)
             EndIf //-- Comparativo entre ORIGEM Versus DESTINO
            
            If !lBloqueio .And. (cTipoDest # cTipoOrig)
                Help(" ",1,"BLOQLOC5")
                lBloqueio := .T.
            EndIf // Analise de bloqueio para DOCUMENTO ENTRADA/SAIDA
            
        Case !Empty(cCodOrig) .And. Empty(cCodDest) .And. !Empty(cTesOrig) .And. Empty(cTesDest) 
            dbSelectArea("SB2") 
            dbSetOrder(1) 
            If dbSeek(xFilial("SB2")+cCodOrig+cLocOrig)
                dbSelectArea('SF4')
                dbSetOrder(1)
                If dbSeek(xFilial("SF4")+cTesOrig) .And. SF4->F4_ESTOQUE == "S" // Caso seja movimentacao no armazem proprio NAO permitir PODER3
                    If (SB2->B2_TIPO $ cTpBlqPro) .And. (SF4->F4_PODER3 $ "R|D")
                        If lHelp
                            Help(" ",1,"BLOQLOC3")
                        EndIf
                        lBloqueio := .T. // Caso seja movimentacao no armazem terceiros NAO permitir TES sem controle de PODER3
                    ElseIf (SB2->B2_TIPO $ cTpBlqTer) .And. !(SF4->F4_PODER3 $ "R|D")
                        If lHelp
                            Help(" ",1,"BLOQLOC4")
                        EndIf
                        lBloqueio := .T. // Bloqueia Producao
                    ElseIf !Empty(cOp) .And. SB2->B2_BLOQUEI $ '3|4'
                        If lHelp
                            Help(" ",1,"BLOQLOC2")
                        EndIf
                        lBloqueio := .T.
                    EndIf
                EndIf
            EndIf // Analise de bloqueio para DOCUMENTO ENTRADA/SAIDA (TRANSFERENCIAS)
            
        Case !Empty(cCodOrig) .And. !Empty(cCodDest) .And. !Empty(cTesOrig) .And. !Empty(cTesDest) //-- Analise da filial ORIGEM
            cFilAnt := cFilOrig
            dbSelectArea("SB2")
            dbSetOrder(1)
            If dbSeek(xFilial("SB2")+cCodOrig+cLocOrig)
                dbSelectArea('SF4')
                dbSetOrder(1)
                If dbSeek(xFilial("SF4")+cTesOrig) .And. SF4->F4_ESTOQUE == "S" // Caso seja movimentacao no armazem proprio NAO permitir PODER3
                    If (SB2->B2_TIPO $ cTpBlqPro) .And. (SF4->F4_PODER3 $ "R|D")
                        If lHelp
                            Help(" ",1,"BLOQLOC3")
                        EndIf
                        lBloqueio := .T. // Caso seja movimentacao no armazem terceiros NAO permitir TES sem controle de PODER3
                    ElseIf (SB2->B2_TIPO $ cTpBlqTer) .And. !(SF4->F4_PODER3 $ "R|D")
                        If lHelp
                            Help(" ",1,"BLOQLOC4")
                        EndIf
                        lBloqueio := .T.
                    EndIf
                    cTipoOrig := If(Empty(SB2->B2_TIPO),"1",SB2->B2_TIPO)
                 EndIf
            EndIf //-- Analise da filial DESTINO 
            
            cFilAnt := cFilDest
            dbSelectArea("SB2")
            dbSetOrder(1)
            If !lBloqueio .And. dbSeek(xFilial("SB2")+cCodDest+cLocDest)
                dbSelectArea('SF4')
                dbSetOrder(1)
                If dbSeek(xFilial("SF4")+cTesDest) // Caso seja movimentacao no armazem proprio NAO permitir PODER3
                    If (SB2->B2_TIPO $ cTpBlqPro) .And. (SF4->F4_PODER3 $ "R|D") 
                        If lHelp
                            Help(" ",1,"BLOQLOC3") 
                        EndIf 
                        lBloqueio := .T. // Caso seja movimentacao no armazem terceiros NAO permitir TES sem controle de PODER3
                    ElseIf (SB2->B2_TIPO $ cTpBlqTer) .And. !(SF4->F4_PODER3 $ "R|D")
                        If lHelp 
                            Help(" ",1,"BLOQLOC4")
                        EndIf 
                        lBloqueio := .T. 
                    EndIf
                    cTipoDest := If(Empty(SB2->B2_TIPO),"1",SB2->B2_TIPO)
                 EndIf
            EndIf //-- Comparativo entre ORIGEM Versus DESTINO 
            
            If !lBloqueio .And. (cTipoDest # cTipoOrig)
                Help(" ",1,"BLOQLOC5") 
                lBloqueio := .T.
            EndIf // Restaura Filial Origem
            cFilAnt:=cFilBkp	
    EndCase
EndIf
        
RestArea(aAreaSF4)
RestArea(aAreaSB2)
RestArea(aAreaAnt)

Return lBloqueio