Árvore de páginas

Alteração do Código de produto na rotina automática ( MsExecAuto) da rotina LOJA210

Linha de Produto:

Microsiga Protheus

Segmento:

Varejo

Módulo:

SIGALOJA

Situação/Requisito:

  1.  No cadastramento de Código de Barras X Produto é possível alterar o código de barras via tela do sistema mas executando o MsExecAuto apresenta erro.
  2. O sistema esta permitindo a adição de um código de barra mais o código do produto com a quantidade Zero, o minimo deveria ser 1. 
  3.  Ao realizar a execução da rotina por processo automático via MVC o sistema não esta realizando todas as validações.

Solução/Implementação:

  1. A alteração do código de barras não devia ser possível pois o código de barras faz parte chave primaria, nesse caso alteramos a tela para que seja
    possível realizar a inclusão e quando houver alteração o campo fica desativado para modificação.

  2. Realizado uma validação para que ao ser digitado um código de barras + produto a quantidade seja superior a 0.
  3. foi adicionado uma validação no campo quantidade para que quando a rotina for executada via rotina automática via MVC o sistema consiga realizar as validações.

Obs.: Para realização do teste, Estamos Disponibilizando uma função de exemplo para que seja possível realizar a execução do MsExecAuto.  

Copie o conteudo abaixo e para gerar um Rdmake para teste:

#INCLUDE 'totvs.ch'
#INCLUDE "TBICONN.CH"

User Function TEST_lj210()
Local aCab := {}
Local aDados := {} // matriz com as informações de campo e valores
Local nOpc := 0

Private cCadastro := "Empresa/Filial"
Private cEmpAnt := Space(6)
Private cFilant := Space(2)

Private cACESSO := ""
Private lInclui := .F.
Private lMsErroAuto := .F.
Private lAutoErrNoFile := .F.
Private lMsHelpAuto := .T.

MontaTela(1)

RPCSetType(3) // Nao comer licenca
PREPARE ENVIRONMENT EMPRESA cEmpAnt FILIAL cFilant TABLES "SB1","SLK" MODULO "LOJ"

MontaTela(2,aDados)
DbSelectArea("SLK")
DbSetOrder(1)
DbGoTop()

If lInclui
nOpc := 3
Else
nOpc := 4
EndIf

//Armazena informacoes no array
aAdd(aCab, {"LK_CODBAR" , aDados[1][2] , Nil}) //Codigo de Barras
aAdd(aCab, {"LK_CODIGO" , aDados[2][2] , Nil}) //Codigo do Produto
aAdd(aCab, {"LK_QUANT" , aDados[3][2] , Nil}) //Quantidade do Produto

//Efetua o cadastro (Alteracao)
MSExecAuto({|x,y| LOJA210(x,y)}, aCab, nOpc )
If lMsErroAuto

MostraErro()

EndIf

Return Nil

/////////////////////////////////////
////////////////////////////////////
Static Function MontaTela(nTipo,aDados )
Local bLogo := {|| IIf(nTipo == 1, "Empresa:", "Cod. Barras:") }
Local bLogo1 := {|| IIf(nTipo == 1,"Filial:", "Cod. Produto:") }
Local lContinua := .F.
Local aButtons := {}
Local cMensagem := "Empresa"
Local oDlg
Local oSay1
Local aItems := {'Inclui','Altera'}
Local cBarra := ""
Local cProd := ""
Local nQuant := 0

Default aDados := {}

DEFINE DIALOG oDlg TITLE cCadastro FROM 180,180 TO 550,700 PIXEL

oFont := TFont():New('Courier new',,-14,.T.)
oFont1 := TFont():New('Arial',,-28,.T.)
oFont1:Bold := .T.

oTBitmap1 := TBitmap():New(20,70,100,100,,"TOPO_LOGO-ESQ.JPG",.T.,/*oScr1*/,;
{||.T.},,.F.,.F.,,,.F.,,.T.,,.F.)

If nTipo == 1
oSay1:= TSay():New(65,05, bLogo,/*oScr1*/,,oFont,,;
,,.T.,CLR_BLACK,CLR_WHITE,150,40)

oGetemp := TGet():New( 65, 40, { | u | If( PCount() == 0, cEmpAnt, cEmpAnt := u ) },oDlg, ;
050, 010, "!@",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cEmpAnt",,,,.T. )

oSay2:= TSay():New(65,160, bLogo1,/*oScr1*/,,oFont,,;
,,.T.,CLR_BLACK,CLR_WHITE,150,40)

oGetFil := TGet():New( 65, 190, { | u | If( PCount() == 0, cFilant, cFilant := u ) },oDlg, ;
050, 010, "!@",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cFilant",,,,.T. )

cCombo1:= aItems[1]
oCombo1 := TComboBox():New(85,05,{|u|if(PCount()>0,cCombo1:=u,cCombo1)},;
aItems,100,20,oDlg,,{||.T.};
,,,,.T.,,,,,,,,,'cCombo1')

Else
oSay1:= TSay():New(65,05, bLogo,/*oScr1*/,,oFont,,;
,,.T.,CLR_BLACK,CLR_WHITE,150,40)
cBarra := Space(TamSx3("LK_CODBAR")[1])
oGetemp := TGet():New( 65, 60, { | u | If( PCount() == 0, cBarra, cBarra := u ) },oDlg, ;
80, 010, "!@",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cBarra",,,,.T. )

oSay2:= TSay():New(85,05, bLogo1,/*oScr1*/,,oFont,,;
,,.T.,CLR_BLACK,CLR_WHITE,150,40)
cProd := Space(IIf(lInclui, TamSx3("B1_COD")[1] , TamSx3("LK_CODIGO")[1]) )
oGetFil := TGet():New( 85, 60, { | u | If( PCount() == 0, cProd, cProd := u ) },oDlg, ;
80, 010, "!@",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cProd",,,,.T. )
If lInclui
oGetFil:cF3 := "SB1"
EndIf
oSay2:= TSay():New(105,05, {||"Quantidade:"},/*oScr1*/,,oFont,,;
,,.T.,CLR_BLACK,CLR_WHITE,150,40)
nQuant := 0
oGetFil := TGet():New( 105, 60, { | u | If( PCount() == 0, nQuant, nQuant := u ) },oDlg, ;
80, 010, X3Picture("LK_QUANT") ,, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nQuant",,,,.T. )

EndIf

ACTIVATE DIALOG oDlg CENTERED ON INIT EnchoiceBar( oDlg, { || ( lContinua := .T.,oDlg:End() ) }, { || ( oDlg:End(),final() ) },, aButtons )

If lContinua .and. nTipo == 1
cEmpAnt := AllTrim(cEmpAnt)
If 'Inclui' == cCombo1
lInclui := .T.
EndIf
Else
AAdd(aDados, {"LK_CODBAR" , cBarra } )
AAdd(aDados, {"LK_CODIGO" , cProd } )
AAdd(aDados, {"LK_QUANT" , nQuant } )
EndIf

Return()