====== Макроси за филтриране по обекти и период ====== За да работи [[dopalnitelni_moduli:selmatic_plus_analizi:glaven_prozorec|филтрацията по обекти, период и/или по групи позиции]] е необходимо експерта, съставил 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 ===== С излизане на версия [[obsti_komponenti:vavedenie:kakvo_novo|2011.10/м.12.11]], във връзка с добавената опция за **филтриране на данните** по [[nomenklaturi:pozicii_i_grupi:grupi_pozicii|"Групи позиции 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:sadarzanie|Експертни настройки - съдържание]] [[dopalnitelni_moduli:selmatic_plus_analizi:advance_nastrojki|Експертни настройки - въведение]] [[dopalnitelni_moduli:selmatic_plus_analizi:advance_nastrojki:nova_dimensia|Създаване на дименсии]] [[dopalnitelni_moduli:selmatic_plus_analizi:advance_nastrojki:dimensii s formuli|Създаване на дименсии, изчислени по формула от други дименсии]] [[dopalnitelni_moduli:selmatic_plus_analizi:advance_nastrojki:osnovni_svojstva|Свойства на дименсиите]] [[dopalnitelni_moduli:selmatic_plus_analizi:vavedenie|Съдържание]]