Запрос данных из Номенклатуры
PriceInfo
variant PriceInfo(int <PrMater>, string <FieldName>, variant <N>[, INTEGER <TableID>[, STRING <ArrName>]])
Функция возвращает информацию из поля или свойства с именем <FieldName>
записи (материала) с номером <PrMater>
справочника номенклатуры. Если данное поле для данной записи содержит NULL, функция возвращает значение по умолчанию <N>
.
Необязательный параметр <TableID>
определяет источник данных:
- 1 — номенклатурный справочник;
- 2 — справочник сборочных единиц.
Если этот параметр не указан, используется номенклатурный справочник.
<ArrName>
— имя создаваемого массива, в который будут занесены все элементы перечисляемого или множественного свойства. Каждый элемент заполняет два элемента массива:
- первый значение элемента (число или строка в зависимости от типа значений свойства);
- второй название элемента (строка);
Если задано <ArrName>
, то <FieldName>
должно задавать идентификатор перечисляемого или множественного свойства, а функция возвратит количество элементов у этого свойства (размерность массива <ArrName>
будет в два раза больше)
В качестве <FieldName>
могут выступать названия свойств материалов и сборочных единиц и следующие поля:
Из номенклатурного справочника:
- COD — ID материала
- MATTYPE — ID типа материала
- UNITS — ID единицы измерения материала
- PRICE — цена материала
- MATTYPENAM — название типа материала
- MATNAME — название материала
- ARTICLE — артикул материала
- UNITSNAME — название единицы измерения
- GROUPID — ID группы материала
- GROUPNAME — название группы материала
- PARENTID — ID "родителя" данной номенклатурной единицы.
Из справочника сборочных единиц
- NAME — название сборочной единицы
- FURNTYPE — Furntype сборочной единицы
- GROUPID — ID группы сборочной единицы
- GROUPNAME — название группы сборочной единицы
NPGetByWhere
INTEGER NPGetByWhere(INTEGER <TableID>, { STRING <Where> | STRING ARRAY <Where>}, STRING <ArrName>[, INTEGER <SubsID>])
Функция извлекает из справочника "Номенклатура" или справочника "Сборочные единицы" записи, удовлетворяющие условию, заданному в строке или массиве строк <Where>
. Строка или массив строк <Where>
содержит логическое выражение, задающее условие отбора. При этом идентификаторы свойств должны быть заключены в квадратные скобки ([]). Синтаксис выражения должен удовлетворять синтаксису предложения WHERE части SQL-запроса/ Строка с условием должна быть не длиннее 255 символов. Если необходимо условие большей длины, то вместо одной строки необходимо использовать массив строк, каждая из которых не должна превышать 255 символов.
<TableID>
— источник данных:
- 1 — Извлечь из справочника "Номенклатура";
- 2 — Извлечь из справочника "Сборочные единицы".
<ArrName>
— строка с именем массива, в который надо положить результат. Массив создается или пересоздается внутри функции.
<SubstID>
— код подстановки или 0: если задан код номенклатурной подстановки, то выбираем только из этой подстановки
Функция возвращает количество извлеченных записей. Если их больше ноля, то создается массив с именем <ArrName>
, в котором находятся ID найденных записей.
Внимание!
Если результат функции присваивается какой-то переменной, то эта переменная должна быть предварительно определена.
Пример на макроязыке к3:
bywhere_band: macro ProtoPath+"SetMat.mac" Mater; h_dsp=PriceInfo(Mater,"Thickness",16); Art=priceinfo(Mater,"ARTICLE",""); defarr arr[2]; splitbydelim(Art," ",arr); ArtMajor=arr[1]; ArtMinor=arr[2]; // putmsg(ArtMajor); // 18 - 1х19 // 26 - 0,8х19 nElem=npgetbywhere(1,"Article LIKE \"%"+str(ArtMajor)+"%\" AND [BandType] in (18, 26)","ResArr"); if nElem>0 { Typ_Kro=ResArr[1]; } else { ArtMajor=right(ArtMajor,len(ArtMajor)-1) nElem=npgetbywhere(1,"Article LIKE \"%"+str(ArtMajor)+"%\" AND [BandType] in (18, 26)","ResArr"); if nElem>0 { Typ_Kro=ResArr[1]; } } putmsg("Подобрана кромка "+priceinfo(Typ_Kro,"MATNAME","")); return;
NPGetByProps
INTEGER NPGetByProps(INTEGER <GoodsID>, VARIANT <GoodsProp>, VARIANT <MatProp>, DOUBLE <ValProp>[, STRING <Filter>])
INTEGER NPGetByProps(INTEGER <GoodsID>, VARIANT <GoodsProp>, VARIANT ARRAY <MatProp>, DOUBLE <ValProp>[, INTEGER <Number>[, INTEGER <Start>]][, STRING <Filter>])
Функция ищет номенклатурную единицу из множества, назначенного сборочной единице <GoodsID>
свойством <GoodsProp>
, с наибольшим значением свойства <MatProp>
(или группы свойств, заданной массивом <MatProp>
), которое меньше либо равно заданного значения <ValProp>
.
<Number>
— количество номенклатурных свойств. Используется если <MatProp>
— массив. Если не задано, то <Number>
равно размерности массива <MatProp>
<Start>
— индекс первого номенклатурного свойства в массиве <MatProp>
. Используется если <MatProp>
— массив. Если не задано, то <Start>
равно единице.
<Filter>
– строка-условие фильтрации, в которой можно использовать идентификаторы свойств, заключенные в квадратные скобки
- >0 — ID найденной номенклатурной единицы
- 0 — номенклатурной единицы с таким значением свойства
<MatProp>
не существует
- -1 — нет сборочной единицы с заданным
<GoodsID>
- -2 — нет свойства
<GoodsProp>
или оно не является множественным
- -3 — нет такого свойства
<MatProp>
или оно имеет не вещественные значения
1. Свойства
<GoodsProp>
и<MatProp>
могут быть заданы строкой — идентификатором свойства, или числом — кодом свойства.2. Свойству
<MatProp>[i]
соответствуют значение<ValProp>[i]
для i от<Start>
до<Start>
+<Number>
–1
Пример на макроязыке к3:
GoodsID=DoorPict; // ID фасада в справочнике изделий GoodsProp="ListMat"; MatProp[1]="Height"; MatProp[2]="Width"; ValProp[1]=dz; ValProp[2]=dx; IDFas=NPGetByProps(GoodsID,GoodsProp,MatProp,ValProp);
Пример на макроязыке к3:
=NPGetByProps(475,”Guide”,”Length”,350.,”[PriceCoeff]>1”);
Пример на макроязыке к3:
//-- Запрос направляющих GoodsID=BoxKType; //-- ID столярного ящика в справочнике изделий GoodsProp="Guide"; MatProp="Length"; IDNapr=0; if ClKompl>-99 { IDNapr=NPGetByProps(GoodsID,GoodsProp,MatProp,Lbox,"[ColorKompl]="+str(ClKompl)); } else { // PutMSg("У материала "+PriceInfo(PrMater,"MATNAME","Нет")+" не определено свойство ColorKompl. Требуется для подбора направляющих ящика.",0) }
NPGetByPropN
INTEGER NPGetByPropN(INTEGER <EntityID>, VARIANT <MultiProp>, VARIANT <MatProp>, VARIANT <ValProp>[, INTEGER <Number>[, INTEGER <Start>]][, STRING <Filter>])
Функция ищет номенклатурную единицу из множества, назначенного номенклатурной единице <EntityID>
свойством <MultiProp>
, с наибольшим значением свойств <MatProp>
, которые меньше либо равны заданным значениям <ValProp>
.
<EntityID>
— ID номенклатурной единицы
<MultiProp>
— идентификатор или код многозначного свойства, задающего номенклатурное множество
<MatProp>
— идентификатор или код номенклатурного свойства. Может быть массивом
<ValProp>
— вещественное значение номенклатурного свойства. Должен быть массивом, если <MatProp>
— массив
<Number>
— количество номенклатурных свойств. Используется если <MatProp>
— массив. Если не задано, то равно размерности массива <MatProp>
<Start>
— индекс первого номенклатурного свойства в массиве <MatProp>
. Используется если <MatProp>
— массив. Если не задано, то равно 1
<Filter>
— дополнительный фильтр отбора номенклатурных единиц
- >0 — ID найденной номенклатурной единицы
- 0 — номенклатурной единицы с таким значением свойства
<MatProp>
не существует
- –1 — нет такой номенклатурной единицы
- –2 — нет такого свойства
<MultiProp>
или оно не является множественным
- –3 — нет такого свойства
<MatProp>
или оно имеет не вещественные значения
Cвойству
<MatProp[i]>
соответствуют значение<ValProp[i]>
для i от<Start>
до<Start>
+<Number>
–1
Пример на макроязыке к3:
autorol=InStr(1,name,"АВТО",1); // Если в наименовании есть авто значит подбор осуществляется по весу створки if autorol { mas_flap=0 res=getvarinst(1,"massfas",mas_flap,0) IdAcces1=NPGetByPropN(IdAcces1,"ListMat","Weight",mas_flap); }
FixDets
INTEGER FixDets(INTEGER <FixTypeID>, STRING <ArrName>)
Функция создает массив с именем <ArrName>
и заполняет его параметрами типа крепежа типа <FixTypeID>
. Функция возвращает количество деталей крепежа с данным типом. Если чисто деталей с данным типом больше нуля, то создается массива <ArrName>
размерностью 5*n, где n — число деталей крепежа с данным типом.
<ArrName>
[5*i+1] — ID детали крепежа
<ArrName>
[5*i+2] — X-координата точки установки детали относительно точки установки группы крепежа
<ArrName>
[5*i+3] — Y-координата точки установки детали относительно точки установки группы крепежа
<ArrName>
[5*i+4] — Z-координата точки установки детали относительно точки установки группы крепежа
<ArrName>
[5*i+5] — номер используемого правила для этой детали крепежа
FixDetInfo
VARIANT FixDetInfo(INTEGER <DetID>, STRING <Property>, VARIANT <DefValue>)
Функция возвращает значение свойства или поля с именем <Property>
у детали крепежа с ID=<DetID>
. Если такого свойства или поля нет, то возвращается значение <DefValue>
.
Допустимые свойства:
- Y — величина сдвига детали в мм по оси Y
- Ky — величина сдвига детали в долях толщины по оси Y
- Z — величина сдвига детали в мм по оси Z
- Kz — величина сдвига детали в долях толщины по оси Z
- Alpha — угол поворота детали крепежа вокруг оси Z в градусах
- PriceID — ID номенклатурной единицы, соответствующей этой детали крепежа
Пример на макроязыке к3:
getpar pnt1; // указатель на кусок столешницы defarr paninfo[20]; defarr pangeop[100]; onerror end; snp=GetSnap(); setucs lcs pnt1 ; paninfo[1]=pnt1; err=getpan6par(1,paninfo); initarray(paninfo,0); nfixlines=getpan6par(40,paninfo) ifix=0; lb_fix: if ifix<nfixlines { ifix=ifix+1; initarray(paninfo,0); paninfo[1]=ifix; err=getpan6par(40,paninfo); is_end_fx=NBitTest(paninfo[6],1); ndet=FixDets(paninfo[5],"lfixinfo"); // 5 - сторона E; p_id=fixdetinfo(lfixinfo[1],"PriceID",0); // ID детали крепежа ...
FixRuleInfo
VARIANT FixRuleInfo(INTEGER <RuleID>, STRING <Property>, VARIANT <DefValue>)
Функция возвращает значение свойства или поля с именем <Property>
у правила крепежа с ID=<RuleID>
. Если такого свойства или поля нет, то возвращается значение <DefValue>
.
Допустимые свойства:
- Type — тип правила
- Left — минимальное расстояние до левого края торца
- Right — минимальное расстояние до правого края торца
- Step — величина шага кратность шага между экземплярами детали крепежа
- Number — количество экземпляров детали крепежа
- Margin — правила выравнивания деталей крепежа вдоль торца
- Table — имя таблицы при расстановке по таблице или пустая строка, если это правило не по таблице
- Macro — имя макро при расстановке по макро или пустая строка, если это правило не по макро
GetListMat
INTEGER GetListMat(INTEGER <TypeMat>, STRING <ArrayName>)
Функция создает массив с именем <ArrayName>
, который заполняет ID материалов из номенклатурного справочника, согласно критерию <TypeMat>
. Анализируем только видимые объекты
Возможные значения критерия <TypeMat>
:
<TypeMat>
= 1 — кромочные материалы
<TypeMat>
= 2 — отделочные материалы
<TypeMat>
= 3 — материалы панелей
Функция возвращает количество материалов в списке
Пример на макроязыке к3:
// Все уникальные листовые материалы сцены nels=getlistmat(3,"arrbd"); // putmsg(arrbd); defarr temparr[1000]; defarr temparr2[1000]; i=0;j=0; inext: i=i+1; if i<=nels { tran=priceinfo(arrbd[i],"Transparency",0); // Прозрачность if tran>0 { goto inext; } thic=priceinfo(arrbd[i],"Thickness",0); // Толщина ParentID=priceinfo(arrbd[i],"ParentID",0); // ID Родительской записи в справочнике номенклатуры if ParentID>0 { elem=ParentID; } else { elem=arrbd[i]; } if findinarray(temparr,elem)==0 { j=j+1; temparr[j]=elem; } if thic>14 { temparr2[j]=1; } goto inext; } // putmsg(temparr,1,1,10)