Aglutinar Solicitações de Compras usando MSExecAuto MATA110


Outro dia me perguntaram como incluir registro na tabela SC1 - Solicitação de Compras (MATA110) e fazer com que os gatilhos funcionem e perguntaram se é possível aglutinar várias Solicitações em uma só. Para isso é preciso utilizar o MsExecAuto do MATA110, a sua sintaxe é simples: MSExecAuto({|X,Y,Z| Mata110(X,Y,Z)}, aCabecalho, aItens, nOpcao) Onde: aCabecalho - Array contendo as informações para o cabeçalho aItens - Array contendo as informações dos itens que serão inseridos nOpcao - é onde informa se será uma inclusão, alteração ou exclusão 3 - Incluir 4 - Alterar 5 - Excluir Irei postar apenas uma parte do código, para vê-lo na integra, clique no botão "Baixar agora" [sdm_download id="3041" fancy="0"] aglutinarscacom001

lMsErroAuto := .f. 
aCabecalho := {} 
aCabecalho :={ ;
    { "C1_FILIAL" , xFilial("SC1") , NIL},; 
    { "C1_SOLICIT" , UsrRetName(RetCodUsr()) , NIL},; 
    { "C1_EMISSAO" , dDatabase , NIL},; 
    { "C1_UNIDREQ" , "01" , NIL},; 
    { "C1_CODCOMP" , aSC[01,11] , NIL};
    } 
    
aItens := {} 
aAdd(aItens, { {"C1_ITEM" , "0001" , NIL},; // 13-Item da SC 
               {"C1_PRODUTO" , aSC[nContador, 03], NIL},; // 03-Produto 
               {"C1_LOCAL" , aSC[nContador, 10], NIL},; // 10-Local 
               {"C1_DESCRI" , aSC[nContador, 04], NIL},; // 04-Descricao 
               {"C1_QUANT" , aSC[nContador, 05], NIL},; // 05-Quantidade 
               {"C1_ZZCLASS" , aSC[nContador, 08], NIL},; // 08-Class. Prod. 
               {"C1_CC" , aSC[nContador, 09], NIL},; // 09-Centro de Custo 
               {"C1_CODCOMP" , "1" , NIL},; // 11-Cod. Comprad 
               {"C1_UNIDREQ" , "01" , NIL},; // 12-Unid. Requis 
               {"C1_DATPRF" , aSC[nContador, 06], NIL},; // 06-Data Entrega 
               {"C1_ZZAGLUT" , "S" , NIL},; // 07-SC Aglutinada? 
               {"C1_IMPORT" , aSC[nContador, 15], NIL},; // 15-Produto Imp. 
               {"C1_OP" , aSC[nContador, 16], NIL},; 
               {"C1_CLVL" , aSC[nContador, 09], NIL}}) // 09-Cod. Funcionario 
               
MSExecAuto({|X,Y,Z| Mata110(X,Y,Z)}, aCabecalho, aItens, 3) //insere a SC no novo numero 

If lMsErroAuto 
    MsgStop("Problemas na execucao da Rotina Automatica MATA110 [INCLUSAO].")
    MostraErro() 
    DisarmTransaction() 
    lRetorno := .f. 
Else 
    ConfirmSx8() 
EndIf