Histórico da Página
Ponto de Entrada
Descrição: | Este ponto de entrada está localizado na rotina Documento Entrada (MATA103) e é executado no momento da exclusão de uma nota fiscal de entrada por compra quando esta possui um pedido de compra vinculado originado de orçamento balcão que gerou sugestão de compras. 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 \ Movimentos \ Documento Entrada | ||||||
Eventos: | Function FM_ESTRESITE(_cProduto, _cLocal, _cTES, _cPedC, _cItemPedC, _cForn, _cLoja, _cSerie, _cDoc) Local aArea := {}, aItensNew Local nQtdEstorno, cQuery, nSaldoResv Local nTamAEstq := 0 Local nPosAEstq Local nUltPos Local oPeca := DMS_Peca():New() Local l261IntWMS := a261IntWMS() Private lMsErroAuto := .f. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³Se nao foi informado o pedido, nao fez reserva³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ IF Empty(_cPedC) Return .t. ENDIF dbSelectArea("SF4") dbSetOrder(1) IF !SF4->(dbSeek(xFilial("SF4") + _cTES)) Return .t. ENDIF //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³TES não movimenta estoque, nao faz nada³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ IF SF4->F4_ESTOQUE <> "S" Return .t. ENDIF /////////////////////////////////////////////////// // 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 /////////////////////////////////////////////////// aArea := sGetArea(aArea,"SB1") aArea := sGetArea(aArea,"SB2") aArea := sGetArea(aArea,"SB5") aArea := sGetArea(aArea,"SF4") If !Empty(Alias()) aArea := sGetArea(aArea,Alias()) EndIf dbSelectArea("SB1") dbSetOrder(1) dbSeek(xFilial("SB1")+_cProduto) oPeca:LoadB1() dbSelectArea("VE6") dbSetOrder(6) // VE6_FILIAL+VE6_PEDCOM+VE6_ITEMPC //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³Monta um cursor com os registros que sofrerão alteracao³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ cQuery := "SELECT VE6.R_E_C_N_O_ NUMREG, VE6_NUMOSV, VE6_NUMORC, VE6_PEDCOM, VE6_ITEMPC" cQuery += " FROM "+RetSQLName("VE6")+" VE6" cQuery += " WHERE VE6_FILIAL = '" + xFilial("VE6") + "'" cQuery += " AND VE6_PEDCOM = '" + _cPedC + "'" cQuery += " AND VE6_ITEMPC = '" + _cItemPedC + "'" cQuery += " AND VE6_CODFOR = '" + _cForn + "'" cQuery += " AND VE6_LOJFOR = '" + _cLoja + "'" cQuery += " AND VE6_SERNFI LIKE '" + _cSerie + "%'" cQuery += " AND VE6_NUMNFI = '" + _cDoc + "'" cQuery += " AND VE6_INDREG IN ('3', '4') " // S O M E N T E R E S E R V A e Bo cQuery += " AND VE6.D_E_L_E_T_ = ' '" cQuery += " ORDER BY VE6_NUMOSV, VE6_NUMORC, VE6_ORIREQ" TCQUERY cQuery NEW ALIAS "TVE6" dbSelectArea("TVE6") While !TVE6->(Eof()) dbSelectArea("VE6") VE6->(dbGoTo(TVE6->NUMREG)) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³Estorna somente a dif. entre a qtde reservada e a qtde nao atendida, ³ //³pois o que tiver sido atendido, deve ser devolvido antes de excluir a nota³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ nQtdEstorno := VE6->VE6_QTDITE - VE6->VE6_QTDATE IF nQtdEstorno > 0 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³Movimentacao interna do Item ³ //³Estorna movimento, voltando a peca do almox. de reserva para o almox.³ //³que foi dado entrada a nota fiscal ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ aItensNew:={} DbSelectArea("SB5") DbSetOrder(1) DbSeek( xFilial("SB5") + SB1->B1_COD ) DbSelectArea("SB1") DbSetOrder(1) // Adiciona cabecalho com numero do documento e data da transferencia modelo II aadd (aItensNew,{ nextnumero("SD3",2,"D3_DOC",.t.), ddatabase}) // sequencia // produto, descricao, unidade de medida, // local/localizacao O R I G E M // produto, descricao, unidade de medida, // local/localizacao D E S T I N O // numero de serie, lote, sublote, data de validade, // Q U A N T I D A D E // quantidade na 2 unidade, estorno, numero de sequencia 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 ] := _cLocal 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 ] := nQtdEstorno 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 If (ExistBlock("VFUNB6")) aItensNew := ExecBlock("VFUNB6", .f., .f., {aItensNew}) EndIf | ||||||
Programa Fonte: | VEIFUNB.PRW | ||||||
Função: | FM_ESTRESITE() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
User Function VFUNB6()
Local aItensAlt := ParamIxb[1]
MsgInfo("Ponto de Entrada VFUNB6 executado com sucesso!")
Return aItensAlt