duvida programação prepare environment

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á.

compartilhar
  • Bom dia Rodrigo, rodando esse POC, o que acontece? Gera alguma exceção?

    Daniel Mendes   14 de Feb de 2020
  • Daniel, 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
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

3 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl protheus ou faça a sua própria pergunta.