//-------------------------------------------------------- Function ManagerRepositor() Local nMaxCol:= MaxCol() Local nMaxLin:= MaxRow()-3 Local cCor := setcolor(), nWidth, nCol, nRow Local hMenu, hMenuItem, nJanela Local nTimer := 0 Close All Sele 1 Use Produto Set index to Produto Sele 2 Use ProdPara Alias pProd Set index to ProdPara Sele 3 Use captura2 Alias Pdv SEt index to captura2 Sele 6 Use Reposit1 Alias Lotes Set index to Reposit1 xLoteUsado:= GeraLotes() Sele 7 Use Reposit2 Alias detalhe Set index to Reposit2 Sele 8 Use CtrlVend Alias ResuVda *Set Index to CtrlVend go bott xDataBase := Date() * dbedit(00,00,24,79) If ! Empty(ResuVda->Data_Venda) If (Date()-ResuVda->Data_Venda) >=2 xDataBase := ResuVda->Data_Venda+1 Endif Endif Sele 9 Use CadSkus Alias Sku Set index to CadSkus Sele 101 Use C:\TEMP\PREVIEW EXCLUSIVE ZAP nJanGet:= CAIXATEXTO(00,00,nMaxLin-1,nMaxCol,"MONITORAMENTO CAPTURA ITEM Nr Lote:"+Str(xLoteUsado,7)+' Venda PDV :'+Dtoc(xDataBase) ,"BG+/NB+","NN/NN","N") _alias := 'Item' // Dbf para Navegacao _browse:= 'oTab' BuildMenu( @hMenu, @hMenuItem ) if !ToolBarGEN(nJanGet) Return NIL endif SetInkeyAfterBlock({|nkey| AfterInkeyGEN( nkey ) }) oTab:=TbrowseDb(00,00,nMaxLin-1,nMaxCol) oTab:ColSep := " " oTab:HeadSep := "__" oTab:ColorSpec := "n/ww+*,B/GR+*,N/w,N/W*+,r+*/ww+*,r+*/ww+*" //oTab:Hilite() Coluna1 := TbColumnNew("PRODUTO" ,{ ||Produto->Codigo+'-'+Substr(Produto->Descricao,1,35) } ) Coluna2 := TbColumnNew("ESTQ." ,{ ||Str(Produto->Estoque-Produto->QTD_troca,6) } ) Coluna3 := TbColumnNew("S.M." ,{ ||Str(Produto->SAIDA_MEDI,4,1) } ) Coluna4 := TbColumnNew("ACM/DIA PRX BLQ" ,{ ||PegaDadosPDVItem(Produto->Codigo,0) } ) Coluna5 := TbColumnNew("Rpr/Frt/Fdo/Alt" ,{ ||PegaParametroItem(Produto->Codigo,0) } ) oTab:AddColumn(Coluna1) oTab:AddColumn(Coluna2) oTab:AddColumn(Coluna3) oTab:AddColumn(Coluna4) oTab:AddColumn(Coluna5) oTab:Freeze := 2 // oTab:Colpos - 1 Centra(24,'') Sele Produto OrdSetFocus('Prod09') Do While .t. SetInkeyAfterBlock({|nkey| AfterInkeyGEN( nkey ) }) Centra(24,'') For i:= 1 to 5 oTab:GetColumn(i):ColorBlock := { || { Iif(OrdKeyNo()%2==0,4,3),2 } } Next *oTab:GetColumn(4):ColorBlock := { || {; * Iif( PegaDadosPDVItem(Produto->Codigo,1) >= ; * PegaParametroItem(Produto->Codigo,4),5,1),2 }} * oCol := oTab:GetColumn(3) *cDados:= Eval(oCol:block) *Alerta(cDados) *oTab:GetColumn(4):ColorBlock := { || { Iif( Val(Eval(oCol:block))#0 ,5,1) ,2 } } oColACM := oTab:GetColumn(4) oColRepor := oTab:GetColumn(5) *cDados:= Eval(oCol:block) *Alerta(cDados) *Eval(oCol:block) *Eval(oCol:block) *Alerta(Substr(Eval(oColACM:block),1,3)) * * *If Val(Substr(Eval(oColACM:block),1,3)) > 0 * oTab:GetColumn(4):ColorBlock := { 5,2 } *Endif If Val(Substr(Eval(oColRepor:block),1,3)) #0 oTab:GetColumn(4):ColorBlock := { || {; Iif( Val(Substr(Eval(oColACM:block),1,3)) >= ; Val(Substr(Eval(oColRepor:block),1,3)) ,5,1),2 }} Endif * Iif(OrdKeyNo()%2==0,4,3),2 } } * * * * Coluna4 := TbColumnNew("ACM/DIA PRX BLQ" ,{ ||PegaDadosPDVItem(Produto->Codigo,0) } ) * Coluna5 := TbColumnNew("Rpr/Frt/Fdo/Alt" ,{ ||PegaParametroItem(Produto->Codigo,0) } ) Lin_Br := 21 Do While ! oTab:Stabilize() Enddo nTimer++ If nTimer >= 2000 oTab_:ForcEstable() oTab_:Refreshall() VoltaFoco() nTimer:= 0 Endif nKey := Inkey() If oTab:Stable nKey := Inkey(0) oTab:ForcEstable() Endif If nKey == K_F12 // ESC nRetorno := 0 Exit * ElseIf nKey == K_ENTER .OR. nKey==1006 .or. ; * ( nKey >= 48 .and. nKey <= 57 ) //.and. oTab:Colpos == 6 * oTab:Refreshall() * VoltaFoco() ElseIf nKey == K_F2 .Or. nKey == K_ENTER .OR. nKey==1006 Sele Produto nPosSalva := Recno() Sele pProd OrdSetFocus("PParam1") Go Top Seek Produto->Codigo If ! Found() Append Blank Trav_reg() Repla pProd->CodigPlu With Produto->Codigo Destrava() Endif mAltura := pProd->Qtd_alto mFrente := pProd->Qtd_frente mFundo := pProd->Qtd_fundo mRepor := pProd->Qtd_repor lPallet := Iif(pProd->Pallet==.t.,'S','N') Cores() GetList := {} CAIXATEXTO(05,10,11,65,Produto->Descricao,"BG+/NB+","NN/NN","N") @ 06,11 say ' Pallet(Separa) :' Get lPallet Pict "@!" @ 07,11 say ' Reposicao :' Get mRepor Pict "99999" When lPallet=='N' @ 08,11 say ' Frente :' Get mFrente Pict "999" When lPallet=='N' @ 09,11 say ' Fundo :' Get mFundo Pict "999" When lPallet=='N' @ 10,11 say ' Altura :' Get mAltura Pict "999" When lPallet=='N' Read If LastKey()#27 IF MsgConf("Confirma Alteracao ?","1" ) == .T. Trav_reg() Repla pProd->Qtd_alto With mAltura Repla pProd->Qtd_frente With mFrente Repla pProd->Qtd_fundo With mFundo Repla pProd->Qtd_repor With mRepor Repla pProd->Pallet With Iif(lPallet=="S",.t.,.f.) Destrava() Endif Endif FechaJanela() VoltaFoco() Sele Produto OrdSetFocus('Prod02') Go nPosSalva oTab:Refreshall() ElseIf nKey == K_F3 // Reseta Venda PDV Sele Pdv OrdsetFocus("Captura2") Go top Seek str(Val(Produto->Codigo),20) If Found() mQuantAcm := Pdv->Qtd_vend GetList := {} CAIXATEXTO(06,10,08,45,"Quantidade ACM no PDV","BG+/NB+","NN/NN","N") @ 07,11 say 'Quantidade :' Get mQuantAcm Pict "@EZ 99999" Read If LastKey()#27 IF MsgConf("Confirma Alteracao ?","1" ) == .T. Trav_reg() Repla Pdv->Qtd_vend With mQuantAcm Destrava() Endif Endif FechaJanela() Endif VoltaFoco() Sele Produto oTab:Refreshall() ElseIf nKey == K_F4 // Agenda para Proxima Lista Forca Sele Pdv OrdsetFocus("Captura2") Go top Seek Str(Val(Produto->Codigo),20) If !Found() Append Blank Repla Pdv->ID_Prod With Str(Val(Produto->Codigo),20) UnLock Endif If Pdv->Fca_Abast==.t. IF MsgConf("Retira Item da Listagem ?","1" ) == .T. Trav_reg() Repla Pdv->Fca_Abast With .f. Destrava() Endif Else IF MsgConf("Confirma item para Proxima Listagem ?","1" ) == .T. Trav_reg() Repla Pdv->Fca_Abast With .t. Destrava() Endif Endif VoltaFoco() Sele Produto oTab:Refreshall() ElseIf nKey == K_F5 ListaAbaste_Nova() ElseIf nKey == K_F6 Sele Pdv OrdsetFocus("Captura2") Go top Seek Str(Val(Produto->Codigo),20) If !Found() Append Blank Repla Pdv->ID_Prod With Str(Val(Produto->Codigo),20) UnLock Endif If Pdv->Blq_Abast==.t. IF MsgConf("Retira Bloqueio do Abastecimento ?","1" ) == .T. Trav_reg() Repla Pdv->Blq_Abast With .f. Destrava() Endif Else IF MsgConf("Confirma Bloqueio da Reposicao ?","1" ) == .T. Trav_reg() Repla Pdv->Blq_Abast With .t. Destrava() Endif Endif VoltaFoco() Sele Produto oTab:Refreshall() ElseIf nKey == K_F7 CORES() nWLogin := AbreJanela( "POR CODIGO EAN / CODIGO JAF", 20, 06, 22, 76 ) GETList:= {} mEan := Val(Space(16)) @ 21,07 Say "C¢digo Ean:" GET mEan PICT "9999999999999" READ FECHAJANELA() Sele Produto OrdSetFocus("Prod01") Go top Seek StrZero(mEan,5) If ! Found() Sele Sku OrdSetFocus("Skus01") Go top SEEK StrZero(mEan,16) If Found() Sele Produto OrdSetFocus("Prod01") Go Top Seek Sku->Cod_Prod If ! Found() Alerta("Codigo [ Ean ] Sem Uso !!") Endif Else Alerta("C¢digo Ean n„o Localizado, Redigite !!!") Endif Sele Produto Endif VoltaFoco() Sele Produto oTab:Refreshall() ElseIf nKey == K_UP oTab:Up() ElseIf nKey == K_DOWN oTab:Down() ElseIf nKey == K_LEFT oTab:Left() ElseIf nKey == K_RIGHT oTab:Right() ElseIf nKey == K_PGUP oTab:PAGEUP() ElseIf nKey == K_PGDN oTab:PAGEDOWN() ElseIf nKey == K_ALT_F oTab:Refreshall() VoltaFoco() ElseIf nKey == K_ALT_O ElseIf nKey == K_ALT_P ElseIf nKey == K_ALT_E Elseif nKey == K_LBUTTONUP .or. nKey == K_LBUTTONDOWN HandleMouse( oTab, nKey, mrow(), mcol() ) Else If nKey >= 65 .and. nKey <= 122 OrdSetFocus("Prod02") Pos_arq_Prod := IndexOrd() GetList := {} CORES() nWLogin := AbreJanela( "POR DESCRICAO", 20, 06, 22, 76 ) MDESCRICAO := SPACE(40) KeyBoard Chr(nKey) @ 21,07 GET MDESCRICAO PICT "@!" READ SET SOFTSEEK ON FECHAJANELA() If ! Empty(mDescricao) SEEK MDESCRICAO Endif SET SOFTSEEK OFF Pos_reg_Prod := Recno() oTab:Refreshall() Endif Endif Enddo FechaJanela() Close All Return Nil ************************************************** PROCEDURE HandleMouse( oBrowse, nKey, mRow, mCol ) ************************************************** local nHeadLines := 2 ,; nFootLines := 1 local i, mrowpos, mcolpos, lFrozen, mleftbound, mrightbound, lDone,; msepwidth, mcolwidth, numrow, numcol, mMinPos, ndirection if nKey # K_LBUTTONDOWN return endif if !( mrow >= oBrowse:nTop+nHeadlines .and.; mrow <= oBrowse:nBottom-nFootlines .and.; mcol >= oBrowse:nLeft .and.; mcol <= oBrowse:nRight ) return endif dispbegin() mrowpos := mrow - (oBrowse:nTop+nHeadlines) + 1 if oBrowse:RowPos > mrowpos numrow := oBrowse:RowPos - mrowpos for i := 1 to numrow oBrowse:up() oBrowse:forcestable() next elseif oBrowse:RowPos < mrowpos numrow := mrowpos - oBrowse:RowPos for i := 1 to numrow oBrowse:down() oBrowse:forcestable() next endif lFrozen := oBrowse:Freeze > 0 mMinPos := if( lFrozen, 1, oBrowse:LeftVisible ) lDone := .F. mcolpos := oBrowse:colpos msepwidth := NextSepWidth( oBrowse, mcolpos ) mcolwidth := oBrowse:ColWidth(mcolpos) if mcol < col() nDirection := -1 elseif mcol > col() + mcolwidth + msepwidth - 1 nDirection := 1 else lDone := .T. endif while !lDone mcolpos := oBrowse:colpos msepwidth := NextSepWidth(oBrowse, mcolpos) mcolwidth := oBrowse:ColWidth(mcolpos) if mcol < col() .and. nDirection < 0 mcolpos := if( lFrozen .and. mcolpos == oBrowse:LeftVisible, oBrowse:Freeze, mcolpos-1 ) if mcolpos < mMinPos lDone := .T. else numcol := oBrowse:ColPos - mcolpos for i := 1 to numcol oBrowse:left() oBrowse:forcestable() next endif elseif mcol > col() + mcolwidth + msepwidth - 1 .and. nDirection > 0 mcolpos := if( lFrozen .and. mcolpos == oBrowse:Freeze, oBrowse:LeftVisible, mcolpos+1 ) if mcolpos > oBrowse:RightVisible lDone := .T. else numcol := mcolpos - oBrowse:ColPos for i := 1 to numcol oBrowse:right() oBrowse:forcestable() next endif else lDone := .T. endif enddo dispend() RETURN ************************************************ STATIC FUNCTION NextSepWidth( oBrowse, mcolpos ) ************************************************ local lFrozen := oBrowse:Freeze > 0 local mrightcolpos, oCol, nHeadWidth, nColWidth, nFootWidth if mcolpos >= oBrowse:RightVisible return 0 elseif lFrozen .and. mcolpos == oBrowse:Freeze mrightcolpos := oBrowse:LeftVisible else mrightcolpos := mcolpos+1 endif while mrightcolpos < oBrowse:RightVisible .and. empty( oBrowse:ColWidth(mrightcolpos) ) mrightcolpos++ enddo if mrightcolpos >= oBrowse:RightVisible return 0 endif oCol := oBrowse:GetColumn(mrightcolpos) nColWidth := if( valtype(oCol:ColSep) == "C", len(oCol:ColSep) ,; if( valtype(oBrowse:ColSep) == "C", len(oBrowse:ColSep), 0 )) RETURN nColWidth ******************************* FUNCTION ToolbarGEN( nWindow ) ******************************* local hWndTB wvw_tbdestroy( nWindow ) if ( hWndTB := wvw_tbcreate( nWindow, .T., NIL, 1, 32, 32 ) ) == 0 return .F. endif wvw_tbAddButton( nWindow, BT_ACAO_1, "imagens\Altera.bmp" , "Dados Reposicao" , 0 , .T.) wvw_tbAddButton( nWindow, BT_ACAO_2, "imagens\Altera.bmp" , "Zera Venda ACM" , 0 , .T.) wvw_tbAddButton( nWindow, BT_ACAO_3, "imagens\incluir.bmp" , "Forca Proxima Lista" , 0 , .T.) wvw_tbAddButton( nWindow, BT_ACAO_4, "imagens\Printer.bmp" , "Listagem" , 0 , .T.) *wvw_tbAddButton( nWindow ) wvw_tbAddButton( nWindow, BT_ACAO_5, "imagens\Bloqueio.bmp" , "Bloqueia/Desbloqueia" , 0 , .T.) wvw_tbAddButton( nWindow, BT_ACAO_6, "imagens\Lupa.bmp" , "Pesquisa" , 0 , .T.) *wvw_tbAddButton( nWindow, BT_ACAO_7, "imagens\gravar.bmp" , "Gravação" , 0 , .T.) *wvw_tbAddButton( nWindow ) *wvw_tbAddButton( nWindow, BT_ACAO_8, "imagens\lupa.bmp" , "Pesquisa" , 0 , .T.) *wvw_tbAddButton( nWindow ) *wvw_tbAddButton( nWindow ) wvw_tbAddButton( nWindow, BT_SAIR, "imagens\sair.bmp" , "Sair" , 0 , .T.) RETURN .T. ********************************************** Static FUNCTION Varredura( cAlias, cTitulo, nEvento ,oBrowse) ********************************************** local nRet := nEvento, nRecno switch nEvento case BT_ACAO_1 nRet := K_F2 //K_ESC exit case BT_ACAO_2 nRet := K_F3 //K_ESC exit case BT_ACAO_3 nRet := K_F4 //K_ESC exit case BT_ACAO_4 nRet := K_F5 exit case BT_ACAO_5 nRet := K_F6 exit case BT_ACAO_6 nRet := K_F7 exit case BT_ACAO_7 exit case BT_ACAO_8 exit case BT_SAIR nRet := K_F12 //K_ESC exit default *Alerta("Em Construção") end RETURN nRet ************************************** Static FUNCTION BuildMenu( hMenu, hMenuItem ) ************************************** CREATEMENU hMenu MENUITEM hMenuItem OF hMenu PROMPT "~Relatorio e Listagens" SUBMENUITEM hMenuItem PROMPT "~Gera Relatorio para Separa com Nr. de Lote" ACTION BT_ACAO_4 FLAGS ( MF_ENABLED + MF_STRING ) SUBMENUITEM hMenuItem PROMPT "~Sair" ACTION BT_SAIR FLAGS ( MF_ENABLED + MF_STRING ) WVW_SetMenu(, hMenu ) RETURN NIL ****************************** Static FUNCTION AfterInkeyGEN( nkey ) ****************************** local bAction if nkey == WVW_DEFAULT_MENUKEYEVENT clear gets return Varredura( _alias, _titulo, WVW_GetLastMenuEvent(),_browse ) elseif ( bAction := SetKey(nKey) ) # NIL eval( bAction, Procname(), Procline(), Readvar() ) return 0 endif RETURN nKey //-------------------------------------------------------------- Static Function PegaParametroItem(cItem,lOpcao) Local nRetorno := 0 /* 1-Frente 2-Fundo 3-Alto 4-Ponto Reposicao 5-Direto Separa ( pallet ) 0-Mostra em Texto Frente */ Sele pProd OrdSetFocus("PParam1") Go top Seek cItem If Found() If lOpcao==1 nRetorno := pProd->Qtd_FRENTE ElseIf lOpcao==2 nRetorno := pProd->Qtd_FUNDO ElseIf lOpcao==3 nRetorno := pProd->Qtd_alto ElseIf lOpcao==4 nRetorno := pProd->QTD_REPOR Elseif lOpcao==0 nRetorno := Str(pProd->Qtd_REPOR ,3)+'/'+; Str(pProd->Qtd_FRENTE,3)+'/'+; Str(pProd->Qtd_FUNDO ,3)+'/'+; Str(pProd->Qtd_ALTO ,3) Endif If pProd->PALLET==.t. nRetorno :='##S E P A R A##' Endif Else If lOpcao==0 nRetorno :='## SEM DADOS ##' Endif Endif Sele Produto Return (nRetorno) //-------------------------------------------------------------- Static Function PegaDadosPDVItem(cItem,lOpcao) Local nRetorno := 0 /* 1-Acm Venda 2-Ja Abastecido 3-Esta bloqueado 4-Forca Abastecimento Proxima Listagem 0-Mostra Todos Em Forma de Texto */ Sele Pdv OrdsetFocus("Captura2") Go top Seek str(Val(cItem),20) If Found() If lOpcao==1 nRetorno := Pdv->Qtd_vend ElseIf lOpcao==2 nRetorno := Pdv->QTD_Abast ElseIf lOpcao==3 nRetorno := Iif(Pdv->BLQ_ABAST==.t.,0,1) ElseIf lOpcao==4 nRetorno := Iif(Pdv->Fca_Abast==.t.,1,0) ElseIf lOpcao==0 nQtdVdaDia := 0 If xDataBase <= Date() .And. Pdv->Data_Vda == xDataBase nQtdVdaDia := Pdv->Qtd_data Endif nRetorno := Str(Pdv->Qtd_vend,3)+'/'+; Str(nQtdVdaDia,3)+' '+; Iif(Pdv->Fca_Abast==.t.,'SIM',' ')+' '+; Iif(Pdv->BLQ_ABAST==.t.,'SIM',' ') Endif Else If lOpcao==0 nRetorno :='' Endif Endif Sele Produto Return (nRetorno) //------------------------------------------------ Static Function ListaAbaste_Nova() Local wItens := {} Local nRegTotal, nReg := 0 Local Pag := 0 Local Lin := 60 Local lLote :=.f. Local mTaxa := 0 /* wItem := {} 1-Descricao 2-Codigo 3-Quantidade 4-Cubagem */ CAIXATEXTO(15,05,17,60,'Informe Percentual para Forcar',"BG+/NB+","NN/NN","N") @ 16,07 SAY "PERCENTUAL :" GET MTAXA PICT "@EZ 999.99" READ FechaJanela() IF MsgConf("Gera Nr. de Lote de Controle para Digitacao ?","1" ) == .T. lLote :=.t. GravaLotes() Endif Sele Pdv nRegTotal := RecCount() Go Top Do While ! Eof() cTxt := Str(nReg++/nRegTotal*100,7,2)+'%' Centra(24,'Preparando Listagem Aguarde.. '+cTxt) If Pdv->BLQ_ABAST==.t. //Bloqueado Abastecimento Skip+1 Loop Endif cItem := StrZero(Val(Pdv->ID_Prod),5) //--Dados Venda PDV vVendidaACM := Pdv->Qtd_vend vJaAbastecidos:= 0 // Pdv->QTD_Abast If mTaxa # 0 vVendidaACM := vVendidaACM / ( (100-mTaxa)/100) Endif Sele pProd OrdSetFocus("PParam1") Go top Seek cItem If ! Found() // Produto tem Dados para Abastecimento Sele Pdv Skip+1 Loop Endif If pProd->PALLET==.t. // Separado Via Pallet no Recebimento Sele Pdv Skip+1 Loop Endif Sele Produto OrdSetFocus('Prod01') Go top Seek cItem If !Found() // Produto Sem Cadsatro ou estoque Zerado Sele Pdv Skip+1 Loop Endif VQtdDia := 0 If xDataBase <= Date() .And. xDataBase== Pdv->Data_Vda VQtdDia := Pdv->Qtd_data Endif vDisponivel_Estoque := Produto->Estoque - Produto->Qtd_Troca - vJaAbastecidos - VQtdDia If vDisponivel_Estoque <= 0 Sele Pdv Skip+1 Loop Endif nNivelReposicao := PProd->Qtd_repor nCubagemGondola := PProd->Qtd_alto * PProd->Qtd_FRENTE * PProd->Qtd_FUNDO nQuant_Abastecer := 0 If nCubagemGondola == 0 // Falta Dados de Dimensionamento Sele Pdv Skip+1 Loop Endif If vVendidaACM > nCubagemGondola nQuant_Abastecer := nCubagemGondola Endif nQuant_Abastecer := Int(vVendidaACM/nNivelReposicao)*nNivelReposicao //Caso seja obrigado o abastecimento leva a carga total Cubagem If Pdv->Fca_Abast==.t. nQuant_Abastecer := nCubagemGondola Endif If nQuant_Abastecer <= 0 // Sem Necessidade de Abastecimento Sele Pdv Skip+1 Loop Endif Aadd(wItens,{ Produto->Depto+Produto->Secao+; Produto->descricao,; Produto->codigo ,; nQuant_Abastecer ,; nCubagemGondola } ) If lLote==.t. Sele Detalhe Append Blank Repla Detalhe->REP2_ORDE With xLoteUsado Repla Detalhe->REP2_PLU With Produto->Codigo Repla Detalhe->REP2_QARP With nQuant_Abastecer Endif Sele Pdv Skip+1 Enddo SET DEVICE TO PRINTER SET PRINTER TO C:\TEMP\RELA0089.TXT SetPrc(0,0) Asort(wItens,,,{ |x, y| X[1] < Y[1]} ) *Asort(wLinhas) For x:= 1 to Len(wItens) cPega := Substr(wItens[x,1],1,6) IF LIN >= 60 Pag++ Lin := 0 @ 01,00 SAY CHR(18) @ 01,00 SAY REPLI("=",80) @ 02,00 SAY PADC("P R O D U T O S A R E P O R",68) @ 02,63 SAY 'DATA..:'+DTOC(DATE()) @ 03,00 SAY PADC(NomeCliente,35) @ 03,37 SAY 'PAG:' + STR(PAG,3)+; Iif(lLote==.t.,; ' NR. LOTE :'+Str(xLoteUsado,5),; '') +; +' Forcado:'+Str(mTaxa,6,2) @ 04,00 SAY REPLI('-',80) @ 05,00 SAY '' @ 06,00 SAY " P R O D U T O CAPAC. MAXIMA QUANT.REPOR" LIN := 08 ENDIF Lin++ MSTRING := wItens[x,2]+'.'+SUBSTR(wItens[x,1],7,35)+; SPACE(2)+; Transf(wItens[x,4],"@EZ 9999999")+;// SPACE(1)+; " "+; SPACE(3)+; Transf(wItens[x,3],"@EZ 9999999" )+" "+; "[ ]" @ LIN,00 SAY MSTRING Next @ LIN++,00 SAY REPLI('-',80) @ LIN++,00 SAY 'JAF DESENV.' Set Device to Screen PREVIEW("RELA0089","M") Sele Produto Return Nil