Árvore de páginas

Ponto de Entrada

Descrição:

Este Ponto de Entrada está localizado na rotina Orçamento de Peças e Serviços (OFIXX001), executado no momento em que o usuário informa a quantidade de peças no orçamento, com a finalidade de verificar e informar se a quantidade informada possui saldo em estoque.

Localização:

Atualizações \ Mov Oficina \ Orc. Por Fases (OFIXA011)

Eventos:

If ReadVar() == "M->VS3_QTDITE" .OR. ReadVar() == "M->VS3_QTD2UM" .OR. ReadVar() == "M->VS3_CODTES" .OR. ReadVar() == "M->VS3_OPER" // tes e oper aqui é por conta do calculo fiscal do Tipo de Frete

if lPediVenda .and. !INCLUI .and. !lLibPv

If lAltPedVda .and. oGetPecas:aCols[oGetPecas:nAt,fg_posvar("VS3_QTDPED","aHeaderP")] != 0 // Não pode Alterar registro do Pedido incluido anteriormente


//MsgStop(STR0273)

//return .f.

Else

if M->VS3_QTDITE > oGetPecas:aCols[oGetPecas:nAt,fg_posvar("VS3_QTDPED","aHeaderP")] .and. oGetPecas:aCols[oGetPecas:nAt,fg_posvar("VS3_QTDINI","aHeaderP")] != 0 .and. oGetPecas:aCols[oGetPecas:nAt,fg_posvar("VS3_QTDPED","aHeaderP")] > 0

MsgStop(STR0267)

return .f.

endif

Endif

endif


SB1->(DBSetOrder(7))

SB1->(MsSeek(xFilial("SB1")+M->VS3_GRUITE+M->VS3_CODITE))


// só entra aqui se:

// não for Pedido e

// for um Orçamento que originou-se de um Pedido e que não esteja com o Status 5 (divergencia) e

// Não for Inclusão

if !lPediVenda .and. (!Empty(M->VS1_PEDREF).and.VS1->VS1_STATUS<>'5') .and. !INCLUI

If (ReadVar() == "M->VS3_CODTES" .or. ReadVar() == "M->VS3_OPER")

If ReadVar() == "M->VS3_OPER"

M->VS3_CODTES := MaTesInt(2,M->VS3_OPER,M->VS1_CLIFAT,M->VS1_LOJA,"C",SB1->B1_COD)

Endif

SF4->(dbseek(xFilial("SF4")+M->VS3_CODTES))

If SF4->F4_ESTOQUE <> "S"

Help(" ",1,"A410TEEST")

return .f.

Endif

Else

If lMensagem

MsgStop(STR0273)

return .f.

EndIf

Endif

Endif

If ReadVar() == "M->VS3_QTD2UM" //FNC 15783 - boby - 29/07/10 - 2a UNIDADE MEDIDA


// que pegamos "M->VS3_QTDITE := If(SB1->B1_TIPCONV=="M",M->VS3_QTD2UM*SB1->B1_CONV,M->VS3_QTD2UM/SB1->B1_CONV)"

M->VS3_QTDITE := Round(Iif(SB1->B1_TIPCONV=="M",M->VS3_QTD2UM/SB1->B1_CONV,M->VS3_QTD2UM*SB1->B1_CONV),TamSX3("VS3_QTDITE")[2])

EndIf


// Verificação para mostrar mensagem peça por peça

// Ou apenas unificar os dados (a mensagem será mostrada fora do loop das peças)

If (ReadVar() == "M->VS3_QTD2UM" .Or. ReadVar() == "M->VS3_QTDITE")

If M->VS1_TIPORC != "2"

If M->VS3_QTDITE < SB1->B1_LOTVEN .And. SB1->B1_LOTVEN > 0

If !lMsgLotMin

MsgInfo(STR0180 + " (" + Alltrim(STR(SB1->B1_LOTVEN)) + "). " + STR0181, STR0025) // Quantidade insuficiente para venda / Verifique no cadastro de peças a quantidade mínima para venda (Qtde Venda). / Atenção

Return .f.

Else

cMsgLotMin += (Alltrim(SB1->B1_GRUPO) + " " + Alltrim(SB1->B1_CODITE) + " (" + Alltrim(STR(SB1->B1_LOTVEN)) + ") " + CHR(13) + CHR(10))

Endif

EndIf

EndIf

EndIf


//OFIOM020 - Funcao valida a quantidade maxima do componente por modelo do veiculo.

If !VALPMOD020( M->VS3_GRUITE , M->VS3_CODITE , M->VS3_QTDITE , "1" , "1" )

Return(.f.)

EndIF


oGetPecas:aCols[oGetPecas:nAt,fg_posvar("VS3_QTDITE","aHeaderP")] := M->VS3_QTDITE


SB1->(DBSetOrder(7))

SB1->(MsSeek(xFilial("SB1")+M->VS3_GRUITE+M->VS3_CODITE))


nSdoPecas := OX001SLDPC(xFilial("SB2")+SB1->B1_COD+M->VS3_LOCAL)


If ReadVar() == "M->VS3_QTDITE"

If BlqInvent( SB1->B1_COD, M->VS3_LOCAL)

MsgInfo(STR0314 +SB1->B1_COD +" - "+ SB1->B1_DESC +STR0315,STR0025)

Endif

EndIf

// obsoleto

if ExistBlock("CHKPRO110") // <<<<---- O B S O L E T O

if !ExecBlock("CHKPRO110",.f.,.f.)

Return(.f.)

Endif

Endif

// verificação de saldo de pecas

if ExistBlock("OX001VSP")

if !ExecBlock("OX001VSP",.f.,.f.)

Return(.f.)

Endif

Endif

EndIf

Programa Fonte:

OFIXX001.PRW

Função:

OX001FPOK()

Parâmetros:

N/A


Retorno:
NomeTipoDescrição

lRet

Booleano

Continua ou Aborta Operação

Exemplo:

Include totvs.ch

User Function OX001VSP()

lRet := MsgYesNo(“Deseja continuar a execução do PE OX001VSP ?”,”Atencao”)

return lRet