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 que uma ação desse tipo seja possível é 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:
#Include 'Protheus.ch'
#Include 'TBICONN.ch'
User Function tStJb010()
Local aVetor := {}
PRIVATE lMsErroAuto := .F.
Private INCLUI := .T.
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)
Return
User Function T010Auto(aVetor)
PRIVATE lMsErroAuto := .F.
Private INCLUI := .T.
PREPARE ENVIRONMENT EMPRESA "02" FILIAL '0201'
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
0 Comentários