Ponto de Entrada
Descrição: | Este ponto de entrada está localizado na rotina Cancelamento OS (OFIOM150) e é executado no momento do cancelamento 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 \ Cancelamento OS | ||||||
Eventos: | Static Function OM150ESTRE(cNumOsv) Local aItensNew := {} Local nQtdEst Local nSaldoSB2 Local aProdEst := {} // Contem os itens para estorno Local nPosProdEst Local oPeca := DMS_Peca():New() Local nTamAEstq := 0 Local nPosAEstq Local nUltPos Local l261IntWMS := a261IntWMS() /////////////////////////////////////////////////// // Posicoes no Vetor de Integracao com o MATA261 // /////////////////////////////////////////////////// nTamAEstq := 21 If l261IntWMS nTamAEstq += 1 EndIf nTamAEstq += 1 If SD3->(FieldPos("D3_IDDCF"))>0 .And. l261IntWMS nTamAEstq += 1 EndIf If SD3->(FieldPos("D3_OBSERVA")) <> 0 nTamAEstq += 1 EndIf /////////////////////////////////////////////////// dbSelectArea("SB1") dbSetOrder(7) dbSelectArea("SB2") dbSetOrder(1) dbSelectArea("SB5") dbSetOrder(1) cLocal := GetMv("MV_RESITE") dbSelectArea("VE6") dbSetOrder(5) VE6->(dbSeek( xFilial("VE6") + cNumOsv + "3")) While !VE6->(Eof()) .and. VE6->VE6_FILIAL == xFilial("VE6") .and. VE6->VE6_NUMOSV == cNumOsv .and. VE6->VE6_INDREG == "3" // Estorna somente a quantidade não requisitada IF VE6->VE6_QTDITE <= ( VE6->VE6_QTDATE + VE6->VE6_QTDEST ) VE6->(dbSkip()) Loop EndIf // nPosProdEst := aScan( aProdEst , { |x| x[1] == VE6->VE6_GRUITE .and. x[2] == VE6->VE6_CODITE .and. x[4] == VE6->VE6_LOTECT .and. X[5] == VE6->VE6_NUMLOT .and. x[6] == VE6->VE6_NUMSER } ) If nPosProdEst == 0 AADD( aProdEst , { VE6->VE6_GRUITE , VE6->VE6_CODITE , 0 , VE6->VE6_LOTECT , VE6->VE6_NUMLOT , VE6->VE6_NUMSER } ) nPosProdEst := Len(aProdEst) EndIf aProdEst[nPosProdEst,3] += (VE6->VE6_QTDITE - VE6->VE6_QTDATE) // Atualiza a quantidade estornada RecLock("VE6",.f.) VE6->VE6_QTDEST += (VE6->VE6_QTDITE - VE6->VE6_QTDATE) MsUnLock() VE6->(dbSkip()) EndDo For nPosProdEst := 1 to Len(aProdEst) DbSelectArea("SB1") DbSeek( xFilial("SB1") + aProdEst[nPosProdEst,1] + aProdEst[nPosProdEst,2] ) oPeca:LoadB1() // 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] := PadR(cLocal, TamSx3("B2_LOCAL")[1] ) 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] := aProdEst[nPosProdEst,6] // Numero de Serie aItensNew[nPosAEstq,12] := aProdEst[nPosProdEst,4] // Lote aItensNew[nPosAEstq,13] := aProdEst[nPosProdEst,5] // Sub-Lote aItensNew[nPosAEstq,14] := IIf( !Empty(aProdEst[nPosProdEst,4]) , oPeca:LoteDtValid(aProdEst[nPosProdEst,4]) , criavar('D3_DTVALID') ) aItensNew[nPosAEstq,15] := criavar('D3_POTENCI') aItensNew[nPosAEstq,16] := aProdEst[nPosProdEst,3] 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 Next nPosProdEst If (ExistBlock("OM150AP")) aItensNew := ExecBlock("OM150AP", .f., .f., {aItensNew}) EndIf | ||||||
Programa Fonte: | OFIOM150.PRW | ||||||
Função: | OM150ESTRE() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
User Function OM150AP()
Local aItensAlt := ParamIxb[1]
MsgInfo("Ponto de Entrada OM150AP executado com sucesso!")
Return aItensAlt