Tempo aproximado para leitura: 00:02:00 min
Dúvida
Existe alguma função que permite trocar a empresa em tempo de execução?
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 11.80
Solução
Não existe uma função específica que permita consultas ou manipulação em uma empresa 'B' enquanto estiver conectado em ambiente da empresa 'A'. Para possibilitar uma ação desse tipo é necessário que outra Thread seja iniciada para uma execução independente, e nela preparado um ambiente para tal. O recurso para essa necessidade seria a função StartJob.
A seguir um exemplo de rotina automática, para a inclusão de um produto, em duas empresas diferentes simultaneamente:
Threads Sem interface:
#Include 'Protheus.ch'
#Include 'TBICONN.ch'
User Function tStJb010()
Local aVetor := {}
PRIVATE lMsErroAuto := .F.
Private INCLUI := .T.
PREPARE ENVIRONMENT EMPRESA "01" FILIAL '0101'USER "Usuario" PASSWORD "****" MODULO "EST"
aVetor:= {{"B1_COD" ,'PA01 ' ,NIL},;
{"B1_DESC" ,"TESTE EXECAUT " ,NIL},;
{"B1_TIPO" ,"PA" ,Nil},;
{"B1_UM" ,"UN" ,Nil},;
{"B1_PESO" ,10 ,Nil},;
{"B1_LOCPAD" ,"01" ,Nil},;
{"B1_RASTRO" ,"N" ,Nil},;
{"B1_LOCALIZ" ,"N" ,Nil}}
//Inclui o produto na empresa corrente ('99')
MSExecAuto({|x,y| Mata010(x,y)},aVetor,3)
If !lMsErroAuto
ConOut("Produto incluído na empresa 99")
Else
ConOut("Erro na inclusao!")
MostraErro()
EndIf
//Inclui o mesmo produto na empresa '02'
STARTJOB("U_T010Auto",getenvserver(),.t.,aVetor)
RESET ENVIRONMENT
Return
User Function T010Auto(aVetor)
PRIVATE lMsErroAuto := .F.
Private INCLUI := .T.
PREPARE ENVIRONMENT EMPRESA "02" FILIAL '0201'USER "Usuario" PASSWORD "****" MODULO "EST"
MSExecAuto({|x,y| Mata010(x,y)},aVetor,3)
If !lMsErroAuto
ConOut("Produto incluído na empresa 02 ")
Else
ConOut("Erro na inclusao!")
MostraErro()
EndIf
RESET ENVIRONMENT
Return
1 Comentários