Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Deck of Cards
id2
Card
id10
labelIncluir

Utilizando um Orçamento Simplificado:

Sistema deve estar na versão 12.1.23 ou superior e o parâmetro MV_ORCSIMP deve estar ligado (1=Sim):

  1. Acesse a rotina Orçamento Simplificado (TECA745)
  2. Selecione a opção "Incluir"
    1. Caso o parâmetro MV_ORCPRC estiver ligado, é necessário informar uma Tabela de Precificação (TECA740E)

Utilizando uma Oportunidade de Venda:

  1. Acesse a rotina "Oportunidade de Venda" (FATA300) e selecione um registro no grid
  2. Acesse a opção "Alterar"
  3. Acesse a opção "Outras Ações" e "Proposta Comercial"
  4. Caso não exista, inclua uma Proposta Comercial. Caso exista, selecione uma Proposta Comercial e pressione "Alterar"
  5. Com a rotina "Proposta Comercial" aberta, selecione "Outras Ações" e "Atualiza Orçamento de Serviços"
    1. Caso o parâmetro MV_ORCPRC estiver ligado, é necessário informar uma Tabela de Precificação (TECA740E)

Utilizando uma Vistoria Técnica:

  1. Na rotina Vistoria Técnica Vistorias Técnicas (TECA270), incluir ou alterar um registro qualquer.
  2. Selecione "Outras Ações" e "Atualiza Orçamento de Serviços" e conclua a inclusão do Orçamento de Vistoria
    1. Caso o parâmetro MV_ORCPRC estiver ligado, é necessário informar uma Tabela de Precificação (TECA740E).
  3. OBS: O orçamento Orçamento incluído via através da Vistoria precisa ser importado para um Orçamento Simplificado ou Proposta Comercial para se tornar um orçamento.Orçamento de Serviços.
  4. No Cadastro de Vistorias Técnicas use a opção "Gerar Orçamento de Serviços" para gerar Orçamento de Vistoria ou também, no cadastro de Orçamentos,  incluir ou alterar e selecione "Incluir Vistoria".
Informações
titleImportante

O passo 4 somente será permitido após a finalização da vistoria (Status=Concluído) e após a conclusão do passo 2

Card
id11
labelExcluir

Utilizando um Orçamento Simplificado:

Sistema deve estar na versão 12.1.23 ou superior e o parâmetro MV_ORCSIMP deve estar ligado (1=Sim):

  1. Acesse a rotina Orçamento Simplificado (TECA745)
  2. Selecione a opção "Excluir"

Utilizando uma Oportunidade de Venda:

  1. Acesse a rotina "Oportunidade de Venda" (FATA300) e selecione um registro no grid
  2. Acesse a opção "Alterar"
  3. Acesse a opção "Outras Ações" e "Proposta Comercial"
  4. Selecione uma Proposta Comercial e pressione "Alterar"
  5. Com a rotina "Proposta Comercial" aberta, selecione "Outras Ações" e "Remover Orçamento de Serviços"

Utilizando uma Vistoria Técnica:

  1. Na rotina Vistoria Técnica (TECA270), incluir ou alterar um registro qualquer
  2. Selecione "Outras Ações" e "Remover Orçamento de Serviços"
Card
id12
labelAlterar

Utilizando um Orçamento Simplificado:

Sistema deve estar na versão 12.1.23 ou superior e o parâmetro MV_ORCSIMP deve estar ligado (1=Sim):

  1. Acesse a rotina Orçamento Simplificado (TECA745)
  2. Selecione a opção "Alterar"

Utilizando uma Oportunidade de Venda:

  1. Acesse a rotina "Oportunidade de Venda" (FATA300) e selecione um registro no grid
  2. Acesse a opção "Alterar"
  3. Acesse a opção "Outras Ações" e "Proposta Comercial"
  4. Selecione uma Proposta Comercial e pressione "Alterar"
  5. Com a rotina "Proposta Comercial" aberta, selecione "Outras Ações" e "Atualiza Orçamento de Serviços"

Utilizando uma Vistoria Técnica:

  1. Na rotina Vistoria Técnica (TECA270), selecione "Alterar".
  2. Selecione "Outras Ações" e "Atualiza Orçamento de Serviços"
  3. OBS: O orçamento incluído via Vistoria precisa ser importado para um Orçamento Simplificado ou Proposta Comercial para se tornar um orçamento.
Card
id13
labelVisualizar

Utilizando um Orçamento Simplificado:

Sistema deve estar na versão 12.1.23 ou superior.

  1. Acesse a rotina Orçamento Simplificado (TECA745)
  2. Selecione a opção "Visualizar"

Utilizando uma Oportunidade de Venda:

  1. Acesse a rotina "Oportunidade de Venda" (FATA300) e selecione um registro no grid
  2. Acesse a opção "Visualizar"
  3. Acesse a opção "Outras Ações" e "Proposta Comercial"
  4. Selecione uma Proposta Comercial e pressione "Visualizar"
  5. Com a rotina "Proposta Comercial" aberta, selecione "Outras Ações" e "Visualizar Orçamento de Serviços"

Utilizando uma Vistoria Técnica:

  1. Na rotina Vistoria Técnica (TECA270), visualize um registro qualquer
  2. Selecione "Outras Ações" e "Visualizar Orçamento de Serviços"
Card
id14
labelAtivar / Inativar

Utilizando um Orçamento Simplificado:

Sistema deve estar na versão 12.1.23 ou superior.

  1. Acesse a rotina Orçamento Simplificado (TECA745)
  2. Selecione a opção "Ativar / Inativar"
Card
id15
labelPosicionar registro

Utilizando o Posicionar Registros:

Sistema deve estar na versão 12.1.23 ou superior.

Acesse a rotina Orçamento (TECA740)

  1. Selecione "Outras Ações" e "Posicionar"
  2. Selecione qual aba gostaria de posicionar e confirme. Após a confirmação, aparecerão os campos padrão e os campos criados pelo usuário.
  3. Preencha os campos e confirme.
    1. Se existirem as informações, será posicionado na linha.
    2. Se não existirem as informações, será exibida uma mensagem alertando o usuário que não foi possível posicionar na linha.


Card
id15
labelArmamento e Uniforme

Abas Uniforme e Armamento:

As abas de uniforme e armamento possuem valores próprios e estão vinculadas ao orçamento somente quando o campo MV_ORCPRC está configurado como .F. Esses totais são incorporados ao valor da TFF, refletindo-se posteriormente no contrato. Vale observar que os itens de armamento e uniforme não geram linhas específicas nos contratos; ao invés disso, seus totais são incorporados diretamente ao posto.

Observação: A incorporação desses valores ao contrato ocorre quando o campo MV_ORCPRC está desabilitado.


Informações
titleIMPORTANTE

Para o cálculo correto do Total Geral dos uniformes é necessário que os campos "Aloc. Previs" (TFF_QTPREV) e "Vida Útil" (TXP_VIDMES) e "Qtd.Total Un" (TXP_QTDUNI) existam na base.
O Total Geral do Uniforme será calculado da seguinte forma:
"Qtd. Uniforme" (TXP_QTDVEN) * "Aloc. Previs" (TFF_QTPREV) * "Vlr. Uniforme (TXP_PRCVEN) e será dividido pelo campo "Vida Útil" (TXP_VIDMES) caso seja preenchido.

Card
id16
labelExemplo de código

O código abaixo exemplifica a inclusão de um Orçamento de Serviços:


Bloco de código
titleExemplo
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

//	Exemplo de ExecAuto Customizado, de Orçamento de Contrato de Serviço
//	Nos ARRAYs, informar o nome do campo e valor

//	Usar os Modelos abaixo, no FOR acima
//	'TFJ_REFER'.      	//	'Ref. Proposta'
//		GRID
//		'TFL_LOC'      	//	'Locais de Atendimento'
//		'TFF_RH'       	//	'Recursos Humanos'
//			SubGRID
//			'TFG_MI'    	//	'Materiais de Implantação'
//			'TFH_MC'    	//	'Material de Consumo'
//			'ABP_BENEF' 	//	'Benefícios'
//			'TFU_HE'    	//	'Hora Extra'
//		'TFI_LE'       	//	'Locação de Equipamentos'
//			SubGRID
//			'TEV_ADICIO'	//	'Cobrança da Locação'

User FunctIon Orc740()
	Local aLinha := {}
	Local aTFJ := {}	//	Campos do Cabeçalho
	Local aTFL := {}	//	Locais de Atendimento
	Local aTFF := {}	//	Recursos Humanos
	Local aTFG := {}	//	Material de Implantação
	Local aTFH := {}	//	Material de Consumo
	Local aABP := {}	//	Verbas Adicionais
	Local aTFU := {}	//	Hora Extra
	Local aTFI := {}	//	Locação de Equipamentos
	Local aTEV := {}	//	Cobrança de Locação
	Local nDtIni := dDataBase
	Local nDtFim := dDataBase + 30

	//	Cabeçalho
	aAdd(aTFJ, {"TFJ_FILIAL", xFilial("TFJ")})
	aAdd(aTFJ, {"TFJ_CODIGO", GETSXENUM("TFJ", "TFJ_CODIGO")})
	aAdd(aTFJ, {"TFJ_CODENT", "000001"})
	aAdd(aTFJ, {"TFJ_LOJA"  , "01"})
	aAdd(aTFJ, {"TFJ_CONDPG", "001"})

	//	Locais de Atendimento
	aAdd(aTFL  ,  "TFL_LOC")
	aAdd(aLinha, {"TFL_FILIAL", xFilial("TFL")})
	aAdd(aLinha, {"TFL_LOCAL" , "00000014"})
	aAdd(aLinha, {"TFL_DTINI" , nDtIni})
	aAdd(aLinha, {"TFL_DTFIM" , nDtFim})
	aAdd(aTFL  , aLinha)
	aLinha := {}

	//	Recursos Humanos
	aAdd(aTFF  ,  "TFF_RH")
	aAdd(aLinha, {"TFF_FILIAL", xFilial("TFF")})
	aAdd(aLinha, {"TFF_ITEM"  , "01"})
	aAdd(aLinha, {"TFF_PRODUT", "000000000000001"})
	aAdd(aLinha, {"TFF_QTDVEN", 10})
	aAdd(aLinha, {"TFF_PRCVEN", 1000})
	aAdd(aLinha, {"TFF_PERINI", nDtIni})
	aAdd(aLinha, {"TFF_PERFIM", nDtFim})
	aAdd(aLinha, {"TFF_TESPED", "502"})
	aAdd(aLinha, {"TFF_FUNCAO", "00001"})
	aAdd(aLinha, {"TFF_TURNO" , "001"})
	aAdd(aLinha, {"TFF_SEQTRN", "01"})
	aAdd(aLinha, {"TFF_ESCALA", "000002"})
	aAdd(aTFF  , aLinha)
	aLinha := {}

	//	Materiais de Implantação
	aAdd(aTFG  ,  "TFG_MI")
	aAdd(aLinha, {"TFG_FILIAL", xFilial("TFG")})
	aAdd(aLinha, {"TFG_ITEM"  , "01"})
	aAdd(aLinha, {"TFG_PRODUT", "000000000000003"})
	aAdd(aLinha, {"TFG_QTDVEN", 1})
	aAdd(aLinha, {"TFG_PRCVEN", 100})
	aAdd(aLinha, {"TFG_PERINI", nDtIni})
	aAdd(aLinha, {"TFG_PERFIM", nDtFim})
	aAdd(aLinha, {"TFG_TESPED", "501"})
	aAdd(aTFG  , aLinha)
	aLinha := {}

	//	Materiais de Consumo
	aAdd(aTFH  ,  "TFH_MC")
	aAdd(aLinha, {"TFH_FILIAL", xFilial("TFH")})
	aAdd(aLinha, {"TFH_ITEM"  , "01"})
	aAdd(aLinha, {"TFH_PRODUT", "000000000000004"})
	aAdd(aLinha, {"TFH_QTDVEN", 1})
	aAdd(aLinha, {"TFH_PRCVEN", 100})
	aAdd(aLinha, {"TFH_PERINI", nDtIni})
	aAdd(aLinha, {"TFH_PERFIM", nDtFim})
	aAdd(aLinha, {"TFH_TESPED", "501"})
	aAdd(aTFH  , aLinha)
	aLinha := {}

	MsgRun("Orçamento", "Processando", {|| U_Exec740(aTFJ, {aTFL, aTFF, aTFG, aTFH, aABP, aTFU, aTFI, aTEV})})

Return

//*************************************************************
//	ExecAuto Customizado
User Function Exec740(aOrca, aModelos)
	Local aLinha := {}
	Local aGrid := {}
	Local cCampo := ""
	Local cMsg := ""
	Local lRet := .T.
	Local nGrd := 0
	Local nLin := 0
	Local nMod := 0
	Local oModel
	Local oModAux
	Local xValor

	If SuperGetMV('MV_ORCPRC')
		oModel := FwLoadModel("TECA740F")	//	Orçamento com precificação
	Else
		oModel := FwLoadModel("TECA740") 	//	Orçamento sem precificação
	Endif
	oModel:SetOperation(MODEL_OPERATION_INSERT)
	oModel:Activate()

	//	Cabeçalho
	oModAux := oModel:GetModel("TFJ_REFER")
	For nMod := 1 To Len(aOrca)
		cCampo := aOrca[nMod, 1]
		xValor := aOrca[nMod, 2]
		lRet := oModAux:SetValue(cCampo, xValor)
		If !lRet
			Exit
		Endif
	Next

	//	Grids
	If lRet .And. !Empty(aModelos)
		For nMod := 1 To Len(aModelos)
			aGrid := aClone(aModelos[nMod])
			If !Empty(aGrid)
				oModAux := oModel:GetModel(aGrid[1])	//	Nome do Modelo
				For nGrd := 2 To Len(aGrid)	//	Registros do Modelo
					If nGrd > 2
						oModAux:AddLine()
					Endif
					aLinha := aClone(aGrid[nGrd])	//	Campos do Modelo
					For nLin := 1 To Len(aLinha)
						cCampo := aLinha[nLin, 1]
						If FwFldGet(cCampo) == Nil
							MsgAlert("O Campo " + cCampo + ' não existe no Modelo ' + aGrid[1], "Erro")
							lRet := .F.
						Else
							xValor := aLinha[nLin, 2]
							lRet := oModAux:SetValue(cCampo, xValor)
						Endif
						If lRet .And. nLin == Len(aLinha)
							aLinha := oModel:GetRelation(aGrid[1])[1]	//	Campos de Relacionamento
							For nLin := 2 To Len(aLinha)
								cCampo := aLinha[nLin, 2]	//	Campo Pai
								xValor := FwFldGet(cCampo)
								cCampo := aLinha[nLin, 1]	//	Campo Filho
								If Empty(FwFldGet(cCampo))
									lRet := oModAux:LoadValue(cCampo, xValor)
								Endif
								If !lRet
									nGrd := Len(aGrid)
									nMod := Len(aModelos)
									Exit
								Endif
							Next
							Exit
						Endif
					Next
				Next
			Endif
		Next
	Endif

	At740SCmt(.T.)
	lRet := lRet .And. oModel:VldData()
	lRet := lRet .And. oModel:CommitData()

	If !lRet
		aLinha := oModel:GetErrorMessage()
		For nLin := 1 To Len(aLinha)
			If !Empty(aLinha[nLin])
				cMsg += aLinha[nLin] + CRLF
			Endif
		Next
		MsgAlert(cMsg, "Erro")
	Else
		MsgAlert("Orçamento Gravado com Sucesso", " ")
	Endif

Return lRet

...