#Include "Protheus.ch" #Include "TopConn.ch" #Include "Colors.ch" /* +-----------+------------+----------------+-------------------+-------+---------------+ | Programa | SEST002 | Desenvolvedor | Diego | Data | 27/11/2009 | +-----------+------------+----------------+-------------------+-------+---------------+ | Descricao | Apontamento automático de produção. | +-----------+-------------------------------------------------------------------------+ | Modulos | SIGAEST | +-----------+-------------------------------------------------------------------------+ | Processos | | +-----------+-------------------------------------------------------------------------+ | Modificacoes desde a construcao inicial | +----------+-------------+------------------------------------------------------------+ | DATA | PROGRAMADOR | MOTIVO | +----------+-------------+------------------------------------------------------------+ |17/10/10 | nivaldo | geração do empenho/adequação de data | +----------+-------------+------------------------------------------------------------+ */ User Function SEST002() Private cCadastro := OemToAnsi("Apontamentos automáticos") Private aRotina := { {"Pesquisar" ,"AxPesqui" ,0,1} ,; {"Visualizar" ,"AxVisual" ,0,2} ,; {"Apontar" ,"U_FMonTodo",0,3} } // {"Cancelar" ,"U_FExcSest02",0,4} } Comentada a chamada, pois o CR não encontrou o fonte e preciso verificar em meus backups. dbSelectArea("SZ0") dbSetOrder(2) mBrowse( 6,1,22,75,"SZ0",,,,,,) Return User Function FMonTodo() **************************************************************************************************************************************************** * Montagem da tela de apontamentos. * * ************************ Local oSay1,oSay2,oSay3,oSay4,oSay5 Local oGet,oGet1,oGet2,oGet3,oGet4,oGet5 Local oFont22 := TFont():New("Arial",,22,.T.) Local oFont18 := TFont():New("Arial",,18,.T.) Local nOpc := 3 Local oButton1,oButton2 Private oDlgTodos Private aHeader := {} Private aCols := {} Private cGet1 := Space(09) Private cGet2 := Space(09) Private cGet3 := Space(10) Private dGet4 := StoD("") Private cGet5 := Space(60) Private cAlmox:= "" dbSelectArea("SX3") dbSetOrder(1) dbSeek("SZ0") While X3_ARQUIVO == "SZ0" .And. !Eof() If X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL .And. AllTrim(X3_CAMPO) $ "Z0_PRODUTO/Z0_DESCRI/Z0_TIPO/Z0_QUANT/Z0_UM/Z0_QTSEG/Z0_SEGUM" Aadd(aHeader,{ TRIM(X3Titulo()),; SX3->X3_CAMPO ,; SX3->X3_PICTURE ,; SX3->X3_TAMANHO ,; SX3->X3_DECIMAL ,; SX3->X3_VLDUSER ,; SX3->X3_USADO ,; SX3->X3_TIPO ,; SX3->X3_ARQUIVO ,; SX3->X3_CONTEXT }) EndIf dbSkip() Enddo aCols := {Array(Len(aHeader) + 1)} For nXi := 1 to Len(aHeader) aCols[1,nXi] := CriaVar(aHeader[nXi,2]) Next nXi aCols[1,Len(aHeader)+1] := .F. DEFINE DIALOG oDlgTodos TITLE OemToAnsi("Apontamento Automático da Produção ") FROM 0,180 TO 550,1200 PIXEL TGroup():New(005,005,50,505,,oDlgTodos,CLR_HBLUE,,.T.) oSay3:= tSay():New(30,10,{|| "Local :"},oDlgTodos,,oFont22,,,,.T.,CLR_HRED,CLR_RED,500,10) @ 30,050 MSGET oGet2 VAR cGet2 SIZE 40,10 Of oDlgTodos PIXEL PICTURE "@!" F3 "CTT" Valid NaoVazio() oSay4:= tSay():New(30,100,{|| Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_DESC01") + " Almoxarifado : " + Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_ZALMOX") },oDlgTodos,,oFont22,,,,.T.,CLR_RED,CLR_RED,500,10) oSay5:= tSay():New(60,10,{||"No. Docto : "},oDlgTodos,,oFont18,,,,.T.,CLR_BLUE,CLR_RED,50,10) TGroup():New(055,005,080,505,,oDlgTodos,CLR_HBLUE,,.T.) @ 60,50 MSGET oGet3 VAR cGet3 SIZE 40,10 Of oDlgTodos PIXEL PICTURE "@!" oSay6:= tSay():New(60,150,{||"Data : " + dtoc(dDatabase)},oDlgTodos,,oFont18,,,,.T.,CLR_BLUE,CLR_RED,50,10) oSay7:= tSay():New(60,250,{||"Observação : "},oDlgTodos,,oFont18,,,,.T.,CLR_BLUE,CLR_RED,50,10) @ 60,300 MSGET oGet5 VAR cGet5 SIZE 160,10 Of oDlgTodos PIXEL PICTURE "@!" oGet := MSGetDados():New(100, 010, 240, 500,nOpc,"AllwaysTrue","AllwaysTrue","",.T.,,,,300) TGroup():New(090,005,250,505,,oDlgTodos,CLR_HBLUE,,.T.) oButton1:=tButton():New(260,380,"&Produzir",oDlgTodos,{||Processa({||FGeraProd(oDlgTodos)},"Aguarde...","Processando...")},50,10,,,,.T.) oButton2:=tButton():New(260,455,"&Cancelar",oDlgTodos,{||oDlgTodos:End()},50,10,,,,.T.) ACTIVATE DIALOG oDlgTodos CENTERED Return Static Function FGeraProd(oDlgTodos) *************************************************************************************************************************************************** * Gera produção de acordo com os parametros informados pelo usuario. * * ********************** Local cNumOp := "" Local aVetor := {} Local nXi := 0 Local cLocAux:= Space(02) Local cQuery := "" Private lMsErroAuto := .F. //Fecha dialog oDlgTodos:End() For nXi := 1 To Len(Acols) //Dá um Skip se tiver sido deletado. If GdDeleted() Loop EndIf Begin Transaction //Montando a ordem de produção. cNumOp := GetNumSC2() aVetor :={ {"C2_NUM" ,cNumOp ,NIL},; {"C2_ITEM" ,"01" ,NIL},; {"C2_SEQUEN" ,"001" ,NIL},; {"C2_PRODUTO",aCols[nXi][1] ,NIL},; {"C2_LOCAL" ,Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_ZALMOX"),Nil},; {"C2_QUANT" ,aCols[nXi][4] ,NIL},; {"C2_CC" ,cGet2 ,NIL},; {"C2_DATPRI" ,dDatabase ,NIL},; {"AUTEXPLODE","S" ,NIL},; {"C2_DATPRF" ,dDatabase ,NIL}} MSExecAuto({|x,y| mata650(x,y)},aVetor,3) //Inclusao If lMsErroAuto DisarmTransaction() Alert("Falha ao realizar a montagem da ordem de produção, entre em contato com o suporte.") MOSTRAERRO() Else //Verifica se o produto se trata de matéria prima, para alteração do almoxarifado padrão. dbSelectArea("SB1") dbSetOrder(01) dbSeek(xFilial("SB1")+aCols[nXi][1]) cLocAux := Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_ZALMOX") cQuery := "UPDATE " + RetSqlName("SD4") + " SET D4_LOCAL = '" + cLocAux + "' " cQuery += " WHERE D_E_L_E_T_ <> '*' AND D4_FILIAL = '" + xFilial("SD4") + "' AND " cQuery += " SUBSTRING(D4_OP,1,6) = '" + cNumOp + "' AND D4_COD IN (SELECT B1_COD FROM " + RetSqlName("SB1") + " WHERE D_E_L_E_T_ <> '*' cQuery += " AND B1_FILIAL = '" + xFilial("SB1") + "' AND B1_COD = D4_COD AND B1_TIPO = 'MP') " TcSqlExec(cQuery) cQuery := "" //Montagem do apontamento da produção. MA650Process(.T.,1) lMsErroAuto := .F. aVetor := {} aAdd(aVetor, {"D3_TM" , "001" , Nil}) aAdd(aVetor, {"D3_COD" , aCols[nXi][1] , Nil}) aAdd(aVetor, {"D3_UM" , aCols[nXi][5] , Nil}) aAdd(aVetor, {"D3_QUANT" , aCols[nXi][4] , Nil}) aAdd(aVetor, {"D3_CC" , cGet2 , Nil}) aAdd(aVetor, {"D3_OP" , cNumOp+"01001" , Nil}) aAdd(aVetor, {"D3_LOCAL" , cLocAux , Nil}) aAdd(aVetor, {"D3_PARCTOT", "T" , Nil}) aAdd(aVetor, {"D3_EMISSAO", dDatabase , Nil}) aAdd(aVetor, {"D3_ZREQUI","MATA250" , Nil}) MSExecAuto({|x| mata250(x)},aVetor) If lMsErroAuto DisarmTransaction() Alert("Falha ao realizar o apontamento da produção, entre em contato com o suporte.") MOSTRAERRO() Else FGravSZ0(nXi,cNumOp) EndIf Endif End Transaction Next nXi Return Static Function FGravSZ0(nXi,cNumOp) *************************************************************************************************************************************************** * Grava informações dadas pelo usuario, para posterior auditoria. * * ********************** dbSelectArea("SZ0") If RecLock("SZ0",.T.) Replace Z0_FILIAL With xFilial("SZ0") Replace Z0_CODIGO With GETSXENUM("SZ0","Z0_CODIGO") Replace Z0_DOC With cGet3 Replace Z0_OBS With cGet5 Replace Z0_USER With SubStr(cUsuario,7,15) Replace Z0_DATA With dDatabase Replace Z0_PRODUTO With aCols[nXi][1] Replace Z0_DESCRI With aCols[nXi][2] Replace Z0_TIPO With aCols[nXi][3] Replace Z0_QUANT With aCols[nXi][4] Replace Z0_UM With aCols[nXi][5] Replace Z0_QTSEG With aCols[nXi][6] Replace Z0_SEGUM With aCols[nXi][7] Replace Z0_CUSORIG With cGet2 Replace Z0_DCORIG With Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_DESC01") Replace Z0_ALMORIG With Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_ZALMOX") Replace Z0_CUSDEST With cGet2 Replace Z0_DCDEST With Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_DESC01") Replace Z0_ALMODES With Posicione("CTT",1,xFilial("CTT")+cGet2,"CTT_ZALMOX") //Replace Z0_OP With cNumOp+"01001" MsUnlock() EndIf // Replace Z0_OP With cNumOp+"01001" // Replace Z0_NUMOP With cNumOp Return