Съдържание

Макроси за филтриране по обекти и период

За да работи филтрацията по обекти, период и/или по групи позиции е необходимо експерта, съставил SQL-а на източника на данните изрично да е приложил филтрацията (и да е съобразил точно как да го направи).

Не всеки източник на данни може и има нужда да бъде филтриран по обект. За бази данни, съдържащи малък брой обекти или за анализи, нямащи общо с обекти, този филтър няма смисъл.
Аналогично, не всеки източник на данни може и има нужда да бъде филтриран по период.

Филтриране по обект

За целта са добавени следните макроси, които могат да се използват в SQL-а:

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая, в готова in клауза, филтрираща по поле obekt_nomer.
Пример: obekt_nomer in (1,2,3,4,10)

Ако в списъка с обекти не е избран нито един обект, макроса връща (0=0), с което практически се „самоизчиства“ (т.е. без филтър) и без да бави въобще заявката.

За повечето „обикновени“ SQL-и, които не използват сложни изрази и които използват една и само една таблица, съдържаща поле obekt_nomer, този макрос е най-оптимален. Когато се използва повече от една таблица (примерно смесват се и dostavki и prodazbi, в които поле obekt_nomer не е ясно за коя от двете таблици се отнася) се използва макрос &Obekti, предназначен да покрие именно тези случаи.

Примерен SQL, който го използва:

SELECT P.NOMER, P.OBEKT_NOMER, SUM(PD.STOINOST_BEZ_DDS)
FROM PRODAZBI P
JOIN PRODAZBI_DE PD ON PD.PRODAZBA_NOMER=P.NOMER
WHERE (&OBEKT_NOMER_IN)
GROUP BY P.NOMER, P.OBEKT_NOMER

(Пресмята сумата за всяка една продажба в избрания списък с обекти или за всички обекти).

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая, ограден с апострофи, сформирайки списъка с номерата в in клауза. Пример: ‘in (1,2,3,4,10)’

Ако в списъка с обекти не е избран нито един обект макроса връща null.

Приложението на този макрос е когато списък от обекти трябва да се подаде на stored procedure-а, каквато е например get_nalich, която като параметър очаква списъка с обекти, за които да пресметне наличността.

Примерен SQL, който го използва:

SELECT GN.OBEKT_NOMER, GN.OBEKT_IME, GN.POS_NOMER, GN.POS_IME, GN.NAL_KOL
FROM GETNALICH(&TODATE, NULL, &OBEKT_NOMER_COND) GN

(Пресмята наличността за избраните обекти (или за фирмата, ако не е избран нито един), за всички артикули, към датата избрана от главното меню).

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая.
Пример: 1,2,3,4,10

Ако в списъка с обекти не е избран нито един обект системата показва съобщение за грешка (т.е. задължително трябва да има филтър по номер на обект, защото примерно в горния пример не се предвижда да няма избран обект – SQL-а става с невалиден синтаксис).

Примерен SQL, който го използва:

SELECT P.NOMER, SUM(PD.STOINOST_BEZ_DDS)
FROM PRODAZBI P
JOIN PRODAZBI_DE PD ON PD.PRODAZBA_NOMER=P.NOMER
WHERE P.OBEKT_NOMER IN (&OBEKTI)
GROUP BY P.NOMER

(Пресмята сумата за всяка една продажба в избрания списък с обекти, но в този случай изрично е казано точно кое поле се филтрира).

Филтриране по период

Този макрос връща ОТ Дата-та, въведена в главното меню на програмата, ограден с апострофи. Пример: ’01.02.2013’

Този макрос връща ДО Дата-та, въведена в главното меню на програмата, ограден с апострофи. Пример: ’01.05.2013’

Примерен SQL, използващ и макросите за филтрация по период:

SELECT P.NOMER, SUM(PD.STOINOST_BEZ_DDS)
FROM PRODAZBI P
JOIN PRODAZBI_DE PD ON PD.PRODAZBA_NOMER=P.NOMER
WHERE P.OBEKT_NOMER IN (&OBEKTI) AND P.DATA BETWEEN &FROMDATE AND &TODATE
GROUP BY P.NOMER

Филтриране по Групи позиции 1

С излизане на версия 2011.10/м.12.11, във връзка с добавената опция за филтриране на данните по "Групи позиции 1", са добавени са 2 нови вида макроси:


Експертни настройки - съдържание

Експертни настройки - въведение

Създаване на дименсии

Създаване на дименсии, изчислени по формула от други дименсии

Свойства на дименсиите

Съдържание