Ponto de Entrada
Descrição: | Este ponto de entrada está localizado na rotina Liberaçao OS (OFIOM140) e é executado no momento da liberação de um tipo de tempo que contenha peças. A finalidade deste ponto de entrada é permitir a manipulação / inserção de novos campos no momento de realizar a movimentação de transferência de armazéns na chamada da rotina MATA261 (tabela SD3). | ||||||
Localização: | Atualizações \ Mov Oficina \ Liberação OS | ||||||
Eventos: | //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Verifica se o todos os TT foram liberados ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ If FS_DISOSV() //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³PL 31 - Shark - Rubens ³ //³Verifica se ficou algum residuo de reserva sem estornar³ //³So Verifica se todas as pecas importadas de ORCAMENTO ³ //³Tiverem sido requisitadas na OS ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ nQtdeVSJ := FM_SQL("SELECT COUNT(*) " +; " FROM " + RetSQLName("VSJ") +; " WHERE VSJ_FILIAL = '" + xFilial("VSJ") + "'" +; " AND VSJ_NUMOSV = '" + VO1->VO1_NUMOSV + "'" +; " AND VSJ_QTDITE > 0" +; " AND D_E_L_E_T_ = ' '") IF nQtdeVSJ == 0 .and. FM_SALDORESV(,,VO1->VO1_NUMOSV) > 0 VE6->(dbSeek(xFilial("VE6")+VO1->VO1_NUMOSV+"3")) While !VE6->(Eof()) .and. VE6->VE6_FILIAL == xFilial("VE6"); .and. VE6->VE6_NUMOSV == VO1->VO1_NUMOSV; .and. VE6->VE6_INDREG == "3" //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³Processa somente registro de reserva com saldo³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ IF (VE6->VE6_QTDITE - VE6->VE6_QTDATE - VE6->VE6_QTDEST) > 0 DbSelectArea("SB1") DbSeek( xFilial("SB1") + VE6->VE6_GRUITE + VE6->VE6_CODITE ) oPeca:LoadB1() DbSelectArea("SB2") dbSetOrder(1) SB2->(DbSeek(xFilial("SB2")+SB1->B1_COD+GetMv("MV_RESITE"))) nSaldo := SaldoSB2() nQtdEst := FM_SALDORESV(VSJ->VSJ_GRUITE,VSJ->VSJ_CODITE,VO1->VO1_NUMOSV,VSJ->VSJ_LOTECT, VSJ->VSJ_NUMLOT) If nQtdEst > nSaldo nQtdEst := nSaldo EndIf IF nQtdEst > 0 // Adiciona cabecalho com numero do documento e data da transferencia modelo II If Len(aItensNew) == 0 aadd (aItensNew,{ NextNumero("SD3",2,"D3_DOC",.t.), ddatabase}) EndIf // DbSelectArea("SB5") DbSeek( xFilial("SB5") + SB1->B1_COD ) AADD( aItensNew , Array(nTamAEstq) ) nPosAEstq := Len(aItensNew) // Produto Origem aItensNew[nPosAEstq,01] := SB1->B1_COD aItensNew[nPosAEstq,02] := SB1->B1_DESC aItensNew[nPosAEstq,03] := SB1->B1_UM aItensNew[nPosAEstq,04] := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE"))) aItensNew[nPosAEstq,05] := IIf(Localiza(SB1->B1_COD),GetMv( "MV_RESLOC" )+Space(TamSx3("B5_LOCALI2")[1]-Len(GetMv("MV_RESLOC"))),Space(15)) // Produto Destino aItensNew[nPosAEstq,06] := SB1->B1_COD aItensNew[nPosAEstq,07] := SB1->B1_DESC aItensNew[nPosAEstq,08] := SB1->B1_UM aItensNew[nPosAEstq,09] := FM_PRODSBZ(SB1->B1_COD,"SB1->B1_LOCPAD") aItensNew[nPosAEstq,10] := IIf(Localiza(SB1->B1_COD),FM_PRODSBZ(SB1->B1_COD,"SB5->B5_LOCALI2"),Space(15)) // aItensNew[nPosAEstq,11] := VE6->VE6_NUMSER aItensNew[nPosAEstq,12] := VE6->VE6_LOTECT aItensNew[nPosAEstq,13] := VE6->VE6_NUMLOT aItensNew[nPosAEstq,14] := IIf( !Empty(VE6->VE6_LOTECT) , oPeca:LoteDtValid(VE6->VE6_LOTECT) , criavar('D3_DTVALID') ) aItensNew[nPosAEstq,15] := criavar('D3_POTENCI') aItensNew[nPosAEstq,16] := nQtdEst aItensNew[nPosAEstq,17] := criavar("D3_QTSEGUM") aItensNew[nPosAEstq,18] := criavar("D3_ESTORNO") aItensNew[nPosAEstq,19] := criavar("D3_NUMSEQ") aItensNew[nPosAEstq,20] := criavar("D3_LOTECTL") aItensNew[nPosAEstq,21] := aItensNew[nPosAEstq,14] nUltPos := 21 If l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_SERVIC") EndIf aItensNew[nPosAEstq,++nUltPos] := criavar("D3_ITEMGRD") If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS aItensNew[nPosAEstq,++nUltPos] := criavar("D3_IDDCF") EndIf If SD3->(FieldPos("D3_OBSERVA")) <> 0 aItensNew[nPosAEstq,++nUltPos] := criavar("D3_OBSERVA") EndIf // ENDIF // Atualiza a quantidade estornada do registro de ocorrencia ... dbSelectArea("VE6") RecLock("VE6",.f.) VE6->VE6_QTDEST += (VE6->VE6_QTDITE - VE6->VE6_QTDATE - VE6->VE6_QTDEST) MsUnLock() // ENDIF VE6->(dbSkip()) End ENDIF EndIf If (ExistBlock("OM140AP")) aItensNew := ExecBlock("OM140AP", .f., .f., {aItensNew}) EndIf | ||||||
Programa Fonte: | OFIOM140.PRW | ||||||
Função: | FS_LIBOSV() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
User Function OM140AP()
Local aItensAlt := ParamIxb[1]
MsgInfo("Ponto de Entrada OM140AP executado com sucesso!","Atenção")
Return aItensAlt