27.06.2005, 18:50 | #1 |
Участник
|
можно ли из внешней процедуру на sql достучаться до flowfields и триггеров полей и таблиц? Интуиция подсказывает, что нельзя, но разум отказывается верить в то, что все так сложно и плохо...
|
|
28.06.2005, 08:52 | #2 |
Участник
|
Нет,нельзя,для этого нужно использовать подзапросы..
А вообще - что значит "достучаться"?Если получить значения или entry - то да,это можно выдрать при помощи монитора клиента.Т.е. узнать,как SQL обращается к flowfields.А изменить - никак,по-моему..Про триггеры,я думаю,такая же ситуация. |
|
28.06.2005, 11:03 | #3 |
Участник
|
Не знаю поможет ли это, но в каждой таблице где есть FlouFields(помойму) написан тригер, например в Cust_ Ledger Entry сушествует тригер с именем "dbo"."Cust_ Ledger Entry_TG" вот они то и отвечают ИМХО за формирование FlouFields.
В принципе если его разобрать возможно както можно повлиять на процес вычисления. А если хочеш добратся до кода тригеров навика то это тебе надо Blob раскодировать в таблице Object по этому поводу писали уже вроде. |
|
28.06.2005, 11:23 | #4 |
Участник
|
Константин!
Не путайте людей, преждем чем отвечать, хотя бы сами разберите предмет обсуждения. Во-первых, не "FlouFields", а "FlowFields", во-вторых, вычисляемые поля не имеют никакого отношения к тригерам. Сергей Р SQL не обращается к FlowFields, потому что FlowFields - это не поля, они не существуют, и вообще на самом деле мы все в матрице. Учите матчасть, молодые люди. По сути, FlowFields - это просто заранее описанный запрос на получение значения или суммы из другой таблицы, умеющий работать с подставленными фильтрами. И обратиться из SQL к любому вычисляемому полю невозможно в принципе, но можно написать такой же запрос и получить нужное значение. |
|
28.06.2005, 11:49 | #5 |
Участник
|
SVG,я это и имел ввиду..То,что написать такой же запрос в самом SQL можно,а обратиться к выч полю - нет.Точно так же - к триггерам.
|
|
28.06.2005, 12:01 | #6 |
Участник
|
To SWG 1) за орфографию прошу прошения
2) в корне не согласен заидете пожалуста в это трегер и посмотрите реализацию вставки в таблицу 21$0 с помошью локальных курсоров, что они по вашему там делают, простотак записи перемешают |
|
28.06.2005, 12:26 | #7 |
Участник
|
Константин!
1. Я не SWG, а SVG 2. Вы путаете SIFT и FlowFields - это совершенно разные вещи. SIFT - это технология суммовых индексов - это как раз служебные структуры, хранящие готовые суммы по выбранным группирующим полям. Штука довольно вредная, и сделанная довольно топорно - галки "создать SQL индекс" и "Создать SIFT" по умолчанию стоят - это очень печально. Пользоваться суммовыми индексами надо крайне аккуратно и очень четко представляя себе что и как. Иначе будет один вред. Но при грамотном подходе к построению сифтов можно получить некий прирост скорости некоторых операций. А собственно к FlowFields сифты имеют весьма отдаленное отношение, весьма. Как я уже сказал, FlowFields - это просто заранее определенный запрос - типа посчитать остаток на складе - поле Item.Inventory. Для работы этого поля в таблице Item Ledger Entry должен быть ключ, содержащий поля, по которым выполняется запрос - дата, код склада, код ячейки и проч. По этому ключу может быть (но не должен) построен SQL индекс и\или SIFT. Собственно ключи можно создавать не только под вычисляемые поля, но для любых суммирующих операций, или просто для выборки строк из таблицы. |
|
28.06.2005, 12:29 | #8 |
Участник
|
И не удержался -
перемешают - перемещают заидете - зайдите пожалуста - пожалуйста трегер - триггер про знаки препинания промолчу. |
|
28.06.2005, 12:56 | #9 |
Участник
|
Цитата:
Вы путаете SIFT и FlowFields - это совершенно разные вещи.
|
|
28.06.2005, 12:59 | #10 |
Участник
|
Да возможно путаю. Я думал, что если FlowFields используют метод Sum то при вычислении этой суммы используется ключ, в параметрах которого стоит галка MaintainSIFTIndex а в поле SumIndexFields указано поле, по которому введется расчет, в результате чего система при изменение значение в таблице по которой вычисляется Sum переписывает это значение в свою служебную таблицу (21$0). Также я полагал, что данный алгоритм можно вынести во внешнюю процедуру и получить значение поля с типом FlowFields и методом Sum в своей таблице.
|
|
28.06.2005, 13:11 | #11 |
Участник
|
Цитата:
Сообщение от Галина
Цитата:
Вы путаете SIFT и FlowFields - это совершенно разные вещи.
А доступ к SIFT никто получить не может. Этим занимается сам навижн, его клиент. Вы никак повлиять на него в этом смысле не можете. И работает эта технология (SIFT) совершенно для вас прозрачно - вы делаете либо Item.CALCFIELDS(Inventory), либо 32.CALCSUMS(Quantity) - и все. А вот дальше навижн уже сам думает - есть у него для нас суммовой индекс или нет и отправляет на сервер запрос - либо сумму по таблице, либо выборку из суммовой таблицы типа 32$0 |
|
28.06.2005, 13:17 | #12 |
Участник
|
Цитата:
Сообщение от Константин!
Я думал, что если FlowFields используют метод Sum то при вычислении этой суммы используется ключ, в параметрах которого стоит галка MaintainSIFTIndex а в поле SumIndexFields указано поле, по которому введется расчет
Цитата:
Сообщение от Константин!
система при изменение значение в таблице по которой вычисляется Sum переписывает это значение в свою служебную таблицу (21$0).
Таким образом, технология SIFT - это служебные суммовые таблицы для ускорения некоторых расчетов, но соотв. замедляющие вставку строк и модификацию. А FlowFields - удобная хрень для вывода в формах неких значений и детального их рассмотрения по дрилдауну. |
|
28.06.2005, 13:50 | #13 |
Участник
|
Цитата:
Ну понеслась... Не надо со мной "как-то не соглашаться", меня надо слушать и записывать.
А это выдержка из документации "Архитектура Navision": Технология SIFT реализована с использованием вычисляемых полей (FlowFields), фильтров вычисляемых полей (FlowFilters) и полей сумм индексных полей (SumIndexFields). Концепции их использования рассматриваются подробнее в следующих частях курса. В данном разделе мы лишь дадим базовую информацию об этих полях и их использовании. И из этой документации как раз и явно видно что SIFT и FlowFields поля связаны. Но вполне возможно я не правильно понимаю-а возможно если вы говорили про Sql версию-то то тогда я отхожу от темы. Цитата:
либо Item.CALCFIELDS(Inventory), либо 32.CALCSUMS(Quantity) - и все.
|
|
28.06.2005, 14:44 | #14 |
Участник
|
Цитата:
Ну понеслась... Не надо со мной "как-то не соглашаться", меня надо слушать и записывать.
Ну и принять к сведению канешна Цитата:
Сообщение от Галина
А это выдержка из документации "Архитектура Navision":
Давайте просто определим собственно предмет спора. Ибо от темы мы уже отошли довольно далеко. |
|
28.06.2005, 14:51 | #15 |
Участник
|
Для кругозора будьте так любезны, приведите примеры использования SIFT без вычисляемых полей, и наоборот.
|
|
28.06.2005, 14:53 | #16 |
Участник
|
Если нетрудно приведите примеры использования SIFT без вычисляемых полей, и наоборот.
|
|
28.06.2005, 15:09 | #17 |
Участник
|
Легко (с) будущая актриса
Тока в базе искать примеры ен выйдет - у меня сейчас нет под руками стандартной кронусовской, да и как я уже говорил, галки "строить SIFT" по умолчанию всегда стоят Так что поступаем следующим образом. Могу привести просто пример - последовательность действий, могу сделать специально для вас таблицу и кодеюнит для теста - скажите только ID для двух таблиц и юнита Собственно действия такие - создаем таблицу Код Цвет Количество Первичный ключ - Код Создаем дополнительный ключ - Цвет, ставим галку SIFT, ставим SumField Количество. Создаем кодеюнит, в котором пишем тупо SETCURRENTKEY(Цвет); CALCSUMS(Количество); MESSAGE(FORMAT(Количество)); - запускаем - работает. это пример использования SIFT без выч.поля Теперь топаем в таблицу, убираем галку SIFT и снова запускаем кодеюнит - снова все работает - это пример того, что SIFT вообще вещь абсолютно самостоятельная - есть она, или нет ее - никому не интересно, суммирование (или расчет вычисляемых полей) будет работать. Могу сделать все в fob и выложить, тока ID давайте. ЗЫ братья близнецы чтоли? вступления разные, а просьба - вплоть до запятых одинакого написана |
|
28.06.2005, 15:21 | #18 |
NavAx
|
Серьезная заявка на победу
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
28.06.2005, 15:36 | #19 |
Участник
|
Подводя итог галка MaintainSIFTIndex =true говорит вычислять сумму по данному ключу и =false вычислить по наиболее подходящему ключу на усмотрению SQL сервера.
Вычисление суммы происходит через триггер таблицы SQL Полученные данные перемещаются в служебные таблицы для быстроты их получения. Вроде все. Хотя от темы мы ушли далековато |
|
28.06.2005, 15:45 | #20 |
Участник
|
Константин!
Неверно. Если установлена галка СтроитьSIFT, то при любых модификациях таблицы, в которой построен такой ключик, будет модифицироваться и служебная таблица - это организовано триггерами SQL. Если галка не стоит - то нет ни служебной таблицы, ни триггеров. При выполнении команды суммирования клиент навижна определяет - есть у него служебная таблица с нужной суммой или нет. Если есть - делается запрос к этой служебной таблице. Если нет - делается обычный запрос с требованием суммы из несущей таблицы, а дальше уже SQLServer сам подбирает подходящий ключик и прочее и возвращет нужное значение. |
|