**********
*
* Программа..:  SCLAD -  Учет запасов на складе
* Имя файла..:  G_Frame.Prg
*
******

// Copyright (c) 1993-2005 "Компания БЭСТ". Все права сохраняются.

#INCLUDE "sc_all.ch"
#INCLUDE "task.ch"
#INCLUDE "s_refer.ch"
#INCLUDE "inkey.ch"


MEMVAR aRem,aRem1,aRem2,aRem3,aRem4,aRem5,aRem6,aRem7,aRem8,aRem9
MEMVAR aRem10,aRem11,aRem12,aRem13,aRem14,aRem15,aRem16,aRem17,aRem18,aRem19
MEMVAR aRem20,aRem21,aRem12V,aRem13V,aRem17A,pType1,pVid1,pType2,pVid2
MEMVAR cValid,cWhen,cRef

STATIC sRest,aNum,lPere:=.F.

FUNCTION ReportFrame(cHead,aNum_,PriCodeSclad,lSpec,dDateBeg)
//lSpec-особый случай для прибыли по клиентам
LOCAL aFi:={'Sclad',;
'CodeOper','Schet','Grup','NNum','Date','Date','Date','Date',;
,,,,,'RBook->AgentCod','AgentCode','Schet','Region','DopCode',;
,,,,,,,,,,;
IF(YesMatReal,'RBook->Schet','MDoc->Schet_A'),;
IF(YesMatReal,'RBook->AgentCode','MDoc->AgentCode'),;
IF(YesMatReal,'RBook->AgentName','MDoc->AgentName'),,;
'MDoc->AgentCode','MLabel->Marka','MLabel->Sort','MLabel->Profil','MLabel->Razmer',;
'MLabel->CodeVal',,'MDoc->Prim',,,'MDoc->PartCode','MDoc->AgentName',,;
'MDocM->Schet_A','MDocM->AgentCode','MDoc->AgentName',;
'Schet_R','AgentCod1',,,'S45->NumDoc','MDocM->CodeDoc','MDocM->NumDoc',,,,,,;
}
LOCAL y2:=21,x1:=27
LOCAL y1:=y2-1-LEN(aNum_),x2:=74
LOCAL nFi:=0,nY1,nX1,cPict:='',cFilter:='',lPrim:=.T.,i:=1
LOCAL cLastColor:=SETCOLOR(COL_GET)
LOCAL lReadExit:=READEXIT(.F.)
LOCAL aHeads:=ARRAY(34)
PRIVATE dDate_Beg:=dDateBeg
lPere:=.F.
aNum:=aNum_
aHeads[ 1]:={'Склад............: ',{||SPACE(6)  },'MSclad','HR(1)','HR()','C'}
aHeads[ 2]:={'Код операции.....: ',{||SPACE(2)  },        ,'(.T.)','(.T.)','C'}
aHeads[ 3]:={'Счет ТМЦ.........: ',{||SPACE(10)  },'Plan','HR(1)','HR()','C'}
aHeads[ 4]:={'Группа ТМЦ.......: ',{||SPACE(5)  },'MGrup' ,'HR(1)',"HR1()",'C'}
aHeads[ 5]:={'Номенклат. номер : ',{||SPACE(13) },'MLabel','HR(1)','HR()','C'}
aHeads[ 6]:={'Расчет на дату...: ',{||CURR_DATA },        ,'(.T.)','ValidSDate(aIn0[6],,"NoFin")','D02'}
aHeads[ 7]:={'Дата инвент......: ',{||CURR_DATA },        ,'(.T.)','ValidSDate(aIn0[7],,"NoFin")','D02'}
aHeads[ 8]:={'Период с ........: ',{||IF(dDateBeg!=NIL,dDate_Beg,IF(YesMatReal,CURR_BEG,SCL_BEG))},,'(.T.)',IF(dDateBeg!=NIL,'aIn0[8]>=dDate_Beg','ValidSDate(aIn0[8],YesMatReal,"NoFin")'),'D1'}
aHeads[ 9]:={'       по........: ',{||CURR_DATA },        ,'(.T.)','ValidSDate(aIn0[9],YesMatReal,"NoFin")','D2'}
aHeads[10]:={'Сортировка.......: ',{||aRem[1]   },   ,'WRot(aRem,10)','VRot(aRem,10)','R'}
aHeads[11]:={'Вид ведомости....: ',{||aRem1[1]  },   ,'WRot(aRem1,11)','IF(!"разв"$aIn0[11],ASIZE(m->aRem,2),(m->aRem:=m->aRem00))!=NIL.AND.VRot(aRem1,11)','R'}
IF (lSpec!=NIL)
   aHeads[12]:={'Вид ведомости....: ',{||aRem2[1] },   ,'WRot(aRem2,12)','VRot(aRem2,12,"Spec")','R'}
ELSE
   aHeads[12]:={'Вид ведомости....: ',{||aRem2[1]},   ,'WRot(aRem2,12)','VRot(aRem2,12)','R'}
ENDIF
aHeads[13]:={'Объем просмотра..: ',{||aRem3[1]  },   ,'WRot(aRem3,13)','VRot(aRem3,13)','R'}
aHeads[14]:={'Сортировка.......: ',{||aRem4[1]  },   ,'WRot(aRem4,14)','VRot(aRem4,14)','R'}
aHeads[15]:={'Торговый агент...: ',{||SPACE(6)  },'RAgent' ,'HR(1)','HR()','C'}
//aHeads[16] :={'Шифр покупателя..: ',{||SPACE(6)  },'Analit' ,'SaveLoadType(aIn0[17])!=NIL','HR()','C'}
//aHeads[17] :={'Счет расчетов....: ',{||RSchet_[1]},'Plan1','HR(1)','HR()','C'}
aHeads[18]:={'Регион продаж....: ',{||SPACE(14)  },'Region' ,'HR(1)','HR()','C'}
aHeads[19]:={'Номер заказа.....: ',{||SPACE(6)  },'MDoc1' ,'HR(1)','HR()','C'}
aHeads[20]:={'Сортировка.......: ',{||aRem5[1]       },   ,'WRot(aRem5,20)','VRot(aRem5,20)','R'}
aHeads[21]:={'Порядок просмотра: ',{||aRem6[1]       },   ,'WRot(aRem6,21)','VRot(aRem6,21)','R'}
aHeads[22]:={'Текущие/начальные: ',{||aRem7[1]       },   ,'WRot(aRem7,22)','VRot(aRem7,22)','R'}
aHeads[23]:={'Комментарий......: ',{||aRem8[1]       },   ,'WRot(aRem8,23)','VRot(aRem8,23)','R'}
aHeads[24]:={'Резерв...........: ',{||aRem9[1]       },   ,'WRot(aRem9,24)','VRot(aRem9,24)','R'}
aHeads[25]:={'Вид прибыли......: ',{||aRem10[1]      },   ,'WRot(aRem10,25)','VRot(aRem10,25)','R'}
aHeads[26]:={'Вид прибыли......: ',{||aRem11[1]      },   ,'WRot(aRem11,26)','VRot(aRem11,26)','R'}
aHeads[27]:={'Вид поступления..: ',{||aRem12[1]      },   ,'WRot(aRem12,27)','VRot27(aRem12,27)','R'}
aHeads[28]:={'Вид расхода......: ',{||aRem13[1]      },   ,'WRot(aRem13,28)','VRot28(aRem13,28)','R'}
aHeads[29]:={'Вид расхода......: ',{||aRem14[1]      },   ,'WRot(aRem14,29)','VRot(aRem14,29)','R'}
IF GlobalTask='05'
   aHeads[30]:={'Счет расчетов....: ',{||m->RSchet_[1]},'Plan1','HR(1)','HR()','C'}
   aHeads[31]:={'Шифр покупателя..: ',{||SPACE(6)  },'Analit' ,'SaveLoadType(aIn0[30])!=NIL','HR()','C'}
   aHeads[32]:={'Наим.покупателя..: ',{||SPACE(25)},'Analit1','WNameFrame()','HR()','C'}
ELSE
   aHeads[30]:={'Счет контрагента :',{||SPACE(4)},'Plan1','HR(1)','HR()','C'}
   aHeads[31]:={'Шифр контрагента : ',{||SPACE(6)  },'Analit' ,'SaveLoadType(aIn0[30])!=NIL','HR()','C'}
   aHeads[32]:={'Наим.контрагента : ',{||SPACE(25)},'Analit1','WNameFrame()','HR()','C'}
ENDIF
aHeads[33]:={'Вид ведомости....: ',{||aRem15[1]  },   ,'WRot(aRem15,33)','VRot(aRem15,33)','R'}
aHeads[34]:={'                   ',{||SPACE(6)  },'MSclad2','pType=="4".AND.HR(1)','HR()','C'}
//35
AADD(aHeads,{PADR(TRIM(Marka_[1]),17,'.')+': ',{||SPACE(25)},'_Marka','(.T.)','(.T.)','C'})
//36
AADD(aHeads,{PADR(TRIM(Sort_[1]),17,'.')+': ',{||SPACE(25)},'_Sort','(.T.)','(.T.)','C'})
//37
AADD(aHeads,{PADR(TRIM(Profil_[1]),17,'.')+': ',{||SPACE(25)},'_Profil','(.T.)','(.T.)','C'})
//38
AADD(aHeads,{PADR(TRIM(Razmer_[1]),17,'.')+': ',{||SPACE(25)},'_Razmer','(.T.)','(.T.)','C'})
//39
AADD(aHeads,{'Валюта...........: ',{||GlobalValuta},'Valuta','HR(1)','HR()','C'})
//40
AADD(aHeads,{'Вид ведомости....: ',{||aRem16[1]  },   ,'WRot(aRem16,40)','VRot(aRem16,40)','R'})
//41
AADD(aHeads,{'Примеч.в док-те  : ',{||SPACE(25) },'MPrim','(.T.)','(.T.)','C'})
//42
AADD(aHeads,{'Сортировка.......: ',{||aRem17[1] },   ,'WRot(aRem17,42)','VRot(aRem17,42)','R'})
//43
AADD(aHeads,{'Сортировка.......: ',{||aRem18[1] },   ,'WRot(aRem18,43)','VRot(aRem18,43)','R'})
//44
AADD(aHeads,{'Шифр партнера... : ',{||SPACE(6)  },'MPartner' ,'.T.','HR()','C'})
//45
AADD(aHeads,{'Наим.партнера....: ',{||SPACE(25)},,'WNamePart()','HR()','C'})
//46
AADD(aHeads,{'Вид ведомости....: ',{||aRem21[1] },   ,'WRot(aRem21,46)','VRot(aRem21,46)','R'})
//47
AADD(aHeads,{'Счет МОЛ.........: ',{||SPACE(4)},'Plan1','HR(1)','HR()','C'})
//48
AADD(aHeads,{'Шифр МОЛ.........: ',{||SPACE(6)  },'Analit' ,'SaveLoadType(aIn0[47])!=NIL','HR()','C'})
//49
AADD(aHeads,{'Наименование МОЛ : ',{||SPACE(25)},'People','.T.','HR()','C'})
//50
AADD(aHeads,{'Счет плательщика :',{||SPACE(4)},'PlanR','HR(1)','HR()','C'})
//51
AADD(aHeads,{'Шифр плательщика : ',{||SPACE(6)  },'AnalitR' ,'SaveLoadType(aIn0[50])!=NIL','HR()','C'})
//52
AADD(aHeads,{'Сортировка.......: ',{||aRem17A[1] },   ,'WRot(aRem17A,52)','VRot(aRem17A,52)','R'})
//53
AADD(aHeads,{'Вид ведомости....: ',{||aRem19[1] },   ,'WRot(aRem19,53)','VRot(aRem19,53)','R'})
//54
AADD(aHeads,{'Ном.вед.списания :',{||SPACE(6)  },'MDoc1' ,'HR(1)','HR()','C'})
//55
AADD(aHeads,{'Вид док.передачи :',{||SPACE(3)  },'MVDoc' ,'HR(1)','HR()','C'})
//56
AADD(aHeads,{'Ном док.передачи :',{||SPACE(6)  },'MDoc' ,'HR(1)','HR()','C'})
//57
AADD(aHeads,{'Объем просмотра..: ',{||aRem20[1]},   ,'WRot(aRem20,57)','VRot(aRem20,57)','R'})
//58
AADD(aHeads,{'Нулевые остатки..: ',{||aRem22[1]},   ,'WRot(aRem22,58)','VRot(aRem22,58)','R'})
//59
AADD(aHeads,{'Закрытые карточки: ',{||aRem22[1]},   ,'WRot(aRem22,59)','VRot(aRem22,59)','R'})
//60
AADD(aHeads,{'Вид справки......: ',{||aRem23[1]},   ,'WRot(aRem23,60)','VRot(aRem23,60)','R'})
//61
AADD(aHeads,{'Периодичность....: ',{||aRem24[1]},   ,'WRot(aRem24,61)','VRot(aRem24,61)','R'})
//62
AADD(aHeads,{'Сортировка.......: ',{||aRem25[1]},   ,'WRot(aRem25,62)','VRot(aRem25,62)','R'})
//63
AADD(aHeads,{'                 : ',{||aRem26[1]},   ,'WRot(aRem26,63)','VRot(aRem26,63)','R'})
PRIVATE nApp:=2
IF TYPE('aRem')!='A'
   PRIVATE aRem:= {'по шифрам           ','по наименованиям    '}
ENDIF
PRIVATE aRem00:=ACLONE(aRem),aRem1
IF GlobalTask!='05'
   aRem1:={'развернутая  ','свернутая    ','по количеству'}
ELSE
   aRem1:={'развернутая  ','свернутая    '}
ENDIF
PRIVATE aRem21:={'по цен.постав','по учет.ценам','свернутая    ',;
                'по операциям ','по документам',;
                'по контрагент','сверочная    '}
PRIVATE aRem2:={'развернутая  ','свернутая    ',;
                'по операциям ','по документам',;
                'по контрагент','сверочная    '}
PRIVATE aRem3:={'все заказы   ','откр.заказы  ',;
                'закр.заказы  '}
PRIVATE aRem4:={'по количеству','по наименован'}
PRIVATE aRem5:={'по датам     ','по номерам   ',;
                'по контрагент'}

PRIVATE aRem6:={'по номерам   ','по датам     '}
PRIVATE aRem7:={'текущие      ','начальные    '}
PRIVATE aRem8:={'наименование ','шифр         '}
PRIVATE aRem9:={'не учитывать ','учитывать    '}
PRIVATE aRem10:={'валовая      ','на руб себест'}
PRIVATE aRem11:={'валовая      ','на руб себест','на ед.товара '}
PRIVATE aRem12:={PADR('Весь приход',25)},aRem13:={PADR('Весь расход',25)}
PRIVATE aRem12V:={{'1',' '}},aRem13V:={{'2',' '}}
pVid1:=pVid:= m->aRem12V[1,1]
pType1:=pType:=m->aRem12V[1,2]
IF GlobalTask!='05'
   FOR i:=1 TO LEN(aMoves)
   IF aVid[i,1]>'0'
      IF aVid[i,1]='1'
         IF !EMPTY(aVid[i,2])
            AADD(m->aRem12,PADR(SUBSTR(aMoves[i],5),25))
            AADD(m->aRem12V,aVid[i])
         ENDIF
      ELSEIF !EMPTY(aVid[i,2])
         AADD(aRem13,PADR(SUBSTR(aMoves[i],5),25))
         AADD(aRem13V,aVid[i])
      ENDIF
   ENDIF
   NEXT
ENDIF
PRIVATE aRem14:={'весь расход  ','реализация   '}
PRIVATE aRem15:={'оперативная  ','развернутая  ','свернутая    ',;
                 'по счетам    ','по видам движ','сверочная    '}
PRIVATE aRem16:={'оперативная  ','в скл.ценах  '}
IF GlobalTask!='09'
   AADD(aRem16,'в отп.ценах  ')
ENDIF
m->aRem17:= {'по датам           ','по складам         ',;
             'по ном.документов  ','по торг.агентам    ',;
             'по шифрам к/агентов','по наимен.к/агентов'}
m->aRem17A:={'по датам           ','по складам         ',;
             'по ном.документов  ',;
             'по шифрам к/агентов','по наимен.к/агентов'}
PRIVATE aRem18:={'по датам     ','по номерам   ','по торг.агент',;
                 'по клиентам  ','по регионам  '}
PRIVATE aRem19:={'детальная      ','по н/номерам   ','по плательщикам',;
                 'по получателям '}
PRIVATE aRem20:={'все документы  ','задолженности  '}
PRIVATE aRem22:={'включать       ','не включать    '}
PRIVATE aRem23:={'в складских ценах       ',;
                 'в ценах поставки/отпуска',;
                 'по количеству           '}
PRIVATE aRem24:={'посуточно   ',;
                 'понедельно  ',;
                 'помесячно   ';
                 }
PRIVATE aRem25:={'по датам       ',;
                 'по убыванию    ',;
                 'по возрастанию ';
                 }
PRIVATE aRem26:={'с накоплением  ',;
                 'без накопления ';
                 }
PRIVATE cRef,cWhen,cValid
IF LEN(aIn0)=0
   aIn0:=ARRAY(LEN(aHeads))
   aPos0:=ARRAY(LEN(aHeads))
   AFILL(aPos0,1)
   AEVAL(aNum,{|x|aIn0[x]:=EVAL(aHeads[x,2])})
   IF (LEN(aSclad)==1.AND.ASCAN(aNum,1)>0)
      aIn0[1]:=SUBSTR(aSclad[1],2,6)
   ENDIF
ENDIF
AEVAL(aNum,{|x|aIn0[x]:=IF(aIn0[x]=NIL,EVAL(aHeads[x,2]),aIn0[x])})
aIn0[34]:=SPACE(6)
PRIVATE aPos:=ARRAY(LEN(aNum))
i:=0
AEVAL(aNum,{|x|aPos[++i]:=aPos0[x]})

ShadowBox('',y1,x1,y2,x2,COL_INPUT)
@ y1,x1+1 SAY CENTER(' '+cHead+' ',46,'═')  COLOR COL_INPUT
FOR nFi:=1 TO LEN(aNum)
nY1:=y1+nFi
nX1:=x1+21
m->cRef:=aHeads[aNum[nFi],3]
m->cWhen:=aHeads[aNum[nFi],4]
m->cValid:=aHeads[aNum[nFi],5]
cPict:=''
@ nY1,x1+2 SAY aHeads[aNum[nFi],1] COLOR COL_INPUT




IF (cRef!= NIL)

   cRef := "'"+cRef+"'"
   @ nY1,nX1 Refer &cRef GET aIn0[aNum[nFi]] PICT cPict WHEN &cWhen VALID &cValid
ELSE
   @ nY1,nX1 GET  aIn0[aNum[nFi]]  PICT cPict WHEN &cWhen VALID &cValid
ENDIF
IF (aNum[nFi]=1.OR.aNum[nFi]=19.OR.aNum[nFi]=4)
   GetList[nFi]:cargo:=.T.  //ToRight
ENDIF
NEXT
sRest:=SAVESCREEN(10,1,24,40)
SETCURSOR(1)
READ
IF LASTKEY()==K_PGDN
   SETLASTKEY(K_RETURN)
ENDIF
IF lPere
   aFi[31]:='MDoc->AgentCod1'
   aFi[32]:='MDoc->AgentNam1'
ENDIF
FOR i:=1 TO LEN(aNum)
nFi:=aNum[i]
IF (aIn0[nFi]!=NIL.AND.!EMPTY(aIn0[nFi]))
   DO CASE
   CASE (aHeads[nFi,6]='C')
   cFilter+='.AND.'+GetFieldVar(aFi[nFi],aIn0[nFi])
   CASE aHeads[nFi,6]='D02'
   cFilter+='.AND.Date>=SCL_BEG.AND.Date<=CTOD("'+ DTOC(aIn0[nFi])+ '")'
   CASE aHeads[nFi,6]='D1'.OR.aHeads[nFi,6]='D3'
   cFilter+='.AND.Date>=CTOD("'+ DTOC(aIn0[nFi])+ '")'
   CASE aHeads[nFi,6]='D2'
   cFilter+='.AND.Date<=CTOD("'+ DTOC(aIn0[nFi])+ '")'
   CASE (nFi=13)
   IF (aIn0[13]=aRem3[2])
      cFilter+='.AND.RBook->Status="1"'
   ELSEIF (aIn0[13]=aRem3[3])
      cFilter+='.AND.RBook->Status="0"'
   ENDIF
   ENDCASE
ENDIF
NEXT
IF EMPTY(cFilter:=SUBSTR(cFilter,6))
   cFilter:='(.T.)'
ENDIF
SETKEY(ASC(' '),NIL)
SETCURSOR(0)
SETCOLOR(cLastColor)
READEXIT(lReadExit)
i:=0
AEVAL(aNum,{|x|aPos0[x]:=aPos[++i]})
RESTSCREEN(10,1,24,40,sRest)
ScrTitul(24,'Формирование отчета...')
RETURN {cFilter,aPos}

FUNCTION WRot(aRem,nIn)
LOCAL nGet:=ASCAN(aNum,nIn),yRem,xRem
LOCAL nTop:=10,nLeft:=1,i:=1
LOCAL nBottom:=nTop+LEN(aRem)+1,nRight:=nLeft+LEN(aRem[1])+3
LOCAL cLastColor:=SETCOLOR(COL_INPUT)
aPos[nGet]:=ASCAN(aRem,{|x|x==aIn0[nIn]})
IF aPos[nGet]=0
   aPos[nGet]:=1
ENDIF
SAYSCREEN('Для выбора используйте <пробел>',24,40)
SETKEY(ASC(' '),{||Rotate(aRem)})
M->GetList[nGet]:picture:=REPLICATE('9',LEN(aRem[1]))
ShadowBox('═ Варианты ',nTop,nLeft,nBottom,nRight)
FOR i:=1 TO LEN(aRem)
@  nTop+i,nLeft+1 SAY ' '+aRem[i]+' ' COLOR COL_INPUTB
NEXT
@ nTop+aPos[nGet],nLeft+1 SAY ' '+aRem[aPos[nGet]]+' ' COLOR COL_BROWSE
SETCOLOR(cLastColor)
RETURN (.T.)

FUNCTION VRot(aRem,nIn,PriSpec)
LOCAL lRet:= (ASCAN(aRem,{|x|x=aIn0[nIn]})!=0)
IF lRet
   SETKEY(ASC(' '),NIL)
   RESTSCREEN(10,1,24,40,sRest)
   IF GlobalTask != 'SR' .AND. GlobalTask != 'SZ'
      IF GlobalTask!='05'.AND.pVid='1'.AND.pType='4' .AND.TYPE('PRIZNAK')!='C'//Из VRot27
         @ m->GetList[GetPos(30)]:row,29 SAY SPACE(19) COLOR COL_INPUT
         @ m->GetList[GetPos(31)]:row,29 SAY SPACE(19) COLOR COL_INPUT
         @ m->GetList[GetPos(32)]:row,29 SAY SPACE(19) COLOR COL_INPUT
      ENDIF
   ELSE
      IF pVid='1'.AND.pType='4'.AND.TYPE('PRIZNAK')!='C'//Из VRot27
         @ m->GetList[GetPos(44)]:row,29 SAY SPACE(19) COLOR COL_INPUT
         @ m->GetList[GetPos(45)]:row,29 SAY SPACE(19) COLOR COL_INPUT
      ENDIF
   ENDIF
ENDIF
IF (LASTKEY()==5.AND.CURRENTGET()>1)
   HR()
ENDIF
IF (PriSpec!=NIL.AND.aPos[2]=5) //по клиентам
   M->GetList[4]:preBlock:={||.F.}
   M->GetList[5]:preBlock:={||.F.}
   M->GetList[6]:preBlock:={||.F.}
   M->GetList[7]:preBlock:={||.F.}
ENDIF
RETURN (lRet)

FUNCTION VRot27(aRem,nIn) //Приход
IF VRot(aRem,nIn)
   IF TYPE('pVid1')='C'
      pVid1:=pVid:=m->aRem12V[aPos[1],1]
      pType1:=pType:=m->aRem12V[aPos[1],2]
   ENDIF
   IF TYPE('PRIZNAK')='C'
      RETURN(.T.)
   ENDIF
   pVid:= m->aRem12V[aPos[1],1]
   pType:=m->aRem12V[aPos[1],2]
   Moves->(DBSEEK(UPPER(pVid+pType)))
   lPere:=.F.
   IF TYPE('PRIZNAK')!='C'
      IF pType=='4'//Перемещение
         lPere:=.T.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad1')}
         m->GetList[4]:preblock:={||HR(1)}
         SAYSCREEN('Склад-получатель :',m->GetList[3]:row,29)
         SAYSCREEN('Склад-сдатчик....:',m->GetList[4]:row,29)
         IF GlobalTask != 'SR' .AND. GlobalTask != 'SZ'
            @ m->GetList[GetPos(30)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(31)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(32)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            aIn0[30]:=aIn0[31]:=SPACE(6)
            aIn0[32]:=SPACE(25)
            m->GetList[GetPos(30)]:preblock:={||.F.}
            m->GetList[GetPos(31)]:preblock:={||.F.}
            m->GetList[GetPos(32)]:preblock:={||.F.}
         ELSE
            @ m->GetList[GetPos(44)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(45)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            aIn0[44]:=SPACE(6)
            aIn0[45]:=SPACE(25)
            m->GetList[GetPos(44)]:preblock:={||.F.}
            m->GetList[GetPos(45)]:preblock:={||.F.}
         ENDIF
      ELSE
         lPere:=.F.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad')}
         m->GetList[4]:preblock:={||.F.}
         IF GlobalTask != 'SR' .AND. GlobalTask != 'SZ'
            m->GetList[GetPos(30)]:preblock:={||HR(1)}
            m->GetList[GetPos(31)]:preblock:={||SaveLoadType(aIn0[30])!=NIL}
            m->GetList[GetPos(32)]:preblock:={||WNameFrame()}
            SAYSCREEN('Склад............:',m->GetList[3]:row,29)
            @ m->GetList[4]:row,29 SAY SPACE(19) COLOR COL_INPUT
            SAYSCREEN('Счет контрагента :',m->GetList[GetPos(30)]:row,29)
            SAYSCREEN('Шифр контрагента.:',m->GetList[GetPos(31)]:row,29)
            SAYSCREEN('Наим.контрагента.:',m->GetList[GetPos(32)]:row,29)
         ELSE
            m->GetList[GetPos(44)]:preblock:={||HR(1)}
            m->GetList[GetPos(45)]:preblock:={||WNameFrame()}
            SAYSCREEN('Склад............:',m->GetList[3]:row,29)
            @ m->GetList[4]:row,29 SAY SPACE(19) COLOR COL_INPUT
            SAYSCREEN('Шифр партнера....:',m->GetList[GetPos(44)]:row,29)
            SAYSCREEN('Наим.партнера....:',m->GetList[GetPos(45)]:row,29)
         ENDIF
      ENDIF
   ENDIF
   RETURN(.T.)
ENDIF
RETURN(.F.)

/***************************************************
FUNCTION VRot28(aRem,nIn) //Расход
IF VRot(aRem,nIn)
   IF TYPE('pVid1')='C'
      pVid1:=pVid:=m->aRem13V[aPos[1],1]
      pType1:=pType:=m->aRem13V[aPos[1],2]
   ENDIF
   IF TYPE('PRIZNAK')='C'
      RETURN(.T.)
   ENDIF
   pVid:= m->aRem13V[aPos[1],1]
   pType:=m->aRem13V[aPos[1],2]
   Moves->(DBSEEK(UPPER(pVid+pType)))
   lPere:=.F.
   IF TYPE('PRIZNAK')!='C'
      IF pType=='4'//Перемещение
         lPere:=.T.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad1')}
         m->GetList[4]:preblock:={||HR(1)}
         SAYSCREEN('Склад-получатель :',m->GetList[3]:row,29)
         SAYSCREEN('Склад-сдатчик....:',m->GetList[4]:row,29)
         IF GlobalTask!='SR'
            @ m->GetList[GetPos(30)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(31)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(32)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            aIn0[30]:=aIn0[31]:=SPACE(6)
            aIn0[32]:=SPACE(25)
            m->GetList[GetPos(30)]:preblock:={||.F.}
            m->GetList[GetPos(31)]:preblock:={||.F.}
            m->GetList[GetPos(32)]:preblock:={||.F.}
         ELSE
            @ m->GetList[GetPos(44)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            @ m->GetList[GetPos(45)]:row,29 SAY SPACE(19) COLOR COL_INPUT
            aIn0[44]:=SPACE(6)
            aIn0[45]:=SPACE(25)
            m->GetList[GetPos(44)]:preblock:={||.F.}
            m->GetList[GetPos(45)]:preblock:={||.F.}
         ENDIF
      ELSE
         lPere:=.F.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad')}
         m->GetList[4]:preblock:={||.F.}
         IF GlobalTask!='SR'
            m->GetList[GetPos(30)]:preblock:={||HR(1)}
            m->GetList[GetPos(31)]:preblock:={||SaveLoadType(aIn0[30])!=NIL}
            m->GetList[GetPos(32)]:preblock:={||WNameFrame()}
            SAYSCREEN('Склад............:',m->GetList[3]:row,29)
            @ m->GetList[4]:row,29 SAY SPACE(19) COLOR COL_INPUT
            SAYSCREEN('Счет контрагента :',m->GetList[GetPos(30)]:row,29)
            SAYSCREEN('Шифр контрагента.:',m->GetList[GetPos(31)]:row,29)
            SAYSCREEN('Наим.контрагента.:',m->GetList[GetPos(32)]:row,29)
         ELSE
            m->GetList[GetPos(44)]:preblock:={||HR(1)}
            m->GetList[GetPos(45)]:preblock:={||WNameFrame()}
            SAYSCREEN('Склад............:',m->GetList[3]:row,29)
            @ m->GetList[4]:row,29 SAY SPACE(19) COLOR COL_INPUT
            SAYSCREEN('Шифр партнера....:',m->GetList[GetPos(44)]:row,29)
            SAYSCREEN('Наим.партнера....:',m->GetList[GetPos(45)]:row,29)
         ENDIF
      ENDIF
   ENDIF
   RETURN(.T.)
ENDIF
RETURN(.F.)
******************************************************/

FUNCTION VRot28(aRem,nIn) //Расход
IF VRot(aRem,nIn)
   IF TYPE('pVid2')='C'
      pVid2:=pVid:= m->aRem13V[aPos[2],1]
      pType2:=pType:=m->aRem13V[aPos[2],2]
      IF TYPE('PRIZNAK')='C'
         RETURN(.T.)
      ENDIF
   ENDIF
   pVid:= m->aRem13V[aPos[1],1]
   pType:=m->aRem13V[aPos[1],2]
   Moves->(DBSEEK(UPPER(pVid+pType)))
   lPere:=.F.
   IF TYPE('PRIZNAK')!='C'
      IF pType='4' //Перемещение
         lPere:=.T.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad1')}
         m->GetList[4]:preblock:={||HR(1)}
         SAYSCREEN('Склад-сдатчик....:',m->GetList[3]:row,29)
         SAYSCREEN('Склад-получатель :',m->GetList[4]:row,29)
      ELSE
         lPere:=.F.
         m->GetList[3]:reader:={|get|ReferGetReader(get,'MSclad')}
         m->GetList[4]:preblock:={||.F.}
         SAYSCREEN('Склад............:',m->GetList[4]:row,29)
         @ m->GetList[4]:row,29 SAY SPACE(19) COLOR COL_INPUT
      ENDIF
   ENDIF
   RETURN(.T.)
ENDIF
RETURN(.F.)

STATIC FUNCTION Rotate(aRem)
LOCAL cLastColor:=SETCOLOR()
LOCAL nGet:=CURRENTGET()
LOCAL nTop:=10,oldpos:=aPos[nGet]
aPos[nGet]:=ASCAN(aRem,{|x|x==M->GetList[nGet]:buffer})
IF aPos[nGet]=0
   aPos[nGet]:=oldpos
ENDIF
@  nTop+aPos[nGet],2 SAY ' '+aRem[aPos[nGet]]+' ' COLOR COL_INPUTB
IF (aPos[nGet]=0 .OR. ++aPos[nGet]>LEN(aRem))
   aPos[nGet]:=1
ENDIF
@  nTop+aPos[nGet],2 SAY ' '+aRem[aPos[nGet]]+' ' COLOR COL_BROWSE
M->GetList[nGet]:buffer:=aRem[aPos[nGet]]
M->GetList[nGet]:assign()
M->GetList[nGet]:display()
RETURN (NIL)

FUNCTION HR(YesMes)
SAYSCREEN(SPACE(33),24,40)
RETURN (.T.)

FUNCTION HR1()
SAYSCREEN(SPACE(33),24,40)
m->pLastGrup:=aIn0[4]
RETURN (.T.)

FUNCTION WNameFrame()
IF !EMPTY(aIn0[31]).AND.;
(aIn0[30]=Analit->Schet.OR.(!EMPTY(aIn0[17]).AND.aIn0[17]=Analit->Schet)).AND.;
aIn0[31]=Analit->Code
   aIn0[32]:=Analit->Name
ENDIF
RETURN (.T.)

FUNCTION WNamePart()
IF !EMPTY(aIn0[44]).AND.aIn0[44]=MPartner->Code
   aIn0[45]:=MPartner->Name
ENDIF
RETURN (.T.)

FUNCTION GetNums(aNums)
LOCAL n:=ASCAN(aNums,5)
IF Marka_[2]
   AADD(aNums,NIL)
   AINS(aNums,++n)
   aNums[n]:=35
ENDIF
IF Sort_[2]
   AADD(aNums,NIL)
   AINS(aNums,++n)
   aNums[n]:=36
ENDIF
IF Profil_[2]
   AADD(aNums,NIL)
   AINS(aNums,++n)
   aNums[n]:=37
ENDIF
IF Razmer_[2]
   AADD(aNums,NIL)
   AINS(aNums,++n)
   aNums[n]:=38
ENDIF
RETURN(aNums)

STATIC FUNCTION GetPos(n)
RETURN ASCAN(m->GetList,{|x|x:Subscript[1]=n})

FUNCTION AddAttr(aHeader)
IF !EMPTY(aIn0[4])
   AADD(aHeader,' '+PADR('Группа',15)+':'+aIn0[4])
ENDIF
IF !EMPTY(aIn0[5])
   AADD(aHeader,' '+PADR('Ном.номер',15)+':'+aIn0[5])
ENDIF
IF !EMPTY(aIn0[35])
   AADD(aHeader,' '+PADR(Marka_[1],15)+':'+aIn0[35])
ENDIF
IF !EMPTY(aIn0[36])
   AADD(aHeader,' '+PADR(Sort_[1],15)+':'+aIn0[36])
ENDIF
IF !EMPTY(aIn0[37])
   AADD(aHeader,' '+PADR(Profil_[1],15)+':'+aIn0[37])
ENDIF
IF !EMPTY(aIn0[38])
   AADD(aHeader,' '+PADR(Razmer_[1],15)+':'+aIn0[38])
ENDIF
RETURN(NIL)

FUNCTION AddPrim(aHeader)
IF !EMPTY(aIn0[41])
   AADD(aHeader,' '+PADR('Примечание',15)+':'+aIn0[41])
ENDIF
RETURN(NIL)

FUNCTION CreIndex(cNameNtx,cNtxKey,cForKey,bWhile)
//LOCAL nStep := MAX( INT( 54/LASTREC() ), 1 )
//LOCAL nProces:=Proces_Ini(,17,,'Построение вспомогательного индекса')
Busy(.T.,"Построение вспомогательного индекса")
cForKey := IF(EMPTY(cForKey),"!DELETE()"+IF(FieldPos("DELETE") != 0,".AND.!DELETE",""),"!DELETE() .AND."+IF(FieldPos("DELETE") != 0,"!DELETE.AND.","")+" ("+cForKey+")")
IF EMPTY(bWhile)
   bWhile:={||.T.}
ENDIF
INDEX ON &cNtxKey TO (cNameNtx)           ;
FOR &cForKey              
//RE_OPEN_DBF
//Proces_End(nProces)
Busy(.F.)
RETURN(NIL)

STATIC FUNCTION GetFieldVar(cField,cStri)
LOCAL lRight:=(LEFT(ALLTRIM(cStri),1)=='*')
LOCAL lLeft:=(RIGHT(ALLTRIM(cStri),1)=='*')
LOCAL i,aStri,cStri1:='',cStri2:='',aPos,cSym:=IF('"'$cStri,"'",'"')
IF lRight.OR.lLeft
   cStri:=ALLTRIM(STRTRAN(cStri,'*',''))
ENDIF
IF '?'$cStri
   aStri:=LineToArray(cStri,'?',@aPos)
   IF lRight
      FOR i:=1 TO LEN(aPos)
      aPos[i,1]-=(LEN(cStri)+1)
      NEXT
   ENDIF
   IF RIGHT(TRIM(cStri),1)='?'.AND.!lRight.AND.!lLeft
      aStri[LEN(aStri)]:=SPACE(LEN(cStri)-RAT('?',cStri))
      aPos[LEN(aStri),2]:=LEN(cStri)-RAT('?',cStri)
   ENDIF
   FOR i:=1 TO LEN(aStri)
   IF !EMPTY(aPos[i,2])
      IF lRight
         cStri1+='SUBSTR(ALLTRIM('+cField+'),'+ALLTRIM(STR(aPos[i,1],2,0))+','+ALLTRIM(STR(aPos[i,2],2,0))+')+'
      ELSE
         cStri1+='SUBSTR('+cField+','+ALLTRIM(STR(aPos[i,1],2,0))+','+ALLTRIM(STR(aPos[i,2],2,0))+')+'
      ENDIF
      cStri2+=UPPER(aStri[i])
   ENDIF
   NEXT
   cStri1:=LEFT(cStri1,LEN(cStri1)-1)
ELSE
   cStri1:=cField
   cStri2:=cStri
ENDIF
IF lRight.AND.lLeft
   cStri:='UPPER('+cStri1+')$'
   cStri+=cSym+UPPER(cStri2)+cSym
ELSEIF lRight
   cStri:='UPPER(RIGHT(ALLTRIM('+cStri1+'),'+STR(LEN(ALLTRIM(cStri2)),2,0)+'))='
   cStri+=cSym+UPPER(ALLTRIM(cStri2))+cSym
ELSEIF lLeft
   cStri:='UPPER(TRIM('+cStri1+'))='
   cStri+=cSym+UPPER(ALLTRIM(cStri2))+cSym
ELSE
   cStri:='UPPER('+cStri1+')='
   cStri+=cSym+UPPER(cStri2)+cSym
ENDIF
IF EMPTY(cStri1)
   cStri:='.T.'
ENDIF
RETURN cStri

FUNCTION GetValuta()
RETURN ' '+PADR('Валюта',15)+':'+GlobalValuta+' '+GlobalName

