Вход | Регистрация


1С:Предприятие ::

Метки: 

Построение дерева вызова функций

Я
   toypaul
 
20.12.17 - 13:54
Берем любую конфигурацю на 8ке. На вход подаем список функций из общих модулей, на выходе нужно получить список вызовов где используются эти функции. Рекурсивно, то есть размотать до конца. Ну и учесть зацикливания.

Есть в природе что-то подобное?

На ИС есть только встраивание кода в модули с дальнейшим их запуском.  Нужно без запуска. Только анализ кода.
 
 
   toypaul
 
1 - 20.12.17 - 14:09
В идеале вообще на вход подать ключевое слово. Например, ПартииТоваровНаСкладах, чтобы алгоритм построил первый уровень как

-функции общих модулей
-объекты системы (модули объекта, менеджера, формы)
-- документы
-- справочники
-- отчеты
   ixijixi
 
2 - 20.12.17 - 14:10
Ну загнул
   vicof
 
3 - 20.12.17 - 14:11
Пиши плагин на едт
   toypaul
 
4 - 20.12.17 - 14:12
(2) чо загнул? типовая математическая так сказать задачка.
   toypaul
 
5 - 20.12.17 - 14:13
(3) не видел я этот ЕДТ и как-то не горю желанием. у меня задачка практическая и требует как можно более скорого решения.

если ничо нет подобного, придется слабать хоть что-нибудь
   ildary
 
6 - 20.12.17 - 14:47
(5) поделитесь пожалуйста результатом. Куча народа спасибо скажет (и я тоже).
   toypaul
 
7 - 20.12.17 - 14:48
(6) ОК
   Мыш
 
8 - 20.12.17 - 14:53
(0) Выгрузить конфигурацию в файлы и анализировать результат.
   toypaul
 
9 - 20.12.17 - 14:54
(8) смешно пошутил
   тарам пам пам
 
10 - 20.12.17 - 14:58
(6) А что он там такого может сделать при условии "требует как можно более скорого решения"? Тут на скорую руку кроме глобального поиска мало что можно придумать, который отработает не совсем корректно.

Если делать по уму, то надо AST строить и делать анализ кода (подозреваю, что EDT примерно так и делает при выдаче своих ошибок "на лету"), а это быстро наваять не получится. И даже в этом случае вряд ли получится отследить особо извращенные вызовы типа:
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначенияКлиентСервер.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
        МодульДополнительныеОтчетыИОбработки.ПриДобавленииДополнительныхОтчетовДоступныхТекущемуПользователю(ДоступныеОтчеты);

(8) А это и не шутка. Как ты до текстов модулей по другому доберешься?
 
  Рекламное место пустует
   toypaul
 
11 - 20.12.17 - 15:03
(10) ну уж чо-нить сделаю такого.

уж как выгрузить модули-то я знаю. это как бы даже не 10% решения задачи.

ну могу сказать спасибо что напомнили
   toypaul
 
12 - 20.12.17 - 15:06
"И даже в этом случае вряд ли получится отследить особо извращенные вызовы типа: "

ну куда деваться - не без потерь конечно. благо в моем конкретном случае такой байды нет. а если сильно надо можно учесть эту "специфику"
   toypaul
 
13 - 21.12.17 - 16:41
Начал делать ... на данный момент создается структура модулей и почти создается структура методов этих модулей.

Дальше буду делать регистр сведений по применимости одного метода в другом и алгоритм заполнения этого регистра из выгруженных модулей.

Затем буду навешивать функции разворота одного метода вверх или вниз.

И добавлю еще нужный мне функционал поиска методов по ключевому слову (и дальнейший разворот этого списка)

Сложности будут с методами как в (10). А еще будут сложности с вызовами методов объектов через ссылку (из модуля объекта или модуля менеджера). Тут надо думать ... конкретную ссылку на метод не подставишь.

Алгоритм будет 2х проходной - сначала заполняем структуру модулей и методов. Затем строим применимость. Методы на 2м этапе ищем по полученной структуре на 1м этапе, чтобы исключить (постараться исключить) типовые методы вроде Объект.Записать()
   xxTANATORxx
 
14 - 21.12.17 - 17:08
а какой прикладной толк данной задачи?
   toypaul
 
15 - 21.12.17 - 18:33
(14) нужно понять в каких местах используется регистр, чтобы отключить движения по нему
   МимохожийОднако
 
16 - 21.12.17 - 19:45
В отладчике стёк вызовов не помогает?
   GANR
 
17 - 21.12.17 - 20:52
(0) я искал - не находил
   GANR
 
18 - 21.12.17 - 20:53
(16) так надо все потенциально возможные пути, допустим, найти - дерево, так сказать будет, а не стек уже
   toypaul
 
19 - 22.12.17 - 09:05
(16) смешно пошутил
   toypaul
 
20 - 22.12.17 - 09:07
Хотя на ИС как раз есть ТОЛЬКО такие алгоритмы, которые модифицируют код, нужно запускать 1Ску и только тогда строится дерево. И это будет только одна ветка. А мороки дофига.

У меня же стоит задача пл ключевому слову сначала вытащить все отправные точки, а потом раскрутить их вверх до конца.
   VladZ
 
21 - 22.12.17 - 09:08
(0) К чему эти нелепые телодвижения?
   toypaul
 
22 - 22.12.17 - 09:27
Вот есть похожая вещь http://catalog.mista.ru/public/16102/ но для 7ки
   ИТ директор
 
23 - 23.12.17 - 11:55
(15) если
>>задачка практическая и требует как можно более скорого решения.

собери ТЖ по событию SCALL с именем своего регистра в контексте
   Злопчинский
 
24 - 23.12.17 - 15:25
(15) переименовать регистр
где сломается - там и используется ;-)



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует