Perco s20

  1. 3 г. назад

    Господа-товарищи! Кто пользовал Perco s20?
    Собственно, суть проблемы: там в СУБД таблица событий проходов турникетов неполная. Если делать отчёт из штатной консоли управления, то там будут все события (система странная: она часть проходов считает как отказ, хотя проход был), а в чудом вытащенной таблице проходов - только (ВНЕЗАПНО!) проходы.
    Может кто в теме?

    ЗЫ: контора, которая нам эту хрень стопицот лет назад продавала и сейчас ведёт саппорт, не в теме. Хотя готовы продать любой пакет для отчётов :)

  2. Що опять? Это серьезный форум.

  3. Опять. Имею право на обострение: весна же.

  4. Я люблю тебя... извини

  5. работал я с этой херней. там ПО рукожопы писали...

    Ответы: (5)
  6. (4) я не про рукожопов. Я про таблицы. Где остальные события находятся? Проходы - в TABEL_INTERMEDIADATE
    Остальное - хрен-пойми где.
    Или хоть утилиту какую-нибудь, для анализа БД на файрбёрде. Чтобы глазами просмотреть сразу...

  7. От жди от вас чего хорошего :)
    Без утилиты сделал. В сервисных таблицах получил полный список таблиц БД, перебрал, по каждой не-пустой сделал выборку первой тысячи записей, сохранил каждую в одноимённый таблице .csv файл, потом всю коллекцию просмотрел глазами. И нашёл-таки ту таблицу, в которой все события сведены.
    Теперь осталось её джойнтить со связанными таблицами (имена пользователей, названия контроллеров, названия событий и т.п.). И золотой ключик будет у нас в кармане :)

    Ответы: (7)
  8. (6) да таблицы и я просмотрел. я только не понял, что за мудаки интерфейс писали...

    Ответы: (9)
  9. неужели турбомилк (шучу)

  10. (7) ну, у них задача как раз стояла - сделать как можно трешовее, как я понимаю. Они же подсистемы отчётов отдельно продают, вроде. Хочешь удобства - пляти.
    Наверное. Мы-то не покупали допов :)
    У нас и консоль-то монопольная. Либо мы сидим, либо секретарь…
    И ещё не вдуплил со структурой предприятия у них. Она по их замыслу древовидная, так что когда начинается вложенность подразделений, то не вполне понятно, как их свернуть. Уровень в таблице я не нашёл. Только родитель.

    Ответы: (10)
  11. Дуб Уровень в таблице я не нашёл. Только родитель.

    Так это везде так. Не только в Perco

    Ответы: (11)
  12. (10) в v7, вроде, указывался уровень…

    Ответы: (13)
  13. чо за уровень

  14. (11) Имхо нет.
    Только признак, группа это, или обычный элемент.

  15. Щас надоть глянуть.

  16. Да. Нет.
    PARENTID и ISFOLDER
    В принципе - мне бы сгодилось ISFOLDER: в данном случае 2 тождественно элементу, что мне и нужно…

  17. [...]. я уж думал, вы про сверхтермины

  18. 13.05.2020 17:27:37 отредактировано jsmith82

    впрочем, зная твои запросы в скд, Дуб, я представляю, что ты там состряпаешь

  19. При чём тут СКД?..
    Впрочем, если бы ты был специалистом, то смог бы рассказать, как в файрбёрде выбрать фиксированное количество последних записей ;)
    Обще-методически, так сказать :)

    Ответы: (19) (22)
  20. 13.05.2020 17:38:27 отредактировано jsmith82

    Дуб При чём тут СКД?..

    при том. помню как ты пытался сгруппировать поля таблицы. весело было

  21. я просто думал тут речь про какие-то [...] темы, а речь-то про фигню

  22. уровень. что за термин вообще

  23. Дуб , как в файрбёрде выбрать фиксированное количество последних записей

    Отсортировать в обратном порядке, и выбрать фикс. количество первых.

    Ответы: (23)
  24. (22) я спрашивал графа. Это раз. Ответ формально верен, но по факту это работает только на малых объёмах. Это два.
    Я-ж без подковырок вопросов не ставлю :)

    Ответы: (24)
  25. Дуб но по факту это работает только на малых объёмах

    Не согласен.
    ИМХО в случае с простым (не составным) индексом order by и order by desc отработают примерно за одинаковое время.

    Ответы: (25)
  26. (24) а по моим наблюдениям СУБД сначала делает полную выборку, а потом начинает сортировать ;)

    Ответы: (26)
  27. (25) Это если упорядочивание производится по неиндексированному полю.
    Но даже в этом случае, не вижу, за счёт чего сортировка в обратном порядке может работать медленнее.

    Ответы: (27)
  28. (26) не видеть - невозбранно :)

  29. Товарищи! Ставлю вопрос ребром. В C# такой фигни не было: строку запроса можно писать как душе угодно, поставив перед строкой @. А как сие сделать в node.js ?
    Всё бы ничего, но столкнулся с проблемой: нужна конкатенация. В C# я писал (STAFF.LAST_NAME || ' ' || STAFF.FIRST_NAME || ' ' || STAFF.MIDDLE_NAME) AS STAFF_NAME.
    А в ноде он кавычки ставить не позволяет. Как быть?

    Ответы: (30)
  30. Вдогонку: т.е. если я втупую три поля соединю, то проблем нету: это через || делается. Но мне надо между ними разделители поставить. Например - пробел. По сути - вопрос не в конкатенации, а в передаче символа в запросе.

  31. Дуб А в ноде он кавычки ставить не позволяет. Как быть?

    Как именно это выражается? Сомневаюсь что не позволяет.

    Ответы: (31)
  32. (30) строка заключена в одиночные кавычки. Включение одиночных кавычек в строку приведёт к ошибке. Наверняка есть какие-нить директивы, изолирующие символы.

    Ответы: (34)
  33. Нашёл. http://firebirdsql.su/doku.php?id=sql005._kak_v_stroku_vstavit_proizvolnyj_simovol

  34. Теперь бы ещё понять - как делать отбор с массивом в качестве параметра?.. Наиболее очевидный вариант - разбить массив на параметры и включить их в запросе через AND. Но чую, что меня рыбы засмеют... Наверняка есть способ - передать сразу массив.

    Ответы: (36)
  35. Дуб строка заключена в одиночные кавычки.

    Заключи ее в двойные. Делов то

    Ответы: (35)
  36. (34) не будет так работать. Проверено.

  37. Дуб Теперь бы ещё понять - как делать отбор с массивом в качестве параметра?.. Наиболее очевидный вариант - разбить массив на параметры и включить их в запросе через AND. Но чую, что меня рыбы засмеют... Наверняка есть способ - передать сразу массив.

    А че, там нет чегото типа: MY_DOMAIN IN ('yandex' , 'google', 'rambler') ?

    Ответы: (37)
  38. 14.05.2020 17:39:40 отредактировано Дуб

    (36) то что IN - это понятно. Параметр как передавать в эту вашу node-firebird?..
    В тексте запроса параметры передаются символом "?". При этом, судя по всему, важна последовательность. Потом, при вызове

    db.query(текст_запроса, [параметры], function(err, result) {

    вторым параметром идёт массив параметров. И вот если я в этом массиве ставлю [], то валится с ошибкой. Если модифицировать сам текст запроса, то, разумеется, всё прекрасно работает. Но хотелось бы через параметры...

  39. В тексте запроса ставь столько вопросов, сколько нужно: IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

    Ответы: (39) (41)
  40. (38) не находишь, что это [...]? :)
    Дату в качестве параметра он принимает корректно (в C# с типизацией, в node - без типизации). Наверняка он и массив как-то должен жрать…

    Ответы: (41)
  41. Новый вопрос ребром! В этой чёртовой Perco один и тот же пользователь (карта) может быть привязан к нескольким подразделениям. Соответственно, в результат запроса такие голубчики попадают несколько раз, дублирующимися строками. А мне бы надо, чтобы эти подразделения ложились в одну строку. Как свёртка в 1С, только не по числовому, а по текстовому полю. Это как-то на уровне запроса можно сделать? Или только перебором результата, сравнивая предыдущие значения полей?

    Ответы: (42) (43) (44) (45)
  42. Дуб (38) не находишь, что это [...]? :)

    Это нормально. Даже если есть какой-то способ передать массив в параметр через какую-то библиотеке, то в конечном итоге он все равно преобразуется в такой вид. Я просто не знаю что умеет твоя библиотека через которую ты кидаешь запросы. Если там такого нет, напиши свою функцию которая преобразует массив в то что я писал выше, и передавай массив как ты и хотел, будет красота.

  43. Дуб Это как-то на уровне запроса можно сделать?

    Должно быть можно. Называется группировка. Синтаксис погугли.

  44. (40) group by

    Ответы: (45)
  45. 15.05.2020 18:35:00 отредактировано Фёдор14

    (40) То есть, тебе нужна агрегатная функция конкатенации строк?

    Скорее всего, в файрберде такой нет.

  46. ТеньД (40) group by

    Скорее group_concat
    Но ХЗ как в той базе правильно пишется.

    Ответы: (46)
  47. (45) в скл так пишется...

  48. и там наработок нет, там все серьезно...

  49. Товарищи! Что-то я того… Совсем того.
    Фигли у меня записи дублируются? Где я с неверным условием соединяю?..

    select  
    	REG_EVENTS.TIME_EV AS time_event,
    	REG_EVENTS.AREAS_ID AS area_id,
    	REG_EVENTS.CONFIGS_TREE_ID_CONTROLLER AS controller_id,
    	REG_EVENTS.STAFF_ID AS staff_id,
    	SUBDIV_REF.DISPLAY_NAME AS firm, 
    	STAFF.SHORT_FIO AS staff,
    	STAFF_REF.SUBDIV_ID AS subdiv_id,
    	AREAS_TREE.DISPLAY_NAME AS area,
    	MODEL_EVENTS.DISPLAY_NAME AS event
    from REG_EVENTS
    	left outer join STAFF on REG_EVENTS.STAFF_ID = STAFF.ID_STAFF
    	left outer join STAFF_REF on STAFF.ID_STAFF = STAFF_REF.STAFF_ID
    	left outer join AREAS_TREE on REG_EVENTS.AREAS_ID = AREAS_TREE.ID_AREAS_TREE
    	left outer join SUBDIV_REF on STAFF_REF.SUBDIV_ID = SUBDIV_REF.ID_REF
    	left outer join MODEL_EVENTS on REG_EVENTS.INNER_NUMBER_EV = MODEL_EVENTS.INNER_NUMBER
    where REG_EVENTS.STAFF_ID is not null and REG_EVENTS.DATE_EV = ?
  50. Это же стопудово неверный join.

  51. По одному отключай джоины, пока не поймаешь виновника.

    Ответы: (51)
  52. (50) я навскидку хотел :)

  53. Да кто же знает что у тебя в базе, чтобы навскидку сказать. Можешь еще попробовать distinct

  54. MODEL_EVENTS каким-то местом...

  55. [...] where после join'ов
    сte юзай

    Ответы: (55)
  56. (54) щито?..

  57. Common Table Expression
    соединения я бы последовательно выполнял

    Ответы: (57)
  58. Сами мы не местные, есичо.
    (56) а пример?

    Ответы: (59)
  59. лучше так

    left outer join STAFF on REG_EVENTS.STAFF_ID = STAFF.ID_STAFF
        left outer join AREAS_TREE on REG_EVENTS.AREAS_ID = AREAS_TREE.ID_AREAS_TREE
        left outer join MODEL_EVENTS on REG_EVENTS.INNER_NUMBER_EV = MODEL_EVENTS.INNER_NUMBER
        left outer join STAFF_REF on STAFF.ID_STAFF = STAFF_REF.STAFF_ID
        left outer join SUBDIV_REF on STAFF_REF.SUBDIV_ID = SUBDIV_REF.ID_REF
    Ответы: (60)
  60. Дуб а пример?

    тут это к делу не относится, собственно

  61. (58) а в чём тут подвох?

  62. ещё и чёртов case sensivity… Голову сломал - почему у меня не читаются значения из объекта записи в ноде. А адаптер в верхний регистр всё переводит. А жабаскрипт чувствителен к регистру :)

или зарегистрируйтесь чтобы ответить!