Быстрый способ разобраться в чужом коде

29.12.18

Разработка - Рефакторинг и качество кода

Добрый день! Хочу рассказать о способе, который позволит быстро разобраться в чужом коде. Я, конечно, думаю, что это жесткий баян, но не видел, чтобы кто-то пользовался этим способом. По крайней мере, новичкам точно будет интересно.

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

Предположим, нужно разобраться, как устроен механизм печати БП 3.0.

Идем в конфигуратор, запускаем режим отладки. Кстати, некоторые процессы, например, формирование отчетов могут выполняться фоново, и для их отладки требуется настроить автоматическое подключение.

Также в типовых конфигурациях есть дополнительный параметр запуска «/РежимОтладки», который так же отключает фоновое выполнение. 

После запуска режима отладки заходим в документ для формования печатной формы, но перед выполнением печати запустим механизм замера производительности.

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

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

Теперь нужно решить: какой ключевой оператор поможет найти требуемую процедуру, в которой формируется печатная форма. Для формирования печатной формы требуется в любом случае создать объект Табличный документ, таким образом ключевой оператор будет «Новый ТабличныйДокумент» или просто «ТабличныйДокумент». Находим нужную строку, используя ключевой оператор, устанавливаем точку останова и запускаем формирование отчета.

 

После остановки отладки на требуемой строке кода запускаем стек вызовов.

Выходит окно со списком вызванных процедур, по которым можно выполнять переход для изучения механизма печати.

Вступайте в нашу телеграмм-группу Инфостарт

замер производительности стек вызовов чужой код

См. также

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

Проблемы и их решение из реальных проектов сложного обновления 1С, когда нужно было сохранить целостность данных, ускориться и уложиться в оцененные и утвержденные сроки.

02.07.2025    1125    1c-izh    4    

10

Рефакторинг и качество кода Информационная безопасность Пароли Программист 1С v8.3 Россия Абонемент ($m)

Представьте ситуацию: вы пишете обработку для отправки email-уведомлений клиентам. Чтобы подключиться к серверу почты, вам нужны: логин, пароль, SMTP-адрес. Что делает большинство программистов?

1 стартмани

23.06.2025    1107    markbraer    8    

3

Рефакторинг и качество кода Инструментарий разработчика Программист 1С v8.3 Абонемент ($m)

Обработка позволяет анализировать структуру методов в модуле и легко составлять её структуру, канонизировать, используя стандарты 1С.

3 стартмани

20.06.2025    1002    16    MikeLetto    3    

8

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

Тестовая база обновлена через все ключевые релизы, всё протестировано, остатки сведены, вы готовы обновить «боевую» базу, но…по замерам для этого потребуется целая неделя, а у вас есть всего пара выходных. Знакомая ситуация? Расскажем, как увеличить скорость отработки промежуточных конфигураций!

18.06.2025    2105    1c-izh    12    

8

Рефакторинг и качество кода Программист 1С v8.3 Россия Бесплатно (free)

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

03.06.2025    1377    MC4RT    5    

12

Рефакторинг и качество кода Программист 1С v8.3 Абонемент ($m)

Конфигурация для хранения стандартов и сохранения их в формате PDF.

2 стартмани

05.05.2025    3876    comptr    7    

15

Рефакторинг и качество кода 1С v8.3 Абонемент ($m)

Методический материал для собеседования. Помогает облегчить общение между кандидатом и работодателем.

5 стартмани

05.05.2025    4586    vasilev2015    109    

25

Рефакторинг и качество кода Программист 1С v8.3 Россия Бесплатно (free)

Цель статьи: кратко показать инструмент и возможности Cursor IDE.

21.04.2025    13466    dimzfresh    41    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. leosoft 167 29.12.18 12:24 Сейчас в теме
Вчера аналогичная публикации была ... https://infostart.ru/public/972709/
3. WI_IL 126 29.12.18 12:53 Сейчас в теме
2. bulpi 217 29.12.18 12:28 Сейчас в теме
Уважаемый, если бы Вы НА САМОМ ДЕЛЕ открыли способ , как разбираться в чужом коде, Вам бы памятник при жизни поставили. А это - боян для новичков.
NikieMSE; Natalia; maksa2005; aexeel; YLioY; Кадош; Lyolik; lunjio; TreeDogNight; zeegin; EliasShy; +11 1 Ответить
4. vasilev2015 2797 29.12.18 13:12 Сейчас в теме
Здравствуйте !

Вчера только сделал короткую заметку, что можно применять поиск в окне замера производительности

https://infostart.ru/public/833094/


p.s. Пользуясь случаем, поздравляю всех с Новым Годом !
5. vasilev2015 2797 29.12.18 13:27 Сейчас в теме
(4) Плюсанул. Пусть будет по-новогоднему ))
6. rikony 29.12.18 13:46 Сейчас в теме
Это не баян , а взгляд со стороны :)
7. VmvLer 29.12.18 14:03 Сейчас в теме
с асинхронными вызовами так не всегда будет прокатывать
8. CheBurator 3230 29.12.18 17:43 Сейчас в теме
Спасибо! Мне, как новичку - полезно!
kuzyara; Rasdag; Dimasik2007; Redokov; Batman; Yakud3a; +6 Ответить
9. RustIG 1884 29.12.18 18:54 Сейчас в теме
за 10 лет ни разу "именно так" не изучал чужой код - просто шел по отладке "следующий шаг" - еще "следующий шаг"....
а вообще представленный метод полезный

П.С. баян - не баян... мне не интересно, как это назовут....
поток инфы настолько огромен, что часть инфы проходит мимо...
для меня инфа полезна, хоть я не новичок в плане копаться в чужом коде...
ivprovotorov; IvanovAV; Voblhned; +3 Ответить
10. Voblhned 58 29.12.18 18:58 Сейчас в теме
(9) плюсую, прямо мысли из головы выдернул, только про 10 лет , это не про меня xD
17. starik-2005 3180 05.01.19 11:23 Сейчас в теме
(11) кстати, в стеке вызовов доступны все переменные всех функций стека. Т.е. проваливаешься на уровень Х и можешь посмотреть любую переменную.
Vlad_2008; +1 Ответить
20. Dementor 1054 06.01.19 13:06 Сейчас в теме
(9) Десять лет назад я тоже начинал "расследование" от кнопочки "Сформировать". Но пару лет назад мне попалась УНФ, а там на банальную печать документа жесткая мешанина из процедур модуля менеджера этого документа, специальной печатающей именно этот документ обработки и кучи вызовов из общих модулей, часть из которых спрятана в БСПшных кишках, и часть из которых вызывается вообще в фоне. Почухал репу и на меня снизошло озарение про "Замер производительности", благодаря которому очень быстро все вызовы проанализировал.

Теперь у меня две стратегии разбора чужого кода. При анализе "классических" конфигураций - просто движение по F12 или пошаговая отладка. А для конфигураций на основе БСП - по "замеру производительности".
VyacheslavShilov; ivprovotorov; Vlad_2008; WI_IL; RustIG; +5 Ответить
11. ResAndDev 30.12.18 09:57 Сейчас в теме
Режим отладки применял и ранее, но со "скрипом". Про стек вызовов интересно...
12. Dozkni 48 02.01.19 10:22 Сейчас в теме
<Неизвестный модуль>.<Неизвестная процедура>()
так вот и устроен механизм печати...
ivprovotorov; kuzyara; Dimasik2007; Stivens; asupsam; Zab; rovenko.n; FesenkoA; +8 Ответить
16. starik-2005 3180 05.01.19 11:16 Сейчас в теме
(12) все куда проще. Есть модуль менеджера печати, общая форма печатного документа и экспортные методы менеджера объектов, из которых вызывается печать. Есть функции бинда кнопок в интерфейс, которые вызывают уже общую форму, которая создает объект с макетами и дергает функции менеджера объекта, формирующие макет, прибинденые к кнопке.
13. IvanovAV 153 04.01.19 15:51 Сейчас в теме
Интересно им в 1С, за бестолковое усложение кода, молоко или премию выдают?
chernov.gigansk.ru; serega_sun; +2 Ответить
15. starik-2005 3180 05.01.19 11:11 Сейчас в теме
(13) я всегда за примеры. Если код пишет сотня человек с высокой текучкой кадров, то подобный стек вызовов вполне оправдан, ибо повышает уровень абстракции, чем, в пределе понимания, весьма существенно упрощает код.
18. IvanovAV 153 05.01.19 18:30 Сейчас в теме
(15)
уровень абстракции
можно по проще и на понятном языке выражаться? 1С позиционирует себя на рынке, как легко модифицируемые продукты на коленке любым средним специалистом, для малого и среднего бизнеса. А тут надо быть экспертом по типовым КФГ. Наши клиенты (малый бизнес) не готовы оплачивать работу эксперта, когда надо НАПРИМЕР: вывести/убрать пару доп. колонок или подписей на печ. форму. Анализируя код типовых, мы уже давно пришли к выводу, проще (дешевле для клиента) написать свое с нуля, простое и надежное как АК - 47 и его модернизировать, чем искать точку минимального воздействия в каше из типовых модулей, которые еще и переписываются от релиза к релизу...
П.С. А самое дешевое (цена/качество) сидеть на УТ 10.3, и заточить ее под свои бизнес процессы, за несколько десятков часов. Наполнить готовыми доп. подсистемами с инфостарта. Окупаемость ROI, такого проекта для малого бизнеса, несколько месяцев.
Areal; Yashazz; RustIG; +3 Ответить
19. starik-2005 3180 06.01.19 09:35 Сейчас в теме
(18) уровень абстракции - это весьма простой термин. Любая область воспринимается легче, если говорить о ней в общих чертах, т.е. не погружаясь в детали. Вот, например, об организме - мозг управляет мышцами, которые крепятся к скелету. Для питания мышц есть кровеносная система и сердце, которое приводит ее в движение. Легкие снабжают кислородом, кишечник - питательными веществами, которые попадают в него изо рта через пищевод и желудок. Почки и печень очищают кровь и снабжают ферментами с помощью желез. Ну и т.д.

Это уровень абстракции, приближенно описывающий работу организма. То же самое можно сказать и о программировании. В ООП обычно есть некий глобальный объект - синглтон, к которому вяжется вся логика верхнего уровня, которая состоит из конструктора начального состояния, механ змов, осуществляющих его изменение. Дальше к интерфейсным объектам цепляются обработчики событий.

В итоге чем выше уровень абстракции, тем легче воспринимать программу, как систему взаимодействующих сущностей. А дальше кже детали реализации конкретного объекта, которые и составляют основную сложность в программировании.
Liyа; WI_IL; Dementor; Denis_CFO; +4 Ответить
14. starik-2005 3180 05.01.19 11:09 Сейчас в теме
Правильный метод. Сто лет его юзаю (еще с паскалей, но том это иначе называлось - профилирование, но я юзал турбо-дебагер). На курсах подготовки экспертов данный метод рекомендуют (настоятельно) для поиска узких мест перед тем как лезть в профайлер скула и техжурнал.
21. v3rter 09.01.19 16:25 Сейчас в теме
С одной стороны, сложность типового кода повышает общую капитализацию сегмента отрасли и уменьшает общее количество некачественного исходного кода, с другой стороны она же снижает производительность и повышает требования к аппаратному обеспечению. Уже сейчас минимальная конфигурация компьютера для комфортной работы в типовых конфигурациях приближается к игровым системам начального уровня.

Если тенденция не изменится, то предположу появление и рост объемов методических пособий по технике убеждения клиентов и работе с возражениями, тематических семинаров, пропагандистских материалов, литературы класса "как преодолеть себя и достичь успеха с 1С", детских лагерей и кружков изучения гимна 1С... Или я увлёкся? )
A1WEB; pivo_san; acanta; +3 Ответить
22. acanta 09.01.19 17:42 Сейчас в теме
(21) все правильно. Инфраструктура франчайзи нужна, но программисты в них уже не требуются, разве что в очень крупные и значительно меньше, чем сейчас.
Оставьте свое сообщение