Bom dia à todos.
Estou desenvolvendo uma tela para alterar apenas 3 campos em um registro no Contas a Pagar (FINA750) onde o mesmo já esteja liquidado, precisar realizar a manutenção desses campos pois os mesmos serão utilizados em relatórios futuros. Utilizando o P.E. FA750BRW fiz inclusão do botão da seguinte maneira: "aAdd(aRotina, {"Ajuste Competencia", "U_750ALTE", 0, 4, 0, NIL})". Até aqui tudo normal, porém na hora de chamar a rotina 750ALTE com a MsMGet o registro abre como se fosse somente visualização mesmo eu passando os campos que podem ser alterados, já tentei de tudo, temos um fonte parecido onde alteramos as informações adicionais do pedido de vendas, fiz uma comparação entre o que eu desenvolvi e o do pedido de vendas, estão basicamente iguais, alterando apenas alias e nome de variáveis, não estou conseguindo achar onde estou errando para que o registro abra em modo de alteração (testei tanto em registro não liquidado quanto em registro liquidado)
Segue trecho do fonte: User Function 750ALTE() Local cAlias := "SE2" Local nOpcA := 0 Local aSize := {}, aObjects := {}, aInfo := {}, aPObjs := {} Local nFor := 0 Local cCampo := ""
Local aCpoMostra := {"E2_PREFIXO", "E2_TIPO" , "E2_NUM" , "E2_PARCELA", "E2_FORNECE", "E2_LOJA", "E2_NOME" , "E2_NOMFOR", "E2_VALOR", "E2_VALLIQ", "E2_SALDO" ,; "E2_EMISSAO", "E2_VENCTO" , "E2_HIST" , "E2_SITUACA", "E2_NATUREZ", "E2_XNAT", "E2_VENCREA", "E2_VLCRUZ", "E2_MOEDA", "E2_XOBS" , "E2_ORIGEM",; "E2_TXMOEDA", "E2_CODAPRO", "E2_XTPBX", "E2_XCMES" , "E2_XCANO" , "E2_XCOMP"} // campos que serão mostrados em tela Local aCpoEdit := {"E2_XCMES" , "E2_XCANO" , "E2_XCOMP"} // Campos que poderão ser alterados
Private aTela := {}, aGets := {} Private oEnch1
Private aCpoDad := {}
If !FwIsAdmin() MsgAlert("Rotina restrita a administradores!") Return EndIf
aSize := MsAdvSize(.T.) aObjects := {} aAdd(aObjects, {100, 015, .T., .T.}) aAdd(aObjects, {100, 085, .T., .T.})
aInfo := {aSize[01], aSize[02], aSize[03], aSize[04], 0, 0} aPObjs := MsObjSize(aInfo, aObjects, .T.)
RegToMemory(cAlias, .F., .F.)
For nFor := 1 To Len(aCpoMostra) cCampo := aCpoMostra[nFor] If (cAlias)->(FieldPos(cCampo)) > 0 M->&(cCampo) := &(cAlias + "->" + cCampo) EndIf Next nFor
aAdd(aCpoMostra, "NOUSER")
DEFINE MSDIALOG oDlg TITLE "Ajuste de Competencia - CP: " + M->E2_NUM + "/" + M->E2_PARCELA From aSize[7], 0 To aSize[6], aSize[5] Of oMainWnd Pixel
oEnch1 := MsMGet():New(cAlias, &(cAlias)->(Recno()), 4, , , ,aCpoMostra ,aPObjs[1], aCpoEdit, , , , ,oDlg) oEnch1:oBox:Align := CONTROL_ALIGN_ALLCLIENT
ACTIVATE MSDIALOG oDlg CENTER ON INIT EnchoiceBar(oDlg, {||nOpcA := 1, IIF(Obrigatorio(aGets, aTela), oDlg:End(), nOpcA == 0)}, {||nOpcA := 0, oDlg:End()})
If nOpcA == 1 RecLock(cAlias, .F.) For nFor := 1 To Len(aCpoMostra) cCampo := aCpoMostra[nFor] If cCampo <> "NOUSER" .AND. (cAlias)->(FieldPos(cCampo)) > 0 &(cAlias + "->" + cCampo) := M->&(cCampo) aAdd(aCpoDad, {cCampo, M->&(cCampo)}) EndIf Next nFor MsUnLock() EndIf
Return
Na linha onde é criado o MsMGet, alterei o parâmetro nOpc para 3, ele liberou para alterar, porém o 3 seria inclusão. Estou com o pé atrás de deixar dessa forma, fiz alguns testes alterando registros em minha base teste e está funcionando.
— Lucas Lott Menegassi 19 de Jan de 2021