Estou com duvida no uso da função PREPARE ENVIRONMENT
, quando trocar de filial perderá o conteúdo e posicionamento da tabela temporária (cAlSC7)?
Adicionado ==> Então pessoal, a ideia dessa rotina é mudar a filial no sistema, para gravar o msexecauto do pedido de compras conforme a informação da tabela temporária (cAlSC7)->C7_FILIAL.
Qual seria a melhor maneira? Também tentei a função abaixo, mas parece que não muda a filial.
RpcSetEnv(SM0->M0_CODIGO,(cAlSC7)->C7_FILIAL))
Por favor veja código abaixo:
(cAlSC7)->(dbGotop())
Do While (cAlSC7)->(!EOF())
nOpc:=3
_cFilial:=(cAlSC7)->C7_FILIAL
PREPARE ENVIRONMENT EMPRESA "01" FILIAL &_cFilial MODULO "COM"
DbSelectArea("SC7")
SC7->(DbSetOrder(1))
_cNumPed :=GETSXENUM("SC7","C7_NUM")
CONFIRMSX8()
aCab :={}
aItem:={}
lMsErroAuto := .F.
aCab := {{"C7_NUM" ,_cNumPed ,Nil},; //Num. Pedido
{"C7_EMISSAO" ,(cAlSC7)->C7_EMISSAO ,Nil},; // Data de Emissao
{"C7_FORNECE" ,(cAlSC7)->C7_FORNECE ,Nil},; // Fornecedor
{"C7_LOJA" ,(cAlSC7)->C7_LOJA ,Nil},; // Loja do Fornecedor
{"C7_COND" ,(cAlSC7)->C7_COND ,Nil},; // Condicao de pagamento
{"C7_CONTATO" ,(cAlSC7)->C7_CONTATO ,Nil},; // Contato
{"C7_FILENT" ,(cAlSC7)->C7_FILENT ,Nil}} // Filial Entrega
_cChave:=(cAlSC7)->C7_FILIAL+(cAlSC7)->C7_NUM
Do While (cAlSC7)->(!Eof()) .AND. (cAlSC7)->C7_FILIAL+(cAlSC7)->C7_NUM==_cChave
Aadd(aItem,;
{{"C7_ITEM" ,(cAlSC7)->C7_ITEM ,Nil},; //Numero do Item
{"C7_PRODUTO",(cAlSC7)->C7_PRODUTO ,Nil},; //Produto
{"C7_QUANT" ,(cAlSC7)->C7_QUANT ,Nil},; //Quantidade
{"C7_PRECO" ,(cAlSC7)->C7_PRECO ,Nil},; //Preco
{"C7_DATPRF" ,(cAlSC7)->C7_DATPRF ,Nil},; //Data De Entrega
{"C7_TES" ,(cAlSC7)->C7_TES ,Nil},; //Tes
{"C7_FLUXO" ,(cAlSC7)->C7_FLUXO ,Nil},; //Fluxo de Caixa (S/N)
{"C7_NUMSC" ,(cAlSC7)->C7_NUMSC ,Nil},; //SC
{"C7_ITEMSC" ,(cAlSC7)->C7_ITEMSC ,Nil},; //SC ITEM
{"C7_CC" ,(cAlSC7)->C7_CC ,Nil},; //CC
{"C7_CONTA" ,(cAlSC7)->C7_CONTA ,Nil},; //CONTA
{"C7_CLVL" ,(cAlSC7)->C7_CLVL ,Nil},; //CLVL
{"C7_ITEMCTA",(cAlSC7)->C7_ITEMCTA ,Nil},; //ITEMCTA
{"C7_XPROC" ,(cAlSC7)->C7_XPROC ,Nil},; //XPROC
{"C7_LOCAL" ,(cAlSC7)->C7_LOCAL ,Nil}}) //Localizacao
(cAlSC7)->(dbSkip())
Enddo
MSExecAuto({|v,x,y,z| MATA120(v,x,y,z)},1,aCab,aItem,nOpc) //{aItem}
If lMsErroAuto
mostraerro("C:\TEMP\",_cNumPed)
lMsErroAuto:=.F.
Msginfo("Pedido de compras ocorreu inconsistência! Pedido WBC:"+ALLTRIM(_cWBC))
Endif
SC7->(dbSkip())
Enddo
RESET ENVIRONMENT
(cAlSC7)->( Dbclosearea() )
Agradeço desde já.
Bom dia Rodrigo, rodando esse POC, o que acontece? Gera alguma exceção?
— Daniel Mendes 14 de Feb de 2020Daniel, Hum, Nesta situação ele vai inicializar um ambiente para cada prepare enviroment que ele passar já que o reset enviroment está fora do laço, ou vai "sobrescrever" o ambiente aberto inicialmente automaticamente? Caso tenha limite de conexões de usuário, pode acontecer dele parar o processo quando não conseguir abrir mais ambientes?
— Douglas Bichir 14 de Feb de 2020