Ponto de Entrada
Descrição: | Este ponto de entrada está localizado na rotina Transf. de Peças (OFIOM430) e é executado no momento da efetivação da transferência de peças de uma filial para a outra quando esta transferencia foi originada a partir de um orçamento de venda balcão da filial destino. 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 Peças \ Transf. de Peças | ||||||
Eventos: | Static Function FS_VS3VDD(nQtdOriSD1) Local nY := 0 Local aVS3 := {} Local nTamAEstq := 0 Local nPosAEstq Local nUltPos Local oPeca := DMS_Peca():New() Local lCtrlLote := GetNewPar("MV_RASTRO","N") == "S" Local nQtdItem := 0 Local cSql := "" Local cSQLSD1 := "SQLSD1" Local nQtdVS3 := 0 Local lAtuVDD := .t. 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("VS3") DBSetOrder(2) If DBSeek(VDD->VDD_FILORC + VDD->VDD_NUMORC + VDD->VDD_GRUPO + VDD->VDD_CODITE) cSql := "SELECT SUM(VS3_QTDITE) FROM "+RetSQLName("VS3")+" VS3 WHERE VS3.VS3_FILIAL='"+VDD->VDD_FILORC+"' AND VS3.VS3_NUMORC= '"+VDD->VDD_NUMORC+"' AND " cSql += "VS3.VS3_GRUITE = '"+VDD->VDD_GRUPO+"' AND VS3.VS3_CODITE = '"+VDD->VDD_CODITE+"' AND VS3.D_E_L_E_T_ = ' ' " nQtdVS3 := FM_SQL(cSql) SB1->(DbSetOrder(7)) SB1->(DBSeek(xFilial("SB1")+VS3->VS3_GRUITE+VS3->VS3_CODITE)) SB1->(DbSetOrder(1)) oPeca:LoadB1() cSql := "SELECT SD1.R_E_C_N_O_ RECSD1 FROM "+RetSQLName("SD1")+" SD1 WHERE SD1.D1_FILIAL='"+VDD->VDD_FILORC+"' AND SD1.D1_DOC= '"+VDD->VDD_NUMNFI+"' AND " cSql += "SD1.D1_SERIE = '"+VDD->VDD_SERNFI+"' AND SD1.D1_FORNECE = '"+VDD->VDD_CODFOR+"' AND SD1.D1_LOJA = '"+VDD->VDD_LOJA+"' AND SD1.D1_COD = '"+SB1->B1_COD+"' AND " cSql += "SD1.D_E_L_E_T_ = ' ' " dbUseArea( .T., "TOPCONN", TcGenQry( ,, cSql ), cSQLSD1 , .F., .T. ) While (cSqlSD1)->(!eof()) .and. nQtdVS3 > 0 SD1->(DbGoTo((cSqlSD1)->(RECSD1))) lAtuVDD := .t. if lCtrlLote .and. !Empty(SD1->D1_LOTECTL) .and. VS3->(FieldPos("VS3_LOTECT"))> 0 nSaldoLote := 0 nQtdOri := VS3->VS3_QTDITE If Rastro( SB1->B1_COD ) if Empty(VS3->VS3_LOTECT) lUsaVenc:= SuperGetMv('MV_LOTVENC')=='S' aSaldos := SldPorLote(SB1->B1_COD,VS3->VS3_LOCAL,VS3->VS3_QTDITE,NIL,SD1->D1_LOTECTL,SD1->D1_NUMLOTE,"","",NIL,NIL,NIL,lUsaVenc,nil,nil,dDataBase) If Len(aSaldos) == 0 lAtuVDD := .f. (cSqlSD1)->(DbSkip()) Loop Endif DbSelectArea("VS3") RecLock("VS3",.f.) VS3->VS3_LOTECT := aSaldos[1,1] VS3->VS3_NUMLOT := aSaldos[1,2] VS3->VS3_QTDITE := aSaldos[1,5] VS3->VS3_QTDINI := VS3->VS3_QTDITE VS3->VS3_VALDES := (VS3->VS3_VALDES/nQtdOri)* VS3->VS3_QTDITE VS3->VS3_VALTOT := (VS3->VS3_QTDITE * VS3->VS3_VALPEC)-VS3->VS3_VALDES MsUnLock() Else cSql := "SELECT VS3.R_E_C_N_O_ RECVS3 FROM "+RetSQLName("VS3")+" VS3 WHERE VS3.VS3_FILIAL='"+VDD->VDD_FILORC+"' AND VS3.VS3_NUMORC= '"+VDD->VDD_NUMORC+"' AND " cSql += "VS3.VS3_GRUITE = '"+VDD->VDD_GRUPO+"' AND VS3.VS3_CODITE = '"+VDD->VDD_CODITE+"' AND VS3.VS3_LOTECT = '"+SD1->D1_LOTECTL+"' AND VS3.D_E_L_E_T_ = ' ' " nRecNoVS3 := FM_SQL(cSql) if nRecNoVS3 == 0 aVS3 := {} lUsaVenc:= SuperGetMv('MV_LOTVENC')=='S' aSaldos := SldPorLote(SB1->B1_COD,VS3->VS3_LOCAL,VS3->VS3_QTDITE,NIL,SD1->D1_LOTECTL,SD1->D1_NUMLOTE,"","",NIL,NIL,NIL,lUsaVenc,nil,nil,dDataBase) If Len(aSaldos) == 0 lAtuVDD := .f. (cSqlSD1)->(DbSkip()) Loop Endif For nY := 1 To VS3->(FCount()) aadd(aVS3,VS3->(FieldGet(nY))) Next nY cSql := "SELECT SUM(D1_QUANT) FROM "+RetSQLName("SD1")+" SD1 WHERE SD1.D1_FILIAL='"+VDD->VDD_FILORC+"' AND SD1.D1_DOC= '"+VDD->VDD_NUMNFI+"' AND " cSql += "SD1.D1_SERIE = '"+VDD->VDD_SERNFI+"' AND SD1.D1_FORNECE = '"+VDD->VDD_CODFOR+"' AND SD1.D1_LOJA = '"+VDD->VDD_LOJA+"' AND SD1.D1_COD = '"+SB1->B1_COD+"' AND " cSql += "SD1.D_E_L_E_T_ = ' ' " nQtdOri := FM_SQL(cSql) RecLock("VS3",.T.) For nY := 1 To Len(aVS3) If !"_MSIDENT"$VS3->(FieldName(nY)) FieldPut(nY,aVS3[nY]) EndIf Next nY VS3->VS3_QTDITE := aSaldos[1,5] VS3->VS3_LOTECT := aSaldos[1,1] VS3->VS3_NUMLOT := aSaldos[1,2] VS3->VS3_QTDRES := 0 VS3->VS3_QTDINI := VS3->VS3_QTDITE VS3->VS3_VALDES := (VS3->VS3_VALDES/nQtdOri)* VS3->VS3_QTDITE VS3->VS3_VALTOT := (VS3->VS3_QTDITE * VS3->VS3_VALPEC)-VS3->VS3_VALDES MsUnLock() Endif Endif Endif Endif // nQtdVS3 := nQtdVS3 - VS3->VS3_QTDITE // if lCtrlLote .and. !Empty(SD1->D1_LOTECTL) nQtdItem := VS3->VS3_QTDITE Else nQtdItem := Iif(VDD->VDD_QUANT < nQtdOriSD1,VDD->VDD_QUANT,nQtdOriSD1) Endif // cDocumento := Criavar("D3_DOC") cDocumento := IIf(Empty(cDocumento),NextNumero("SD3",2,"D3_DOC",.T.),cDocumento) cDocumento := A261RetINV(cDocumento) aItensNew := {} aadd (aItensNew,{ cDocumento , ddatabase}) AADD( aItensNew , Array(nTamAEstq) ) nPosAEstq := 2 aItensNew[nPosAEstq,01] := SB1->B1_COD aItensNew[nPosAEstq,02] := SB1->B1_DESC aItensNew[nPosAEstq,03] := SB1->B1_UM aItensNew[nPosAEstq,04] := SD1->D1_LOCAL aItensNew[nPosAEstq,05] := IIf(Localiza(SB1->B1_COD),FM_PRODSBZ(SB1->B1_COD,"SB5->B5_LOCALI2"),Space(15)) aItensNew[nPosAEstq,06] := SB1->B1_COD aItensNew[nPosAEstq,07] := SB1->B1_DESC aItensNew[nPosAEstq,08] := SB1->B1_UM aItensNew[nPosAEstq,09] := GetMv( "MV_RESITE" )+Space(TamSx3("B2_LOCAL")[1]-Len(GetMv("MV_RESITE"))) aItensNew[nPosAEstq,10] := IIf(Localiza(SB1->B1_COD),GetMv( "MV_RESLOC" )+Space(TamSx3("B5_LOCALI2")[1]-Len(GetMv("MV_RESLOC"))),Space(15)) aItensNew[nPosAEstq,11] := "" aItensNew[nPosAEstq,12] := Iif(lCtrlLote .and. !Empty(SD1->D1_LOTECTL),SD1->D1_LOTECTL,"") aItensNew[nPosAEstq,13] := "" aItensNew[nPosAEstq,14] := IIf( !Empty(aItensNew[nPosAEstq,12]) , oPeca:LoteDtValid(aItensNew[nPosAEstq,12]) , criavar('D3_DTVALID') ) aItensNew[nPosAEstq,15] := criavar('D3_POTENCI') aItensNew[nPosAEstq,16] := nQtdItem 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("VFUNB3")) aItensNew := ExecBlock("VFUNB3", .f., .f., {aItensNew}) EndIf | ||||||
Programa Fonte: | VEIFUNB.PRW | ||||||
Função: | FS_VS3VDD() | ||||||
Parâmetros: |
| ||||||
Retorno: |
|
Exemplo:
Include totvs.ch
User Function VFUNB3()
Local aItensAlt := ParamIxb[1]
MsgInfo("Ponto de Entrada VFUNB3 executado com sucesso!")
Return aItensAlt