Инструменти за потребители

Инструменти за сайта


dopalnitelni_moduli:selmatic_plus_analizi:advance_nastrojki:makrosi

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

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

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

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

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

  • &Obekt_Nomer_in

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая, в готова 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

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

  • &Obekt_Nomer_cond

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая, ограден с апострофи, сформирайки списъка с номерата в 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

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

  • &Obekti

Този макрос връща списъка с номерата на филтрираните обекти, разделени със запетая.
Пример: 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

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

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

  • &FromDate

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

  • &ToDate

Този макрос връща ДО Дата-та, въведена в главното меню на програмата, ограден с апострофи. Пример: ’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 нови вида макроси:

  • &Grupa_Kod_in - ако в заявката присъства този макрос, то той се заменя с условие ((GRUPIPOS_KOD starting with …) or (GRUPIPOS_KOD starting with …) or ….) в зависимост от избраните групи.
  • &Grupa_Kod_XXX_in - където XXX е името на полето, като ако в него се срещне поредицата __ - се заменя със символа точка.

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

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

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

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

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

Съдържание

dopalnitelni_moduli/selmatic_plus_analizi/advance_nastrojki/makrosi.txt · Последна промяна: 2018/01/11 15:34 от 127.0.0.1