Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 22 Mar 2007 19:59 Post subject: УРОК 201 Событие "прайс-лист"
Номер урока исходя из логики кадр первый дубль два
Итак создание строк документов.
Вот только на каком примере будем делать на заказах на накладных ?
Есь желающие подкинуть конкретику для рассмотрения вопроса?
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 29 Mar 2007 14:49 Post subject:
Поскольку предложений нет, даю общее описание
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 переменную
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 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
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 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 := ""
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
Posted: 29 Mar 2007 15:00 Post subject:
Часть 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
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'})
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
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))));
}
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 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)
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 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.)
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
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)
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
Joined: 16 Oct 2007 Posts: 14 Location: Дмитрий Коньяков Occupation: Икрус Interests: Новосибирск
Posted: 25 Oct 2007 20:06 Post subject:
Прошу не пинать за делитанский вопрос.
Уважаемый nordk проделал титаническую работу отладив и выложив эту груду кода и очень хочется посмотреть как же это все работает! Естественно в отладчике, естественно в пошаговом режиме. Подскажите как все это можно запустить, почему код разбит на 5 частей? Я правильно понимаю: берем все 5 частей и сваливаем в один файл prg, далее транслируем по F2 и вешаем на событие прайс листа, и так и отлаживаем? Может я рано замахнулся на эту груду кода и нужно идти читать букварь... но плох тот солдат кто не мечтает стать генералом
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