AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.06.2005, 18:50   #1  
TriFF is offline
TriFF
Участник
Аватар для TriFF
 
26 / 10 (1) +
Регистрация: 14.10.2004
можно ли из внешней процедуру на sql достучаться до flowfields и триггеров полей и таблиц? Интуиция подсказывает, что нельзя, но разум отказывается верить в то, что все так сложно и плохо...
Старый 28.06.2005, 08:52   #2  
Сергей Р is offline
Сергей Р
Участник
 
49 / 10 (1) +
Регистрация: 06.05.2005
Нет,нельзя,для этого нужно использовать подзапросы..
А вообще - что значит "достучаться"?Если получить значения или entry - то да,это можно выдрать при помощи монитора клиента.Т.е. узнать,как SQL обращается к flowfields.А изменить - никак,по-моему..Про триггеры,я думаю,такая же ситуация.
Старый 28.06.2005, 11:03   #3  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Не знаю поможет ли это, но в каждой таблице где есть FlouFields(помойму) написан тригер, например в Cust_ Ledger Entry сушествует тригер с именем "dbo"."Cust_ Ledger Entry_TG" вот они то и отвечают ИМХО за формирование FlouFields.
В принципе если его разобрать возможно както можно повлиять на процес вычисления.

А если хочеш добратся до кода тригеров навика то это тебе надо Blob раскодировать в таблице Object по этому поводу писали уже вроде.
Старый 28.06.2005, 11:23   #4  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Константин!
Не путайте людей, преждем чем отвечать, хотя бы сами разберите предмет обсуждения. Во-первых, не "FlouFields", а "FlowFields", во-вторых, вычисляемые поля не имеют никакого отношения к тригерам.
Сергей Р
SQL не обращается к FlowFields, потому что FlowFields - это не поля, они не существуют, и вообще на самом деле мы все в матрице.
Учите матчасть, молодые люди.

По сути, FlowFields - это просто заранее описанный запрос на получение значения или суммы из другой таблицы, умеющий работать с подставленными фильтрами. И обратиться из SQL к любому вычисляемому полю невозможно в принципе, но можно написать такой же запрос и получить нужное значение.
Старый 28.06.2005, 11:49   #5  
Сергей Р is offline
Сергей Р
Участник
 
49 / 10 (1) +
Регистрация: 06.05.2005
SVG,я это и имел ввиду..То,что написать такой же запрос в самом SQL можно,а обратиться к выч полю - нет.Точно так же - к триггерам.
Старый 28.06.2005, 12:01   #6  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
To SWG 1) за орфографию прошу прошения
2) в корне не согласен заидете пожалуста в это трегер и посмотрите реализацию вставки в таблицу 21$0 с помошью локальных курсоров, что они по вашему там делают, простотак записи перемешают
Старый 28.06.2005, 12:26   #7  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Константин!
1. Я не SWG, а SVG
2. Вы путаете SIFT и FlowFields - это совершенно разные вещи.
SIFT - это технология суммовых индексов - это как раз служебные структуры, хранящие готовые суммы по выбранным группирующим полям. Штука довольно вредная, и сделанная довольно топорно - галки "создать SQL индекс" и "Создать SIFT" по умолчанию стоят - это очень печально. Пользоваться суммовыми индексами надо крайне аккуратно и очень четко представляя себе что и как. Иначе будет один вред.
Но при грамотном подходе к построению сифтов можно получить некий прирост скорости некоторых операций.
А собственно к FlowFields сифты имеют весьма отдаленное отношение, весьма.

Как я уже сказал, FlowFields - это просто заранее определенный запрос - типа посчитать остаток на складе - поле Item.Inventory.
Для работы этого поля в таблице Item Ledger Entry должен быть ключ, содержащий поля, по которым выполняется запрос - дата, код склада, код ячейки и проч. По этому ключу может быть (но не должен) построен SQL индекс и\или SIFT.
Собственно ключи можно создавать не только под вычисляемые поля, но для любых суммирующих операций, или просто для выборки строк из таблицы.
Старый 28.06.2005, 12:29   #8  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
И не удержался -
перемешают - перемещают
заидете - зайдите
пожалуста - пожалуйста
трегер - триггер

про знаки препинания промолчу.
Старый 28.06.2005, 12:56   #9  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Цитата:
Вы путаете SIFT и FlowFields - это совершенно разные вещи.
SVG - вот тут я как то с вами не соглашусь. Flowfields-часть SIFT и иметь отдаленное отношение они не могут. Потому как без flowfield полей-как вы интересно увидете результат "хранения готовых сумм по выбранным группирующим полям". ВОзможно вы всю эту технологию понимаете-но как то очень не ясно выразились. И у людей только разбирающихся в Навижине будет каша в голове.
Старый 28.06.2005, 13:11   #10  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Цитата:
Сообщение от Галина
Цитата:
Вы путаете SIFT и FlowFields - это совершенно разные вещи.
SVG - вот тут я как то с вами не соглашусь. Flowfields-часть SIFT и иметь отдаленное отношение они не могут. Потому как без flowfield полей-как вы интересно увидете результат "хранения готовых сумм по выбранным группирующим полям". ВОзможно вы всю эту технологию понимаете-но как то очень не ясно выразились. И у людей только разбирающихся в Навижине будет каша в голове.
Ну понеслась... Не надо со мной "как-то не соглашаться", меня надо слушать и записывать. Последний раз повторяю, что вычисляемые поля и суммовые индексы - это совершенно разные и отдельные друг от друга вещи. И уж тем более никто из них не является частью другого.
А доступ к SIFT никто получить не может. Этим занимается сам навижн, его клиент. Вы никак повлиять на него в этом смысле не можете. И работает эта технология (SIFT) совершенно для вас прозрачно - вы делаете
либо Item.CALCFIELDS(Inventory), либо 32.CALCSUMS(Quantity) - и все.
А вот дальше навижн уже сам думает - есть у него для нас суммовой индекс или нет и отправляет на сервер запрос - либо сумму по таблице, либо выборку из суммовой таблицы типа 32$0
Старый 28.06.2005, 12:59   #11  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Да возможно путаю. Я думал, что если FlowFields используют метод Sum то при вычислении этой суммы используется ключ, в параметрах которого стоит галка MaintainSIFTIndex а в поле SumIndexFields указано поле, по которому введется расчет, в результате чего система при изменение значение в таблице по которой вычисляется Sum переписывает это значение в свою служебную таблицу (21$0). Также я полагал, что данный алгоритм можно вынести во внешнюю процедуру и получить значение поля с типом FlowFields и методом Sum в своей таблице.
Старый 28.06.2005, 13:17   #12  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Цитата:
Сообщение от Константин!
Я думал, что если FlowFields используют метод Sum то при вычислении этой суммы используется ключ, в параметрах которого стоит галка MaintainSIFTIndex а в поле SumIndexFields указано поле, по которому введется расчет
почти правильно, только галка MaintainSIFTIndex не играет никакой роли - она может стоять, может не стоять - пофиг.

Цитата:
Сообщение от Константин!
система при изменение значение в таблице по которой вычисляется Sum переписывает это значение в свою служебную таблицу (21$0).
Не по которой вычисляется Sum, а таблица, в которой созданы ключи с галкой MaintainSIFTIndex, а служебная таблица кстати называется НомерТаблицы$НомерКлюча (причем не порядковый, а по созданию)

Таким образом, технология SIFT - это служебные суммовые таблицы для ускорения некоторых расчетов, но соотв. замедляющие вставку строк и модификацию. А FlowFields - удобная хрень для вывода в формах неких значений и детального их рассмотрения по дрилдауну.
Старый 28.06.2005, 13:50   #13  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Цитата:
Ну понеслась... Не надо со мной "как-то не соглашаться", меня надо слушать и записывать.
Ну как вежливо А что еще прикажете СЭР? Следите пожайлуста за своей речью.Я простите некуда не понеслась, и слушать я готова-а вот выполнять команды-как то не собираюсь. Простите

А это выдержка из документации "Архитектура Navision":

Технология SIFT реализована с использованием вычисляемых полей
(FlowFields), фильтров вычисляемых полей (FlowFilters) и полей сумм
индексных полей (SumIndexFields). Концепции их использования
рассматриваются подробнее в следующих частях курса. В данном
разделе мы лишь дадим базовую информацию об этих полях и их
использовании.

И из этой документации как раз и явно видно что SIFT и FlowFields поля связаны. Но вполне возможно я не правильно понимаю-а возможно если вы говорили про Sql версию-то то тогда я отхожу от темы.
Цитата:
либо Item.CALCFIELDS(Inventory), либо 32.CALCSUMS(Quantity) - и все.
Ну вы правильно привели пример - только программист решает какой же все таки командой обращаться-и если к flowfield полю- то первой командой, а если к полю которое прописанно в ключе в поле SumIndexFields - то второй командой.
Старый 28.06.2005, 14:44   #14  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Цитата:
Ну понеслась... Не надо со мной "как-то не соглашаться", меня надо слушать и записывать.
Над этим можно было просто улыбнуться...
Ну и принять к сведению канешна

Цитата:
Сообщение от Галина
А это выдержка из документации "Архитектура Navision":
У вас сейчас сомнения в чем собственно? В том, что SIFT есть часть FlowFields или наоборот? Или в том, что это совершенно разные вещи? Могу легко привести примеры использования SIFT без вычисляемых полей, и наоборот. SIFT не нуждается в FlowField, как и FlowField не нуждатся в SIFT.

Давайте просто определим собственно предмет спора.
Ибо от темы мы уже отошли довольно далеко.
Старый 28.06.2005, 14:51   #15  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Для кругозора будьте так любезны, приведите примеры использования SIFT без вычисляемых полей, и наоборот.
Старый 28.06.2005, 14:53   #16  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Если нетрудно приведите примеры использования SIFT без вычисляемых полей, и наоборот.
Старый 28.06.2005, 15:09   #17  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Легко (с) будущая актриса

Тока в базе искать примеры ен выйдет - у меня сейчас нет под руками стандартной кронусовской, да и как я уже говорил, галки "строить SIFT" по умолчанию всегда стоят
Так что поступаем следующим образом. Могу привести просто пример - последовательность действий, могу сделать специально для вас таблицу и кодеюнит для теста - скажите только ID для двух таблиц и юнита

Собственно действия такие -
создаем таблицу
Код Цвет Количество
Первичный ключ - Код
Создаем дополнительный ключ - Цвет, ставим галку SIFT,
ставим SumField Количество.

Создаем кодеюнит, в котором пишем тупо
SETCURRENTKEY(Цвет);
CALCSUMS(Количество);
MESSAGE(FORMAT(Количество));
- запускаем - работает.

это пример использования SIFT без выч.поля
Теперь топаем в таблицу, убираем галку SIFT и снова запускаем кодеюнит - снова все работает - это пример того, что SIFT вообще вещь абсолютно самостоятельная - есть она, или нет ее - никому не интересно, суммирование (или расчет вычисляемых полей) будет работать.

Могу сделать все в fob и выложить, тока ID давайте.

ЗЫ братья близнецы чтоли? вступления разные, а просьба - вплоть до запятых одинакого написана
Старый 28.06.2005, 15:21   #18  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Серьезная заявка на победу
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
Старый 28.06.2005, 15:36   #19  
Константин! is offline
Константин!
Участник
 
180 / 10 (1) +
Регистрация: 13.04.2005
Адрес: Казань
Подводя итог галка MaintainSIFTIndex =true говорит вычислять сумму по данному ключу и =false вычислить по наиболее подходящему ключу на усмотрению SQL сервера.
Вычисление суммы происходит через триггер таблицы SQL
Полученные данные перемещаются в служебные таблицы для быстроты их получения.

Вроде все.

Хотя от темы мы ушли далековато
Старый 28.06.2005, 15:45   #20  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
Константин!
Неверно.

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

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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:18.