УРОК 201 Событие "прайс-лист"
Select messages from
# through # FAQ
[/[Print]\]

-> Программирование в БЭСТ-4

#1: УРОК 201 Событие "прайс-лист" Author: nordkLocation: Горбунов Константин PostPosted: 22 Mar 2007 19:59
    —
Номер урока исходя из логики кадр первый дубль два

Итак создание строк документов.
Вот только на каком примере будем делать на заказах на накладных ?
Есь желающие подкинуть конкретику для рассмотрения вопроса?

#2:  Author: EJLocation: цЙМЕОЛП еЧЗЕОЙК аТШЕЧЙЮ PostPosted: 23 Mar 2007 09:51
    —
ИМХО на заказах бОлее насущно...

#3:  Author: nordkLocation: Горбунов Константин PostPosted: 23 Mar 2007 13:23
    —
На заказах так на заказах - задачку дайте: что конкретно сделаем ?

#4:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 14:49
    —
Поскольку предложений нет, даю общее описание

1. При вызове события Прайс-лист ему передается массив
имя массива сейчас aGlobVars а в ближайших сервис-паках планируется изменние на aWorkVars
Каждый элемент массива явлется имеющейся в документе строкой
Он представляет собой массив следующего содержания:
Code:
1- группа+NNUM+partia+Sclad
2 - единица изм
3 - кол-во
4 - цена в осн.валюте
далее (не обязательно):
5 - ранее выбранное кол-во (0)
6 - ранее выбранная сумма (0)
7 - не задействовано
8 - цена в валюте
9 - код валюты
10 - курс валюты
11 - nOCena1 из MLabel
12 - nOCena2 из MLabel
13 - nOCena3 из MLabel
14 - nOCena4 из MLabel
15 - nVCena1 из MLabel
16 - nVCena2 из MLabel
17 - nVCena3 из MLabel
18 - nVCena4 из MLabel


На самом деле содержание передаваемого массива больше, но
здесь указаны элементы, которые используются при возврате
для создания/корректировки строк документа

2.Если плагин вернет .T. то после него будет запущена стандартная картотека для ввода документ, если .F. то возврат в документ с созданием строк

3.При возврате для создания строк документов возвращается заполненный массив, описание смотри выше. По нему создаются
/изменяются строки документов.

4. В заказах при необходимости запретить пользователю пересчет
заказа по F5 необходимо изменить public переменную
Code:
NoPricePere:=.T.,

#5:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 14:52
    —
Ниже предлагается исходный код образца решения для заказов:

Часть 1

Code:
#include "inkey.ch"
#include "s_public.ch"

#TRANSLATE HOT_CTRL(<x>,<nKey>,<bKey>,<nSort>)  =>  AADD(aHotKey\[1\],{<x>,<nKey>,<bKey>,<nSort>})
#TRANSLATE HOT_SHIFT(<x>,<nKey>,<bKey>,<nSort>) =>  AADD(aHotKey\[2\],{<x>,<nKey>,<bKey>,<nSort>})
#TRANSLATE HOT_ALT(<x>,<nKey>,<bKey>,<nSort>)   =>  AADD(aHotKey\[3\],{<x>,<nKey>,<bKey>,<nSort>})
#TRANSLATE REAL_TIME(<nSet>) => SetRealTimeDoc(<nSet>,GlobalTask $ "0309",IF(GlobalTask $ "0309ZR".OR.(GlobalTask='SR'.AND.(TYPE('lUdalReal')#'L'.OR.!m->lUdalReal)),IF(TYPE("pPro")!="U",MemVar->pPro,NIL),IF(TYPE("pNNoper")!="U",MemVar->pNNoper,NIL)),IF(TYPE("aWindow")=="A".AND.LEN(aWindow)>1.AND.LEN(aWindow\[2\])>6,aWindow\[2\]\[7\]:cargo\[1\],{}))
#TRANSLATE REAL_W_TIME(<nSet>) => SetRealTimeDoc(<nSet>,GlobalTask $ "0309",IF(GlobalTask $ "0309ZR".OR.(GlobalTask='SR'.AND.(TYPE('lUdalReal')#'L'.OR.!m->lUdalReal)),IF(TYPE("pPro")!="U",MemVar->pPro,NIL),IF(TYPE("pNNoper")!="U",MemVar->pNNoper,NIL)),aWork)

#DEFINE L_KOLR    13
#DEFINE __RLABEL (IF(iSPR_PART->(EOF()) .OR. MemVar->PricePart = 1,cSelLabel,cSelPartia))


#DEFINE iSelect  cSelSchet,cSelKart,cSelGrup,cSelLabel,cSelPartia,cSelStru,cSelUStru,cSelUser,cSelDoc,cSelDocM,cSelTree,cSelNameTre,cSelSprDop,cSelSprRcv,cSelSclad,cSelMoves,cSelVDoc,cSelCodOp,cSelAgent,;
                 cSelTaxGrp //z0ne NDS18 16.12.2003

MEMVAR  iSelect

#DEFINE iMSCHET    (cSelSchet)
#DEFINE iMKART     (cSelKart)
#DEFINE iMGRUP     (cSelGrup)
#DEFINE iMTAXGRP   (cSelTaxGrp) //z0ne NDS18 16.12.2003
#DEFINE iMLABEL    (cSelLabel)
#DEFINE iSPR_PART  (cSelPartia)
#DEFINE iMSTRU     (cSelStru)
#DEFINE iSTRU      (cSelUStru)
#DEFINE iMSCLAD    (cSelSclad)
#DEFINE iUSER      (cSelUser)
#DEFINE iMDOC      (cSelDoc)
#DEFINE iMDOCM     (cSelDocM)
#DEFINE iTREE      (cSelTree)
#DEFINE iNAME_TRE  (cSelNameTre)
#DEFINE iSPR_DOP   (cSelSprDop)
#DEFINE iSPR_RCV   (cSelSprRcv)        // PVP - справочник реквизитов партий
#DEFINE iMOVES     (cSelMoves)
#DEFINE iMVDOC     (cSelVDoc)
#DEFINE iMCODOP    (cSelCodOp)
#DEFINE iAGENT     (cSelAgent)

#DEFINE iTypeGen   (IF(TYPE(GetPrefix("TypeGen")) = "L",&(GetPrefix("TypeGen")),.F.))
#DEFINE iLabelNum  (&(GetPrefix("LabelNum_")))
#DEFINE itWork_B_Code GetPrefix("Work_B_Cod")
#DEFINE iWork_B_Code  (&(GetPrefix("Work_B_Cod")))


// Для коррекции резерва
#DEFINE KOL_MRES(x)     (VAL(SUBSTR(x,Q_KOL,L_KOLR))-MIN(VAL(SUBSTR(x,Q_KOL1,L_KOLR))+VAL(SUBSTR(x,Q_KOL10,L_KOLR)),VAL(SUBSTR(x,Q_KOL,L_KOLR))))

//Позиции в cMat в строке и на экране
#DEFINE Q_NAME      2
#DEFINE Q_KOL      37
// Изменение 3.18
#DEFINE Q_FACTCENA 50
#DEFINE Q_SUMOUT   64

#DEFINE Q_ED    79
#DEFINE Q_GRUP  84
#DEFINE Q_NNUM  89
#DEFINE Q_SCLAD 102
#DEFINE Q_KOL1  108
#DEFINE Q_CENAOUT  121
#DEFINE Q_SUM1  136
#DEFINE Q_CODEVAL  151
#DEFINE Q_VCENA    154
#DEFINE Q_CENAVAL  169
#DEFINE Q_OCENA1   182
#DEFINE Q_OCENA2   197
#DEFINE Q_OCENA3   212
#DEFINE Q_OCENA4   227
#DEFINE Q_VCENA1   242
#DEFINE Q_VCENA2   257
#DEFINE Q_VCENA3   272
#DEFINE Q_VCENA4   287
#DEFINE Q_KOL10    302
#DEFINE Q_SUM10    315
#DEFINE Q_PARTIA   330
#DEFINE Q_SUM_NDS  335
#DEFINE Q_SUM_ACZ  354
#DEFINE Q_SUM_CSH  373
#DEFINE Q_CSH      392
#DEFINE Q_NUMSTR   400
#DEFINE Q_KOLR    405     //длина 13     // заявлено в заказах
#DEFINE Q_NAME1    418     //длина 26

FIELD Kt_Sum,Dt_Sum

// см. MakeMat1 и MEM_MODEL
#DEFINE Q_MAT_MODEL (m->SUM_NDS := VAL(SUBSTR(cMat,Q_SUM_NDS,19)),m->SUM_AKC := VAL(SUBSTR(cMat,Q_SUM_ACZ,19)),m->SUM_CSH := VAL(SUBSTR(cMat,Q_SUM_CSH,19)))
#DEFINE Q_SAVE_FLAG (MDOC->L_NDS := RetFlagNalog(1,MemVar->pModel),MDOC->L_ACZ := RetFlagNalog(2,MemVar->pModel),MDOC->L_CSH := RetFlagNalog(3,MemVar->pModel))

//Длина
#DEFINE L_NAME  35
#DEFINE L_KOL   14
#DEFINE L_CENA  17
#DEFINE L_SUM   14
#DEFINE L_GRUP   5
#DEFINE L_PARTIA 5
#DEFINE L_NNUM   13
#DEFINE L_ED     5
#DEFINE L_SCHET  4
#DEFINE L_IZNOS  3


#DEFINE COL_SELECT  IF(INST_COLOR,'w+/g','w+/n')
#DEFINE COL_HEADPRICE IF(INST_COLOR,'b/w','n/w')
#DEFINE COL_SHEADR   IF(INST_COLOR,'gr+/b*,w+/n,,,w+/b*','n/w,w+/n,,,n/w')

#DEFINE X_R  IF(LNEWCENA,RetEdR(IF(IsAddPricePartia(pNumber)[3],.F.,0)),RetEdR())
#DEFINE X_ED IF(LNEWCENA,RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0)),RetEd())
#DEFINE X_SUM_ED(x)  IF(LNEWCENA,RetSumEd(x,IF(IsAddPricePartia(pNumber)[3],.F.,0)),RetSumEd(x))
#DEFINE X_KOL_ED(x)  IF(LNEWCENA,RetKolEd(x,IF(IsAddPricePartia(pNumber)[3],.F.,0)),RetKolEd(x))

#DEFINE IS_PARTIA_KOL (GlobalTask != "05" .OR. MemVar->PricePart != 1)
*#DEFINE IS_DOP_NUM  (!YesMatReal.AND.TYPE("pDopCode") = "C" .AND. !EMPTY(pDopCode))
#DEFINE IS_DOP_NUM  (.F.)

#DEFINE ED_PRICE   RetEd(IF(LNEWCENA,IF(IsAddPricePartia(pNumber)[3],.F.,0),NIL))
#DEFINE ED_R_PRICE  RetEdR(IF(LNEWCENA,IF(IsAddPricePartia(pNumber)[3],.F.,0),NIL))

#DEFINE X_MDOCM (IF(pVid="0","_MDOCM","MDOCM"))

#DEFINE LNEWCENA   (GlobalTask="05".AND.pCodeCen=6)

#DEFINE SUM_WORK  IF(pType = "4" .AND. YesUchet,x[3]*__CENA,ROUND(nKolOut*nCena*EVAL(Global_BCurs,pCenaVal,Valuta->Myltiply),CURR_MAIN))
#DEFINE SUM_OUT   IF(pType = "4" .AND. YesUchet,x[3]*__CENA,nKolOut*nCena)
STATIC aWork,nWork:=0,aEd,lKarto,nEd:=1,nPushKart := 0
#DEFINE __MKART  (IF(SELECT("TMKART") = 0,"MKART","TMKART"))
#DEFINE ACCUR_ED  IF(UPPER(RetEd()) = UPPER(MLABEL->ED),MGRUP->KOL_,MGRUP->KOL1_)
#DEFINE __OSN_ED iMLABEL->ED
#DEFINE __CENAN   IF(iMSCHET->XRAN != '1' .OR. iMSCHET->METODNal = '3',iMLABEL->CenaN, IF(EMPTY(lChTnPart),iSPR_PART->CENA_FN,TnPrePartN(cSelPartia)))

#6:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 14:56
    —
Часть 2
Code:
MEMVAR lGrup0

STATIC lGoUp:= .F., lGoDown:= .F.

FUNCTION MAIN()
   Local nWay,lFlag


   IF aPars[1]=1.OR.nMetodInput=1
      nWay:=NoOrYes({"Выберите прайс-лист"},1,{"Свой","Штатный"})
   ENDIF

   DO CASE
      CASE nWay=1
         lFlag:=PriceRefer(,,.T.)
      CASE nWay=2
         lFlag:=.T.
    ENDCASE

RETURN lFlag
                      FUNCTION PriceRefer(dDate,nAdd,lFromReal)
//--------------------------------------------------------------------------//
// dDate != NIl, остатки на дату меньше или равно dDate
LOCAL lKart:=(GlobalTask $ '03TZ'.AND.lPlus.AND.pVid+pType!='15').OR.!( YesMatReal .OR. (GlobalTask $ '03TZ'.AND.YesReal.AND.YesDop.AND.lPrice>'1')) //Раскрывать картотеку
LOCAL cLastColor,cColor:=COL_HEADPRICE,nArea
LOCAL sResti,nOrd0,sRest,nOrdLabel:=MLabel->(ORDNUMBER())
LOCAL nTop:=2,nLeft:=0,nBottom:=24,nRight:=79
LOCAL nLastKey,cHelp_Code:=HELP_CODE
//ТВ
*LOCAL cHead:= '   Н/номер               Наименование        Ед.изм    '+IF(YesMatReal,'Свободно  Кол-во заказ ',IF(GlobalTask $ '03TZ'.AND.lPlus,' Остаток      Принято  ',' Остаток      '+IF(pVid='0','Остаток  ','Отпущено ')))
LOCAL cHead:= 'Н/номер              Наименование                ЕдИзм    Свободно    Заказать'
*1234567890123 123456789012345678901234567890 12345 1234567890123 1234567890123
*1234567890123456789012345678901234567890123456789012345678901234567890123456789
LOCAL bKol := {|| IF(nWork>0.AND.pVid>'0',IF(lPlus,aWork[nWork,3]-aWork[nWork,19],-aWork[nWork,3]+aWork[nWork,19]),0) }
//ТВ
*
*LOCAL aBlockCols:={{{|| IF(EMPTY(NNum).AND.!EOF(),;
*                           CENTER(' '+TRIM(MGrup->Code)+' '+TRIM(MGrup->Name)+' ',78,'─',.T.),;
*                           NNum+' '+IF(GlobalTask != "05" .OR. IF(pCodeCen=6,MemVar->PricePart != 1.AND.IsAddPricePartia(pNumber)[1],MemVar->PricePart != 1),Partia+' ','')+LEFT(MLabel->Name,30-IF(GlobalTask != "05" .OR. IF(pCodeCen=6,MemVar->PricePart != 1.AND.IsAddPricePartia(pNumber)[1],MemVar->PricePart != 1),L_PARTIA+1,0))+' '+;
*                           IF((nWork:= ScanWorkList())>0.AND.;
*                           (nEd:=ASCAN(aEd,{|x|UPPER(x[1])==UPPER(aWork[nWork,2])}))!=NIL,;
*                           aWork[nWork,2],ED_PRICE)+' '+;
*                           IF(LNEWCENA,;
*                           (aEd:=IniEd(,,,,@nEd),StrS(oRedKol(__MKART->KolTek+EVAL(bKol)-IF(YesMatReal,IF(m->RLimit_,-__MKART->KolLim,0)+__MKART->KolRes,0),RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))),13,IF(UPPER(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))),;
*                           StrEd(__MKART->KolTek+EVAL(bKol)-;
*                                 IF(YesMatReal,IF(m->RLimit_,-__MKART->KolLim,0)+__MKART->KolRes,0)))+' '+;
*                           IF(nWork>0,StrEd(aWork[nWork,3]),IF(pVid="0",StrEd(__MKART->KolTek+EVAL(bKol)-IF(YesMatReal,IF(m->RLimit_,-__MKART->KolLim,0)+__MKART->KolRes,0)),SPACE(13)))) },1}}
*

LOCAL aBlockCols:={{{|| IF(EMPTY(NNum).AND.!EOF(),;
                           CENTER(' '+TRIM(MGrup->Code)+' '+TRIM(MGrup->Name)+' ',78,'─',.T.),;
                           LEFT(NNum,8)+'  '+LEFT(MLabel->Name,34)+'     '+;
                           IF((nWork:= ScanWorkList())>0.AND.(nEd:=ASCAN(aEd,{|x|UPPER(x[1])==UPPER(aWork[nWork,2])}))!=NIL,;
                              aWork[nWork,2],ED_PRICE)+'  '+;
                           IF(LNEWCENA,(aEd:=IniEd(,,,,@nEd),;
                                        StrS(oRedKol(__MKART->KolTek+EVAL(bKol)-IF(m->RLimit_,-__MKART->KolLim,0)-__MKART->KolRes,;
                                                     RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))),;
                                             10,,IF(UPPER(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))),;
                                        StrEd(__MKART->KolTek+EVAL(bKol)-IF(m->RLimit_,-__MKART->KolLim,0)-__MKART->KolRes,,10))+' '+;
                           IF(nWork>0,StrEd(aWork[nWork,3],,11),;
                                      IF(pVid="0",;
                                         StrEd(__MKART->KolTek+EVAL(bKol)-IF(m->RLimit_,-__MKART->KolLim,0)+__MKART->KolRes,,11),;
                                         SPACE(11));
                              ) )},1}}
*LOCAL aBlockCols:={{{||_myblock(bKol)},1}}
LOCAL aArray,nWin
LOCAL bIsNoInAddPrice := {||GlobalTask="05".AND.pCodecen=6.AND.(!RPrice_M->(dbSeek(UPPER(pNumber+MKART->(GRUP+NNUM+IF((aArray:=IsAddPricePartia(pNumber))[1],PARTIA,""))))).OR.(!EMPTY(aArray[4]).AND.EMPTY(ASCAN(aArray[4],{|x|UPPER(x)=UPPER(MKart->Sclad)}))))}
//ТВ
*LOCAL bColor:=IF(YesMatReal.OR.pVid='2',{||IF(;
*__MKART->KolTek+IF(nWork>0,-aWork[nWork,3]+aWork[nWork,19],0)-;
*IF(YesMatReal,IF(m->RLimit_,-__MKART->KolLim,0)+__MKART->KolRes,0)>0,IF(EVAL(bIsNoInAddPrice),'n+/w',COL_REFER),COL_INPUTA1)},NIL)
LOCAL bColor:={||mycolor(__MKART->KolTek+IF(nWork>0,-aWork[nWork,3]+aWork[nWork,19],0)-IF(m->RLimit_,-__MKART->KolLim,0)-__MKART->KolRes,;
                         COL_REFER,bIsNoInAddPrice,1)}
LOCAL bColor1:={||mycolor(__MKART->KolTek+IF(nWork>0,-aWork[nWork,3]+aWork[nWork,19],0)-IF(m->RLimit_,-__MKART->KolLim,0)-__MKART->KolRes,;
                         COL_REFER,bIsNoInAddPrice,2)}
*LOCAL bColor:={||'n/w'}
LOCAL aSetKey:=SaveSetKey(),cFltr0,aScope, nCena, nKolTek := 0
LOCAL cFindMacro:='cFind$UPPER(MLabel->Name).OR.cFind$UPPER(Grup+NNum+Partia)'
LOCAL aBase := {'MKART','MSCHET','MLABEL','MDOCM','MGRUP','MSTRU','SPR_PART','VALUTA','VCURS','RBOOKM','RBOOK'}
LOCAL nRet, aStruct, nKol_Tek := 0, nKolRes, nKol_Res
LOCAL aHotKey := {{},{},{}}, lSkid := GlobalTask = "05"
LOCAL bForKol := IF(IS_PARTIA_KOL,{|| (EMPTY(MKART->NNUM) .OR. !EMPTY(MKART->PARTIA) .OR. (EMPTY(MKART->PARTIA) .AND. MSCHET->XRAN != '1')) },{|| EMPTY(MKART->PARTIA) })
LOCAL bForKey := IF(IS_PARTIA_KOL,{|| UPPER(MKART->GRUP+MKART->NNUM+MKART->PARTIA) },{|| UPPER(MKART->GRUP+MKART->NNUM) })
LOCAL bForKolTek := {|| MemVar->TypeOst != 1.OR.;
                        ((nRet := RetKolEd(MKART->KOLTEK+IF(m->RLimit_.AND.!EMPTY(lFromReal),MKART->KolLim,0))) >= 0 .AND. STR(nRet,14,ACCUR_ED) != STR(0,14,ACCUR_ED)).OR.;
                        (ROUND(MKART->KOLTEK+IF(m->RLimit_.AND.!EMPTY(lFromReal),MKART->KolLim,0),MGRUP->KOL_) >= 0).OR.;
                        ScanWorkList()>0}
LOCAL bForKolData := {|aKol|;                                                                                                                    //Что-бы показывать малые кол-ва
   aKol := GetDocKol(EVAL(bForKey),@dDate,MKART->SCLAD,lFromReal),;
   nKol_Tek := aKol[1],;
   nKol_Res := aKol[2],;
   nKolRes := IF(MemVar->TypeOst = 1,IF(nKol_Tek-nKol_Res < MKART->KOLTEK-MKART->KOLRES,nKol_Res,MKART->KOLRES),nKol_Res),;
   nKolTek := IF(MemVar->TypeOst = 1,IF(nKol_Tek-nKol_Res < MKART->KOLTEK-MKART->KOLRES,nKol_Tek,MKART->KOLTEK),nKol_Tek),;
   ScanWorkList()>0.OR.;
   IsVisiablePos(nKolTek,nKolRes,lFromReal);
                        }
LOCAL bSayHead:= {|xKey,x2,cSay,nRec|;
                   nRec := MGrup->(RecNo()),;
                   iMGRUP->(DbSeek(xKey)),;
                   cSay:= PADC(" "+iMGRUP->Code+" "+TRIM(iMGRUP->Name)+" ",78,"─"),;
                   iMGRUP->(DbGoTo(nRec)),;
                   cSay;
                   }
LOCAL bKeyHead:= {|| IF("STATUS+SCLAD+GRUP"$ORDKEY().OR."STATUS+GRUP"$ORDKEY(), UPPER(FIELD->Grup), NIL)}

LOCAL bSetKol :=;
 {||;
   TMKART->(Gather(MKART->(Scatter()))),;
   TMKART->KOL_TEK := nKol_Tek,;
   TMKART->KOLTEK  := nKolTek,;
   TMKART->KOLRES  := nKolRes;
    }

// TypeOst
// 1 - минимальные остатки на дату
// 2 - остатки на дату

LOCAL bOstData :=;
 {||;
  Busy(.T.," Расчет остатков на "+DTOC(dDate)),;
  TMKART->(__dbZap()),;
  MKART->(;
    dbPush(,IF(GlobalTask='05'.AND.lGrup0 ,"MKART","MKART_SN")),;
    X_MDOCM->(dbPush(,"MDOCM_K","","","")),;
    dbSeek(IF(GlobalTask='05'.AND.lGrup0 ,UPPER(pLastGrup)," "+UPPER(pSclad+IF(lGrup0,pLastGrup,""))) ),;
    dbClearRelation(),;
    dbSetRelation("MLABEL",{|| UPPER(MKART->GRUP+MKART->NNUM) },"UPPER(GRUP+NNUM)"),;
    dbSetRelation("MSCHET",{|| UPPER(MKART->SCHET) },"UPPER(SCHET)"),;
    dbSetRelation("MGRUP",{|| UPPER(MKART->GRUP) },"UPPER(GRUP)"),;
    DBEVAL(bSetKol,{|| IF(GlobalTask='05'.AND.lGrup0 ,!EMPTY(MKART->NNum).AND. EMPTY(MKART->Status),.T.).AND. (GlobalTask#'05'.OR. EMPTY(MKART->Price)).AND. EVAL(bForKol) .AND. EVAL(bForKolTek) .AND. EVAL(bForKolData) .AND. TMKART->(AddRec()) },{|| IF(GlobalTask='05'.AND.lGrup0 ,UPPER(MKART->GRUP)=UPPER(pLastGrup),UPPER(MKART->SCLAD) = UPPER(pSclad) .AND. MKART->STATUS = " " .AND. IF(lGrup0,MKART->GRUP=pLastGrup,.T.)) }),;
    X_MDOCM->(dbPop()),;
    dbPop();
        ),;
    Busy(.F.);
  }
LOCAL bGetGrup :=;
 {|oGet|;
   IF(EMPTY(pLastGrup),pLastGrup:=MSTRU->(dbSeek(pSclad),Grup),NIL),;
   sResti := BrSaveScreen(10,26,15,54),;
   ShadowBox("",10,26,14,51,COL_SHEADR),;
   SAYSCREEN('Группа?:',12,29),;
   GetList := {},;
   oGet:=GetNew(12,39,{|x| IF(x != NIL,pLastGrup := PADL(RTRIM(x),LEN(x)),pLastGrup )},"pLastGrup",'@K XXXXX',COL_GET),;
   oGet:reader :={|x| ReferGetReader(x,"MGRUPR") },;
   AADD(GetList,oGet),;
   NilNum(),;
   PushData(SaveSetKey()),;
   SETCURSOR(1),;
   ReadModal(GetList),;
   GetList := {},;
   BrRestScreen(sResti),;
   RestSetKey(PopData()),;
   SETCURSOR(0),;
   IF(TYPE(itWork_B_Code)='L'.AND.iWork_B_Code.AND.!EMPTY(m->nOrdBC),QuickBC(1,1,0,m->nOrdBC,'r/w*','не запоминая',m->nPrefBC),SetNum(nAdd)),;
   IF(EMPTY(pLastGrup),pLastGrup := "",NIL),;
   IF(!EMPTY(pLastGrup).AND.ALIAS()=="MKART",IF(ORDNAME()=="MKART_BC",ORDSETFOCUS("MKART_SN"),;
                                                       IF(ORDNAME()=="MKART_SA",ORDSETFOCUS("MKART_ST"),NIL)),),;
   IF(LASTKEY()=K_ESC,BREAK(1),NIL);
  }

LOCAL bAddSort :=;
 {||;
  GetaSort();
   }
PRIVATE aSort:={}
PRIVATE GetList:={}
PRIVATE bPreSeek
PRIVATE lGrup0:=IF(YesMatReal,m->RGrup_[1],lGrup)
PRIVATE nBaseOrd:=IF((lKarto:=lKart),2,IF(YesMatReal,IF(pCodeCen=6,1,4),IF((GlobalTask $ '03TZ'.AND.pType='9'.AND.pVid>'0'),6,2)))
PRIVATE lOstData := .F.
PRIVATE nOrdBC:=NIL
PRIVATE  nPrefBC:=NIL

nWin:=WSELECT()
ALTD()
IF GlobalTask=="TZ".AND.pVid=="0"
    bColor:={|| IF(nWork > 0.AND.!(__MKART->KolTek=aWork[nWork,3]),COL_INPUTA,COL_REFER) }
ENDIF

IF TYPE("TypeOst") != "N"
  PRIVATE TypeOst
  MemVar->TypeOst := 1
ENDIF
IF GlobalTask='05'
   HELP_CODE:='1.3'
ELSEIF GlobalTask="TZ"
        IF pVid="0"
    HELP_CODE:=TZ_H_23
        ELSE
    HELP_CODE:=TZ_H_13
        ENDIF
ELSE
   HELP_CODE:='1.4'
ENDIF
IF !lKarto.AND.YesMatReal
   PRIVATE pSclad:=''
ENDIF
PRIVATE pLastGrup:='',pStatus0, lSeekScl
IF !YesMatReal
   PRIVATE pSkidka:=0
   PRIVATE pNakidka:=0
ENDIF
SETKEY(K_END,{||Forward(1)})
SETKEY(K_HOME,{||Forward(-1)})
SETKEY(K_RETURN,{||MenuAdd(aSort,cFltr0,nAdd)})
//ТВ
*SETKEY(K_LEFT,{||MenuAdd(aSort,cFltr0,nAdd)})
*SETKEY(K_RIGHT,{||MenuAdd(aSort,cFltr0,nAdd)})
SETKEY(K_F7,{|nRet|NilNum(),nRet:=QSeek(aSort,COL_REFER),SetNum(nAdd),Ord_:=ORDNUMBER(),nRet})
SETKEY(K_F3,{|nRet|nRet:=QSort(aSort,COL_REFER),Ord_:=ORDNUMBER(),nRet})
SETKEY(K_TAB,{||MYWRITE(aWork),0})
SETKEY(K_F9,{||PrintCheck()})
SETKEY(K_F10,{|| IF(!EMPTY(FIELD->NNUM),SpraEd(lPlus),)})
IF GlobalTask!="TZ".OR.pVid!="0"
    SETKEY(K_CTRL_F2,{||KitRefer(1,@aWork,{||DispSum0()},nAdd)})
        HOT_CTR("F2:Комплекты",0,NIL,1)
ENDIF
SetKey(K_ALT_I,{|| DispLabelTree(7,5,MLABEL->NNOPER,COL_REFER) })
 HOT_ALT("I:Иерархия",0,NIL,2)
 HOT_ALT("A:Комментарий",0,NIL,3)
 HOT_CTRL("O:Остаток ТМЦ",0,NIL,4)
 HOT_ALT("O:Движение ТМЦ",0,NIL,4)
 HOT_ALT("P:Дополнительные атрибуты",0,NIL,4)


SetKey(K_ALT_A,{|lAdd|  lAdd := .F.,pSclads := IF("│││" $ MLABEL->SCLADS,(lAdd := .T.,BEFORATNUM("│││",MLABEL->Sclads)),MLABEL->Sclads),MLABEL->(Comment()),IF(MLABEL->(RecLock()),(MLABEL->SCLADS := pSclads+IF(lAdd,"│││"+AFTERATNUM("│││",MLABEL->SCLADS,1),""),MLABEL->(dbUnLock())),NIL),pSclads := "" })
SetKey(K_ALT_O,{|x|x:=SaveScreen(),DispDwi(1,dDate,nWork,aWork,,{|nKol,nLen,cEd| StrEd(nKol,,nLen,cEd) }),RestScreen(x)  })
IF YesMatReal .OR. GlobalTask $ "03SR"
  SetKey(K_ALT_R,{|| DispReserv() })
  SetKey(K_CTRL_T,{|| SprTovKol(.T.,IF(YesMatReal,MemVar->pNNoper,NIL),IF(YesMatReal,NIL,MemVar->pPro),IF(nWork > 0,aWork[nWork,2],ED_PRICE),IF(nWork > 0,aWork[nWork,20],ED_R_PRICE)) })
  HOT_CTRL("T:Свободно ТМЦ",0,NIL,5)
  HOT_ALT("R:Зарезервированный товар",0,NIL,5)
ENDIF
SetKey(K_CTRL_O,{|| SprTovKol(.F.,IF(YesMatReal,MemVar->pNNoper,NIL),IF(YesMatReal,NIL,MemVar->pPro),IF(nWork > 0,aWork[nWork,2],ED_PRICE),IF(nWork > 0,aWork[nWork,20],ED_R_PRICE)) })
SetKey(K_ALT_P, {||ShowDopAttr()})

SETKEY(ASC(' '),{||ChangeEd(nAdd)})

SETKEY(K_F6,{|cScreen| cScreen:=SAVESCREEN(23,0,23,MAXCOL()),PriceFilter(cFltr0,ScopeMacro()),RESTSCREEN(23,0,23,MAXCOL(),cScreen),2 })
SETKEY(K_CTRL_F6,{|| MyCloseFilter(30,0), IF(ALIAS()=="MKART",Filter_:='',)})
HOT_CTRL("F6:Снять фильтр",0,NIL,10)
SETKEY(K_ALT_F7,{||FindName()})
HOT_ALT("F7:Контекстный поиск",0,NIL,11)
SETKEY(K_ALT_F6,{||FiltName(cFindMacro,DBFILTER(),ScopeMacro(),30,0)})
SETKEY(K_ALT_F12,{||FiltName(cFindMacro,DBFILTER(),ScopeMacro(),30,0)})
IF IsMSNT()
   HOT_ALT("F6:Контекстный фильтр",0,NIL,12)
ELSE
   HOT_ALT("F12:Контекстный фильтр",0,NIL,12)
ENDIF
MenuAdd(,,nAdd)


WSELECT(0)
SetNum(nAdd)

cLastColor:=SETCOLOR(COL_REFER)
sRest:=SAVESCREEN()

BEGIN SEQUENCE

IF lSkid
 AADD(aBase,{"RSKID",LoadPath()+"REAL\RSKID"})
 AADD(aBase,{"RSKIDQ",LoadPath()+"REAL\RSKIDQ"})
 AADD(aBase,{"MPART",LoadPath()+"SCLAD\MPART"})
ENDIF

dbOpenBases(aBase,,,,.T.)

MSTRU->(ORDSETFOCUS("MSTRU_G"))
MLABEL->(ORDSETFOCUS("MLABEL"))
SPR_PART->(ORDSETFOCUS("TAG_NUM"))
MGRUP->(ORDSETFOCUS("MGRUP"))
MKART->(ORDSETFOCUS("MKART"))
MSCHET->(ORDSETFOCUS("MSCHET"))
MKART->(ORDSETFOCUS("MKART"))
RBOOKM->(ORDSETFOCUS("RBOOKM_G"))
RBOOK->(ORDSETFOCUS("RBOOK0"))

IF lSkid
  MPART->(ORDSETFOCUS("MPART_G"))
  RSKID->(ORDSETFOCUS("RSKID"))
  RSKIDQ->(ORDSETFOCUS("RSKIDQ"))
ENDIF

MSTRU->(dbSetRelation("MGRUP",{|| UPPER(FIELD->GRUP) },"UPPER(GRUP)"))

IF !EMPTY(pSclad)
  MSTRU->(dbSetFilter({|| UPPER(FIELD->SCLAD) = UPPER(pSclad) },"UPPER(SCLAD)='"+UPPER(pSclad)+"'"),dbGoTop())
ENDIF


MKART->(ORDSETFOCUS("MKART"))

IF SELECT("TMKART")>0
   TMKART->(ORDSETFOCUS("TAG_METKA"))
ENDIF

dbSelectArea("MKART")

IF !(pType='9'.AND.pVid$'12').OR.(GlobalTask="TZ".AND.MemVar->lSetAlt_F4.AND.pVid!="0")
    RePrice(nAdd)
ELSE
    aWork:={}
ENDIF

IF(lGrup0,EVAL(bGetGrup),NIL)
IF (lOstData := ValType(dDate) = "D")
  MKART->(aStruct := dbStruct())
  AADD(aStruct,{"Kol_Tek","N",19,4})
  IF(iLabelNum=4,;
     CreateMetka(,"TMKART",aStruct,;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NNUM+PARTIA"+IF(YesMatReal,"+SCLAD",'')+")",;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"NAME+PARTIA)",;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NAME+PARTIA)",;
                 ,;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"NNUM+PARTIA)",;
                 iIF(EMPTY(GetFIFOLIFO()),NIL,"UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NNUM+IF(GetFIFOLIFO()='F',DTOS(DatePart),DESCEND(DTOS(DatePart)))+PARTIA"+IF(YesMatReal,"+SCLAD",'')+")"),;
                 iIF(EMPTY(GetFIFOLIFO()),NIL,"UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NAME+IF(GetFIFOLIFO()='F',DTOS(DatePart),DESCEND(DTOS(DatePart)))+PARTIA)");
                 ),;
     CreateMetka(,"TMKART",aStruct,;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NNUM+PARTIA"+IF(YesMatReal,"+SCLAD",'')+")",;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"NAME+PARTIA)",;
                 "UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NAME+PARTIA)",,,;
                 iIF(EMPTY(GetFIFOLIFO()),NIL,"UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NNUM+IF(GetFIFOLIFO()='F',DTOS(DatePart),DESCEND(DTOS(DatePart)))+PARTIA"+IF(YesMatReal,"+SCLAD",'')+")"),;
                 iIF(EMPTY(GetFIFOLIFO()),NIL,"UPPER(STATUS+"+IF(YesMatReal,"","SCLAD+")+"GRUP+NAME+IF(GetFIFOLIFO()='F',DTOS(DatePart),DESCEND(DTOS(DatePart)))+PARTIA)");
                 ))
  aStruct := NIL
  EVAL(bOstData)
  dbSelectArea("TMKART")
  ORDSETFOCUS("TAG_METKA")
  IF GlobalTask='05'.AND.lGrup0
     dbSetRelation("MKART",{|| m->lSeekScl:=.F., IF(MKART->(DBSEEK(TMKART->(UPPER(GRUP+NNUM+PARTIA+SCLAD)))).AND.(m->lSeekScl:=.T.),TMKART->(UPPER(GRUP+NNUM+PARTIA+SCLAD)),TMKART->(UPPER(GRUP+NNUM+PARTIA))) },"UPPER(GRUP+NNUM+PARTIA+IF(m->lSeekScl,SCLAD,''))")
  ELSE
     dbSetRelation("MKART",{|| TMKART->(UPPER(GRUP+NNUM+PARTIA+SCLAD)) },"UPPER(GRUP+NNUM+PARTIA+SCLAD)")
  ENDIF
ELSE
  SELECT MLABEL
  IF !(GlobalTask $ '03TZ'.AND.lPlus.AND.pVid+pType!='15'.AND. pVid+pType != '19').OR. (pVid='1'.AND.pType!='9')//.AND.TYPE('nKartPrih')='N' .AND.m->nKartPrih=1)
    SELECT MKART
    IF pVid+pType=='15' .OR. pVid+pType == '19'
       SELECT MLabel
       SET RELATION TO UPPER(pSclad+Grup) INTO MStru, UPPER(Grup+NNum) INTO SPR_PART
       SELECT MKart
    ENDIF
    IF GlobalTask != "05" .OR. MemVar->PricePart != 1
      dbSetFilter({|| EMPTY(MKART->NNUM) .OR. !EMPTY(MKART->PARTIA) .OR. (EMPTY(MKART->PARTIA) .AND. MSCHET->XRAN != '1') },"EMPTY(MKART->NNUM) .OR. !EMPTY(MKART->PARTIA) .OR. (EMPTY(MKART->PARTIA) .AND. MSCHET->XRAN != '1')")
    ELSE
      dbSetFilter({|| EMPTY(MKART->PARTIA) },"EMPTY(MKART->PARTIA)")
    ENDIF
  ENDIF
ENDIF
EVAL(bAddSort)

MLabel->(MakeLabelLRefer('RefLOnlyNN',,,,3,,,,,,,.T.))
MLabel->(MakeLabelLRefer('RefGNN',,,2,3))
MLabel->(MakeLabelLRefer('RefNNoffG',,,1,3,"pLastGrup","aIn[1]"))

MKART->(;
 dbSetRelation("MLABEL",{|| UPPER(Grup+Nnum) },"UPPER(Grup+Nnum)"),;
 dbSetRelation("SPR_PART",{|| UPPER(Grup+NNum+Partia) },"UPPER(Grup+NNum+Partia)"),;
 dbSetRelation("MSCHET",{|| UPPER(SCHET) },"UPPER(SCHET)"),;
 dbSetRelation("MGRUP",{|| UPPER(GRUP) },"UPPER(GRUP)");
        )

IF lSkid
  MLABEL->(;
    dbSetRelation("RSKID",{|| UPPER(FIELD->SKID) },"UPPER(SKID)"),;
    dbSetRelation("RSKIDQ",{|| UPPER(FIELD->SKIDQ) },"UPPER(SKIDQ)"),;
    dbSetRelation("MPART",{|| UPPER(FIELD->GRUP+FIELD->NNUM+pSchet+pAgentCode) },"UPPER(FIELD->GRUP+FIELD->NNUM+pSchet+pAgentCode)");
          )
ENDIF

IF Ord_<nBaseOrd.OR.Ord_>nBaseOrd+1   // Обязательно поле RePrice !!!
   Ord_:=nBaseOrd
ENDIF
ORDSETFOCUS(Ord_)

PRIVATE cFind:=SPACE(30)
IniString(cFindMacro,DBFILTER())
IF YesMatReal.AND.m->RSave_[1].AND.!EMPTY(m->FILTER_).AND.__MKART=="MKART"
  ShortSetFilter(m->pBag,m->pOrder,m->pTempIndex, aSort)   
ELSE
  ViewSortSeek(aSort,.F.,,)
ENDIF
GO TOP
@ nTop,nLeft CLEAR TO nBottom,nRight
//ТВ
*@ nTop,nLeft       TO nBottom,nRight DOUBLE
*@ nTop,nLeft+2 SAY IF(lKarto,IF(ALIAS()='MLABEL',' Номенклатура товаров ',' Наличие запасов на складе '+IF(lOstData,'на '+DTOC(dDate)+' ','')),' Прайс-лист ')
*@ nTop+2,nLeft+ 2 SAY 'Наименование:' COLOR cColor
*@ nTop+3,nLeft+ 2 SAY 'Атрибуты....:' COLOR cColor
@ nTop,nLeft+1 SAY "Гр." COLOR 'W+/W'
@ nTop+2,nLeft+1 SAY 'EAN' COLOR 'b/w'
@ nTop+3,nLeft+1 SAY 'Артикул' COLOR 'b/w'
@ nTop+4,nLeft+1 SAY 'Емкость' COLOR 'b/w'
@ nTop+3,nLeft+49 SAY 'R:' COLOR 'n/w'
@ nTop+3,nLeft+60 SAY 'ST:' COLOR 'n/w'
@ nTop+5,nLeft+1 SAY 'Н/номер' COLOR 'g/w*'
@ nTop+5,nLeft+8 SAY '   ' COLOR 'b/w'
@ nTop+5,nLeft+11 SAY '           Наименование           ' COLOR 'g/w*'
@ nTop+5,nLeft+45 SAY '    ' COLOR 'b/w'
@ nTop+5,nLeft+49 SAY 'Ед.Изм.' COLOR 'g/w*'
@ nTop+5,nLeft+56 SAY '   ' COLOR 'b/w'
@ nTop+5,nLeft+59 SAY 'Свободно' COLOR 'g/w*'
@ nTop+5,nLeft+67 SAY '    ' COLOR 'b/w'
@ nTop+5,nLeft+71 SAY 'Заказать' COLOR 'g/w*'

*@ nTop+5,nLeft+1 SAY cHead COLOR 'b/w'
@ nBottom-4,nLeft+49 SAY 'Остаток:' COLOR 'b/w'
@ nBottom-2,nLeft+11 SAY 'У.Е.' COLOR 'n/w'
@ nBottom-2,nLeft+28 SAY 'РУБ' COLOR 'n/w'
@ nBottom,nLeft+11 SAY 'У.Е.' COLOR 'n/w'
@ nBottom,nLeft+28 SAY 'РУБ' COLOR 'n/w'
@ nBottom-1,nLeft+30 SAY '%' COLOR 'n/w'
@ nBottom-3,nLeft+32 SAY '│'
@ nBottom-2,nLeft+32 SAY '│'
@ nBottom-1,nLeft+32 SAY '│'
@ nBottom,nLeft+32 SAY '│'
@ nBottom-3,nLeft+33 SAY 'Итого заказ:' COLOR 'g/w'
@ nBottom-2,nLeft+33 SAY 'Сумма:' COLOR 'b/w'
@ nBottom-1,nLeft+33 SAY 'Короб_ST:' COLOR 'b/w'
@ nBottom,nLeft+33 SAY 'Вес_кг:....' COLOR 'b/w'
@ nBottom-2,nLeft+51 SAY 'У.Е.' COLOR 'n/w'
@ nBottom-2,nLeft+70 SAY 'РУБ' COLOR 'n/w'
@ nBottom-1,nLeft+56 SAY 'Штук:' COLOR 'b/w'
@ nBottom,nLeft+56 SAY 'V_м3:' COLOR 'b/w'
@ nTop-1,nLeft+1 SAY 'F1:Помощь' COLOR 'r/w'
@ nBottom-1,nLeft+1 SAY LEFT('Цена '+LOWER(RCName1_),21) COLOR 'b/w'
*@ nBottom,nLeft+11 SAY '┘:Ввод Tab:Перенос'
@ nBottom,nLeft+76 SAY 'Поз.' COLOR 'b/w'


//ТВ
*IF !YesMatReal.OR.RPrim_
*   @ nTop+2,nLeft+56 SAY 'Примеч:' COLOR cColor
*ENDIF
*
*IF GlobalTask != "05" .OR. IF(pCodeCen=6,MemVar->PricePart != 1.AND.IsAddPricePartia(pNumber)[1],MemVar->PricePart != 1)
*  cHead := "   Н/номер   Партия      Наименование      "+SUBSTR(cHead,44)
*ENDIF
*
*@ nTop+4,nLeft+1 SAY cHead COLOR cColor
*@ nBottom-4,nLeft SAY '╠'+REPLICATE('═',nRight-nLeft-1)+'╣'
*@ nBottom-2,nLeft SAY '╟'+REPLICATE('─',58)
*
*@ nBottom-4,nLeft+45 SAY '╤'
*@ nBottom-3,nLeft+45 SAY '│'
*@ nBottom-2,nLeft+45 SAY '┴'
*@ nBottom-2,nLeft+59 SAY '┐'
*@ nBottom  ,nLeft+59 SAY '╧'
*IF SELECT("NAME_TRE") != 0 .AND. NAME_TRE->(dbGoTop(),!EOF())
*   SAYSCREEN(' Alt-I:Иерархия ',24,20)
*ENDIF
*IF GlobalTask!="TZ".OR.pVid!="0"
*        SAYSCREEN(' Ctrl-F2:Комплекты ',24,2)
*ENDIF
*
*IF YesMatReal
*   @ 20,nLeft+47 SAY ' Остаток: ' COLOR cColor
*ENDIF
*
*
*@ nBottom-3,nLeft+46 SAY IF(GlobalTask = '05','  Итого заказ:','  Итого:') COLOR cColor
*
*
*
*
*#ifdef __HARBOUR__
*IF !IsMsNt()
*@ nBottom-1,nLeft+1 SAY '┘:Ввод Tab:Перенос F3:Сорт F6,Alt-F12:Флтр F7,Alt-F7:Иск │'
*ELSE
*@ nBottom-1,nLeft+1 SAY '┘:Ввод Tab:Перенос F3:Сорт F6,Alt-F6:Флтр F7,Alt-F7:Поиск│'
*ENDIF
*
*
*
*#else
*@ nBottom-1,nLeft+1 SAY '┘:Ввод Tab:Перенос F3:Сорт F6,Alt-F6:Флтр F7,Alt-F7:Поиск│'
*#endif

DispSum0()

pStatus0:=IF(nBaseOrd<3.AND.!(nBaseOrd==1.AND.ALIAS()=="MKART"),' ','')
IF ALIAS()=="TMKART"
   MKART->(ORDSETFOCUS("MKART"))
   MKART->(SetScope())
ENDIF

IF lGrup0
   WHILE .T.
     DO CASE
       CASE ALIAS()='MLABEL'
         SetScope('UPPER(Status+Grup)',UPPER(pStatus0+pLastGrup))
       CASE nBaseOrd=2
         SetScope('UPPER(Status+Sclad+Grup)',UPPER(pStatus0+pSclad+pLastGrup))
       CASE nBaseOrd=4
         SetScope('UPPER(Grup)',UPPER(pLastGrup))
       CASE nBaseOrd=6
         SetScope('UPPER(Sclad+Grup)',UPPER(pSclad+pLastGrup))
       CASE nBaseOrd=1.AND.ALIAS()=="MKART"//Доп. прайс
         SetScope('UPPER(Sclad+Grup)',UPPER(pSclad+pLastGrup))
     ENDCASE
     IF GlobalTask = "05"
        SetPriceFilter()
     ENDIF
     IF ORDNAME() = 'MY_FILTER' .AND. (ScopeMacro() # '.T.'.OR.ALIAS()='TMKART' ) .AND.(TYPE('RSave_')#'A'.OR. m->RSave_[1]).AND."MKART"$__MKART .AND. (dbGoTOP(),EOF().OR.ALIAS()='TMKART' )
         m->pBag:=ORDBAGNAME()
         m->pOrder:=ORDSETFOCUS() //ORDNUMBER()
         m->Filter_ := ORDFOR()
         m->pTempIndex:=MyCloseFilter(30,0)
         MySetFilter(m->Filter_,,,,'без фильтра индекса')
         m->pBag:=ORDBAGNAME()
         m->pOrder:=ORDSETFOCUS() //ORDNUMBER()
     ENDIF
      m->nIndPrefer:=ORDName()
      m->nIndPrefer:= SaveVar("nIndPrefer","ИНД.PREFER"+GlobalTask+ALIAS()+IF(GlobalTask='TZ'.AND.TYPE('pVid')='C' ,pVid,''),IDENT_USER)
     IF !'MY_' $ m->nIndPrefer .AND. !EMPTY(m->nIndPrefer)
        ORDSETFOCUS(m->nIndPrefer)
     ENDIF
      IF TYPE(itWork_B_Code)='L'.AND. iWork_B_Code .AND. !EMPTY(m->nOrdBC)
         QuickBC(1,1,0,m->nOrdBC,'r/w*',,m->nPrefBC,IF(TYPE('bPreSeek')='B',m->bPreSeek,NIL))
      ENDIF

     GO TOP
     Qbrowse(nTop+6,nLeft+1,nBottom-5,nRight-1,aBlockCols,COL_REFER,{||CoPrice(NIL,dDate,bKol,lPlus)},bColor,,bColor1,,aHotKey,,bSayHead,bKeyHead)

         m->nIndPrefer:=ORDName()
         SaveVar("nIndPrefer","ИНД.PREFER"+GlobalTask+ALIAS()+IF(GlobalTask='TZ'.AND.TYPE('pVid')='C' ,pVid,''),IDENT_USER,,,.T.)
     IF LASTKEY()=K_TAB
       EXIT
     ELSE
       EVAL(bGetGrup)
       IF(lOstData,EVAL(bOstData),NIL)
       EVAL(bAddSort)
     ENDIF
   ENDDO
ELSE
   DO CASE
      CASE ALIAS()='MLABEL'
      SetScope('UPPER(Status)',UPPER(pStatus0));GO TOP
      CASE nBaseOrd=2
      SetScope('UPPER(Status+Sclad)',UPPER(pStatus0+pSclad));GO TOP
      CASE nBaseOrd=6
      SetScope('UPPER(Sclad)',UPPER(pSclad));GO TOP
   ENDCASE
   IF GlobalTask = "05"
     SetPriceFilter()
   ENDIF
   IF YesMatReal.AND.m->RSave_[1].AND.ORDNAME() = "MY_FILTER".AND.ALIAS()=="MKART"
   ELSE
      m->nIndPrefer:=ORDName()
      m->nIndPrefer:= SaveVar("nIndPrefer","ИНД.PREFER"+GlobalTask+ALIAS()+IF(GlobalTask='TZ'.AND.TYPE('pVid')='C' ,pVid,''),IDENT_USER)
      IF !'MY_' $ m->nIndPrefer .AND. !EMPTY(m->nIndPrefer)
         ORDSETFOCUS(m->nIndPrefer)
      ENDIF
   ENDIF

   IF TYPE(itWork_B_Code)='L'.AND. iWork_B_Code .AND. !EMPTY(m->nOrdBC)
      QuickBC(1,1,0,m->nOrdBC,'r/w*',,m->nPrefBC,IF(TYPE('bPreSeek')='B',m->bPreSeek,NIL))
   ENDIF

   GO TOP
   Qbrowse(nTop+6,nLeft+1,nBottom-5,nRight-1,aBlockCols,COL_REFER,;
   {||CoPrice(NIL,dDate,bKol,lPlus)},bColor,,bColor1,,aHotKey,,bSayHead,bKeyHead)
   IF !'MY_' $ ORDNAME() .AND. !EMPTY(ORDNAME())
      m->nIndPrefer:=ORDName()
      SaveVar("nIndPrefer","ИНД.PREFER"+GlobalTask+ALIAS()+IF(GlobalTask='TZ'.AND.TYPE('pVid')='C' ,pVid,''),IDENT_USER,,,.T.)
   ENDIF

ENDIF

IF LASTKEY()!=K_ESC
  AddIns(lSkid)
ENDIF
 REAL_TIME(2)

END SEQUENCE
IF YesMatReal.AND.m->RSave_[1].AND.ORDNAME() = "MY_FILTER".AND.ALIAS()=="MKART"
   m->pBag:=ORDBAGNAME()
   m->pOrder:=ORDSETFOCUS() //ORDNUMBER()
   m->Filter_ := ORDFOR()
   m->pTempIndex:=MyCloseFilter(30,0,'Не удаляя')
ELSE
   MyCloseFilter()
   IF ALIAS()=="MKART"
      Filter_:=''
   ENDIF
ENDIF

IF pVid!="0".AND.SELECT("TMKART")>0
  DeleteMetka()
ENDIF
nWork:=0
aWork:={}
NilNum()
SETCOLOR(cLastColor)
RestSetKey(aSetKey)
RESTSCREEN(,,,,sRest)
WSELECT(aWindow[2,6])
nLastKey:=LASTKEY()
SETLASTKEY(0)

dbCloseBases(aBase)

IF nLastKey!=K_ESC
   IF !(GlobalTask $ '03TZ'.AND.pType='9')
      aWindow[2,7]:RefreshAll()
      InitObj(aWindow[2,7])
      IF GlobalTask!='05'
         IF LEN(aWindow)>2.AND.MCodOp->Status=0
            aWindow[3,7]:cargo[1]:=AddPro({},aWindow[2,7]:cargo[1]) //Обновляем полностью
            IF _LPROV
               DispWindow(aWindow,3,'С возвратом в окно','С полным обновлением')
            ENDIF
         ELSE
            RasSum()
         ENDIF
      ENDIF
   ELSE
      SELECT MDocM
      GO TOP
      WSELECT(aWindow[1,6])
      IF ValType(GetList) = "A" .AND. LEN(GetList) >= 2 .AND. ValType(GetList[2]) = "O"
        m->GetList[2]:display()
      ENDIF
      WSELECT(aWindow[2,6])
   ENDIF
   IF YesMatReal
      DispSum1()
   ELSE
      DispSum()
   ENDIF
ENDIF

SETLASTKEY(nLastKey)
HELP_CODE:=cHelp_Code
//ТВ
*RETURN (2)
WSELECT(nWin)
DISPSUM1()
RETURN .F.

#7:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 14:58
    —
Часть 3
Code:
STATIC FUNCTION StrEd(nKol,lNul,nLen,cEd)
//----------------------------------------------------------------------------//
LOCAL nKol1
IF(cEd = NIL,cEd := IF(nWork != 0,aWork[nWork,2],RetEd()),NIL)
nLen:=IF(nLen==NIL,13,nLen)
aEd:=IniEd(,,,,@nEd)
IF (nEd:=ASCAN(aEd,{|x|UPPER(x[1])==UPPER(cEd)})) = 0
   IF lNul==NIL
     RETURN StrS(nKol,nLen,iMGRUP->Kol_)
*     RETURN StrS(nKol,nLen,0)
   ELSE
     RETURN Str(nKol,nLen,iMGRUP->Kol_)
   ENDIF
ENDIF
PRIVATE Q,pFor
pFor:=aEd[nEd,3]
m->Q:=1
m->R:=IF(nWork = 0,RetEdR(),aWork[nWork,20])
nKol1:=1
IF !EMPTY(pFor).AND.TYPE(pFor)='N'
   nKol1:=&pFor
ENDIF
IF lNul==NIL
   RETURN StrS(Div(nKol,nKol1),nLen,IF(UPPER(aEd[nEd,1]) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))
*   RETURN StrS(Div(nKol,nKol1),13,IF(UPPER(aEd[nEd,1]) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))
*   RETURN StrS(Div(nKol,nKol1),nLen,0)
ENDIF
*RETURN Str(Div(nKol,nKol1),13,IF(UPPER(aEd[nEd,1]) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))
RETURN Str(Div(nKol,nKol1),nLen,IF(UPPER(aEd[nEd,1]) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))

STATIC FUNCTION IsVisiablePos(nKolTek,nKolRes,lFromReal)
//--------------------------------------------------------------------------
//Фактически фор условие для показа строки картотеки по Shift,Ctrl+F4
LOCAL lRet:= (ROUND(RetKolEd(nKolTek),ACCUR_ED) > 0).OR.;
             (ROUND(nKolTek,MGRUP->KOL_) > 0)  //Если не Real
             //.OR. Чтоб показать кол-во даже если оно в доп.ед=0, а в основных не 0
IF !EMPTY(lFromReal).AND.TYPE('RTMC_')=='N'  //Только для заказов!
   IF m->RTMC_== 0      //Все товары вкл. в прайс
      lRet:= .T.
   ELSEIF m->RTMC_== 1  //Только имеющиеся на складе
      lRet:= (ROUND(RetKolEd(nKolTek),ACCUR_ED) > 0).OR.;
             (ROUND(nKolTek,MGRUP->KOL_) > 0)
   ELSEIF m->RTMC_== 2  //Свободные для заказа
      lRet:= (ROUND(RetKolEd(nKolTek+IF(m->RLimit_,MKART->KolLim,0)),ACCUR_ED) > 0).OR.;
             (ROUND(nKolTek+IF(m->RLimit_,MKART->KolLim,0),MGRUP->KOL_) > 0)
   ENDIF
ENDIF
RETURN lRet

STATIC FUNCTION NilNum()
SETKEY(ASC('0'),NIL)
SETKEY(ASC('1'),NIL)
SETKEY(ASC('2'),NIL)
SETKEY(ASC('3'),NIL)
SETKEY(ASC('4'),NIL)
SETKEY(ASC('5'),NIL)
SETKEY(ASC('6'),NIL)
SETKEY(ASC('7'),NIL)
SETKEY(ASC('8'),NIL)
SETKEY(ASC('9'),NIL)
RETURN(NIL)

STATIC FUNCTION GetaSort()
******************
MEMVAR nBaseOrd, aSort, lOstData

  IF lGrup0 .AND. !EMPTY(pLastGrup)
     aSort:={;
      {'- ном.номерам         ','Ном.номер?:','NNum','TRIM(UPPER(pStatus0+pSclad+pLastGrup+aIn[1]))','@K',,'RefNNoffG',nBaseOrd},;
      {'- наименованиям       ','Наименование?:','Space(10)','TRIM(UPPER(pStatus0+pSclad+pLastGrup+aIn[1]))','@K',,,nBaseOrd+IF(nBaseOrd==1.AND.ALIAS()=="MKART",4,1)};
            }
  ELSE
     aSort:={;
      {'- группам,ном.номерам          ',{'Код группы?:','Ном. номер?: '},{'Grup','NNum'},'TRIM(UPPER(Get_Index()+aIn[1]+aIn[2]))',{'@K','@K'},{"VGRight()",NIL},{IF(YesMatReal,'MGrup','RefG'),'RefGNN'},nBaseOrd},;
      {'- группам,наименованиям        ',{'Код группы?: ','Наименование?:'},{'Grup','SPACE(10)'},'TRIM(UPPER(Get_Index()+aIn[1]+aIn[2]))',{'@K','@K'},{"VGRight()",NIL},{IF(YesMatReal,'MGrup','RefG'),NIL},nBaseOrd+IF(nBaseOrd==1.AND.ALIAS()=="MKART",4,1)};
            }
  ENDIF
  IF !EMPTY(GetFIFOLIFO())
     IF lGrup0 .AND. !EMPTY(pLastGrup)
         AADD(aSort,{'- ном.номерам ('+GetFIFOLIFO('наименование')+')   ','Ном.номер?:','NNum','TRIM(UPPER(pStatus0+pSclad+pLastGrup+aIn[1]))','@K',,'RefNNoffG',ORDNAME(nBaseOrd)+GetFIFOLIFO()})
         AADD(aSort,{'- наименованиям ('+GetFIFOLIFO('наименование')+') ','Наименование?:','Space(10)','TRIM(UPPER(pStatus0+pSclad+pLastGrup+aIn[1]))','@K',,,ORDNAME(nBaseOrd+IF(nBaseOrd==1.AND.ALIAS()=="MKART",4,1))+GetFIFOLIFO()})
     ELSE
         AADD(aSort,{'- группам,ном.номерам ('+GetFIFOLIFO('наименование')+')    ',{'Код группы?:','Ном. номер?: '},{'Grup','NNum'},'TRIM(UPPER(Get_Index()+aIn[1]+aIn[2]))',{'@K','@K'},{"VGRight()",NIL},{IF(YesMatReal,'MGrup','RefG'),'RefGNN'},ORDNAME(nBaseOrd)+GetFIFOLIFO()})
         AADD(aSort,{'- группам,наименованиям ('+GetFIFOLIFO('наименование')+')  ',{'Код группы?: ','Наименование?:'},{'Grup','SPACE(10)'},'TRIM(UPPER(Get_Index()+aIn[1]+aIn[2]))',{'@K','@K'},{"VGRight()",NIL},{IF(YesMatReal,'MGrup','RefG'),NIL},ORDNAME(nBaseOrd+IF(nBaseOrd==1.AND.ALIAS()=="MKART",4,1))+GetFIFOLIFO()})
     ENDIF
  ENDIF
  iIF(lGrup0 .AND. !EMPTY(pLastGrup),(m->nOrdBC := aSort[1,8],;
                                      m->nPrefBC := 'UPPER(pStatus0+pSclad+pLastGrup)',;
                                      m->bPreSeek:={|x|ORDSETFOCUS(nBaseOrd),UPPER(m->pStatus0+pSclad)+SeekBCInKart(x,.T.,.T.)}),NIL)
  IF lOstData
     nBaseOrd := 1
     aSort[1,8] := "TAG_METKA"
     aSort[2,8] := "TAG_LETKA"
     IF !EMPTY(GetFIFOLIFO())
        aSort[3,8] := "TAG_TETKA"
        aSort[4,8] := "TAG_VETKA"
     ENDIF
     IF !(lGrup0.AND. !EMPTY(pLastGrup))
        AADD(aSort,{'- наименованиям ','Наименование?:','Space(10)','TRIM(UPPER(" "+pSclad+aIn[1]))','@K',,,})
        aTAIL(aSort)[8] := "TAG_SETKA"
     ENDIF
  ENDIF

  IF iTypeGen.AND.m->lYesBarCode .AND. GlobalTask # 'TZ' .AND. !(lGrup0.AND.!EMPTY(pLastGrup))
     IF iLabelNum=4
        aadd(aSort,{'- по штрих-кодам                ','Штрих-код?:  ','SPACE(13)','UPPER(" "+pSclad+aIn[1])','@K',NIL,'RefLOnlyNN',IF(ALIAS()='MKART',IF(EMPTY(pSclad),'MKART_BCNS','MKART_BC'),IF(ALIAS()='MLABEL','TAG_NNUM','TAG_RETKA'))})
        m->nOrdBC := aTAIL(aSort)[8]
        m->nPrefBC := 'UPPER(" "+pSclad)'
     ELSE
         m->nPrefBC := ''
        IF  ALIAS() # 'MLABEL'
            m->bPreSeek:={|x|ORDSETFOCUS(IF(ALIAS()='MKART',IF(EMPTY(pSclad),4,2),'TAG_METKA')),SeekBCInKart(x,EMPTY(pSclad))}
            m->nOrdBC :=IF(ALIAS()='MKART',IF(EMPTY(pSclad),4,2),'TAG_METKA')
           aadd(aSort,{'- штрих-кодам                   ','Штрих-код?: ','SPACE(13)','SeekBCInKart(aIn[1],EMPTY(pSclad))','@K XXXXXXXXXXXXX',NIL,,IF(ALIAS()='MKART',IF(EMPTY(pSclad),4,2),'TAG_METKA'),,,,,.F.})
        ELSE
            m->nOrdBC :=GetTagBCode()
           aadd(aSort,{'- штрих-кодам                   ','Штрих-код?: ',GetFieldBCode(),'SPACE(1)+UPPER(aIn[1])','@K XXXXXXXXXXXXX',NIL,,GetTagBCode()})
        ENDIF
     ENDIF
     IF ALIAS()#'TMKART' .AND. !EMPTY(pSclad) .AND. ASCAN(aSort,{|x| x[1] = '- наименованиям ' }) = 0
        AADD(aSort,{'- наименованиям ','Наименование?:','Space(10)','TRIM(UPPER(" "+pSclad+aIn[1]))','@K',,,IF(ALIAS()='MKART','MKART_SA',IF(ALIAS()='MLABEL','MLABEL_T','TAG_SETKA'))})
     ENDIF
 ELSE
    IF iTypeGen.AND.m->lYesBarCode.AND.GlobalTask=="TZ" .AND. !(lGrup0.AND.!EMPTY(pLastGrup))
       AADD(aSort,{'- штрих-кодам                   ','Штрих-код : ',GetFieldBCode(),;
                   'UPPER(" "+aIn[1])','@K XXXXXXXXXXXXX',NIL,;
                   IF(iLabelNum=4,"RefLOnlyNN",NIL),GetTagBCode(),,"MLABEL",;
                   IF(lOstData,"TAG_METKA","MKART_P3"),;
                   "UPPER("+IF(lOstData,"' '+","")+"pSclad+MLABEL->Grup+MLABEL->NNUM)",.F.})
       m->nOrdBC :=IF(EMPTY(pSclad),'MKART_BCNS','MKART_BC')
       m->nPrefBC :='UPPER(" "+pSclad)'
       m->bPreSeek:={|x|ORDSETFOCUS(IF(lOstData,"TAG_METKA","MKART_P3")),SeekBCInKart(x,!lOstData,EMPTY(pSclad))}
    ELSE
       iIF(iTypeGen.AND.m->lYesBarCode.AND.GlobalTask=="TZ",(m->nOrdBC :=IF(EMPTY(pSclad),'MKART_BCNS','MKART_BC') , m->nPrefBC := 'UPPER(" "+pSclad)'),)
    ENDIF
 ENDIF

RETURN .T.

STATIC FUNCTION PrintCHeck()
  LOCAL nWi:=WSELECT(),i
  LOCAL aSetKey:=SaveSetKey()
  LOCAL nArea:=SELECT()
  LOCAL nOrd:=MLabel->(ORDSETFOCUS("MLABEL"))
  LOCAL nRec:=MLabel->(RECNO())
  LOCAL nOrd1:=MGrup->(ORDSETFOCUS("MGRUP"))
  LOCAL nRec1:=MGrup->(RECNO())
  LOCAL cHead:='ОТЧЕТ'+IF(pVid='0',' ПО ОСТАТКАМ',IF(pVid='1',' О ВОЗВРАТАХ',' О ПРОДАЖАХ'))
  LOCAL aHeads:={},aHeader:={},aFields:={},cFormat,aGroup:={}
  LOCAL cText:=IF(pVid='0','Остаток',IF(pVid='2','Продано','Возврат')),lc:=0
  LOCAL cFile:=TEMPFILE(PATH_TMP)
  LOCAL cTemp:=TEMPFILE(PATH_TMP,"DBF")
  LOCAL cTempI:=TEMPFILE(PATH_TMP,"CDX")
  LOCAL nSumma:=0
  LOCAL aStru:={;
{'Grup','C',5,0},;
{'NNum','C',13,0},;
{'Ed','C',5,0},;
{'Kol','N',19,4},;
{'Cena','N',19,4},;
{'Sum','N',19,CURR_MAIN+1};
}
LOCAL bFooter := {|| ;
Str2File(" "),;
Str2File("Итого: "+NumToRus(nSumma)),;
Str2File(" "),;
Str2File(" "),;
Str2File("       Подпись _____________________________");
               }


IF pVid="2"
   cHead:="ТОВАРНЫЙ ЧЕК"
ENDIF


SELECT 0
DBCREATE(cTemp,aStru)
CLOSE
NetUseExc('Temp',cTemp)
INDEX ON UPPER(FIELD->GRUP+FIELD->NNUM) TAG TAG_1 TO (cTempi)
SET RELATION TO UPPER(Grup+NNum) INTO MLabel,UPPER(Grup) INTO MGrup
FOR i:=1 TO LEN(aWork)
  if aWork[i,3]<>0 //azat DT 9843
    IF !DBSEEK(UPPER(SUBSTR(aWork[i,1],1,5)+SUBSTR(aWork[i,1],6,13)))
       AddRec()
       REPLACE Grup WITH SUBSTR(aWork[i,1],1,5),;
       NNum WITH SUBSTR(aWork[i,1],6,13)
    ENDIF
    REPLACE Ed WITH aWork[i,2],;
    Kol WITH Kol+aWork[i,3],;
    Cena WITH aWork[i,4],;
    Sum WITH Sum+aWork[i,3]*aWork[i,4]
    nSumma+=aWork[i,3]*aWork[i,4]
  endif
NEXT


WSELECT(0)
dbGoTop()
AADD(aHeader,' '+m->LBL_NAME)
AADD(aHeader,SPACE(1))
AADD(aHeads,"┌─────┬─────────────┬───────────────────────────────────┬─────┬─────────────────────────────────────────────┐")
AADD(aHeads,"│Груп-│    Номен-   │           Наименование            │Един.│"+PADC(cText+", "+m->GlobalValuta,45)+      "│")
AADD(aHeads,"│ па  │  клатурный  │  товарно-материальных ценностей   │измер├─────────────┬─────────────┬─────────────────┤")
AADD(aHeads,"│     │    номер    │                                   │     │             │             │   Стоимость в   │")
AADD(aHeads,"│     │             │                                   │     │ Количество  │    Цена     │ отпускных ценах │")
AADD(aHeads,"├─────┼─────────────┼───────────────────────────────────┼─────┼─────────────┼─────────────┼─────────────────┤")
AADD(aHeads,"│ 01  │     02      │                 03                │ 04  │      05     │      06     │       07        │")
AADD(aHeads,"├─────┼─────────────┼───────────────────────────────────┼─────┼─────────────┼─────────────┼─────────────────┤")
cFormat:=   "│XXXXX│XXXXXXXXXXXXX│XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX│XXXXX│QQQQQQQQQQQQQ│RRRRRRRRRRRRR│RRRRRRRRRRRRRRRRR│"
AADD(aHeader,PADC(cHead+' N '+ALLTRIM(pNumDoc),LEN(cFormat)))
AADD(aHeader,PADC('ПО СКЛАДУ (СЕКЦИИ) '+ALLTRIM(pSclad),LEN(cFormat)))
IF EMPTY(pDate1).OR.pDate==pDate1
  AADD(aHeader,PADC('за '+DTOC(pDate),LEN(cFormat)))
ELSE
  AADD(aHeader,PADC('за период с '+DTOC(pDate)+' по '+DTOC(pDate1),LEN(cFormat)))
ENDIF
AADD(aHeader,'')

AADD(aFields,'Grup')
AADD(aFields,'NNum')
AADD(aFields,'MLabel->Name')
AADD(aFields,'Ed')
AADD(aFields,'Kol')
AADD(aFields,'Cena')
AADD(aFields,'Sum')
AADD(aGroup,{"UPPER(Grup)",{||TRIM(MGrup->Name)},"Итого по группе",5,7})
IF (lc:=TotRep(aHeader,aFields,aHeads,cFormat,{5,7},aGroup,bFooter,;
        cFile,.F.,.T.,.T.,0.9*LASTREC())) > 0
  View(cFile,lc,LEN(cFormat))
ENDIF
CLOSE
MLabel->(ORDSETFOCUS(nOrd))
MLabel->(dbGoTo(nRec))
MGrup->(ORDSETFOCUS(nOrd1))
MGrup->(dbGoTo(nRec1))
WSELECT(nWi)
RestSetKey(aSetKey)
FERASE(cTemp)
FERASE(cTempI)
FERASE(cFile)
SELECT(nArea)

RETURN (1)

                     STATIC FUNCTION SpraEd(lPlus)
//--------------------------------------------------------------------------//
LOCAL nKol00:=IF(nWork==0,0,aWork[nWork,3]),sRest
LOCAL nTop:=6,nLeft:=3,i,nKol1,nKol11, nRight, nAdd := 0
LOCAL nBottom, lWork
LOCAL cDisp := ""

IF LEN(aEd)<1
   RETURN(1)
ENDIF
lWork := nWork !=0 .AND. UPPER(aEd[1,1])!=UPPER(aWork[nWork,2])
nBottom:=nTop+8+IF(RetNumEd() != 1 .OR. lWork,2,1)+3
nRight:=nLeft+72

PRIVATE Q,R,pFor
sRest:=SAVESCREEN()
ShadowBox(' Справка ',nTop,nLeft,nBottom+IF((ALIAS() = "MKART" .OR. ALIAS() = "TMKART") .AND. SPR_PART->(!EOF()),3,0),nRight,COL_SHEADR)
SAYSCREEN(CENTER(TRIM(MLabel->Name)+IF((ALIAS() = "MKART" .OR. ALIAS() = "TMKART") .AND. SPR_PART->(!EOF()) .AND. !EMPTY(SPR_PART->Name)," ("+TRIM(SPR_PART->Name)+")",""),72),nTop+1,nLeft+1)

IF TYPE("Sort_") = "A"
  IF !EMPTY(MLABEL->SORT)
    cDisp := ALLTRIM(Sort_[1])+":"+ALLTRIM(MLABEL->SORT)
  ENDIF
  IF !EMPTY(MLABEL->RAZMER)
    cDisp := ALLTRIM(cDisp+ " "+ALLTRIM(Razmer_[1])+":"+ALLTRIM(MLABEL->RAZMER))
  ENDIF
  SAYSCREEN(cDisp,nTop+2,nLeft+3)
  cDisp := ""
  IF !EMPTY(MLABEL->MARKA)
    cDisp := ALLTRIM(Marka_[1])+":"+ALLTRIM(MLABEL->MARKA)
  ENDIF
  IF !EMPTY(MLABEL->PROFIL)
    cDisp := ALLTRIM(cDisp+" "+ALLTRIM(Profil_[1])+":"+ALLTRIM(MLABEL->PROFIL))
  ENDIF
  SAYSCREEN(cDisp,nTop+3,nLeft+3)
ENDIF
nTop++
cDisp := ""
IF TYPE("Koef_") = "A"  .AND. MemVar->Koef_[2]
  cDisp := ALLTRIM(MemVar->Koef_[1])+":"+STR(MLabel->Koef,13,3)
ENDIF
IF TYPE("Koef1_") = "A"  .AND. MemVar->Koef1_[2]
  cDisp := ALLTRIM(cDisp+" "+MemVar->Koef1_[1])+":"+STR(MLabel->Koef1,13,3)
ENDIF
SAYSCREEN(cDisp,nTop+3,nLeft+3)
nTop += 4
IF (ALIAS() = "MKART" .OR. ALIAS() = "TMKART") .AND. SPR_PART->(!EOF())
   SAYSCREEN('Поставщик: '+ALLTRIM(SPR_PART->Ag_Name),nTop,nLeft+3)
   SAYSCREEN('Поступило: '+DTOC(SPR_PART->Data_P),nTop,nLeft+47); nTop++
   IF TYPE("Sertif_") = "A"  .AND. MemVar->Sertif_[2]
     cDisp := ALLTRIM(ALLTRIM(MemVar->Sertif_[1])+":"+Spr_Part->Sertificat)
   ENDIF
   SAYSCREEN(cDisp,nTop,nLeft+3)
   SAYSCREEN('Годно до '+DTOC(SPR_PART->Data_End),nTop,nLeft+47); nTop++
   IF TYPE("Z_Name_") = "A"  .AND. MemVar->Z_Name_[2]
     cDisp := ALLTRIM(ALLTRIM(MemVar->Z_Name_[1])+":"+Spr_Part->Z_Name)
   ENDIF
   SAYSCREEN(cDisp,nTop,nLeft+3)
   SAYSCREEN('Изготовлено '+DTOC(SPR_PART->Data_Iz),nTop,nLeft+47); nTop++
   SAYSCREEN('Страна:'+SPR_PART->Country,nTop,nLeft+3)
   SAYSCREEN('Номер ГТД:'+SPR_PART->GTD,nTop,nLeft+37); nTop++
   IF !EMPTY(m->Attr1_) .OR. !EMPTY(m->Attr2_)
      IF !EMPTY(m->Attr1_)
         SAYSCREEN(PADR(ALLTRIM(m->Attr1_)+':'+SPR_PART->ATTRIB1,33),nTop,nLeft+3)
      ENDIF
      IF !EMPTY(m->Attr2_)
         SAYSCREEN(PADR(ALLTRIM(m->Attr2_)+':'+SPR_PART->ATTRIB2,34),nTop,nLeft+37)
      ENDIF
      nTop++
   ENDIF

ENDIF
SAYSCREEN(' ─────┬───────────────┬───────────────────────────────┬───────────────',nTop,nLeft+1)
SAYSCREEN('  Ед. │К-во осн.единиц│'+PADC(IF(EMPTY(lPlus),'Цена отпуска за единицу','Цена за единицу'),31)+'│   Количество  ',nTop+1,nLeft+1)
SAYSCREEN(' измер│в ед.измерения │      '+GlobalValuta+'      │      '+IF(LNEWCENA,IsAddPricePartia(pNumber)[2],MLabel->CodeVal)+'      │'+PADC(IF(EMPTY(lPlus),'   к отпуску   ',''),15),nTop+2,nLeft+1)
SAYSCREEN(' ─────┼───────────────┼───────────────┼───────────────┼───────────────',nTop+3,nLeft+1)
FOR i:=1 TO LEN(aEd)
  IF IF(!lWork,RetNumEd() = i,UPPER(aEd[i,1])=UPPER(aWork[nWork,2])) .OR. i = 1
    nAdd++
    pFor:=aEd[i,3]
    m->Q:=1
    IF nWork>0.AND.UPPER(aEd[i,1])==UPPER(aWork[nWork,2])
      m->R:=aWork[nWork,20]
    ELSE
      m->R:=aEd[i,4]
    ENDIF
    nKol1:=1
    IF !EMPTY(pFor).AND.TYPE(pFor)='N'
      nKol1:=&pFor
    ENDIF
    nKol11:=Div(nKol00,nKol1)
    SAYSCREEN(' '+aEd[i,1]+'│'+StrS(nKol1,15,4)+'│'+;
    STR(IF(LNEWCENA,RealAddPrice(pNumber,MKart->(Grup+NNum+IF(IsAddPricePartia(pNumber)[1],Partia,"")),,MKart->Sclad,,aEd[i,1],aEd[i,4]),GetCena('O',nKol00,,i,,,,,,,nWork)),15,3)+'│'+;
    STR(IF(LNEWCENA,RealAddPrice(pNumber,MKart->(Grup+NNum+IF(IsAddPricePartia(pNumber)[1],Partia,"")),.F.,MKart->Sclad,,aEd[i,1],aEd[i,4]),GetCena('V',nKol00,,i,,,,,,,nWork)),15,3)+'│'+;
    StrS(nKol11,15,IF(i==1,MGRUP->Kol_,MGRUP->Kol1_)),nTop+3+nAdd,nLeft+1)
  ENDIF
NEXT
INKEY(0)
RESTSCREEN(,,,,sRest)
RETURN(1)

#8:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 15:00
    —
Часть 4
Code:
STATIC FUNCTION DispSum0()
LOCAL nSum:=0,nVSum:=0,nKolPos:=0,nKol,nWork0:=nWork,nKolAll:=0,nStAll:=0,nKol2
LOCAL nVall:=0,nWeightAll:=0
LOCAL cCodeVal:=IF(EMPTY(nWork),GlobalValuta,aWork[1,9])
LOCAL nRecL:=MLabel->(RECNO())
LOCAL nRecG:=MLabel->(RECNO())
AEVAL(aWork,{|x,j|nWork:=j,;
MLabel->(DBSEEK(UPPER(LEFT(x[1],18)))),;
MGrup->(DBSEEK(UPPER(LEFT(x[1],5)))),;
nSum+=x[4]*(nKol:=ValEd(x[3])),;
nVSum+=x[8]*nKol,;
nKolAll+=nKol,;
nKol2:=IF(Mlabel->KOEF>0,ROUND(nKol/Mlabel->KOEF,1),0),;
nStAll+=nKol2,;
nVall+=nKol2*MLABEL->KOEF1,;
nWeightAll+=nKol2*mlabel->ndattr1,;
nKolPos+=IF(!EMPTY(x[3]),1,0),;
IF(!EMPTY(cCodeVal).AND.UPPER(cCodeVal)!=UPPER(x[9]),cCodeVal:=SPACE(3),NIL);
})
//ТВ
*@ 21,60 SAY StrS(nKolPos,15,0)+' '+IF(EMPTY(nKolPos),SPACE(3),'поз')  COLOR 'n/w'
*@ 22,60 SAY StrS(nSum,15,CURR_MAIN)+' '+IF(EMPTY(nSum),SPACE(3),GlobalValuta) COLOR 'n/w'
@ 24,71 SAY StrS(nKolPos,4,0)+' '+IF(EMPTY(nKolPos),SPACE(3),'поз')  COLOR 'b/w'
@ 22,39 SAY IF(nSum>0,StrS(nSum,11,CURR_MAIN),SPACE(11)) COLOR 'n*/w'
@ 23,62 SAY IF(nKolAll>0,StrS(nKolAll,7,0),SPACE(7)) COLOR 'n/w'
@ 23,43 SAY IF(nStAll>0,StrS(nStAll,7,1),SPACE(7)) COLOR 'n/w'
@ 24,64 SAY IF(nVAll>0,StrS(nVAll,5,1),SPACE(5)) COLOR 'n/w'
@ 24,43 SAY IF(nWeightAll>0,StrS(nWeightAll,7,0),SPACE(7)) COLOR 'n/w'
IF (YesMatReal.AND.!RValuta_).OR.EMPTY(cCodeVal).OR.UPPER(cCodeVal)==UPPER(GlobalValuta)
//TB
*   @ 23,60 CLEAR TO 23,78
@ 22,56 SAY SPACE(13) COLOR 'n*/w'
ELSE
   Valuta->(DBSEEK(UPPER(cCodeVal)))
//ТВ
*   @ 23,60 SAY StrS(nVSum,15,Valuta->Accuracy)+' '+IF(EMPTY(NVSum),SPACE(3),cCodeVal) COLOR 'n/w'
@ 22,56 SAY StrS(nVSum,13,Valuta->Accuracy) COLOR 'n*/w'
ENDIF
nWork:=nWork0
MLabel->(DBGOTO(nRecL))
MGrup->(DBGOTO(nRecG))
aEd:=IniEd(,,,,@nEd)
RETURN(NIL)

STATIC FUNCTION ChangeEd(nAdd)
//----------------------------------------------------------------------------//
LOCAL n, nKol1, nSum1, nKolOld
Local x
IF LEN(aEd)<=1
   RETURN(1)
ENDIF
IF (nWork==0)
   AADD(aWork,{UPPER(Grup+NNum+Partia+Sclad),X_ED,0,0,0,0,' ',0,MLabel->CodeVal,;
         MLabel->CenaVal,;
         __RLABEL->OCena1,__RLABEL->OCena2,__RLABEL->OCena3,__RLABEL->OCena4,;
         __RLABEL->VCena1,__RLABEL->VCena2,__RLABEL->VCena3,__RLABEL->VCena4,0,X_R,0,0,Partia,X_ED,X_R,0,0,-1,;
         Space(6),0,0,CTOD(''),SPACE(10),SPACE(10),SPACE(6),SPACE(6),__CENAN,0,0;   // victor спецодежда
         })
   nWork:=LEN(aWork)
   nEd:=RetNumEd()
   aEd := IniEd(,,,,@nEd)
   InsOldKol(nAdd,aWork,nWork)
ENDIF
n:=nEd
n++
IF n>LEN(aEd)
   n:=1
ENDIF

IF 'R'$aEd[n,3]
  InputR(n,.T.)
ENDIF

SetCenaX(aWork,nWork,aWork[nWork,3],aEd[n,1],aEd[n,4])

nEd := n

RETURN(3)

STATIC FUNCTION PriceFilter(cFltr0,cScopeMacro)
STATIC aIn0
LOCAL nMaxFiSizF := 34
LOCAL nBottom := QScroll()[3], aBase := {'MSclad'}
LOCAL nTopF,nLeftF,nBottomF,nRightF,aHeadsF,aRefF,aPictF,aWhenF,aValidF,nUniMode,bScrInit,bPost,aGetBlockF,bScrPost,bPreGet,bPostGet,nTag
Local nHeadsLenView,nLen,i


IF GLOBALTASK = "05"
    PUBLIC pVid := "2"
ENDIF

GetHeads(@aHeadsF,,@aPictF,@aWhenF,@aValidF,"ФИЛЬТР В ПРАЙСЕ",@aRefF,@aGetBlockF,@bPreGet,@bPostGet,@bScrInit,@bScrPost,,,,,)
AADD(aHeadsF,{PADR('EAN',30,'.')+':','MLabel->COD_OKDP','0','2'})


IF GLOBALTASK = "05"
    ERASE pVid
ENDIF



MGrup->(MakeGrupRefer('PGrup','aIn[1]',3))
MLABEL->(MakeLabelLRefer('PLabel',,,,3))
SPR_PART->(MakePartiaRef('PPartia','aIn[3]','aIn[1]','aIn[2]',3))
MLABEL->(dbOpenBases(aBase,,,,.T.))
MSCLAD->(MakeScladRefer('PSclad','aIn['+NTOC(ASCAN(aRefF,{|x| ValType(x) = 'C' .AND. UPPER(x) == 'PSCLAD' }))+']',2))


nHeadsLenView := 0
nLen := LEN(aHeadsF)
FOR i := 1 to nLen
IF !(LEN(aHeadsF[i]) >= 8.AND.aHeadsF[i][8] = 0)
    nHeadsLenView := nHeadsLenView + 1 // если элемент выводится, то вперед.
ENDIF
NEXT i
nTopF := nBottom - nHeadsLenView - 2
nLeftF:=(MAXCOL()-LEN(aHeadsF[1,1])-nMaxFiSizF-4)/2
nBottomF:=nBottom-1
nRightF := nLeftF+LEN(aHeadsF[1,1])+nMaxFiSizF+3

QInput(nTopF,nLeftF,nBottomF,nRightF,aHeadsF,0,aRefF,aPictF,aWhenF,aValidF,nUniMode,bScrInit,bPost,cFltr0,"ФИЛЬТР",aGetBlockF,bScrPost,cScopeMacro,bPreGet,bPostGet,nTag)

ClearRefer('PSclad')
ClearRefer('PGrup')
ClearRefer('PLabel')
ClearRefer('PPartia')
MLABEL->(dbCloseBases(aBase))

RETURN(2)//3
                       STATIC FUNCTION RePrice(nAdd)
//--------------------------------------------------------------------------//
LOCAL i,j,nSum:=0,nArea:=SELECT()
LOCAL nRec:=RECNO(),GetList:={}
LOCAL aMat:=aWindow[2,7]:cargo[1],cMat,cKey, aBase := {}
LOCAL nKol,nKol1:=0,nKol0           // ┌ кол-во отгружено
LOCAL bSeek:= {|cKey,cMat|;
                IF(ALIAS()=="TMKART",MKART->(DbSeek(UPPER(cKey+SUBSTR(cMat,Q_SCLAD,6)))).OR.MKART->(DBSEEK(UPPER(cKey))),),;
                MGRUP->(dbSeek(UPPER(SUBSTR(cMat,Q_GRUP,L_GRUP)))),;
                MLABEL->(dbSeek(UPPER(SUBSTR(cMat,Q_GRUP,L_GRUP)+SUBSTR(cMat,Q_NNUM,L_NNUM))));
              }


LOCAL bAddPrice := {|j,cPartia,nKol,nKol1,lxKol,nPos|;
      IF(;
         !DBSEEK(UPPER(IF((nPos:=AT('STATUS',INDEXKEY()))>0.AND.nPos<8 ,' ','')+(cKey:=SUBSTR(cMat,Q_GRUP,L_GRUP)+SUBSTR(cMat,Q_NNUM,L_NNUM)+cPartia)+SUBSTR(cMat,Q_SCLAD,6))),;
         DBSEEK(UPPER(IF((nPos:=AT('STATUS',INDEXKEY()))>0.AND.nPos<8 ,' ','')+cKey)),;
         NIL;
         ),;
      EVAL(bSeek,cKey,cMat),;
      lxKol := nKol = 0 .OR. ROUND(X_KOL_ED(nKol),IF(UPPER(X_ED) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_)) != 0,;
      nKol0:=IF(RBookM->(DBSEEK(UPPER(IF(YesMatReal.AND.SELECT("MDOC") != 0 .AND. MDOC->(FieldPos("DOPCODE")) != 0 .AND. nAdd = S_LIB_EDIT,MDOC->DOPCODE,pDopCode)+cKey+SUBSTR(cMat,Q_SCLAD,6)))),RBookM->Kol,0),;
      IF( j=0,;
         AADD(aWork,{;
         cKey+IF(EMPTY(Sclad),SUBSTR(cMat,Q_SCLAD,6),Sclad),;
         IF(lxKol,X_ED,iMLABEL->ED),;
         nKol,;
         ValSum(VAL(SUBSTR(cMat,Q_CENAOUT,L_CENA)),IF(lxKol,X_ED,iMLABEL->ED),IF(lxKol,X_R,1)),;
         nKol1,;
         VAL(SUBSTR(cMat,Q_SUM1,L_SUM)),;
         IF(nKol1>=nKol,'1',' '),;
         ValSum(VAL(SUBSTR(cMat,Q_VCENA,15)),IF(lxKol,X_ED,iMLABEL->ED),IF(lxKol,X_R,1)),;
         SUBSTR(cMat,Q_CODEVAL,3),;
         VAL(SUBSTR(cMat,Q_CENAVAL,13)),;
         VAL(SUBSTR(cMat,Q_OCENA1,15)),;
         VAL(SUBSTR(cMat,Q_OCENA2,15)),;
         VAL(SUBSTR(cMat,Q_OCENA3,15)),;
         VAL(SUBSTR(cMat,Q_OCENA4,15)),;
         VAL(SUBSTR(cMat,Q_VCENA1,15)),;
         VAL(SUBSTR(cMat,Q_VCENA2,15)),;
         VAL(SUBSTR(cMat,Q_VCENA3,15)),;
         VAL(SUBSTR(cMat,Q_VCENA4,15)),;
         nKol0,;
         IF(lxKol,X_R,1),;
         VAL(SUBSTR(cMat,Q_KOL10,L_KOLR)),;
         VAL(SUBSTR(cMat,Q_SUM10,15)),;
         SUBSTR(cMat,Q_PARTIA,L_PARTIA),;
         IF(lxKol,X_ED,iMLABEL->ED),;
         IF(lxKol,X_R,1),;
         0,;
         0,;
         -1,;  // заявлено в заказах  2
         VAL(SUBSTR(cMat,Q_KOLR,13));     //29
         }),;
         (;
         aWork[j,3]+=nKol,;
         aWork[j,19]+=nKol0,;
         aWork[j,5]+=nKol1,;
         aWork[j,6]+=VAL(SUBSTR(cMat,Q_SUM1,15)),;
         aWork[j,7]:=IF(nKol1>=nKol,'1',' ');
         );
        );
                   }
aWork:={}
IF pVid='0'
   OpenBase({'OMDocM'},{'MDocM'})
   SetScope('UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)',UPPER(pSclad+pVid+pType+pCodeDoc+pNumDoc))
   GO TOP
   __MKART->(PushData(ORDNAME()))
   __MKART->(ORDSETFOCUS(IF(__MKART=="TMKART","TAG_METKA","MKART_SN")))
   WHILE !EOF()
      nKol:=nKol0:=Kol
      cKey:=Grup+NNum+Partia
      IF __MKART->(dbSeek(UPPER(" "+pSclad+cKey))).AND.Kol!=__MKART->KolTek
        IF (j:=ASCAN(aWork,{|x|UPPER(x[1])==UPPER(cKey+pSclad)}))==0
           AADD(aWork,{cKey+pSclad,Ed1,nKol,;
           Div(SumOutR,KolOut),;
           0,0,'',;
          CenaOut,pCodeVal,pCenaVal,;
          '','',;
          '','',;
          '','',;
          '','',;
          nKol0,FIELD->R,0,0,SPACE(L_PARTIA),Ed1,FIELD->R,0,0,-1,;
          Space(6),0,0,CTOD(''),SPACE(10),SPACE(10),SPACE(6),SPACE(6),__CENAN,0,0;   // victor спецодежда
          })
        ELSE
          aWork[j,3]+=nKol
          aWork[j,LEN(aWork[j])-1]+=nKol0
        ENDIF
      ENDIF
      SKIP
   ENDDO
   __MKART->(ORDSETFOCUS(PopData()))
ELSEIF GlobalTask="TZ".AND.(pVid='2'.OR.pVid='1')
   dbSelectArea("MDocM")
   dbPush()
   SetScope('UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)',UPPER(pSclad+pVid+pType+pCodeDoc+pNumDoc))
   dbGoTop()
   WHILE !EOF()
      nKol:=nKol0:=Kol
      cKey:=Grup+NNum+Partia
      MGRUP->(dbSeek(UPPER(MDOCM->GRUP)))
      MLABEL->(dbSeek(UPPER(MDOCM->GRUP+MDOCM->NNUM)))
      IF (j:=ASCAN(aWork,{|x|UPPER(x[1])==UPPER(cKey+pSclad)}))==0
         AADD(aWork,{cKey+pSclad,RetEd(),nKol,;
         Div(SumOutR,KolOut),;
         0,0,'',;
         CenaOut,pCodeVal,pCenaVal,;
         '','',;
         '','',;
         '','',;
         '','',;
         nKol0,FIELD->R,0,0,SPACE(L_PARTIA),RetEd(),FIELD->R,0,0,-1,;
         Space(6),0,0,CTOD(''),SPACE(10),SPACE(10),SPACE(6),SPACE(6),__CENAN,0,0;   // victor спецодежда
         })
      ELSE
        aWork[j,3]+=nKol
        aWork[j,LEN(aWork[j])-1]+=nKol0
      ENDIF
      dbSkip()
   ENDDO
   dbPop()
ELSEIF LEN(aMat)>0
   IF YesMatReal
      AADD(aBase,'RBOOKM')
   ELSE
     AADD(aBase,'MDOCM')
   ENDIF


   dbOpenBases(aBase)


   IF !YesMatReal
     SELECT MDOCM
     ORDSETFOCUS('MDocM_W')
     SET FILTER TO EMPTY(Input1)
   ELSEIF MemVar->PricePart = 1
     MDOCM->(ORDSETFOCUS('MDocM_Z'))
   ENDIF

   SELECT (nArea)
   FOR i:=1 TO LEN(aMat)
   nKol0:=0
   cMat:=aMat[i]
   IF YesMatReal
      EVAL(bAddPrice,ASCAN(aWork,{|x|UPPER(x[1])==UPPER(SUBSTR(cMat,Q_GRUP,L_GRUP)+SUBSTR(cMat,Q_NNUM,L_NNUM)+SUBSTR(cMat,Q_PARTIA,L_PARTIA)+SUBSTR(cMat,Q_SCLAD,6))}),SUBSTR(cMat,Q_PARTIA,L_PARTIA),VAL(SUBSTR(cMat,Q_KOL,L_KOLR)),VAL(SUBSTR(cMat,Q_KOL1,L_KOLR)))
   ELSE
      //В случае склада
      // x[2]  - Ed1
      // x[3]  - nKol
      // x[4]  - nCenaOutR
      // x[8]  - nCenaOut
      // x[9]  - CodeVal - валюта прайса
      // x[19] - старое кол-во
      // x[24] - старая единица измерения
      // x[25] - старый коэффициент R
      // x[26] - KOL1 - списание
      // x[27] - KOL2 - возврат
      // x[28] - ссылка номеров на строки счетов-фактур
      // x[29] - аморт.группа     // victor спецодежда  8
      // x[30] - общий износ с.одежда
      // x[31] - то же налог
      // x[32] - дата переоценки МБП
      // x[33] -  счет затрат с/о
      // x[34] -  то же налог
      // x[35] -  аналитика по счету затрат с/о
      // x[36] -  то же налог
      // x[37] - Налоговая сумма
      // x[38] - период экспл
      // х[39] - норма списания

      DBSEEK(UPPER((cKey:=SUBSTR(cMat,P_GRUP,L_GRUP)+SUBSTR(cMat,P_NNUM,L_NNUM)+SUBSTR(cMat,P_PARTIA,L_PARTIA))+pSclad))
      nKol:=VAL(SUBSTR(cMat,P_KOL,L_KOL))
      IF nAdd != S_LIB_ADD .AND. MDocM->(DBSEEK(UPPER(MDOC->SCLAD+MDOC->VID+MDOC->TYPE+MDOC->CODEDOC+MDOC->NUMDOC+cKey)))
         nKol0:=MDocM->Kol
      ENDIF
      IF (j:=ASCAN(aWork,{|x|UPPER(x[1])==UPPER(cKey+pSclad)}))==0
         AADD(aWork,{cKey+pSclad,SUBSTR(cMat,P_ED1,5),nKol,;
         Div(VAL(SUBSTR(cMat,P_SUMOUTR,L_SUM)),VAL(SUBSTR(cMat,P_KOLOUT,L_KOL))),;
         0,0,'',;
         VAL(SUBSTR(cMat,P_CENAOUT,L_CENA)),pCodeVal,pCenaVal,;
         '','',;
         '','',;
         '','',;
         '','',;
         0,VAL(SUBSTR(cMat,P_R,15)),0,0,SPACE(L_PARTIA),SUBSTR(cMat,P_ED1,5),VAL(SUBSTR(cMat,P_R,15)),VAL(SUBSTR(cMat,P_KOL1,L_KOL)),VAL(SUBSTR(cMat,P_KOL2,L_KOL)),VAL(SUBSTR(cMat,P_OPERFACT,17)),;
         SUBSTR(cMat,P_A_GRUP,6),;     // victor спецодежда 8
         VAL(SUBSTR(cMat,P_IZN_ALL,L_SUM)),;
         VAL(SUBSTR(cMat,P_IZN_ALLN,L_SUM)),;
         CTOD(SUBSTR(cMat,P_PEREOC_D,8)),;
         SUBSTR(cMat,P_SCHETZM,10),;
         SUBSTR(cMat,P_SCHETZMN,10),;
         SUBSTR(cMat,P_ZCODEM,6),;
         SUBSTR(cMat,P_ZCODEMN,6),;
         DIV(VAL(SUBSTR(aMat[i],P_SUMN,L_SUM)),nKol),;
         VAL(SUBSTR(aMat[i],P_PERIOD,3)),;
         VAL(SUBSTR(aMat[i],P_IZNOS,3));
         })
      ELSE
         aWork[j,3]+=nKol
      ENDIF
   ENDIF
   NEXT
   IF nAdd=S_LIB_EDIT .AND. !YesMatReal
     dbPush('MDOCM',"MDOCM","",{"UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)",UPPER(MDOC->Sclad+MDOC->Vid+MDOC->Type+MDOC->CodeDoc+MDOC->NumDoc),,.F.,{"MDOCM"}},"")
     DO WHILE !EOF()
      IF (j:=ASCAN(aWork,{|x|UPPER(x[1])==UPPER(MDOCM->Grup+MDOCM->NNum+MDOCM->PARTIA+pSclad)})) # 0
         aWork[j,19]+=MDOCM->Kol
      ENDIF
      SKIP
     ENDDO
     dbPop()
   ENDIF
   dbCloseBases(aBase)
ENDIF
SELECT(nArea)
RETURN (NIL)

//3 
STATIC FUNCTION CoPrice(nOrd,dDate,bKol,lPlus)
LOCAL cColor:='n/w*'
LOCAL cColor1:='n/w'
LOCAL nKol:=IF(nWork>0,aWork[nWork,3],0),i
LOCAL nKol0:=IF(nWork>0,aWork[nWork,19],0)
LOCAL nDif,nCen0,nAt,cAt,nCenV0
LOCAL aArray
PRIVATE Q,R
nEd := IF(LEN(aEd) > 1 .AND.  nWork > 0,ASCAN(aEd,{|x|UPPER(x[1])==UPPER(aWork[nWork,2])}),RetNumEd())
IF(nEd > LEN(aEd),nEd := 1,NIL)
//ТВ
*IF ORDNAME() = "MY_FILTER"
*   SAYSCREEN('Фильтр(Ctrl-F6:снятие фильтра) ',2,45)
*ELSE
*   SAYSCREEN(REPLICATE('═',32),2,45)
*ENDIF
*IF pVid+pType=='19'
*ELSEIF LEN(aSclad)>50
*   IF pVid+pType!='19'
*      @ 3,56 SAY 'Склад:' COLOR COL_HEADPRICE
*   ENDIF
*   @ 3,63 SAY __MKART->Sclad COLOR cColor1
*ELSEIF (i:=ASCAN(aSclad,{|x|UPPER(__MKART->Sclad)==UPPER(SUBSTR(x,2,6))}))>0
*   @ 3,46 SAY SUBSTR(aSclad[i],2,6)+SUBSTR(aSclad[i],9) COLOR cColor1
*ENDIF
*@ 3,2 SAY MGrup->(Code+' '+Name)  COLOR cColor1

IF ORDNAME() = "MY_FILTER"
   SAYSCREEN('Фильтр(Ctrl-F6:снятие фильтра) ',6,45,'r/w')
ELSE
   SAYSCREEN(REPLICATE(' ',32),6,45)
ENDIF
IF (i:=ASCAN(aSclad,{|x|UPPER(__MKART->Sclad)==UPPER(SUBSTR(x,2,6))}))>0
   @ 2,49 SAY LEFT(SUBSTR(aSclad[i],2,6)+'  '+SUBSTR(aSclad[i],9),30) COLOR 'G*/w'
ENDIF
@ 2,4 SAY MGrup->(Code+'  '+Name)  COLOR 'w+/w'
IF pCodecen=6
   @ 20,56 SAY ' '+StrS(oRedKol(__MKART->KolTek,RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))),10,IF(UPPER(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))+" "+PADR(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0)),5) COLOR 'n*/w'
ELSE
   @ 20,56 SAY ' '+StrEd(__MKART->KolTek,,10) COLOR 'n*/w'
   @ 20,68 SAY PADR(IF(LEN(aEd)>0.AND.nEd>0,TRIM(aEd[nEd,1]),Mlabel->ed),5) COLOR 'n/w'
ENDIF

//ТВ
*IF YesMatReal
*        IF pCodecen=6
*      @ 20,56 SAY ' '+StrS(oRedKol(__MKART->KolTek,RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))),13,IF(UPPER(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))+" "+PADR(RetEd(IF(IsAddPricePartia(pNumber)[3],.F.,0))+" ",5,"=") COLOR cColor1
*        ELSE
*      @ 20,56 SAY ' '+StrEd(__MKART->KolTek)+' '+PADR(IF(LEN(aEd)>0.AND.nEd>0,TRIM(aEd[nEd,1]),'')+' ',5,'═') COLOR cColor1
*        ENDIF
*ELSEIF GlobalTask $ '03TZ09SR'
*   IF dDate != NIL .AND. STR(RetKolEd(MKART->KolTek),14,MGRUP->KOL_) != STR(RetKolEd(__MKART->Kol_Tek),14,MGRUP->KOL_)
*      @ 20,41 SAY REPLICATE('═',79-41) COLOR cColor1
*      IF MemVar->TypeOst != 1
*        @ 20,48 SAY ' Тек.ост.: ' COLOR COL_HEADPRICE
*        @ 20,59 SAY ' '+StrEd(MKART->KolTek,'Val')+' '+IF(LEN(aEd)>0.AND.nEd>0,PADR(TRIM(aEd[nEd,1])+' ',5,'═'),' ') COLOR cColor1
*      ELSE
*        IF MKART->KolTek > __MKART->Kol_Tek
*          @ 20,48 SAY ' Тек.ост.: ' COLOR COL_HEADPRICE
*        ELSE
*          @ 20,41 SAY ' Ост.на '+DTOC(dDate)+': ' COLOR COL_HEADPRICE
*        ENDIF
*        @ 20,59 SAY ' '+StrEd(MAX(MKART->KolTek+EVAL(bKol),__MKART->Kol_Tek+EVAL(bKol)),'Val')+' '+IF(LEN(aEd)>0.AND.nEd>0,PADR(TRIM(aEd[nEd,1])+' ',5,'═'),' ') COLOR cColor1
*      ENDIF
*   ELSEIF EMPTY(lPlus) .AND. YesReal .AND.__MKART->KolTek-nKol-IF(!IS_DOP_NUM,__MKART->KOLRES,0)+IF(m->RLimit_.AND.GlobalTask = "05",__MKART->KolLim,0)+nKol0 != __MKART->KolTek
*      @ 20,48 SAY ' Свободно: ' COLOR COL_HEADPRICE
*      @ 20,59 SAY ' '+StrEd(MKART->(KolTek-nKol-IF(!IS_DOP_NUM,KolRes,0)+IF(m->RLimit_.AND.GlobalTask = "05",MKART->KolLim,0)+nKol0),'Val')+' '+;
*      IF(LEN(aEd)>0.AND.nEd>0,PADR(TRIM(aEd[nEd,1])+' ',5,'═'),' ') COLOR cColor1
*   ELSE
*      @ 20,41 SAY REPLICATE('═',79-41) COLOR cColor1
*   ENDIF
*ENDIF
*@ 4,15 SAY MLabel->Name+' '  COLOR cColor1
*@ 5,15 SAY PADR(;
*  IF(Marka_[2].AND.!EMPTY(MLabel->Marka),TRIM(Marka_[1])+':'+TRIM(MLabel->Marka),'')+;
*  ' '+IF(Sort_[2].AND.!EMPTY(TRIM(MLabel->Sort)),TRIM(Sort_[1])+':'+TRIM(MLabel->Sort),'')+;
*  ' '+IF(Profil_[2].AND.!EMPTY(MLabel->Profil),TRIM(Profil_[1])+':'+TRIM(MLabel->Profil),'')+;
*  ' '+IF(Razmer_[2].AND.!EMPTY(MLabel->Razmer),TRIM(Razmer_[1])+':'+TRIM(MLabel->Razmer),''),64)
*IF (!YesMatReal.OR.RPrim_) .AND. !EMPTY(MKART->Prim)
*   @ 4,63 SAY MKART->Prim COLOR cColor1
*ENDIF
@ 3,11 SAY MLabel->Name  COLOR 'b/w'
@ 4,11 SAY MLabel->COD_OKDP COLOR cColor1
@ 5,11 SAY MLabel->Marka COLOR cColor1
@ 5,63 SAY MLabel->Koef PICTURE "9999" COLOR cColor1
@ 6,11 SAY MLabel->Razmer COLOR cColor1
IF LEN(aEd)>0.AND.nEd>0
   @ 5,51 SAY STR(IF(aEd[nEd,4]>0,IF((nAt:=AT(UPPER('ABS('),UPPER(aEd[nEd,3])))>0,;
      (cAt:=RIGHT(aEd[nEd,3],LEN(aEd[nEd,3])-nAt-3),nAt:=AT(')',cAt),;
       VAL(LEFT(cAt,nAt-1)) ),1),1),4) COLOR 'n/w'
ELSE
   @ 5,51 SAY STR(1,3) COLOR 'n/w'
ENDIF


//ТВ
*IF LEN(aEd)>=1
*   SAYSCREEN(' <Пробел>:Смена разм ',24,35)
*   SAYSCREEN(' F10:Справка ',24,55)
*ELSE
*   SAYSCREEN('═════════════════════',24,35)
*   SAYSCREEN('═════════════',24,55)
*ENDIF
*SAYSCREEN(' F9:Печать ',24,67)
*IF GlobalTask="TZ"
*        SAYSCREEN(PADC(" Прайс-лист:"+ALLTRIM(aCodeCen[pCodeCen+1,2])+" ",38,'═'),20,1)
*        @ 21,2 SAY StrS(TzPrice(MKart->Sclad,MKart->(Grup+NNum+IF(IsPricePartia(MKart->Sclad),Partia,"")),pCodeCen,pDate),16,3) COLOR cColor
*        @ 21,19 SAY GlobalValuta COLOR cColor1
*        @ 21,24 SAY SPACE(20) COLOR cColor1
*ELSEIF GlobalTask="05".AND.pCodeCen=6
*        aArray:=IsAddPricePartia(pNumber)
*        SAYSCREEN(PADC(" Цена прайс-листа "+ALLTRIM(pNumber)+" ",38,'═'),20,1)
*    @ 21,2 SAY StrS(RealAddPrice(pNumber,MKart->(Grup+NNum+IF(aArray[1],Partia,"")),,MKart->Sclad,'со скидкой-накидкой'),16,3) COLOR cColor
*        @ 21,19 SAY GlobalValuta COLOR cColor1
*        IF UPPER(aArray[2])!=UPPER(GlobalValuta)
*    @ 21,24 SAY StrS(RealAddPrice(pNumber,MKart->(Grup+NNum+IF(aArray[1],Partia,"")),.F.,MKart->Sclad,'со скидкой-накидкой'),16,3) COLOR cColor
*        @ 21,41 SAY aArray[2] COLOR cColor1
*        ELSE
*        @ 21,24 SAY SPACE(20) COLOR cColor1
*        ENDIF
*ELSE
*    @ 21,2 SAY StrS(IF(nWork > 0,aWork[nWork,4],GetCena('O',nKol,,nEd)),16,3) COLOR cColor
*        @ 21,19 SAY GlobalValuta COLOR cColor1
*    SAYSCREEN(PADC(TRIM(' Цена '+GetCenaName(nKol))+IF(GlobalTask=='05' .AND. pCodeCen != 0,' с учетом скидок/накидок ',' ')38,'═'),20,1)
*        IF (YesMatReal.OR.(YesReal.AND.RValuta_)).AND.UPPER(MLabel->CodeVal)!=UPPER(GlobalValuta)
*    @ 21,24 SAY StrS(IF(nWork > 0,aWork[nWork,8],GetCena('V',nKol,,nEd)),16,3) COLOR cColor
*        @ 21,41 SAY MLabel->CodeVal COLOR cColor1
*        ELSE
*        @ 21,24 SAY SPACE(20) COLOR cColor1
*        ENDIF
*ENDIF

*IF LEN(aEd)>1
*   SAYSCREEN('<Пробел>:Смена размерности (R)',23,1)
*ELSE
*   SAYSCREEN('<Пробел>:Смена размерности (R)',23,1,'n+/w')
*ENDIF

IF pCodeCen=6
    aArray:=IsAddPricePartia(pNumber)
    SAYSCREEN("Цена доп. пр "+ALLTRIM(pNumber)+' со ск./нак.',21,1,"b/w")
    @ 22,1 SAY StrS(RealAddPrice(pNumber,MKart->(Grup+NNum+IF(aArray[1],Partia,"")),,MKart->Sclad,'со скидкой-накидкой'),9,3) COLOR cColor
    @ 22,17 SAY StrS(RealAddPrice(pNumber,MKart->(Grup+NNum+IF(aArray[1],Partia,"")),.F.,MKart->Sclad,'со скидкой-накидкой'),10,2) COLOR cColor
ELSE
    SAYSCREEN(LEFT('Цена '+GetCenaName(nKol),19)+' со ск./нак.',21,1,"b/w")
    @ 22,1 SAY StrS(IF(nWork > 0,aWork[nWork,4],GetCena('O',nKol,,nEd)),9,3) COLOR cColor
    @ 22,17 SAY StrS(IF(nWork > 0,aWork[nWork,8],GetCena('V',nKol,,nEd)),10,2) COLOR cColor
ENDIF
    nCen0:=MLABEL->OCENA1
    nCenV0:=MLABEL->VCENA1
    IF nEd!=NIL.AND.nEd>1 .AND. !EMPTY(aEd[nEd,3])
       Q:=1
       R:=IF(nWork==NIL.OR.nWork=0,aEd[nEd,4],aWork[nWork,20])
       nCen0:= nCen0*&(aEd[nEd,3])
       nCenV0:= nCenV0*&(aEd[nEd,3])
    ENDIF

    IF nCen0>0
       nDif:=IF(nWork > 0,(aWork[nWork,4]/nCen0-1)*100,(GetCena('O',nKol,,nEd)/nCen0-1)*100)
       IF nDIF<0
          @ 23,22 SAY StrS(nDif,7,2) COLOR 'r/w'
       ELSE
          @ 23,22 SAY StrS(nDif,7,2) COLOR 'g/w'
       ENDIF
    ELSE
          @ 23,22 SAY SPACE(7) COLOR 'n/w'
    ENDIF
    @ 24,1 SAY StrS(nCen0,9,3) COLOR cColor
    @ 24,17 SAY StrS(nCenV0,10,2) COLOR cColor
RETURN(1)

#9:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 15:02
    —
Часть 5
Code:
                     STATIC FUNCTION AddIns(lSkid)
//--------------------------------------------------------------------------//
LOCAL nCena,nKolOut,nArea:=SELECT(),aSales,x, cMat
LOCAL aPar,aParam, aOldMat := M->aWindow[2,7]:cargo[1], nSum, nSumOutR
LOCAL cLen:=1,nPoz,nTzKol,nTzCena
LOCAL lSmartCen:=.F., nSmartCen :=0
PRIVATE ST:=0,ST1:=0,SP,SPV,SPPV,SPP,S,SV,S0,Q0,NI,NDS,CSH,SFN,PA,TP,TN,EU,TZR1M,TZR2M,TZR3M,TZR1MN,TZR2MN,TZR3MN,DOP1,DOP2,DOP3,PP1,PP2,R,MEM_MODEL,DEF_PCENA0
PRIVATE SPV0,S_NEW,S_OLD,C_NEW,C_OLD, OCN1,OCN2,OCN3,OCN4,OCV1,OCV2,OCV3,OCV4,CenSpCon, SNal
PRIVATE nIzn_All, nIzn_AllN, pA_Grup, dPereoc_D, cSchetZM, cSchetZMN, cZCodeM, cZCodeMN    // victor спецодежда
Valuta->(DBSEEK(UPPER(pCodeVal)))
M->aWindow[2,7]:cargo[1]:={}
M->aWindow[2,7]:cargo[2]:=1

IF TYPE("pCodeOper") != "C"
  PRIVATE pCodeOper := "  "
ENDIF


PushKart()

IF GlobalTask = "05" .OR. IS_MODEL
  aPar := DefParam()
  aParam := RetTypeParam(5)
ENDIF
IF pVid = '1' .AND. GlobalTask # "05"
   IF (iMOVES->YesCalc.AND.!EMPTY(MCodOp->Model))
      SELECT MCalc1
      SetScope('UPPER(Vid+Code)',UPPER(pVid+MCodOp->Model))
      GO TOP
      InitCalc()
   ENDIF
ENDIF

lSmartCen := FILE(LoadPath()+'SCLAD\SmartCen.prg')
FOR nWork:=1 TO LEN(aWork)


  x:=aWork[nWork]
  SeekKart(x[1])

  IF GlobalTask="TZ"
        x[4]:=TzPrice(MKart->Sclad,MKart->(Grup+NNum+IF(IsPricePartia(MKart->Sclad),Partia,"")),pCodeCen,pDate)
        x[5]:=0
  ENDIF

  // В случае склада
  // x[2] - Ed1
  // x[3] - nKol
  // x[4] - nCenaOutR
  // x[8] - nCenaOut
  // x[9] - CodeVal - валюта прайса
  // x[19] - старое кол-во
  // x[24] - старая единица измерения
  // x[25] - старый коэффициент R
  // x[26] - KOL1 - списание
  // x[27] - KOL2 - возврат
  // x[28] - ссылка номеров на строки счетов-фактур
   // x[29] - аморт.группа     // victor спецодежда  8
   // x[30] - общий износ с.одежда
   // x[31] - то же налог
   // x[32] - дата переоценки МБП
   // x[33] -  счет затрат с/о
   // x[34] -  то же налог
   // x[35] -  аналитика по счету затрат с/о
   // x[36] -  то же налог
   // x[37] - Налоговая сумма
   // x[38] - период экспл
   // х[39] - норма списания

  IF (x[3] > 0) .or. (GlobalTask="TZ")
    cMat := IF(YesMatReal,;
                 (;
                  x[4] := ValEd(ROUND(x[4],CURR_MAIN)),;
                  nSumOutR := ROUND(x[3]*x[4],CURR_MAIN),;
                  x[3] := ValSum(ROUND(ValEd(x[3]),IF(UPPER(x[2]) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_))),;
                  x[8] := ValEd(x[8]),;
                  IIF(lI_NET != NIL.AND.ValType(lI_NET)=="L".AND.lI_NET,x[29] := x[3],x[29] := 0),;
                  MakeMat1(x[3],x[4],nSumOutR,,RIGHT(x[1],6),;
                           x[5],x[6],x[9],x[8],x[10],;
                           x[11],x[12],x[13],x[14],x[15],;
                           x[16],x[17],x[18],x[21],x[22],;
                           0,0,0,,x[29]);         // заявлено в заказах
                  ),;
                 (;                       // victor спецодежда 9 + )
                  m->pA_Grup:=    x[29],;
                  m->nIzn_All:=   x[30],;
                  m->nIzn_AllN:=  x[31],;
                  m->dPereoc_D:=  x[32],;
                  m->cSchetZM :=  x[33],;
                  m->cSchetZMN := x[34],;
                  m->cZCodeM :=   x[35],;
                  m->cZCodeMN :=  x[36],;
                 MakeMat(;
                         (nKolOut:=ValEd(x[3])),x[2],x[3],(nCena:=IF(UPPER(pCodeVal)==UPPER(GlobalValuta),;
                                                                     iIF(lSmartCen.AND. (nSmartCen:=FILEEVAL(LoadPath()+'SCLAD\SmartCen.prg',{LEFT(x[1],5),SUBSTR(x[1],6,13),SUBSTR(x[1],19,5)}))#0,nSmartCen,x[4]),;
                                                                     IF(UPPER(pCodeVal)==UPPER(x[9]),;
                                                                        x[8],;
                                                                        Div(x[4],EVAL(Global_BCurs,pCenaVal,Valuta->Myltiply))))),;
                                                          x[2],;
                         SUM_OUT,SUM_WORK,SUM_WORK,ROUND(x[3]*__CENA,IF(GlobalTask # "05".AND.pVid=='2',CURR_MAIN,3)),x[39],;       //Victor v3.3    // victor спецодежда  2
                         x[38],MLabel->Ed,IF( GlobalTask == 'SR' , SPACE(10), MSTRU->Schet ),x[26],,;
                         ,,x[27],0,0,;
                         x[28],GetKolOld(aOldMat),.T.,x[20],,;
                         ,ROUND(x[3]*x[37],IF(GlobalTask # "05".AND.pVid=='2',CURR_MAIN,3));
                        ));
              )

    IF GlobalTask = "05" .OR. IS_MODEL
      EditCalc(.F.,.F.,2,@aPar,@cMat,@aParam,@pModel)
    ENDIF
    IF pVid = '1' .AND. GlobalTask # "05"
      IF !EMPTY(MCodOp->Model).AND.iMOVES->YesCalc
         SetParCalc(cMat)
         IF GetaCalc()=NIL .OR. LEN(GetaCalc()) = 0
            m->SNal:=m->S := m->SP
         ENDIF
         AlgosLoc(.F.,'NoEval')
         cMat:=STUFF(cMat,P_SUMFACT,L_SUM,STR(m->S,L_SUM,CURR_MAIN))
         cMat:=STUFF(cMat,P_SUMN,L_SUM,STR(m->SNal,L_SUM,CURR_MAIN))
         IF MSchet->Uchet>'1'
            cMat:=STUFF(cMat,P_SUM,L_SUM,STR(m->S,L_SUM,CURR_MAIN))
            IF !_ROZNICA
               cMat:=STUFF(cMat,P_CENA0,L_CENA0,STR(DIV(m->S,m->Q0),L_CENA0,L_RCENA0))
            ENDIF
         ENDIF
      ENDIF
    ENDIF
    cMat:=STUFF(cMat,IF(GlobalTask = '05',Q_NUMSTR,P_NUMSTR),5,STR(LEN(M->aWindow[2,7]:cargo[1])+1,5,0))
    AADD(M->aWindow[2,7]:cargo[1],cMat)
  ENDIF
   IF GlobalTask='09'.AND. pVid+pType = '26'.AND. x[19]#x[3] .AND. TYPE('m->pUpdateSO')='L'.AND. !m->pUpdateSO // victor спецодежда if
      MBPSchet->(dbSEEK(UPPER(MCodOp->Schet_A)))
      m->pUpdateSO:=LinMetod(x[38],,,pDate)
   ENDIF
   IF GlobalTask='09'.AND. pVid+pType = '26'.AND. x[19]#x[3] .AND. TYPE('m->pUpdateSON')='L'.AND. !m->pUpdateSON // victor спецодежда if
      MBPSchet->(dbSEEK(UPPER(MCodOp->Schet_A)))
      m->pUpdateSON:=LinMetod(x[38],'nalog',x[37],pDate)
   ENDIF


NEXT
IF pVid='1'.AND. GlobalTask # "05"  .AND. YesCommon()
   ProCalc(.F.,,M->aWindow[2,7]:cargo[1])
ENDIF

M->pUpDated:=.T.
#IFDEF TZ_TASK
  #define LEN_ARRAY     4000

  IF GlobalTask $ '03TZ'.AND.pType='9'
    IF pVid!="0"
      aSales:={}
      AEVAL(aWork,{|x| IF((x[3] > 0) .or. (GlobalTask="TZ"),AADD(aSales,{pSclad,IF(pVid='0','2',IF(pVid$'2','0','1')),;
                                                 SUBSTR(x[1],1,L_GRUP),SUBSTR(x[1],6,L_NNUM),x[3]-IF(pVid="0",0,x[19]),x[4],;
                                                 SUBSTR(x[1],19,L_PARTIA),__CENAN}),NIL) })
      IF LEN(aSales)>0
        SendSale(aSales,pDate,,'с нал.ценой')
      ENDIF
    ELSE
      aSales:={{}}
      SELECT __MKART
      IF OrdName()='MY_FILTER'
         MyCloseFilter()
      ENDIF
      dbGoTop()
      DO WHILE !EOF()
        nPoz:=ASCAN(aWork,{|x| UPPER(x[1])==__MKART->(UPPER(Grup+NNum+Partia+Sclad)) })
        nTzKol:=IF(EMPTY(nPoz),__MKART->Koltek-IF(YesMatReal,IF(m->RLimit_,-KolLim,0)+KolRes,0),aWork[nPoz,3])
        nTzCena:=IF(EMPTY(nPoz),TzPrice(__MKART->Sclad,__MKART->(Grup+NNum+IF(IsPricePartia(__MKART->Sclad),Partia,"")),pCodeCen,pDate),aWork[nPoz,4])
          IF LEN(aSales[cLen])<=LEN_ARRAY
            AADD(aSales[cLen],{pSclad,;
                               '2',;
                               __MKART->Grup,;
                               __MKART->NNum,;
                               nTzKol,;
                               nTzCena,;
                               __MKART->Partia,;
                               __CENAN})
          ELSE
            cLen++
            AADD(aSales,{{pSclad,'2',__MKART->Grup,__MKART->NNum,nTzKol,nTzCena,__MKART->Partia,__CENAN}})
          ENDIF
        dbSkip()
      ENDDO
      AEVAL(aSales,{|x| IF(!EMPTY(x),SendSale(x,pDate,,'с нал.ценой'),) })
    ENDIF
    aWindow[2,7]:cargo[1]:={}
  ENDIF
#ENDIF

PopKart()
SELECT(nArea)
RETURN (0)

STATIC FUNCTION ValEd(nKol,cEd,nR)
//----------------------------------------------------------------------------//
// Переводит кол-во из основных ед. в дополнительные
LOCAL nKol1
aEd:=IniEd(,,,,@nEd)
cEd := IF(cEd = NIL,UPPER(aWork[nWork,2]),UPPER(cEd))
nR := IF(nR = NIL,aWork[nWork,20],nR)
IF nWork=0.OR.(nEd:=ASCAN(aEd,{|x|UPPER(x[1])==cEd}))=0
   RETURN RetKolEd(nKol)
ENDIF
PRIVATE Q,pFor
m->pFor:=aEd[nEd,3]
m->Q:=1
m->R:=nR
nKol1:=1
IF !EMPTY(pFor).AND.TYPE(pFor)='N'
   nKol1:=&pFor
ENDIF
RETURN Div(nKol,nKol1)

STATIC FUNCTION ValSum(nKol,cEd,nR)
//----------------------------------------------------------------------------//
// Переводит цены из дополнительные ед. в основные
LOCAL nKol1
aEd:=IniEd(,,,,@nEd)
IF(cEd = NIL .AND. nWork > 0,cEd := UPPER(aWork[nWork,2]),NIL)
IF(nR = NIL .AND. nWork > 0,nR := aWork[nWork,20],NIL)
IF cEd = NIL.OR.(nEd:=ASCAN(aEd,{|x|UPPER(x[1])==UPPER(cEd)}))=0
   RETURN RetSumEd(nKol)
ENDIF
PRIVATE Q,pFor
m->pFor:=aEd[nEd,3]
m->Q:=1
m->R:=nR
nKol1:=1
IF !EMPTY(pFor).AND.TYPE(pFor)='N'
   nKol1:=&pFor
ENDIF
RETURN nKol*nKol1

                      STATIC FUNCTION GetCenaName(nKol)
//--------------------------------------------------------------------------//
LOCAL nCodeCen:=pCodeCen, cKey, nPoz
IF nCodeCen=0
  IF YesMatReal .AND. ALIAS() == "MKART"
    cKey := UPPER(Grup+NNum)
    MKART->(dbPush(,"MKART_P1","RECNO() != "+STR(RECNO(),7,0),{"UPPER(GRUP+NNUM)",cKey,},""))
    MKART->(DBEVAL({|| nKol += aWork[nPoz,3] },{|| (nPoz := ASCAN(aWork,{|x| UPPER(x[1]) == cKey+UPPER(Partia+Sclad) })) != 0 }))
    MKART->(dbPop())
  ENDIF
  IF YesMatReal .AND. ALIAS() == "TMKART"
    cKey := UPPER(Grup+NNum)
    MKART->(dbPush(,"MKART_P1","TMKART->(PARTIA+SCLAD)#MKART->(PARTIA+SCLAD)",{"UPPER(GRUP+NNUM)",cKey,},""))
    MKART->(DBEVAL({|| nKol += aWork[nPoz,3] },{|| (nPoz := ASCAN(aWork,{|x| UPPER(x[1]) == cKey+UPPER(Partia+Sclad) })) != 0 }))
    MKART->(dbPop())
  ENDIF
  IF YesMatReal.AND.m->pControl=2
    nKol+=MPart->Kol
  ENDIF
  nCodeCen:=GetCodeCen(nKol)
ELSEIF LNEWCENA
  RETURN PADR("Доп. прайс-лист",15)
ELSEIF nCodeCen>4
   nCodeCen:=1
ENDIF
IF nCodeCen=0
   IF YesMatReal
      RETURN (SPACE(15))
   ELSE
      RETURN PADR('складская',15)
   ENDIF
ENDIF

RETURN LOWER(&('RCName'+STR(nCodeCen,1,0)+'_'))

STATIC FUNCTION GetCodeCen(nKol)
LOCAL nCodeCen:=IF(YesMatReal,1,0)
LOCAL nArea:=SELECT()
IF YesMatReal.AND.m->RKolCen_>1.AND.m->RSkid_
   SELECT RSkid
   IF !EOF()
      IF !EMPTY(Kol1).AND.nKol<=Kol1
         nCodeCen:=CodeCen1
      ELSEIF RKolCen_=2.OR.!EMPTY(Kol2).AND.nKol<=Kol2
         nCodeCen:=CodeCen2
      ELSEIF RKolCen_=3.OR.!EMPTY(Kol3).AND.nKol<=Kol3
         nCodeCen:=CodeCen3
      ELSE
         nCodeCen:=CodeCen4
      ENDIF
   ELSE
      nCodeCen:=1
   ENDIF
ENDIF
SELECT(nArea)
RETURN(nCodeCen)

STATIC FUNCTION MenuAdd(aSort,cFltr0,nAdd)
LOCAL nMaxChoice:=5
LOCAL nRet:=2,lYes
STATIC nChoice:=1
ALTD()
DO CASE
   CASE (aSort==NIL)
   nChoice:=1
   RefPos(nChoice,2)
   CASE LASTKEY()==K_RIGHT
   RefPos(nChoice,1)
   nChoice++
   IF nChoice>nMaxChoice
      nChoice:=1
   ENDIF
   RefPos(nChoice,2)
   nRet:=1
   CASE LASTKEY()==K_LEFT
   RefPos(nChoice,1)
   nChoice--
   IF (nChoice<1)
      nChoice:=nMaxChoice
   ENDIF
   RefPos(nChoice,2)
   nRet:=1
   CASE (LASTKEY()==K_RETURN .AND. nChoice==1)
   nRet:=FIns(,nAdd,,,,11)
   RefPos(nChoice,1)
   nChoice:=1
*   RefPos(nChoice,2)
   CASE (LASTKEY()==K_RETURN .AND. nChoice==2)
   nRet:=0
   SETLASTKEY(K_TAB)
   CASE (LASTKEY()==K_RETURN .AND. nChoice==3)
   nRet:=EVAL(SETKEY(K_F3))
   RefPos(nChoice,1)
   nChoice:=1
   RefPos(nChoice,2)
   CASE (LASTKEY()==K_RETURN .AND. nChoice==4)
   lYes:=YesOrNo('Вид фильтра',,' - по полям    ',;
                                ' - фpагментный ',6,35,COL_REFER)
   IF LASTKEY()!=K_ESC
      IF lYes
         nRet:=EVAL(SETKEY(K_F6))
      ELSE
         nRet:=EVAL(SETKEY(K_ALT_F6))
      ENDIF
   ENDIF
   RefPos(nChoice,1)
   nChoice:=1
   RefPos(nChoice,2)
   CASE (LASTKEY()==K_RETURN .AND. nChoice==5)
   NilNum()
   lYes:=YesOrNo('Вид поиска',,' - быстрый     ',;
                               ' - фpагментный ',6,35,COL_REFER)
   IF LASTKEY()!=K_ESC
      IF lYes
         nRet:=EVAL(SETKEY(K_F7))
      ELSE
         nRet:=EVAL(SETKEY(K_ALT_F7))
      ENDIF
   ENDIF
   SetNum(nAdd)
   RefPos(nChoice,1)
   nChoice:=1
   RefPos(nChoice,2)
ENDCASE
RETURN (nRet)

STATIC FUNCTION RefPos(nPos,nColor)
LOCAL cColor
LOCAL aPos1:={4,13,24,39,54}
LOCAL aPos2:={7,19,27,42,58}
LOCAL aColor:={'N/W','W+/N'}
LOCAL nY:=23,nX1,nX2
nX1:=aPos1[nPos]
nX2:=aPos2[nPos]
cColor:=aColor[nColor]
COLORWIN(nY,nX1,nY,nX2,cColor)
RETURN (NIL)

STATIC FUNCTION FIns(nKey,nAdd,nKolVV,cEI,lFromImport,nMy)
LOCAL oGet,n
LOCAL sRet,sLeft,sRight,nKol00
LOCAL nKol:=IF(nKolVV=NIL,IF(nWork>0,ValEd(aWork[nWork,3]),IF(pVid="0",__MKART->KolTek-IF(YesMatReal,IF(m->RLimit_,-KolLim,0)+KolRes,0),0)),nKolVV)
LOCAL nKol0:=IF(nWork>0,aWork[nWork,19],0), nSum1, nKolOld, nPreKol
LOCAL nKol1 := IF(nWork > 0 .AND. !YesMatReal,aWork[nWork,26],0)
LOCAL nKol2 := IF(nWork > 0 .AND. !YesMatReal,aWork[nWork,27],0)
LOCAL aArray,nLen,nPut
IF nMy#NIL
   nLen:=nMy
   nPut:=68
ELSE
   nLen:=13
   nPut:=66
ENDIF
IF EMPTY(NNum)
   RETURN(1)
ENDIF
sRet:=SETKEY(K_RETURN,NIL)
sLeft:=SETKEY(K_LEFT,NIL)
sRight:=SETKEY(K_RIGHT,NIL)
IF YesMatReal.AND.nWork>0.AND.aWork[nWork,7]=='1'
   SayError('По позиции была произведена полная отгрузка !')
ELSEIF (pVid+pType=='23'.OR.pVid+pType=='26').AND.(!EMPTY(nKol2).OR.!EMPTY(nKol1))
   SayError('Был'+IF(GlobalTask = '09','о перемещение или списание по',IF(!EMPTY(nKol2),' возврат','о списание')+' с консигнации')+' этой позиции!')
ELSEIF GlobalTask="05".AND.pCodecen=6.AND.(!RPrice_M->(dbSeek(UPPER(pNumber+MKART->(GRUP+NNUM+IF((aArray:=IsAddPricePartia(pNumber))[1],PARTIA,""))))).OR.(!EMPTY(aArray[4]).AND.EMPTY(ASCAN(aArray[4],{|x|UPPER(x)=UPPER(MKart->Sclad)}))))
ELSE
   IF nKolVV =NIL
      NilNum()
      SETKEY(K_DOWN,{||Keyb(K_RETURN)})
      COLORWIN(ROW(),1,ROW(),78,COL_REFER)
      nPreKol:= IF(EMPTY(nKol),0,nKol)
      oGet := GetNew(Row(),nPut,;
               {|x| if(PCount() == 0, nKol, nKol:= x)},  ;
               "nKol",, "n/w,w+/n")
      oGet:postBlock := {||VkolPost(nKol,nKol0,@nKol00,,nKol1,nKol2)}
      oGet:picture:=GetPict(nLen,IF(nWork=0.OR.LEN(aEd) < 1,IF(UPPER(RetEd(IF(LNEWCENA,IF(IsAddPricePartia(pNumber)[3],.F.,0),NIL))) = UPPER(__OSN_ED),iMGRUP->Kol_,iMGRUP->Kol1_),IF(UPPER(aWork[nWork,2])==UPPER(aEd[1,1]),iMGRUP->Kol_,iMGRUP->Kol1_)))
      SETCURSOR(1)
      KEYBOARD nKey
      READMODAL({oGet})
      SETCURSOR(0)
   ELSE
   ENDIF
   IF (LASTKEY()!=K_ESC) .OR. nKolVV # NIL
     IF pType!="9".OR.LEN(aWork)<4000
       IF (nWork==0) .OR. nKolVV # NIL
         IF ALIAS() = "MLABEL"
           SPR_PART->(dbSeek(UPPER(MLABEL->GRUP+MLABEL->NNUM)))
         ELSE
           SPR_PART->(dbSeek(UPPER(MKART->GRUP+MKART->NNUM+MKART->PARTIA)))
         ENDIF
         IF YesMatReal
            AADD(aWork,{MLabel->(Grup+NNum)+IF(ALIAS() = "MLABEL",SPACE(L_PARTIA),MKART->Partia)+IF(ALIAS()='MLABEL',pSclad,MKart->Sclad),;
            X_ED,0,0,0,0,' ',0,IF(LNEWCENA,IsAddPricePartia(pNumber)[2],MLabel->CodeVal),;
            IF(LNEWCENA,IsAddPricePartia(pNumber)[5],MLabel->CenaVal),;
            __RLABEL->OCena1,__RLABEL->OCena2,__RLABEL->OCena3,__RLABEL->OCena4,;
            __RLABEL->VCena1,__RLABEL->VCena2,__RLABEL->VCena3,__RLABEL->VCena4,0,X_R,0,0,IF(ALIAS() = "MLABEL",SPACE(L_PARTIA),MKART->Partia),X_ED,X_R,0,0,-1,;
            0;  // заявлено в заказах
            })
         ELSE
            AADD(aWork,{MLabel->(Grup+NNum)+IF(ALIAS() = "MLABEL",SPACE(L_PARTIA),MKART->Partia)+IF(ALIAS()='MLABEL',pSclad,MKart->Sclad),;
            X_ED,0,0,0,0,' ',0,IF(LNEWCENA,IsAddPricePartia(pNumber)[2],MLabel->CodeVal),;
            IF(LNEWCENA,IsAddPricePartia(pNumber)[5],MLabel->CenaVal),;
            __RLABEL->OCena1,__RLABEL->OCena2,__RLABEL->OCena3,__RLABEL->OCena4,;
            __RLABEL->VCena1,__RLABEL->VCena2,__RLABEL->VCena3,__RLABEL->VCena4,0,X_R,0,0,IF(ALIAS() = "MLABEL",SPACE(L_PARTIA),MKART->Partia),X_ED,X_R,0,0,-1,;  // victor спецодежда 2
            Space(6),0,0,CTOD(''),SPACE(10),SPACE(10),SPACE(6),SPACE(6),__CENAN,0,0;   // victor спецодежда
            })
         ENDIF
         nWork:=LEN(aWork)
         IF TYPE('pSchetZ')='C'
            aWork[nWork,33]=m->pSchetZ
            aWork[nWork,34]=m->pSchetZN
            aWork[nWork,35]=m->pZCode
            aWork[nWork,36]=m->pZCodeN
         ENDIF
         nEd:=RetNumEd()
         aEd := IniEd(,,,,@nEd)
         IF  nKolVV # NIL
            nEd := IF(LEN(aEd) > 1 ,ASCAN(aEd,{|x|UPPER(x[1])==UPPER(cEI)}),RetNumEd())
            aWork[nWork,2] := cEI
            aWork[nWork,20] := aEd[nEd,4]
               nKol00:=nKolVV
         ENDIF
         InsOldKol(nAdd,aWork,nWork)
       ENDIF
       SetCenaX(aWork,nWork,nKol00,aWork[nWork,2],aWork[nWork,20],,lFromImport)
       IF lFromImport==NIL
          DispSum0()
       ENDIF
       IF TYPE("AvtCtrlS_")=="L".AND.m->AvtCtrlS_.AND.nPreKol!=nKol
          SprTovKol(.T.,IF(YesMatReal,MemVar->pNNoper,NIL),IF(YesMatReal,NIL,MemVar->pPro),IF(nWork > 0,aWork[nWork,2],ED_PRICE),IF(nWork > 0,aWork[nWork,20],ED_R_PRICE),nKol00)
       ENDIF
      IF(YesMatReal .AND. TYPE('lI_Net')='L' .AND. m->lI_Net,aWork[nWork,29]:=aWork[nWork,3],NIL)
     ELSE
       SayAndWait("Количество измененных позиций не должно превышать 4000 !",10)
     ENDIF
   ENDIF
ENDIF
SETKEY(K_RETURN,sRet)
SETKEY(K_LEFT,sLeft)
SETKEY(K_RIGHT,sRight)
SETKEY(K_DOWN,NIL)
IF nKolvv = NIL
   IF(TYPE(itWork_B_Code)='L'.AND.iWork_B_Code.AND.!EMPTY(m->nOrdBC),QuickBC(1,1,0,m->nOrdBC,'r/w*','не запоминая',m->nPrefBC,IF(TYPE('bPreSeek')='B',m->bPreSeek,NIL)),SetNum(nAdd))
ENDIF
KEYBOARD CHR(K_DOWN)
RETURN (1)

STATIC FUNCTION VKolPost(nKol,nKol0,nKol00,lNoQ,nKol1,nKol2)
//--------------------------------------------------------------------------//
// lNoQ -  .T., то кол-во без домножения на коэффициент и вывод
//         сообщения об ошибке с наименованеи номенклатуры
LOCAL nDif,n, aError := {}
IF EMPTY(lNoQ)
  IF nWork>0.AND.(n:=ASCAN(aEd,{|x|UPPER(x[1])==UPPER(aWork[nWork,2])})) >=1
    PRIVATE Q,R,pFor
    pFor:=aEd[n,3]
    Q:=nKol
    R:=aWork[nWork,20]
    IF !EMPTY(m->pFor).AND.TYPE(pFor)='N'
      nKol:=&pFor
    ENDIF
  ELSE
    IF LNEWCENA.AND.!IsAddPricePartia(pNumber)[3]
      nKol := oRedKol(nKol,RetEd(0))
    ELSE
      nKol := RetSumEd(nKol,IF(TYPE('pCodeCen')='N'.AND.pCodeCen=6.AND.SELECT("RPrice")>0 ,IF(RPrice->Ed,1,0),NIL))
    ENDIF
  ENDIF
ELSEIF !EMPTY(lNoQ)
   AADD(aError,"По товару :")
   AADD(aError,CHR(255)+CHR(255)+"Группа : "+MGRUP->CODE+" "+MGRUP->NAME)
   AADD(aError,CHR(255)+CHR(255)+"Ном.номер : "+MLABEL->NNUM+" "+MLABEL->NAME)
   AADD(aError,"───────────[ Ошибка ]─────────────")
ENDIF
nKol00:=nKol
IF !EMPTY(nKol)
   IF !YesMatReal
      *IF GlobalTask!='09'.AND.YesReal.AND.!lPlus.AND.TYPE('CheckRes_')='L'.AND.m->CheckRes_.AND.IS_RES.AND.!(TYPE("pDopCode") = "C" .AND. !EMPTY(pDopCode)) .AND. IS_RESERV
      IF GlobalTask!='09'.AND.YesReal.AND.!lPlus.AND.TYPE('CheckRes_')='L'.AND.m->CheckRes_ .AND. IS_RESERV
         IF (nDif:=ROUND(IF(pVid='0',nKol,__MKART->KolTek-nKol-__MKART->KolRes+IF(m->RLimit_,__MKART->KolLim,0)+nKol0),Kol_))<0
            AADD(aError,'Кол-во свободных ТМЦ меньше нуля на '+ALLTRIM(STR(-nDif,13,Kol_))+' '+TRIM(MLabel->Ed)+'!')
            SayError(aError)
            RETURN(.F.)
         ENDIF
      ELSEIF !lPlus.AND.!m->AllowRed_
         IF (nDif:=ROUND(IF(pVid='0',nKol,__MKART->KolTek-nKol+nKol0),Kol_))<0
            AADD(aError,'Остаток будет меньше нуля на '+ALLTRIM(STR(-nDif,13,Kol_))+' '+TRIM(MLabel->Ed)+'!')
            SayError(aError)
            RETURN(m->AllowRed_)
         ENDIF
      ELSEIF pVid+pType='1#' .AND. MSCHET->Uchet#'1'.AND. nKol#0
            AADD(aError,'В данном виде движения должна использоваться')
            AADD(aError,'только номенклатура по учетным ценам!')
            SayError(aError)
            RETURN(.F.)
      ENDIF
      IF (pVid+pType=='23'.OR.pVid+pType=='26').AND.ROUND(nKol,MGRUP->KOL_)<0
        SayError({"Отрицательное значение запрещено !"})
        RETURN (.F.)
      ENDIF
      IF nKol1 != NIL .AND. nKol2 != NIL .AND. (pVid+pType=='23'.OR.pVid+pType=='26').AND.ROUND(nKol-nKol1-nKol2,MGRUP->KOL_)<0
        SayError({"По данной позиции уже было списание или возврат !"})
        RETURN (.F.)
      ENDIF
   ELSEIF m->RLimit_.AND. !(TYPE('pStatus3')='C'.AND. m->pStatus3='1').AND.;
      !(TYPE('lI_Net')='L'.AND. m->lI_Net).AND. ;
      TYPE("pDopCode") = "C".AND.!EMPTY(pDopCode).AND.(nDif:=ROUND(__MKART->KolTek+__MKART->KolLim-__MKART->KolRes-nKol+nKol0,Kol_))<0
     AADD(aError,'Перезаказ на '+ALLTRIM(STR(-nDif,13,Kol_))+' '+TRIM(MLabel->Ed)+'!')
     SayError(aError)
     RETURN(.F.)
   ENDIF
ENDIF
RETURN(.T.)

#10:  Author: nordkLocation: Горбунов Константин PostPosted: 29 Mar 2007 15:08
    —
Часть 6

Code:
FUNCTION RetKolEd(nKol,lPlus,nEd)
//---------------------------------------------------------------------------//
// Переводит кол-во из основной в доп.ед.изм.
// или проводит перевод цены из доп.ед.изм. в основную
// lPlus - .T.  в ед. прихода
//         .F.  в ед. расхода
//          0   в осн. ед.
//          1   в ед. расхода
//          2   в ед. прихода
//          3   в ед. прихода KolOut1 или KolOut
//          4   в ед. расхода KolOut2 или KolOut
//          NIL то в случае реализации lPlus = nKolPrice
//                 в случае склада в зависимости pVid и pType
// В случае услуг,то в ед. хранения
LOCAL nKol1
LOCAL  cAl:=ALIAS()
PRIVATE pFor
IF nEd = NIL
  IF GetPrefix() == "T"
    lPlus := 0
  ENDIF
  IF GlobalTask = "05" .or. (GlobalTask == 'SR'.and.type('IsPriceList')='L'.and.memvar->IsPriceList)
    IF lPlus = NIL
      lPlus := MemVar->nKolPrice
    ENDIF
  ENDIF
  IF lPlus != NIL
    IF ValType(lPlus) = "N"
      nEd := IF(lPlus = 0,0,IF(lPlus = 1 .OR. lPlus = 4,iMLABEL->N_R,iMLABEL->N_P))
      IF lPlus < 3
        lPlus := NIL
      ENDIF
      ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
          nEd := 0
      lPlus := NIL
    ELSE
      nEd := IF(lPlus,iMLABEL->N_P,iMLABEL->N_R)
      lPlus := NIL
    ENDIF
  ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
      nEd := 0
  ELSEIF TYPE('pVid') = "C" .AND. (pVid = '1' .OR. pVid = '2') .AND. pType != "4"
    nEd := IF(pVid = '1' .AND. pType != "+",iMLABEL->N_P,iMLABEL->N_R)
  ELSE
    nEd := 0
  ENDIF
ENDIF
IF lPlus = NIL
  PRIVATE Q,R
  pFor:= iMLABEL->(FieldGet(FieldPos("ALGO"+IF(nEd = 0,"",NTOC(nEd)))))
  m->Q := 1
  m->R:= iMLABEL->(FieldGet(FieldPos("R"+IF(nEd = 0,"",NTOC(nEd)))))
  nKol1:=1

  IF !EMPTY(pFor).AND.TYPE(pFor)='N'

#ifdef __HARBOUR__
     SELECT(0)
     nKol1:=&(pFor)
     SELECT (cAl)
#else
     nKol1:=m->(&pFor)
#endif

  ENDIF
  RETURN DIV(nKol,nKol1)
ENDIF
IF FieldPos("KolOut1") != 0
  RETURN IF(lPlus = 3,FIELD->KolOut1,FIELD->KolOut2)
ENDIF
RETURN FIELD->KolOut

FUNCTION RetEdR(lPlus,nEd)
//---------------------------------------------------------------------------//
// Возвращает коэффициент R для текущуей ед. измерения
// lPlus - .T.  в ед. прихода
//         .F.  в ед. расхода
//          0   в осн. ед.
//          1,4   в ед. расхода
//          2,3   в ед. прихода
//          NIL то в случае реализации lPlus = nKolPrice
//                 в случае склада в зависимости pVid и pType
// В случае услуг,то в ед. хранения
IF nEd = NIL
  IF GetPrefix() == "T"
    lPlus := 0
  ENDIF
  IF GlobalTask = "05" .or. (GlobalTask == 'SR'.and.type('IsPriceList')='L'.and.memvar->IsPriceList)
    IF lPlus = NIL
      lPlus := MemVar->nKolPrice
    ENDIF
  ENDIF
  IF lPlus != NIL
    IF ValType(lPlus) = "N"
      nEd := IF(lPlus = 0,0,IF(lPlus = 1.OR.lPlus = 4,iMLABEL->N_R,iMLABEL->N_P))
    ELSE
      nEd := IF(lPlus,iMLABEL->N_P,iMLABEL->N_R)
    ENDIF
  ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
      nEd := 0
  ELSEIF TYPE('pVid') = "C" .AND. (pVid = '1' .OR. pVid = '2') .AND. pType != "4"
    nEd := IF(pVid = '1' .AND. pType != "+",iMLABEL->N_P,iMLABEL->N_R)
  ELSE
    nEd := 0
  ENDIF
ENDIF
RETURN IF(nEd = 0,0,iMLABEL->(FieldGet(FieldPos("R"+NTOC(nEd)))))
//---------------------------------------------------------------------------//
FUNCTION RetEd(lPlus,nEd)
//---------------------------------------------------------------------------//
// Возвращает текущую ед. измерения
// lPlus - .T.  в ед. прихода
//         .F.  в ед. расхода
//          0   в осн. ед.
//          1,4   в ед. расхода
//          2,3   в ед. прихода
//          NIL то в случае реализации lPlus = nKolPrice
//                 в случае склада в зависимости pVid и pType
// В случае услуг,то в ед. хранения
IF nEd = NIL
  IF GetPrefix() == "T"
    lPlus := 0
  ENDIF
  IF GlobalTask = "05" .or. (GlobalTask == 'SR'.and.type('IsPriceList')='L'.and.memvar->IsPriceList)
    IF lPlus = NIL
      lPlus := MemVar->nKolPrice
    ENDIF
  ENDIF
  IF lPlus != NIL
    IF ValType(lPlus) = "N"
      nEd := IF(lPlus = 0,0,IF(lPlus = 1.OR.lPlus = 4,iMLABEL->N_R,iMLABEL->N_P))
    ELSE
      nEd := IF(lPlus,iMLABEL->N_P,iMLABEL->N_R)
    ENDIF
  ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
    nEd := 0
  ELSEIF TYPE('pVid') = "C" .AND. (pVid = '1' .OR. pVid = '2') .AND. pType != "4"
    nEd := IF(pVid = '1' .AND. pType != "+",iMLABEL->N_P,iMLABEL->N_R)
  ELSE
    nEd := 0
  ENDIF
ENDIF
RETURN iMLABEL->(FieldGet(FieldPos("ED"+IF(nEd = 0,"",NTOC(nEd)))))

FUNCTION RetSumEd(nSum,lPlus,nEd,nR)
//---------------------------------------------------------------------------//
// Переводит цену в тек.доп.ед.изм.
// или проводит перевод кол-ва из доп.ед.изм. в основную
// lPlus - .T.  в ед. прихода
//         .F.  в ед. расхода
//          0   в осн. ед.
//          1   в ед. расхода
//          2   в ед. прихода
//          3   в ед. прихода SumOut1/KolOut1 или SumOut/KolOut
//          4   в ед. расхода SumOut2/KolOut2 или SumOut/KolOut
//          NIL то в случае реализации lPlus = nKolPrice
//                 в случае склада в зависимости pVid и pType
// В случае услуг,то в ед. хранения
LOCAL nSum1
LOCAL pFor
LOCAL  cAl:=ALIAS()
IF nEd = NIL
  IF GetPrefix() == "T"
    lPlus := 0
  ENDIF
  IF GlobalTask = "05" .or. (GlobalTask == 'SR'.and.type('IsPriceList')='L'.and.memvar->IsPriceList)
    IF lPlus = NIL
      lPlus := MemVar->nKolPrice
    ENDIF
  ENDIF
  IF lPlus != NIL
    IF ValType(lPlus) = "N"
      nEd := IF(lPlus = 0,0,IF(lPlus = 1 .OR. lPlus = 4,iMLABEL->N_R,iMLABEL->N_P))
      IF lPlus < 3
        lPlus := NIL
      ENDIF
      ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
      nEd := 0
      lPlus := NIL
    ELSE
      nEd := IF(lPlus,iMLABEL->N_P,iMLABEL->N_R)
      lPlus := NIL
    ENDIF
  ELSEIF TYPE('pVid') = "C" .AND. TYPE('pType') = "C" .AND. ( pVid = '0' .OR. pVid = '1' .OR. pVid = "2" ) .AND. pType = "9"
    nEd := 0
  ELSEIF TYPE('pVid') = "C" .AND. (pVid = '1' .OR. pVid = '2') .AND. pType != "4"
    nEd := IF(pVid = '1' .AND. pType != "+",iMLABEL->N_P,iMLABEL->N_R)
  ELSE
    nEd := 0
  ENDIF
ENDIF
IF lPlus = NIL
  PRIVATE Q,R
  pFor:= iMLABEL->(FieldGet(FieldPos("ALGO"+IF(nEd = 0,"",NTOC(nEd)))))
  m->Q := 1
  m->R:= IF(EMPTY(nR),iMLABEL->(FieldGet(FieldPos("R"+IF(nEd = 0,"",NTOC(nEd))))),nR)
  nSum1:=1
  IF !EMPTY(pFor).AND.TYPE(pFor)='N'
#ifdef __HARBOUR__
     SELECT(0)
     pFor:=TRIM(pFor)
     nSum1:=&pFor
     SELECT (cAl)
#else
     nSum1:=m->(&pFor)
#endif
  ENDIF
  RETURN nSum*nSum1
ENDIF
IF FieldPos("KolOut1") != 0
  RETURN IF(lPlus = 3,Div(FIELD->SumOut1,FIELD->KolOut1),Div(FIELD->SumOut2,FIELD->KolOut2))
ELSEIF FieldPos("SumOutR") != 0
  RETURN Div(FIELD->SumOutR,FIELD->KolOut)
ENDIF
RETURN Div(FIELD->SumOut,FIELD->KolOut)

  FUNCTION GetCena(cPre,nKol,cMat,nEd,aEd0,cValCode,nRound,lSkid,nCena,nR,nNoWork)
//--------------------------------------------------------------------------//
// lSkid    - если не равно NIL, то в качестве базовой берется nCena
//            и расчитывается только общая скидка/накидка
// MLabel установлена и связана с RSkid,RSkidQ,MPart
// MSCHET установлена
// SPR_PART установлена

LOCAL nArea:=SELECT(), nMyltiply := 1
LOCAL nCodeCen:=m->pCodeCen, nPoz, cKey
PushData(nWork)
IF(!EMPTY(nNoWork), nWork:=nNoWork, NIL)

IF cPre = "V" .AND. SELECT("VALUTA") != 0
 IF UPPER(IF(cValCode = NIL,MLABEL->CODEVAL,cValCode)) != UPPER(VALUTA->CODE)
   VALUTA->(dbSeek(UPPER(IF(cValCode = NIL,MLABEL->CODEVAL,cValCode))))
 ENDIF
 nRound := IF(nRound = NIL,VALUTA->ACCURACY,MIN(VALUTA->ACCURACY,nRound))
 nMyltiply := VALUTA->MYLTIPLY
ELSE
 nRound := IF(nRound = NIL,CURR_MAIN,MIN(CURR_MAIN,nRound))
ENDIF
IF aEd0==NIL
   aEd0:=aEd
ENDIF
IF lSkid = NIL
  nCena := 0
  IF YesMatReal//.AND.nCodeCen=0 (перенес чуть ниже строк на 15 Serg)
   IF ALIAS() == "MKART"
     cKey := UPPER(Grup+NNum)
     AEVAL(aWork,{|x,nWork| IF(UPPER(x[1]) = cKey .AND. nNoWork != nWork,nKol += x[3],NIL) })
   ENDIF
   IF YesMatReal .AND. ALIAS() == "TMKART" //.AND.nCodeCen=0  (убрал Serg)
      cKey := UPPER(Grup+NNum)
      MKART->(dbPush(,"MKART_P1",,{"UPPER(GRUP+NNUM)",cKey,},""))
      MKART->(DBEVAL({|| IF(nPoz=nNoWork,,nKol += aWork[nPoz,3]) },{|| (nPoz := ASCAN(aWork,{|x| UPPER(x[1]) == cKey+UPPER(Partia+Sclad) })) != 0 }))
      MKART->(dbPop())
   ENDIF
   IF m->pControl=2
      nKol+=MPart->Kol
   ENDIF
   IF nCodeCen=0
      nCodeCen:=GetCodeCen(nKol)
   ENDIF
  ENDIF
    IF nCodeCen>0
     IF nCodeCen>4
        nCodeCen:=1
     ENDIF
     IF YesMatReal
        IF IF(cMat!=NIL,;
              EMPTY(;
                    (;
                      nCena:=VAL(;
                                SUBSTR(;
                                       cMat,;
                                       IF(cPre='O',Q_OCENA1,Q_VCENA1)+(nCodeCen-1)*15,;
                                       15;
                                       );
                                 );
                    );
                   ),;
              EMPTY(nWork).OR.;
              EMPTY(;
                    (;
                      nCena:=aWork[nWork,IF(cPre='O',10,14)+nCodeCen];
                     );
                   );
              )
           nCena:=__RLABEL->(FieldGet(FieldPos(cPre+'Cena'+STR(nCodeCen,1,0))))
        ENDIF
        IF m->pControl>0.AND.m->pCodeCen>0 .AND. m->pControl<3  //VIKTOR скидки по ценам РАСЧЕТ знач скидки 19.06.97 and
           IF MLabel->(Kol1+Kol2+Kol3+Kol4+Kol5)>0
              //Индивидуальная шкала
              SELECT MLabel
              IF nKol<=Kol1
              ELSEIF (EMPTY(Kol2).OR.nKol<=Kol2).AND.!EMPTY(Skidka1)
                 nCena:=nCena*(1-Skidka1/100)
                 nRound:=SetTochn(cPre,nRound)
              ELSEIF (EMPTY(Kol3).OR.nKol<=Kol3).AND.!EMPTY(Skidka2)
                 nCena:=nCena*(1-Skidka2/100)
                 nRound:=SetTochn(cPre,nRound)
              ELSEIF (EMPTY(Kol4).OR.nKol<=Kol4).AND.!EMPTY(Skidka3)
                 nCena:=nCena*(1-Skidka3/100)
                 nRound:=SetTochn(cPre,nRound)
              ELSEIF (EMPTY(Kol5).OR.nKol<=Kol5).AND.!EMPTY(Skidka4)
                 nCena:=nCena*(1-Skidka4/100)
                 nRound:=SetTochn(cPre,nRound)
              ELSEIF !EMPTY(Kol5).AND.nKol>Kol5.AND.!EMPTY(Skidka5)
                 nCena:=nCena*(1-Skidka5/100)
                 nRound:=SetTochn(cPre,nRound)
              ENDIF
           ELSE
              PRIVATE C:=nCena,pFor
              SELECT RSkidQ
              IF Kol1+Kol2+Kol3+Kol4>0
                 IF nKol<=Kol1
                 ELSEIF (EMPTY(Kol2).OR.nKol<=Kol2).AND.!EMPTY(&('Algo1'+cPre))
                    pFor:='Algo1'+cPre
                    nCena:=&(&pFor)
                    nRound:=SetTochn(cPre,nRound)
                 ELSEIF (EMPTY(Kol3).OR.nKol<=Kol3).AND.!EMPTY(&('Algo2'+cPre))
                    pFor:='Algo2'+cPre
                    nCena:=&(&pFor)
                    nRound:=SetTochn(cPre,nRound)
                 ELSEIF (EMPTY(Kol4).OR.nKol<=Kol4).AND.!EMPTY(&('Algo3'+cPre))
                    pFor:='Algo3'+cPre
                    nCena:=&(&pFor)
                    nRound:=SetTochn(cPre,nRound)
                 ELSEIF !EMPTY(Kol4).AND.nKol>Kol4.AND.!EMPTY(&('Algo4'+cPre))
                    pFor:='Algo4'+cPre
                    nCena:=&(&pFor)
                    nRound:=SetTochn(cPre,nRound)
                 ENDIF
              ENDIF
           ENDIF
        ENDIF
     ELSE
        IF UPPER(pCodeVal)==UPPER(GlobalValuta)
           nCena:= __RLABEL->(FieldGet(FieldPos(cPre+'Cena'+STR(nCodeCen,1,0))))
        ELSE
           IF UPPER(pCodeVal)==UPPER(MLabel->CodeVal)
              IF cPre='V'
                 nCena:= __RLABEL->(FieldGet(FieldPos(cPre+'Cena'+STR(nCodeCen,1,0))))
              ELSE
                 nCena:=__RLABEL->(FieldGet(FieldPos('VCena'+STR(nCodeCen,1,0))))*EVAL(Global_BCurs,pCenaVal,nMyltiply)
              ENDIF
           ELSE
              IF cPre='O'
                 nCena:= __RLABEL->(FieldGet(FieldPos(cPre+'Cena'+STR(nCodeCen,1,0))))
              ELSE
                 nCena:=Div(__RLABEL->(FieldGet(FieldPos('OCena'+STR(nCodeCen,1,0)))),EVAL(Global_BCurs,pCenaVal,nMyltiply))
              ENDIF
           ENDIF
        ENDIF
     ENDIF
  ELSE
    nRound := 6 //Складская цена идет без округления
    IF cPre='V'
      nCena:=Div(__CENA,EVAL(Global_BCurs,IF(TYPE("pCodeVal") = "C" .AND. TYPE("pDate") = "D" .AND. UPPER(pCodeVal) != UPPER(MLABEL->CODEVAL),InputVCurs(pCodeVal,pDate,.F.)[1],pCenaVal),nMyltiply))
    ELSE
      nCena:=__CENA
    ENDIF
  ENDIF
ENDIF
SELECT(nArea)
IF TYPE('pNakidka')='N'.AND.TYPE('pSkidka')='N'
  nCena:=(1+pNakidka/100)*(1-pSkidka/100)*nCena
  IF pNakidka # 0 .OR. pSkidka # 0
     nRound:=SetTochn(cPre,nRound)
  ENDIF
ENDIF
IF nEd!=NIL.AND.nEd>1 .AND. !EMPTY(aEd0[nEd,3])
  PRIVATE Q:=1,R:=IF(nR != NIL,nR,IF(nWork==NIL.OR.nWork=0,aEd0[nEd,4],aWork[nWork,20]))
  nCena:= nCena*&(aEd0[nEd,3])
ENDIF

nWork:= PopData()
RETURN _RROUND(nCena,nRound)

STATIC FUNCTION SetTochn(cPre, nRound)
******************
IF GlobalTask = '05'
   IF cPre='V' .AND. TYPE('RoundVal') = 'N'
      nRound := MIN(nRound,m->RoundVal)
   ELSEIF cPre#'V' .AND. TYPE('RoundGlob') = 'N'
      nRound := MIN(CURR_MAIN,m->RoundGlob)
   ENDIF
ENDIF

RETURN nRound

                    PROCEDURE SetCenaX(aWork,nWork,nKol,cEd,nR,lNoStack,lFromImport)
//--------------------------------------------------------------------------//
// Обновление цены
IF GlobalTask="TZ"
  aWork[nWork,4] := TzPrice(MKart->Sclad,MKart->(Grup+NNum+IF(IsPricePartia(MKart->Sclad),Partia,"")),pCodeCen,pDate)
  aWork[nWork,8] := 0
ELSE
  aWork[nWork,4] := GetCenaX("O",IF(EMPTY(lNoStack),aWork[nWork,4],0),aWork[nWork,3],aWork[nWork,2],aWork[nWork,20],nKol,cEd,nR,nWork)
  aWork[nWork,8] := GetCenaX("V",IF(EMPTY(lNoStack),aWork[nWork,8],0),aWork[nWork,3],aWork[nWork,2],aWork[nWork,20],nKol,cEd,nR,nWork)
ENDIF
IF lNoStack = NIL
  PushKart()
  AEVAL(aWork,{|x,n| IF(n != nWork .AND.UPPER(aWork[nWork,1]) = UPPER(LEFT(x[1],18)),(SeekKart(x[1]),SetCenaX(aWork,n,x[3]+nKol-aWork[nWork,3],x[2],x[20],.T.)),NIL) })
  PopKart()
  aWork[nWork,3] := nKol
  aWork[nWork,2] := cEd
  aWork[nWork,20] := nR
  IF lFromImport==NIL
     // Запишем информацию о редактировании
     REAL_W_TIME(2)
  ENDIF
ENDIF
RETURN

               FUNCTION GetCenaX(xCena,nCena,nBakKol,cBakEd,nBakR,nKol,cEd,nR,nWork)
//--------------------------------------------------------------------------//
// Возврат цены рублевой / валютной
LOCAL aEd := IniEd(), bakNEd := 1, tekNEd := 1
LOCAL nBakEd := IF(LEN(aEd) > 1,ASCAN(aEd,{|y|UPPER(y[1])==UPPER(cBakEd)}),RetNumEd())
LOCAL nEd :=IF(LEN(aEd) > 1,ASCAN(aEd,{|y|UPPER(y[1])==UPPER(cEd)}),RetNumEd())
//ALTD()
IF EMPTY(nCena) .OR. (!LNEWCENA.AND.GetCena(xCena,nBakKol,,nBakEd,aEd,,,,,nBakR,nWork) = nCena)
 IF LNEWCENA
   RETURN RealAddPrice(pNumber,MKart->(Grup+NNum+IF(IsAddPricePartia(pNumber)[1],Partia,"")),VALTYPE(xCena)#'C'.OR.xCena#'V',MKart->Sclad,'со скидкой-накидкой',cEd,nR)
 ELSE
   RETURN GetCena(xCena,nKol,,nEd,aEd,,,,,nR,nWork)
 ENDIF
ELSEIF UPPER(cBakEd) != UPPER(cEd) .OR. nBakR != nR
  PRIVATE Q, R
  IF nEd > 1
    MemVar->Q := 1
    MemVar->R := nR
    tekNEd := &(aEd[nEd,3])
  ENDIF
  IF nBakEd > 1
    MemVar->Q := 1
    MemVar->R := nBakR
    bakNEd := &(aEd[nBakEd,3])
  ENDIF
  RETURN Div(nCena*tekNEd,bakNEd)
ENDIF
RETURN nCena

FUNCTION mycolor(xKol,xCol,bIsNoInAddPrice,x)
   Local cCol
   IF x=1
      DO CASE
         CASE xKol>0
            IF EVAL(bIsNoInAddPrice)
               cCol:='n+/w'
            ELSE
               cCol:=xCol
            ENDIF
         CASE xKol=0
            cCol:='w+/w'
         CASE xKol<0
            cCol:='r/w'
      ENDCASE
   ELSE
      DO CASE
         CASE xKol>0
            IF EVAL(bIsNoInAddPrice)
               cCol:='w/n'
            ELSE
               cCol:='w+/n'
            ENDIF
         CASE xKol=0
            cCol:='n*/w'
         CASE xKol<0
            cCol:='w+/r'
      ENDCASE
   ENDIF

RETURN cCol

                          PROCEDURE InsOldKol(nAdd,aWork,nWork)
//--------------------------------------------------------------------------//
// Обновление старого кол-ва
LOCAL nKol1,nSum1,nKolOld,nOperFact, nKol2
IF YesMatReal
  RetKolSum(nAdd = S_LIB_ADD,@nKol1,@nSum1,@nKolOld)
  aWork[nWork,5] := nKol1
  aWork[nWork,6] := nSum1
  aWork[nWork,19] := nKolOld
ELSE
  RetKol(nAdd = S_LIB_ADD,@nKolOld,@nOperFact,@nKol1,@nKol2)
  IF !(pType="9".AND.(pVid="1".OR.pVid="2"))
    aWork[nWork,19] := nKolOld
  ENDIF
  aWork[nWork,26] := nKol1
  aWork[nWork,27] := nKol2
  aWork[nWork,28] := nOperFact
ENDIF
RETURN

                        FUNCTION InputR(n,lNoWork)
//--------------------------------------------------------------------------//
LOCAL nWin:=WSELECT()
LOCAL nTop:=ROW()-1
LOCAL nBottom:=nTop+3,nLeft:=25,nRight:=46
LOCAL GetList:={},sRest,nCursor:=SETCURSOR()
LOCAL aSetKey:=SaveSetKey()
WSELECT(0)
IF EMPTY(m->R:=IF(lNoWork != NIL,aEd[n,4],aWork[nWork,20]))
  m->R:= aEd[n,4]
ENDIF
sRest:=SAVESCREEN(nTop,nLeft,nBottom+2,nRight+2)
ShadowBox(' Коэффициент? ',nTop,nLeft,nBottom,nRight,COL_SELECT)
@ nTop+1,nLeft+3 GET m->R PICT '9999999999.9999'
SETCURSOR(1)
READ
SETCURSOR(nCursor)

IF lNoWork = NIL
 aWork[nWork,20]:=m->R
ELSE
 aEd[n,4] := m->R
ENDIF
RESTSCREEN(nTop,nLeft,nBottom+2,nRight+2,sRest)
WSELECT(nWin)
RestSetKey(aSetKey)
RETURN(.T.)

STATIC FUNCTION Forward(n)
LOCAL nRec,cGrup
MGrup->(DBSKIP(n))
nRec:=MGrup->(RECNO())
cGrup:=MGrup->(Code)
WHILE !DBSEEK(UPPER(IF(!lKarto,cGrup,' '+pSclad+cGrup)))
   MGrup->(DBGOTO(nRec))
   MGrup->(DBSKIP(n))
   nRec:=MGrup->(RECNO())
   cGrup:=MGrup->(Code)
   IF MGrup->(EOF()).OR.MGrup->(BOF())
      EXIT
   ENDIF
ENDDO
IF !FOUND()
   GO TOP
   MGrup->(DBGOTOP())
ENDIF
RETURN(2)

STATIC PROCEDURE RetKolSum(lAdd,nKol1,nSum1,nKolOld)
//--------------------------------------------------------------------------//
// Возвращет исходные значения по заказам
nKol1 := nSum1 := nKolOld := 0
IF YesMatReal
  IF !lAdd
    MDOCM->(dbPush(,"RBOOKM","",{MDOCM->(ORDKEY()),UPPER(MDOC->DOPCODE+MKART->GRUP+MKART->NNUM+MKART->PARTIA+MKART->SCLAD),,.F.,{"RBOOKM"}},""))
    IF MDOCM->(!EOF())
      nKol1 := MDOCM->KOL1
      nSum1 := MDOCM->SUM1
      nKolOld := MDOCM->KOL
    ENDIF
  ENDIF
  MDOCM->(SetZakKolSum(lAdd,@nKol1,@nSum1))
  IF !lAdd
    MDOCM->(dbPop())
  ENDIF
ENDIF
RETURN

STATIC PROCEDURE RetKol(lAdd,nKolOld,nOperFact,nKol1,nKol2)
//--------------------------------------------------------------------------//
// Возвращет исходные значения по складу
nKolOld := 0
nOperFact := -1
nKol1 := 0
nKol2 := 0
IF !lAdd
  MDOCM->(dbPush(,"MDOCM_W","",{ORDKEY(),UPPER(MDOC->SCLAD+MDOC->VID+MDOC->TYPE+MDOC->CODEDOC+MDOC->NUMDOC+MKART->GRUP+MKART->NNUM+MKART->PARTIA),,.F.,{"MDOCM_W"}},""))
  IF MDOCM->(!EOF())
    nKolOld := MDOCM->KOL
    nOperFact := MDOCM->OPER_FACT
    nKol1 := MDOCM->KOL1
    nKol2 := MDOCM->KOL2
  ENDIF
  MDOCM->(dbPop())
ENDIF
RETURN

FUNCTION MYF(x)
   SayAndWait(x)
RETURN ''

FUNCTION  ScanWorkList()
//--------------------------------------------------------------------------
RETURN IF(ValType(aWork)=="A",;
          ASCAN(aWork,{|x| UPPER(x[1])==UPPER(Grup+NNum+IF("MKART"$ALIAS(),IF(IS_PARTIA_KOL,MKART->Partia,SPACE(L_PARTIA))+MKART->Sclad,SPACE(L_PARTIA)+pSclad)) }),;
          0)

FUNCTION MyWrite(aWork)
Local x,y
   ALTD()
   ASIZE(aGlobVars,0)
   FOR i:=1 to LEN(aWork)
      AADD(aGlobVars,{aWork[i,1],aWork[i,2],aWork[i,3],aWork[i,4]})
   NEXT

//    ASIZE(aGlobVars,0)
//    AADD(aGlobVars,{"000080000000000001          2","л    ",12,24})

RETURN NIL

#11:  Author: МаринаLocation: Кондрина Марина Александровна PostPosted: 30 Mar 2007 13:30
    —
Елы палы, с чего начать распутывать этот коротенький пример?
Само-то событие где?

#12:  Author: nordkLocation: Горбунов Константин PostPosted: 02 Apr 2007 14:52
    —
Честно говоря не понял вопрос

#13:  Author: dvkdvkLocation: Дмитрий Коньяков PostPosted: 25 Oct 2007 20:06
    —
Прошу не пинать за делитанский вопрос.
Уважаемый nordk проделал титаническую работу отладив и выложив эту груду кода и очень хочется посмотреть как же это все работает! Естественно в отладчике, естественно в пошаговом режиме. Подскажите как все это можно запустить, почему код разбит на 5 частей? Я правильно понимаю: берем все 5 частей и сваливаем в один файл prg, далее транслируем по F2 и вешаем на событие прайс листа, и так и отлаживаем? Может я рано замахнулся на эту груду кода и нужно идти читать букварь... но плох тот солдат кто не мечтает стать генералом

#14:  Author: nordkLocation: Горбунов Константин PostPosted: 25 Oct 2007 21:11
    —
Вы абсолютно правильно понимаете.
На 5 частей разбито из-за большого объема



-> Программирование в БЭСТ-4


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group