#INCLUDE "TOTVS.CH" /*/{Protheus.doc} FATT001B Gera o pedido de venda @type function @version 1.0 @author matheus.miranda @since 20/06/2023 /*/ User Function FATT001B() Local cProblema := "" Local cSolucao := "" Local aArea := GetArea() Local aCab := {} Local aItem := {} Local aItens := {} Local cNumOrc := Z05->Z05_CODORC Local cTes := "" Local cNCM := "" Local cTipoCli := "" Local nItem := 1 Local cId := "" Local cFormul := "" Local cNumSer := "" Private lMsErroAuto := .F. Private lMsHelpAuto := .T. If Z05->Z05_STATUS != "A" cProblema := "Apenas orcamentos com status (Em aberto) podem gerar pedido" cSolucao := "Verifique o status do orcamento" RestArea(aArea) Logar(cProblema, cSolucao) Return EndIf If !Empty(Z05->Z05_PEDIDO) cProblema := "Este orcamento ja gerou o pedido " + AllTrim(Z05->Z05_PEDIDO) cSolucao := "Verifique o status do orcamento" RestArea(aArea) Logar(cProblema, cSolucao) Return EndIf aAdd(aCab, {"C5_FILIAL", xFilial("SC5"),}) aAdd(aCab, {"C5_EMISSAO", Date(),}) aAdd(aCab, {"C5_XHORA", Time(),}) aAdd(aCab, {"C5_TIPO", "N",}) aAdd(aCab, {"C5_CLIENT", Z05->Z05_CLIENT,}) aAdd(aCab, {"C5_LOJAENT", Z05->Z05_LOJA,}) aAdd(aCab, {"C5_CLIENTE", Z05->Z05_CLIENT,}) aAdd(aCab, {"C5_LOJACLI", Z05->Z05_LOJA,}) aAdd(aCab, {"C5_XNOMECL", Posicione("SA1", 1, xFilial("SA1") + Z05->(Z05_CLIENT+Z05_LOJA), "A1_NOME"),}) aAdd(aCab, {"C5_XUSR", IIF(Empty(AllTrim(UsrRetName(RetCodUsr()))), "admin", AllTrim(UsrRetName(RetCodUsr()))),}) aAdd(aCab, {"C5_TIPOCLI", Posicione("SA1", 1, xFilial("SA1") + Z05->Z05_CLIENT + Z05->Z05_LOJA, "A1_TIPO"),}) aAdd(aCab, {"C5_CONDPAG", Z05->Z05_CONDPG,}) aAdd(aCab, {"C5_TABELA", "001",}) aAdd(aCab, {"C5_VEND1", Z05->Z05_VEND,}) aAdd(aCab, {"C5_TPFRETE", "R",}) If Z05->Z05_PERDSC > 0 aAdd(aCab, {"C5_DESC1", Z05->Z05_PERDSC,}) EndIf If Z05->Z05_VALDSC > 0 aAdd(aCab, {"C5_DESCONT", Z05->Z05_VALDSC,}) EndIf If !Empty(Z05->Z05_MSGNF) aAdd(aCab, {"C5_MENNOTA", Z05->Z05_MSGNF,}) EndIf aAdd(aCab, {"C5_INDPRES", "0",}) aAdd(aCab, {"C5_XNUMORC", cNumOrc,}) DBSelectArea("Z06") Z06->(DBSetOrder(2)) While Z06->(!EOF()) .AND. Z06->(DbSeek(xFilial("Z06")+cNumOrc + StrZero(nItem, TamSX3("Z06_ITEM")[1]))) cTipoCli := Posicione("SA1", 1, xFilial("SA1") + Z05->(Z05_CLIENT+Z05_LOJA), "A1_TIPO") cTes := MaTesInt(2, "01", Z05->Z05_CLIENT, Z05->Z05_LOJA, "C", Z06->Z06_PROD, ,cTipoCli) cNCM := Posicione("SB1", 1, xFilial("SB1") + Z06->Z06_PROD, "B1_POSIPI") cId := Posicione("SFM", 4, xFilial("SFM") + "01" + cNCM, "FM_ID") cFormul := Posicione("SFM", 4, xFilial("SFM") + "01" + cNCM, "FM_XFORMUL") cNumSer := Posicione("SB1", 1, xFilial("SB1") + Z06->Z06_PROD, "B1_CHASSI") If Empty(cTes) cProblema := "Nao foi possivel encontrar a TES do produto " + AllTrim(Z06->Z06_PROD) cSolucao := "Verifique se existe TES para este produto na TES inteligente" RestArea(aArea) Logar(cProblema, cSolucao) Return EndIf aItem := {} aAdd(aItem, {"C6_FILIAL", xFilial("SC6"),}) aAdd(aItem, {"C6_ITEM", Z06->Z06_ITEM,}) aAdd(aItem, {"C6_PRODUTO", Z06->Z06_PROD,}) aAdd(aItem, {"C6_DESCRI", Z06->Z06_PRDDSC,}) aAdd(aItem, {"C6_XCODORI", Posicione("SB1", 1, xFilial("SB1") + Z06->Z06_PROD, "B1_XCODORI"),}) aAdd(aItem, {"C6_UM", Z06->Z06_UM,}) aAdd(aItem, {"C6_QTDVEN", Z06->Z06_QUANT,}) aAdd(aItem, {"C6_PRCVEN", Z06->Z06_PRCVEN,}) aAdd(aItem, {"C6_VALOR", Z06->Z06_VALOR,}) aAdd(aItem, {"C6_QTDLIB", 0,}) aAdd(aItem, {"C6_OPER", "01",}) aAdd(aItem, {"C6_TES", cTes,}) aAdd(aItem, {"C6_XLOCAL", Posicione("SB1", 1, xFilial("SB1") + Z06->Z06_PROD, "B1_XLOCAL"),}) aAdd(aItem, {"C6_XLOCAL2", Posicione("SB1", 1, xFilial("SB1") + Z06->Z06_PROD, "B1_XLOCAL2"),}) aAdd(aItem, {"C6_LOCAL", "01",}) aAdd(aItem, {"C6_CF", Posicione("SF4", 1, xFilial("SF4") + cTes, "F4_CF"),}) aAdd(aItem, {"C6_CLI", Z05->Z05_CLIENT,}) aAdd(aItem, {"C6_DESCONT", Z06->Z06_PRCDSC,}) aAdd(aItem, {"C6_VALDESC", Z06->Z06_VALDSC,}) aAdd(aItem, {"C6_LOJA", Z05->Z05_LOJA,}) aAdd(aItem, {"C6_PRUNIT", Z06->Z06_PRCVEN,}) If !Empty(cNumSer) aAdd(aItem, {"C6_NUMSERI", cNumSer,}) EndIf aAdd(aItem, {"C6_XNCM", cNCM,}) If !Empty(cId) aAdd(aItem, {"C6_XFMID", cId,}) EndIf If !Empty(cFormul) aAdd(aItem, {"C6_XFORMUL", cFormul,}) EndIf aAdd(aItem, {"C6_XCANC", "N",}) aAdd(aItem, {"C6_CONTA", "301010101",}) aAdd(aItens, AClone(aItem)) Z06->(DbSkip()) nItem++ EndDo Z06->(DBCloseArea()) MsExecAuto({|x, y, z| MATA410(x, y, z)}, aCab, aItens, 3) If lMsErroAuto MostraErro() Else MsgInfo("Este orcamento gerou o pedido " + AllTrim(SC5->C5_NUM)) If RecLock("Z05", .F.) Z05->Z05_STATUS := "F" Z05->Z05_PEDIDO := SC5->C5_NUM Z05->(MsUnlock()) EndIf EndIf RestArea(aArea) Return /*/{Protheus.doc} Logar Funcao que vai mostrar um help na tela com o problema ocorrido @type function @version 1.0 @author matheus.miranda @since 19/06/2023 @param cProblema, character, O problema ocorrido @param cSolucao, character, A solucao do problema /*/ Static Function Logar(cProblema, cSolucao) Help(NIL, NIL, "Cadastro de Orcamentos", NIL, cProblema, 1, 0, NIL, NIL, NIL, NIL, NIL, {cSolucao}) Return