Untitled
unknown
plain_text
a year ago
6.8 kB
11
Indexable
User Function REMPBRD(cOP)
// declarações do estoque
Local cEndDest := "BORDA "
Local cLoc01 := "61"
Local cLoc03 := "73"
// declarações diversas
Local cQuery := ""
Local cSeek := ""
Local nRet := 0
Local nTRT := 0
Local nRegSD4 := 0
Local nRegSDC := 0
Default cOP := ""
If Empty(cOP) // se op vazio abandona a rotina
Return()
Endif
// verifica a necessidade de processamento da rotina - inicio ***
dbSelectArea("SC2")
SC2->(dbSetOrder(1)) // C2_FILIAL+C2_NUM+C2_ITEM+C2_SEQUEN+C2_ITEMGRD
If SC2->(MsSeek(xFilial("SC2")+cOP))
If SC2->C2_XPROCES != "S"
Return(.T.)
Else
Reclock("SC2",.F.)
C2_XPROCES := "N"
SC2->(MsUnlock())
Endif
Else
Return(.F.)
Endif
// verifica a necessidade de processamento da rotina - fim ***
// verifica se existe trt duplicado o sz4 e acerta a sequencia se houver - inicio ***
cQuery := "SELECT COUNT(Z4_OP), Z4_OP, Z4_PRODUTO, Z4_LOTECTL, Z4_NUMLOTE, Z4_TRT "
cQuery += "FROM " + RetSqlName("SZ4") + " (NOLOCK) "
cQuery += "WHERE D_E_L_E_T_ = ' ' "
cQuery += "AND Z4_FILIAL = '" + xFilial("SZ4") + "' "
cQuery += "AND Z4_OP = '" + AllTrim(cOP) + "' "
cQuery += "GROUP BY Z4_FILIAL, Z4_OP, Z4_PRODUTO, Z4_LOTECTL, Z4_NUMLOTE, Z4_TRT "
cQuery += "HAVING COUNT(Z4_OP) > 1"
MPSysOpenQuery(cQuery, "SQLSZ4")
While SQLSZ4->(!Eof())
cQuery := "SELECT R_E_C_N_O_ AS Z4_RECNO "
cQuery := "FROM " + RetSqlName("SZ4") + " (NOLOCK) "
cQuery := "WHERE D_E_L_E_T_ = ' ' "
cQuery := "AND Z4_FILIAL = '" + xFilial("SZ4") + "' "
cQuery := "AND Z4_OP = '" + SQLSZ4->Z4_OP + "' "
cQuery := "AND Z4_PRODUTO = '" + SQLSZ4->Z4_PRODUTO + "' "
cQuery := "AND Z4_LOTECTL = '" + SQLSZ4->Z4_LOTECTL + "' "
cQuery := "AND Z4_NUMLOTE = '" + SQLSZ4->Z4_NUMLOTE + "' "
cQuery := "AND Z4_TRT = '" + SQLSZ4->Z4_TRT + "' "
cQuery += "ORDER BY Z4_RECSD4"
MPSysOpenQuery(cQuery, "SQLTRT")
nTRT := 115
While SQLTRT->(!Eof())
cQuery := "UPDATE " + RetSqlName("SZ4") + " "
cQuery += "SET Z4_TRT = '" + StrZero(nTRT,3) + "' "
cQuery += "WHERE R_E_C_N_O_ = " + AllTrim(Str(SQLSZ4->Z4_RECNO))
nRet := TCSQLExec(cQuery)
If nRet < 0
MsgStop("Erro na execução da query:" + TcSqlError(), "AJUSEMP")
Endif
nTRT += 1
SQLTRT->(dbSkip())
End
SQLTRT->(dbCloseArea())
SQLSZ4->(dbSkip())
End
SQLSZ4->(dbCloseArea())
// verifica se existe trt duplicado o sz4 e acerta a sequencia se houver - fim ***
// trata os estoque e possíveis duplicidades - inicio ***
cQuery := "SELECT * "
cQuery += "FROM " + RetSqlName("SZ4") + " (NOLOCK) "
cQuery += "WHERE D_E_L_E_T_ = ' ' "
cQuery += "AND Z4_FILIAL = '" + xFilial("SZ4") + "' "
cQuery += "AND Z4_OP = '" + AllTrim(cOP) + "'"
MPSysOpenQuery(cQuery, "SQLSDC")
If SQLSDC->(!Eof())
nRegSD4 := SD4->(RecNo())
nRegSDC := SDC->(RecNo())
While SQLSDC->(!Eof())
// ajusta os estoques
// *********
// SB2 *****
// *********
nRegSB2 := SB2->(Recno())
dbSelectArea("SB2")
SB2->(dbSetOrder(1)) // B2_FILIAL+B2_COD+B2_LOCAL
If SB2->(MsSeek(xFilial("SB2")+SQLSDC->Z4_PRODUTO))
While SB2->(!Eof()) .AND. SB2->B2_COD = SQLSDC->Z4_PRODUTO
If SB2->B2_QATU != SB2->B2_QEMP .AND. (SB2->B2_LOCAL = cLoc01 .OR. SB2->B2_LOCAL = cLoc03)
RecLock("SB2",.F.)
B2_QEMP := SB2->B2_QATU
SB2->(MsUnlock())
Endif
SB2->(dbSkip())
End
Endif
SB2->(dbGoto(nRegSB2))
// *********
// SB8 *****
// *********
nRegSB8 := SB8->(Recno())
dbSelectArea("SB8")
SB8->(dbSetOrder(1)) // B8_FILIAL+B8_PRODUTO+B8_LOCAL+DTOS(B8_DTVALID)+B8_LOTECTL+B8_NUMLOTE
If SB8->(MsSeek(xFilial("SB8")+SQLSDC->Z4_PRODUTO))
While SB8->(!Eof()) .AND. SB8->B8_PRODUTO = SQLSDC->Z4_PRODUTO
If SB8->B8_SALDO != SB8->B8_EMPENHO .AND. (SB8->B8_LOCAL = cLoc01 .OR. SB8->B8_LOCAL = cLoc03)
RecLock("SB8",.F.)
B8_EMPENHO := SB8->B8_SALDO
SB8->(MsUnlock())
Endif
SB8->(dbSkip())
End
Endif
SB8->(dbGoto(nRegSB8))
// *********
// SBF *****
// *********
nRegSBF := SBF->(Recno())
dbSelectArea("SBF")
SBF->(dbSetOrder(2)) // BF_FILIAL+BF_PRODUTO+BF_LOCAL+BF_LOTECTL+BF_NUMLOTE+BF_PRIOR+BF_LOCALIZ+BF_NUMSERI
If SBF->(MsSeek(xFilial("SBF")+SQLSDC->Z4_PRODUTO))
While SBF->(!Eof()) .AND. SBF->BF_PRODUTO = SQLSDC->Z4_PRODUTO
If SBF->BF_QUANT != SBF->BF_EMPENHO .AND. (SBF->BF_LOCAL = cLoc01 .OR. SBF->BF_LOCAL = cLoc03)
RecLock("SBF",.F.)
BF_EMPENHO := SBF->BF_QUANT
SBF->(MsUnlock())
Endif
SBF->(dbSkip())
End
Endif
SBF->(dbGoto(nRegSBF))
// garante o lote controle
// *********
// SD4 *****
// *********
SD4->(dbGoTo(SQLSDC->Z4_RECSD4))
cSeek := xFilial("SDC")+SD4->(D4_COD+D4_LOCAL+D4_OP+D4_TRT+D4_LOTECTL+D4_NUMLOTE) // chave de busca
If SD4->D4_LOTECTL != SQLSDC->Z4_LOTECTL .AND. (SD4->D4_LOCAL = cLoc01 .OR. SD4->D4_LOCAL = cLoc03) .AND. SD4->D4_QUANT > 0
Reclock("SD4",.F.) // ajusta as divergências
D4_LOTECTL := SQLSDC->Z4_LOTECTL
D4_NUMLOTE := SQLSDC->Z4_NUMLOTE
D4_TRT := SQLSDC->Z4_TRT
SD4->(MsUnlock())
Endif
// *********
// SDC *****
// *********
dbSelectArea("SDC") // posiciona
SDC->(dbSetOrder(2))
If SDC->(MsSeek(cSeek))
While SDC->(!Eof()) .AND. SDC->(DC_FILIAL+DC_PRODUTO+DC_LOCAL+DC_OP+DC_TRT+DC_LOTECTL+DC_NUMLOTE) = cSeek
If SDC->DC_QTDORIG = SD4->D4_QTDEORI .AND. SDC->DC_QUANT > 0 .AND. SDC->DC_LOCALIZ = cEndDest
Reclock("SDC",.F.) // ajusta as divergências
DC_LOTECTL := SQLSDC->Z4_LOTECTL
DC_NUMLOTE := SQLSDC->Z4_NUMLOTE
DC_TRT := SQLSDC->Z4_TRT
SDC->(MsUnlock())
Endif
SDC->(dbSkip())
End
Endif
SQLSDC->(dbSkip())
End
SDC->(dbGoto(nRegSDC))
SD4->(dbGoto(nRegSD4))
Endif
// trata os estoque e possíveis duplicidades - fim ***
Return(.T.)Editor is loading...
Leave a Comment