Advertisement
tyomasun

Untitled

Nov 12th, 2015
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.54 KB | None | 0 0
  1. WITH
  2.       cteMyOfficeDocs AS (
  3.          -- Области видимости
  4.          SELECT unnest(current_setting('sbis3.rights.myOfficeDocs')::INTEGER[]) deptId
  5.       ),
  6.      
  7.    
  8.       -- Иерархия по отделам с учетом областей видимости (см. startDeptFilter)
  9.       dept AS (
  10.          WITH RECURSIVE sp AS (
  11.             SELECT
  12.                x."@Лицо" "Лицо",
  13.                x."Раздел",
  14.                x."Название",
  15.                x."Раздел@"
  16.             FROM
  17.                "СтруктураПредприятия" x
  18.             WHERE
  19.                x."Тип" = 0
  20.                 AND "@Лицо" = 14463815
  21.        
  22.             UNION ALL
  23.  
  24.             SELECT
  25.                z."@Лицо" "Лицо",
  26.                z."Раздел",
  27.                z."Название",
  28.                z."Раздел@"
  29.             FROM
  30.                sp y
  31.             INNER JOIN "СтруктураПредприятия" z ON z."Раздел" = y."Лицо" AND z."$Черновик" IS NULL AND z."ДатаЗакрытия" IS NULL
  32.             WHERE
  33.                z."Тип" = 0
  34.          )
  35.          SELECT * FROM sp
  36.       ),
  37.      
  38.      
  39.       -- Сотрудники отделов
  40.       deptUsers AS (
  41.          SELECT
  42.             sv."ЧастноеЛицо" "Лицо",
  43.             sv."СтруктураПредприятия",
  44.             COALESCE(p."Фамилия" || ' ', '') || COALESCE(substr(p."Имя", 1, 1) || '.', '') || COALESCE(substr(p."Отчество", 1, 1)  || '.', '' ) "Название",
  45.             sv."Пользователь"
  46.          FROM "СвязиПользователя" sv
  47.             INNER JOIN "ЧастноеЛицо" p ON sv."ЧастноеЛицо" = p."@Лицо"
  48.          WHERE
  49.             sv."ЧастноеЛицо" IS NOT NULL AND
  50.             sv."УправленческаяСтруктура" AND
  51.             sv."$Черновик" IS NULL
  52.              
  53.             AND EXISTS (
  54.                SELECT NULL
  55.                FROM dept d
  56.                WHERE d."Лицо" = sv."СтруктураПредприятия"
  57.             )  
  58.       )
  59.    ,
  60.          Events AS (SELECT ev."@Событие"::text,
  61.                            ev."Конец" "Дата",
  62.                            ev."Примечание" "Комментарий",
  63.                            ev."Контрагент",
  64.                            ev."Исполнитель",
  65.                            ev."Переход",
  66.                            ev."Фаза" "Стадия",
  67.                            per."Название" "Итог",
  68.                            per."Результат",
  69.                            per."ФазаОснование",
  70.                            per."ФазаСледствие",
  71.                            ev."Регламент",
  72.                            ev."Документ" "Лид",
  73.                            ev."ВидКонтакта",
  74.                            ev."ТипКонтакта"
  75.                            ,
  76. ev."ЗвонокАгента"
  77.                       FROM (SELECT (ev).*
  78.                               FROM (SELECT UNNEST(ARRAY(SELECT ev
  79.                                                           FROM  "Событие"  ev
  80.                                                           LEFT JOIN "Переход" per ON (per."@Переход" = ev."Переход")
  81.                                                          
  82.                                                          WHERE TRUE AND ev."Регламент" = 121 AND ev."Конец" >= (CURRENT_DATE - INTERVAL '1 day' + INTERVAL '1 day') AND ev."Конец" < (CURRENT_DATE + INTERVAL '1 day')
  83.                                                            AND ev."Тип" = 3
  84.                                                          AND
  85.                EXISTS (
  86.                   SELECT NULL
  87.                   FROM deptUsers u
  88.                   WHERE ev."Исполнитель" = u."Лицо"
  89.                )
  90.            
  91.                                                          ORDER BY  ev."Регламент",  ev."Конец" DESC NULLS LAST
  92.                                                          LIMIT 21)) ev
  93.                                    
  94.                                    ) ev
  95.                            ) ev
  96.                       LEFT JOIN "Переход" per ON (per."@Переход" = ev."Переход")
  97.                      
  98.                      ORDER BY ev."Конец" DESC NULLS LAST
  99.                      LIMIT 21 OFFSET 0)
  100.  
  101.          SELECT
  102.             Events."@Событие",
  103.             Events."Дата",
  104.             Events."Контрагент",
  105.             Events."Исполнитель",
  106.             Events."Лид",
  107.             COALESCE(Events."ТипКонтакта", 0) "ТипКонтакта",
  108.             Events."ВидКонтакта",
  109.             Events."Регламент",
  110.  
  111.             Events."Итог",
  112.             Events."Результат",
  113.             Events."Переход",
  114.             Events."ЗвонокАгента",
  115.             COALESCE(ld."НазваниеКлиента", ld."КонтактныеДанные", '') "НазваниеКлиента",
  116.             NULL::INTEGER "Предприниматель",
  117.             r."Название" "НазваниеРегламента",
  118.             r."Флаги"[3] "Регламент.Удален",
  119.             0::INTEGER "ПраваНаСобытие",
  120.             0::INTEGER "РольПользователя" ,
  121.  
  122.             za."@ЗвонокАгента" "Звонок", za."Запись", za."НаправлениеИсходящий",
  123.             rz."Название" "РезультатЗвонка", za."НомерСторона2" "НомерВнешний"
  124.          ,
  125. contr."ИНН", contr."КПП", contr."Название",
  126.  
  127.       Events."Комментарий",
  128.       ph3."Название" "Стадия",
  129.       ph1."Название" "ФазаОснование",
  130.       ph2."Название" "ФазаСледствие"
  131.       ,
  132.  
  133.          l."Название" "Исполнитель.Название",
  134.          strPr."Название" "СтруктураПредприятия.Название",
  135.          svP."СтруктураПредприятия"
  136.    
  137.          FROM
  138.             Events
  139.          LEFT JOIN "Лид" ld ON ld."@Документ" = Events."Лид"
  140.          LEFT JOIN "Регламент" r ON r."@Регламент" = Events."Регламент"
  141.          
  142.          LEFT JOIN "ЗвонокАгента" za ON za."@ЗвонокАгента" = Events."ЗвонокАгента"
  143.          LEFT JOIN "РезультатЗвонка" rz ON rz."@РезультатЗвонка" = za."РезультатЗвонка"
  144.          
  145. LEFT JOIN "Контрагент" contr ON contr."@Лицо" = Events."Контрагент"
  146.  
  147.       LEFT JOIN "Фаза" ph1 ON ph1."@Фаза" = Events."ФазаОснование"
  148.       LEFT JOIN "Фаза" ph2 ON ph2."@Фаза" = Events."ФазаСледствие"
  149.       LEFT JOIN "Фаза" ph3 ON ph3."@Фаза" = Events."Стадия"
  150.      
  151. LEFT JOIN "Лицо" l ON l."@Лицо" = Events."Исполнитель"
  152.    LEFT JOIN "СвязиПользователя" svP ON svP."ЧастноеЛицо" = Events."Исполнитель" AND svP."УправленческаяСтруктура"
  153.    LEFT JOIN "СтруктураПредприятия" strPr ON strPr."@Лицо" = svP."СтруктураПредприятия"
  154.    
  155.          ORDER BY "Дата" DESC NULLS LAST
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement