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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.10.2013, 11:08   #1  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Забавная задачка
Дано :

- есть кастомный функционал, который не описан (совсем), но как-то (достаточно криво и не слишком надежно) работает
- есть табличка в нем, которая, понятно, тоже не описана.. и в которой пара миллионов записей

Требуется получить : описание использования (наполнения) таблицы. То есть :

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

Вот как-то так.

Вопросы :

- оно вообще, кроме как "глазами и руками" + Ёксель - решаемо?
- если решаемо, то как, хотя бы примерно (я без идей пока)

Если нужны подробности - добавлю.
__________________
Best Regards,
Roman
Старый 31.10.2013, 11:18   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А почему "перекрестные ссылки не предлагать"? Если уж заниматься реверс-инжинирингом, то перекрестные ссылки тут - первейший инструмент Они не помогут разве что в случае, когда "кастомный функционал" работает с использованием механизмов отражения и/или написан вне приложения, скажем, в сторонней системе, работающей через Business Connector. Это - ваш случай?..
За это сообщение автора поблагодарили: mazzy (2).
Старый 31.10.2013, 11:54   #3  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А почему "перекрестные ссылки не предлагать"?
Они не дадут наполнения. Требуется именно описание типа "что может быть записано в это поле" пока что. И все комбинации заполнения, имеющиеся в жизни (из тех, что сейчас есть в таблице)
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Они не помогут разве что в случае, когда "кастомный функционал" работает с использованием механизмов отражения и/или написан вне приложения, скажем, в сторонней системе, работающей через Business Connector. Это - ваш случай?..
Нет, по счастью. Но - есть порядка 40 классов, использующих эту табличку. Есть десяток классов, которые туда пишут. Разматывать все это по коду - слуга покорный )

Единственное, что пока на голову приходит - выгрузить всю эту беду в Ёксель, и там уже шаманить с фильтрами etc..

===

PS : Это там интеграция с типа "интернет-магазином" так классно сделана..
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 31.10.2013 в 11:57. Причина: PS
Старый 31.10.2013, 13:03   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от RVS Посмотреть сообщение
Они не дадут наполнения. Требуется именно описание типа "что может быть записано в это поле" пока что. И все комбинации заполнения, имеющиеся в жизни (из тех, что сейчас есть в таблице)
Excel, сводная таблица. По скорости надо проверить, что быстрее - выгрузить в ексель и там строить сводную или напрямую к SQL подключиться.
__________________
Ivanhoe as is..
Старый 31.10.2013, 13:24   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от RVS Посмотреть сообщение
Нет, по счастью. Но - есть порядка 40 классов, использующих эту табличку. Есть десяток классов, которые туда пишут. Разматывать все это по коду - слуга покорный )
Ну а как вы хотели ?
Чтобы ничего не делать и все было готово ?

Так не бывает.
Алгоритм заполнения все равно придется разбирать и понимать. Вам все равно по результатам предоставления этой таблички начнут задавать каверзные вопросы.
Старый 31.10.2013, 15:30   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от RVS Посмотреть сообщение
Они не дадут наполнения. Требуется именно описание типа "что может быть записано в это поле" пока что. И все комбинации заполнения, имеющиеся в жизни (из тех, что сейчас есть в таблице)
А почему это перекрестные ссылки такую информацию не дадут? Фильтруемся по Write и получаем список мест (те 10 классов, которые туда пишут).

Ну да, получается разматывание по коду. Зато есть некоторая гарантия полноты. Все равно эмпирически придется догадываться. Так что, если какие-то "ветки" кода удастся легко размотать - это будет 100%-е обоснование - что туда пишется.
__________________
Возможно сделать все. Вопрос времени
Старый 31.10.2013, 16:25   #7  
mnt_dx is offline
mnt_dx
Участник
Axapta Retail User
Лучший по профессии 2014
 
1,747 / 188 (10) ++++++
Регистрация: 17.02.2011
Адрес: К Северу через Северо-Запад
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Excel, сводная таблица. По скорости надо проверить, что быстрее - выгрузить в ексель и там строить сводную или напрямую к SQL подключиться.
А как обойти ограничение в миллион строк в экселе?
Старый 31.10.2013, 16:28   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
На языке SQL для каждого поля таблицы пишете свой отдельный запрос:
select count(*), Field1 from MyTable group by Field1
select count(*), Field2 from MyTable group by Field2
select count(*), Field3 from MyTable group by Field3
и так далее.
С помощью этих запросов узнаете, какие значения записываются в каждое поле, и как часто встречаются те или иные значения.

Если считать частоту использования конкретных значений не надо, а просто получить уникальные значения для каждого поля, то такой запрос:
select distinct Field1 from MyTable

Последний раз редактировалось Ace of Database; 31.10.2013 в 16:31.
Старый 31.10.2013, 16:29   #9  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Предварительной группировкой или двумя - тремя листами
__________________
Ivanhoe as is..
Старый 31.10.2013, 16:47   #10  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
А почему это перекрестные ссылки такую информацию не дадут? Фильтруемся по Write и получаем список мест (те 10 классов, которые туда пишут).
Я и так эти классы уже знаю. Прикол в том, что не все они (и уж точно - не все "ветки" в них.. я пока понятен? ))) реально используются. Это я - тоже знаю..

Цитата:
Сообщение от Logger Посмотреть сообщение
Ну а как вы хотели ?
Чтобы ничего не делать и все было готово ?
Я, я.. натюрлих.. и можно - без хлеба )))) Позабавили, спасибо..

Цитата:
Сообщение от Logger Посмотреть сообщение
Алгоритм заполнения все равно придется разбирать и понимать. Вам все равно по результатам предоставления этой таблички начнут задавать каверзные вопросы.
Вот не поверите - этих-то вопросов я и хочу добиться.. осмысленных.. от клиента.. Чтобы не у меня, а у пользователя голова болела на тему - "а .. зачем вот здесь у нас взялась вот такая .. фигня".. Мечты, мечты..

Тему снимаю, проблему не решил, но .. обошел.
__________________
Best Regards,
Roman
Старый 31.10.2013, 17:37   #11  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,907 / 5717 (196) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
В общем - по моему собственному опыту борьбы с недокументированным кодом: Это - не программистская задача. Попытка проанализировать код и понять чего он делает очень трудоемка даже для граммотно написаного кода, а уж для безграмотно - она заведомо тупиковая. Надо сначала долго трясти пользователей с вопросами о том что система делает и что она должна делать. После сличения показаний многих пользователей, можно лезть в код и разбираться (с отладчиком) как оно работает. Всякие перекрестные ссылки помогают, но основной инструмент - допрос пользователей и отладчик...
За это сообщение автора поблагодарили: RVS (5).
Старый 31.10.2013, 18:05   #12  
BOAL is offline
BOAL
Участник
Аватар для BOAL
MCBMSS
Злыдни
1C
Лучший по профессии 2015
 
621 / 453 (17) +++++++
Регистрация: 28.04.2003
Адрес: Москва
Малопонятный недокументированный код нужно просто тереть, сделав бэкап кода и данных, и потом по конкретному ТЗ, проснувшегося индивида (или он уволен уже и не проснется) и его ору "а где такая кнопочка??!!" вытрясять ТЗ и сценарии использования.

Таким образом переходил как-то с АХ2.5 на АХ3.0 потеряв кучищу разных модов по пути, перенося сперва все нужно-понятное, а далее еще пяток по принципу 3-4 мес использования и запроса "а вот раньше тут было..".

Конечно, предварительно проверить по перекрестным ссылкам (и я туда же), где эти самые данные используются дальше (то есть, чем и почему они там пишутся не столь важно), куда дальше идут.
Явно же есть отчеты или обработки, где они на входе.
Если данные только пишутся... то однозначно тереть, как диверсию.
(проверив до кучи, не юзаются ли они внешним обменом или ОЛАПОМ....) - но метод их стирания (переимонования таблицы) однозначно это выявит за пару дней (месяцев )
За это сообщение автора поблагодарили: S.Kuskov (3).
Старый 31.10.2013, 18:16   #13  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от fed Посмотреть сообщение
Надо сначала долго трясти пользователей с вопросами о том что система делает и что она должна делать
Вот именно этим сейчас и пытаемся заняться..

Цитата:
Сообщение от BOAL Посмотреть сообщение
Малопонятный недокументированный код нужно просто тереть, сделав бэкап кода и данных, и потом по конкретному ТЗ, проснувшегося индивида (или он уволен уже и не проснется) и его ору "а где такая кнопочка??!!" вытрясять ТЗ и сценарии использования.
...
Все очень верно, осложняется только одним : это интеграция с внешним приложением, тестовой версии такого приложения - не предусмотрено (и не спрашивайте меня - почему.. я вообще - аутсорсер )), а проделывать такие вещи на рабочей базе - приложении.. "да хто ж ему (мне в данном случае) даст"..

Вот и выкручиваемся, как только можно..
__________________
Best Regards,
Roman
Старый 01.11.2013, 11:35   #14  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от RVS Посмотреть сообщение
Я и так эти классы уже знаю. Прикол в том, что не все они (и уж точно - не все "ветки" в них.. я пока понятен? ))) реально используются. Это я - тоже знаю..
В молодости ставил брэйк (или инфолог) на инсерт. Перехватывал и смотрел.

С Уважением,
Георгий
Старый 01.11.2013, 11:48   #15  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Цитата:
Сообщение от George Nordic Посмотреть сообщение
В молодости ставил брэйк (или инфолог) на инсерт. Перехватывал и смотрел.

С Уважением,
Георгий
Проблема в том, что вариантов много, работает пакетник, которые что-то отрабатывает, что-то - нет (из того, что в коде.. неясно еще, что "извне" могут передать, из того, что в Аксе в коде прописано.. тоже - люди не в курсе ))

Неделя времени на детальное описание процесса ) Которого, как сейчас выясняется, не понимает никто. Все, кто это писал (IBS), и кто это принимал (на клиенте) - давно уже об этом забыли..

Смоделировать все руками - просто времени нет понять, что, вообще, там творится. Отсюда, собственно, и возник вопрос о наполнении буферной таблички, куда данные из внешней системы валятся..

Сабж был - "забавная задачка". Она реально забавная, правда )
__________________
Best Regards,
Roman
Старый 01.11.2013, 11:59   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Еще как вариант (если конечно производительность позволит) настроить логирование этой таблички в sysDatabaseLog
А в sysDatabaseLog добавить еще поле со стеком вызова и с числовым хешем от этого стека вызова.

Дать поработать, затем проанализировать историю изменений.
Старый 01.11.2013, 13:01   #18  
BOAL is offline
BOAL
Участник
Аватар для BOAL
MCBMSS
Злыдни
1C
Лучший по профессии 2015
 
621 / 453 (17) +++++++
Регистрация: 28.04.2003
Адрес: Москва
Вместо совета вешать инфо в инсерт посоветую вешать в инсерт свой разбор полетов - в табличку (потом ее читать, тк инфо в пакетнике будет тормозить и не видно, да и после ххх записей повиснет)
Писать в свой лог
дату, время, какие-то ТТХ записи (может дельту с ориг(), и стек вызова, откуда эта запись приехала.

Тогда через пару дней наблюдений отловятся конкретные сценарии использования: кто что пишет, когда, как часто.
И только по ним уже ручками (головой) получить ответ "зачем".

Ну и код этих внешних обработчиков поизучать или, куда они дальше это дают\берут.

====
О пока писал, не обновлял форум, а этот совет выше уже дали
Старый 01.11.2013, 13:10   #19  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Коллеги, повторяю - там есть срок. Неделя. Не-де-ля..

С логами - напомнило - "поздно пить боржоми"..

Мои извинения. Решу - отпишусь, если кому интересно )
__________________
Best Regards,
Roman
Старый 01.11.2013, 13:34   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ну почему же поздно.
Если это инет магазин то даже однодневная статистика может дать неплохую выборку.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задачка с запросом в форме SHiSHok DAX: Программирование 16 17.07.2014 13:50
Интересная задачка, сможете помочь?) Cardagant DAX: Программирование 7 05.02.2012 18:55
order by и group by PavelX DAX: Программирование 19 22.11.2007 15:44
Интересная задачка по getFirst - getNext Wamr DAX: Программирование 12 26.04.2005 15:13

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

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

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