Árvore de páginas

A rotina ExecAuto do LOJA701 (Venda Assistida) disponibiliza apenas a inclusão de orçamento para futura finalização.


Observações:

  • A rotina não é homologada para finalização da venda, ou seja, é possível apenas incluir orçamento. Desta forma o segundo parâmetro deve ser sempre 3. "(Loja701(a,b,c,d,e,f,g,h,i,j,k)},.F.,3)"
  • Os dados preenchidos na ExecAuto devem respeitar as regras da rotina em tela Venda Assistida, ou seja, como se o usuário tivesse preenchendo os dados na tela.
  • Não está homologada com integração SIGACRD.
  • Não deve-se utilizar a antiga rotina descontinuada FATA701, sempre utilize a rotina padrão do loja LOJA701.
  • O campo "AUTRESERVA" deverá ser utilizado quando o orçamento criado necessitar de reserva (LR_ENTREGA="3") para algum item do tipo "entrega". Neste caso informe neste campo o Código da Loja (relacionado ao campo LJ_CODIGO da tabela SLJ) que deseja efetuar a reserva.
  • Quando o tipo de entrega do item for (LR_ENTREGA="5=Entrega c/ Pedido s/ Reserva") é necessário informar no campo LR_FILRES o código da filial onde será gerado o pedido.
  • Para geração de orçamento com características de finalização posterior com o tipo de documento NF-e, no RDMake que faz a execução do ExecAuto, na inicialização do ambiente, deve ser informado o módulo Faturamento "FAT", e na chamada do ExecAuto passar o 11º parâmetro como "VD" (Venda Direta), com isso a inclusão do orçamento irá obedecer o fluxo para finalização posterior como NF-e.


EXEMPLOS:

Exemplo de ExecAuto para incluir orçamento com 2 itens e forma de pagamento em dinheiro (R$)

#Include 'Protheus.ch'
#include "Tbiconn.ch"

User Function MyLOJA701()
Local _aCab 		:= {} //Array do Cabeçalho do Orçamento
Local _aItem 		:= {} //Array dos Itens do Orçamento
Local _aParcelas 	:= {} //Array das Parcelas do Orçamento
Local _cEmpresa 	:= "99" //Codigo da Empresa que deseja incluir o orcamento
Local _cFilial 		:= "01" //Codigo da Filial que deseja incluir o orcamento
Local cCallRot      := "VA" // Gerar orçamento via -> Venda Assistida "VA" (Cupom/NFC-e/SAT) | Venda Direta "VD" (NF-e).
Local cMsgErro 		:= ""
Local _cVendedor 	:= "" //Codigo do Vendedor
Local _cCodCli 		:= "" //Codigo do Cliente
Local _cCodLoja 	:= "" //Codigo da Loja do Cliente
Local nTamProd 		:= 0
Local nTamUM 		:= 0
Local nTamTabela 	:= 0

Private lMsHelpAuto := .T. //Variavel de controle interno do ExecAuto
Private lMsErroAuto := .F. //Variavel que informa a ocorrência de erros no ExecAuto
Private INCLUI 		:= .T. //Variavel necessária para o ExecAuto identificar que se trata de uma inclusão
Private ALTERA 		:= .F. //Variavel necessária para o ExecAuto identificar que se trata de uma inclusão

//Abre o ambiente
PREPARE ENVIRONMENT EMPRESA _cEmpresa FILIAL _cFilial MODULO "LOJA"

//Indica inclusão
lMsHelpAuto := .T.
lMsErroAuto := .F.

_cVendedor 	:= "000001" //Codigo do Vendedor
_cCodCli 	:= "000002" //Codigo do Cliente
_cCodLoja 	:= "01" 	//Codigo da Loja do Cliente

//Retorna o tamanho dos campos
nTamProd 	:= TamSX3("LR_PRODUTO")[1]
nTamUM 		:= TamSX3("LR_UM")[1]
nTamTabela 	:= TamSX3("LR_TABELA")[1]

//Acerta o tamanho do codigo o Vendedor
_cVendedor := PadR(_cVendedor,TamSX3("A3_COD")[1])

SA1->(DbSetOrder(1)) //A1_FILIAL+A1_COD+A1_LOJA
SA1->(MsSeek(xFilial("SA1")+_cCodCli+_cCodLoja))

//***********************************
// Monta cabeçalho do orçamento (SLQ)
//***********************************
aAdd( _aCab, {"LQ_VEND" 	, _cVendedor 	, NIL} )
aAdd( _aCab, {"LQ_COMIS" 	, 0 			, NIL} )
aAdd( _aCab, {"LQ_CLIENTE" 	, SA1->A1_COD 	, NIL} )
aAdd( _aCab, {"LQ_LOJA" 	, SA1->A1_LOJA 	, NIL} )
aAdd( _aCab, {"LQ_TIPOCLI" 	, SA1->A1_TIPO 	, NIL} )
aAdd( _aCab, {"LQ_DESCONT" 	, 0 			, NIL} )
aAdd( _aCab, {"LQ_DTLIM" 	, dDatabase 	, NIL} )
aAdd( _aCab, {"LQ_EMISSAO" 	, dDatabase 	, NIL} )
aAdd( _aCab, {"LQ_CONDPG" 	, "001" 		, NIL} ) //Condição de Pagamento 001 configurada como R$
aAdd( _aCab, {"LQ_NUMMOV" 	, "1 " 			, NIL} )
//aAdd( _aCab, {"AUTRESERVA", "000001" 		, NIL} ) //Codigo da Loja (Campo SLJ->LJ_CODIGO) que deseja efetuar a reserva quando existir item(s) que for do tipo entrega (LR_ENTREGA = 3)


//***********************************
// Monta Itens do orçamento (SLR)
//***********************************
//----------
// Item 01
//----------
aAdd( _aItem, {} )
aAdd( _aItem[Len(_aItem)], {"LR_PRODUTO", PadR("1",nTamProd) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_QUANT" 	, 1 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_UM" 	, PadR("UN",nTamUM) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESC" 	, 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VALDESC", 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_TABELA" , PadR("1",nTamTabela) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESCPRO", 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VEND" 	, _cVendedor 			, NIL} )
//aAdd( _aItem[Len(_aItem)], {"LR_ENTREGA", "3" 				, NIL} ) //3=Entrega (Qdo. informado o LR_ENTREGA = 3, deve ser informado também o campo "AUTRESERVA" no array de Cabecalho)

//----------
// Item 02
//----------
aAdd( _aItem, {} )
aAdd( _aItem[Len(_aItem)], {"LR_PRODUTO", PadR("1",nTamProd) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_QUANT" 	, 1 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_UM" 	, PadR("UN",nTamUM) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESC" 	, 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VALDESC", 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_TABELA" , PadR("1",nTamTabela) 	, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESCPRO", 0 					, NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VEND" 	, _cVendedor 			, NIL} )


//************************************************
// Monta o Pagamento do orçamento (aPagtos) (SL4)
//************************************************
aAdd( _aParcelas, {} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_DATA" 	, dDatabase , NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_VALOR" 	, 20 		, NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_FORMA" 	, "R$ " 	, NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_ADMINIS", " " 		, NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_NUMCART", " " 		, NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_FORMAID", " " 		, NIL} )
aAdd( _aParcelas[Len(_aParcelas)], {"L4_MOEDA"	, 0 		, NIL} )


SetFunName("LOJA701")

MSExecAuto({|a,b,c,d,e,f,g,h,i,j,k| Loja701(a,b,c,d,e,f,g,h,i,j,k)},.F.,3,"","",{},_aCab,_aItem ,_aParcelas,Nil,Nil,cCallRot)

If lMsErroAuto
	Alert("Erro no ExecAuto LOJA701")
	cMsgErro := MostraErro()
	DisarmTransaction()
	Alert(cMsgErro)
Else
	Alert("Sucesso na execução do ExecAuto LOJA701")
EndIf

RESET ENVIRONMENT //Encerra o ambiente aberto anteriormente

Return

Exemplo de ExecAuto para incluir orçamento com 2 itens e forma de pagamento Multi-Negociação (FI-Financiado) em 6 parcelas com juros de 5%

Pré-requisito: Deve existir a Multi-Negociação configurada com 6 parcelas e juros de 5%

Venda com 2 itens de 100,00 = 200,00

Juros de 5% (10,00) na forma de pagamento FI (Financiado), totalizando: R$ 210,00

#Include 'Protheus.ch'
#include "Tbiconn.ch"
 
User Function MyLOJA701()
Local _aCab         := {} //Array do Cabeçalho do Orçamento
Local _aItem        := {} //Array dos Itens do Orçamento
Local _aParcelas    := {} //Array das Parcelas do Orçamento
Local _cEmpresa     := "99" //Codigo da Empresa que deseja incluir o orcamento
Local _cFilial      := "01 " //Codigo da Filial que deseja incluir o orcamento
Local cCallRot      := "VA" // Gerar orçamento via -> Venda Assistida "VA" (Cupom/NFC-e/SAT) | Venda Direta "VD" (NF-e).
Local cMsgErro      := ""
Local _cVendedor    := "" //Codigo do Vendedor
Local _cCodCli      := "" //Codigo do Cliente
Local _cCodLoja     := "" //Codigo da Loja do Cliente
Local nTamProd      := 0
Local nTamUM        := 0
Local nTamTabela    := 0
Local nInd          := 0
Local dDataParc     := Nil
 
Private lMsHelpAuto := .T. //Variavel de controle interno do ExecAuto
Private lMsErroAuto := .F. //Variavel que informa a ocorrência de erros no ExecAuto
Private INCLUI      := .T. //Variavel necessária para o ExecAuto identificar que se trata de uma inclusão
Private ALTERA      := .F. //Variavel necessária para o ExecAuto identificar que se trata de uma inclusão
 
//Abre o ambiente
PREPARE ENVIRONMENT EMPRESA _cEmpresa FILIAL _cFilial MODULO "LOJA"
 
//Indica inclusão
lMsHelpAuto := .T.
lMsErroAuto := .F.
 
_cVendedor  := "000001" //Codigo do Vendedor
_cCodCli    := "000002" //Codigo do Cliente
_cCodLoja   := "01"     //Codigo da Loja do Cliente
 
//Retorna o tamanho dos campos
nTamProd    := TamSX3("LR_PRODUTO")[1]
nTamUM      := TamSX3("LR_UM")[1]
nTamTabela  := TamSX3("LR_TABELA")[1]
 
//Acerta o tamanho do codigo o Vendedor
_cVendedor := PadR(_cVendedor,TamSX3("A3_COD")[1])
 
SA1->(DbSetOrder(1)) //A1_FILIAL+A1_COD+A1_LOJA
SA1->(MsSeek(xFilial("SA1")+_cCodCli+_cCodLoja))
 
//***********************************
// Monta cabeçalho do orçamento (SLQ)
//***********************************
aAdd( _aCab, {"LQ_VEND"     , _cVendedor    , NIL} )
aAdd( _aCab, {"LQ_COMIS"    , 0             , NIL} )
aAdd( _aCab, {"LQ_CLIENTE"  , SA1->A1_COD   , NIL} )
aAdd( _aCab, {"LQ_LOJA"     , SA1->A1_LOJA  , NIL} )
aAdd( _aCab, {"LQ_TIPOCLI"  , SA1->A1_TIPO  , NIL} )
aAdd( _aCab, {"LQ_DESCONT"  , 0             , NIL} )
aAdd( _aCab, {"LQ_DTLIM"    , dDatabase     , NIL} )
aAdd( _aCab, {"LQ_EMISSAO"  , dDatabase     , NIL} )
aAdd( _aCab, {"LQ_NUMMOV"   , "1 "          , NIL} )
aAdd( _aCab, {"LQ_CONDPG"	, "   "			, NIL} )    //Condição de Pagamento deve ficar em Branco
aAdd( _aCab, {"LQ_JUROS"	, 5 		    , NIL} )    //Percentual de Juros (5%) do pagamento FI (Financiado) da Configuração da Multi-Negociação
aAdd( _aCab, {"LQ_CODMNEG"	, "001"			, NIL} )    //Código 001 da Multi-Negociação Configurada
 
 
//***********************************
// Monta Itens do orçamento (SLR)
//***********************************
//----------
// Item 01
//----------
aAdd( _aItem, {} )
aAdd( _aItem[Len(_aItem)], {"LR_PRODUTO", PadR("1",nTamProd)    , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_QUANT"  , 1                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_UM"     , PadR("UN",nTamUM)     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESC"   , 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VALDESC", 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_TABELA" , PadR("1",nTamTabela)  , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESCPRO", 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VEND"   , _cVendedor            , NIL} )
 
//----------
// Item 02
//----------
aAdd( _aItem, {} )
aAdd( _aItem[Len(_aItem)], {"LR_PRODUTO", PadR("1",nTamProd)    , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_QUANT"  , 1                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_UM"     , PadR("UN",nTamUM)     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESC"   , 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VALDESC", 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_TABELA" , PadR("1",nTamTabela)  , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_DESCPRO", 0                     , NIL} )
aAdd( _aItem[Len(_aItem)], {"LR_VEND"   , _cVendedor            , NIL} )
 
 
//************************************************
// Monta o Pagamento do orçamento (aPagtos) (SL4)
//************************************************
dDataParc := dDatabase
For nInd:=1 to 6 //6 Parcelas tipo FI (Financiado), R$ 35,00 cada parcela
	aAdd( _aParcelas, {} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_DATA"      , dDataParc 	, NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_VALOR"     , 35		    , NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_FORMA"     , "FI " 		, NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_NUMCART"   , " " 		, NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_FORMAID"   , " " 		, NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_MOEDA"     , 0 			, NIL} )
	aAdd( _aParcelas[Len(_aParcelas)], {"L4_ADMINIS"   , "002 - FINANCIADORA", NIL} ) //Código da Administradora Financeira tipo (FI=Financiado)
	dDataParc := dDataParc + 30
Next nInd
 
SetFunName("LOJA701")
 
MSExecAuto({|a,b,c,d,e,f,g,h,i,j,k| Loja701(a,b,c,d,e,f,g,h,i,j,k)},.F.,3,"","",{},_aCab,_aItem ,_aParcelas,Nil,Nil,cCallRot) 
  
If lMsErroAuto
    Alert("Erro no ExecAuto LOJA701")
    cMsgErro := MostraErro()
    DisarmTransaction()
    Alert(cMsgErro)
Else
    Alert("Sucesso na execução do ExecAuto LOJA701")
EndIf
 
RESET ENVIRONMENT //Encerra o ambiente aberto anteriormente
 
Return

Links úteis: 
Configuração do Job LJGRVBATCH para processamento das vendas no Protheus

Premissas para a correta integração e processamento das vendas