Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

УРОК 201 Событие "прайс-лист"

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 22 Mar 2007 19:59    Post subject: УРОК 201 Событие "прайс-лист" Reply with quote

Номер урока исходя из логики кадр первый дубль два

Итак создание строк документов.
Вот только на каком примере будем делать на заказах на накладных ?
Есь желающие подкинуть конкретику для рассмотрения вопроса?
Back to top
View user's profile Send private message Send e-mail
EJ



Joined: 24 Aug 2005
Posts: 47
Location: цЙМЕОЛП еЧЗЕОЙК аТШЕЧЙЮ
Occupation: уЙУФЕНОЩК БДНЙОЙУФТБФПТ
Interests: нПУЛЧБ

PostPosted: 23 Mar 2007 09:51    Post subject: Reply with quote

ИМХО на заказах бОлее насущно...
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 23 Mar 2007 13:23    Post subject: Reply with quote

На заказах так на заказах - задачку дайте: что конкретно сделаем ?
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 14:49    Post subject: Reply with quote

Поскольку предложений нет, даю общее описание

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.,
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 14:52    Post subject: Reply with quote

Ниже предлагается исходный код образца решения для заказов:

Часть 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)))
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 14:56    Post subject: Reply with quote

Часть 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.
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 14:58    Post subject: Reply with quote

Часть 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)
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 15:00    Post subject: Reply with quote

Часть 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)
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 15:02    Post subject: Reply with quote

Часть 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.)
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 29 Mar 2007 15:08    Post subject: Reply with quote

Часть 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
Back to top
View user's profile Send private message Send e-mail
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 30 Mar 2007 13:30    Post subject: Reply with quote

Елы палы, с чего начать распутывать этот коротенький пример?
Само-то событие где?
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 02 Apr 2007 14:52    Post subject: Reply with quote

Честно говоря не понял вопрос
Back to top
View user's profile Send private message Send e-mail
dvkdvk



Joined: 16 Oct 2007
Posts: 14
Location: Дмитрий Коньяков
Occupation: Икрус
Interests: Новосибирск

PostPosted: 25 Oct 2007 20:06    Post subject: Reply with quote

Прошу не пинать за делитанский вопрос.
Уважаемый nordk проделал титаническую работу отладив и выложив эту груду кода и очень хочется посмотреть как же это все работает! Естественно в отладчике, естественно в пошаговом режиме. Подскажите как все это можно запустить, почему код разбит на 5 частей? Я правильно понимаю: берем все 5 частей и сваливаем в один файл prg, далее транслируем по F2 и вешаем на событие прайс листа, и так и отлаживаем? Может я рано замахнулся на эту груду кода и нужно идти читать букварь... но плох тот солдат кто не мечтает стать генералом
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 25 Oct 2007 21:11    Post subject: Reply with quote

Вы абсолютно правильно понимаете.
На 5 частей разбито из-за большого объема
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru