Приемы чтения кода
Для начинающих программистов хорошим тоном всегда было – «учиться программированию у мастеров». А кто может быть лучшими мастерами, чем разработчики типовых решений?! Поэтому совершенно неудивительны попытки новичков открывать модули типовых решений и просто начинать читать код, следя за развитием логики алгоритма, подмечая ньюансы и приемы программирования.
В такие моменты начинающий программист подобен литературному переводчику с неродного языка: что знал – перевел, что не знал – домыслил, что не понял – перевел так, как написал бы сам в данной ситуации.
И не беда, что поначалу половина кода кажется туманной и загадочной. Главное понимать его цель, отмечать основные вехи и как можно больше – читать, осознавать и брать на вооружение. По мере «набивания руки» в чтении кода – тумана и загадок будет оставаться все меньше.
А что бы этот процесс приносил еще больше пользы – в данной статье предлагаем определенную методику и ряд приемов, минимизирующих усилия по чтению программного кода.
Но кому в наше время нужна голая теория, не подкрепленная практикой?! Что бы доказать действенность методики – давайте сразу попробуем ее применять в конкретном примере.
Допустим, мы хотим разобраться, как в типовых решениях устроен механизм пересчета цен при изменении значения валюты документа.
Выход на нужный программный код
Ну что открываем «конфигуратор»?
Первым делом в любой ситуации полезно посмотреть на действие изучаемого механизма… в пользовательском режиме программы!
Поясню: Понимая, к чему это действие приводит, впоследствии гораздо легче делать выводы о важности тех или иных фрагментов программного кода. А это в свою очередь, позволит сэкономить время на игнорировании «очень мутных, но, похоже, не важных» для нашего механизма фрагментах.
Итак, правило первое: Перед началом анализа программного механизма, посмотрите на его действие «глазами пользователя».
Далее желательно определиться с точкой старта изучаемого механизма. Ну, в самом деле, не будем же мы читать сверху-донизу все строчки кода всех модулей программы. Их миллионы. А задействована в работе нашего мехнизма – только малая часть. Как бы на нее выйти побыстрее?
Тут полезно вспомнить, что язык системы «1С:Предприятие» — язык событийный. То есть программный код – он не сам по себе, он задействуется только в ответ на некие события, возникающие после действий пользователя.
Итак: Если хотим быстро выйти на фрагмент кода механизма – достаточно определить «провоцирующее» действие пользователя и обработчики событий, возникающих после этого действия.
Как видите, найти обработчики событий, связанных с изменением элементов формы, достаточно легко. Надо лишь в эскизе формы задействовать контекстное меню на самом элементе, и в подменю «События» посмотреть – напротив каких обработчиков проставлена пиктограмма «Р()«. Если проставлена – значит этому обработчику назначена процедура. А если обработчик подходит по смыслу нашей задачи – то именно эту процедуру надо прочитать, изучить.
Серфинг по коду
Порядок чтения изучаемой процедуры, разумеется, — «сверху-вниз» и, по возможности, «ничего не пропуская».
Но одним из принципов структурного программирования является следующий: «повторяющиеся фрагменты программы нужно оформлять в виде процедур и функций, вызываемых из программы». То есть надо быть готовым к тому, что очередная строчка кода в изучаемой процедуре будет не исполняемой командой, а именем «вызываемой из программы процедуры или функции». А вызываемая процедура или функция уже в свою очередь может включать в себя вызовы других процедур или функций, а те – других…
Фактически чтение «сверху-вниз» в типовых конфигурациях зачастую превращается в «серфинг» по вызывающим друг-друга процедурам и функциям. Как не «утонуть», не запутаться при этом серфинге – смотрим в следующем ролике:.
Шаг вперед: < F12> — переход к определению вызываемой процедуры, функции или переменной;
Шаг назад: комбинация клавиш <Ctrl + » —«> (причем «минус» надо нажимать на верхнем ряду клавиатуры, а не на отдельной боковой).
Кроме этих двух основных приемов «серфинга» есть еще один вспомогательный:
<Alt + F12> — найти использование процедуры или функции. Эта комбинация клавиш позволит оценить «популярность» очередной процедуры или функции:
Анализ вызываемых процедур и функций
Ну что ж, теперь можно подступаться к анализу вызываемой функции «НеобходимПересчетВВалюту».
Что бы чтение функции (процедуры) сопровождалось еще и пониманием прочитанного – желательно придерживаться следующего плана:
1) Контекст
2) Комментарий
3) Параметры
4) Текст
То есть – текст в последнюю очередь.
Почему? Потому что «дешевле и быстрее» выводить умозаключения «от общего к частному», а не наоборот. Потому что легче читать код функции, когда Вы уже четко осознаете:
1) Где она расположена, и какое окружение ей доступно просто из-за того, что она расположена именно там?
2) Что мне хотел посоветовать/пояснить автор этой функции?
3) Какие данные (недоступные из контекста) автор бы вынужден передать со стороны вызывающей процедуры(функции)?
В следующем ролике показано – как именно это осознание можно выполнять:
Ну что ж, осознали.
Вот теперь можно приступать к чтению:
Синтакс-помощник, помогай!
Резюмируем: в процессе «серфинга по коду» можно наткнуться на системные процедуры(функции). Отличие от обычных в том, что их код «зашит» в платформу и поэтому представляет для нас «черный ящик». Что там внутри — не известно. Да и не очень-то хотелось бы с этим разбираться. Вполне достаточно, если бы нам кто-то предоставил описание:
— входной для «черного ящика» информации;
— планируемого действия черного ящика;
— выходной из «черного ящика» информации;
— особенностей поведения «черного ящика».
Так вот, все это описание содержится в инструменте платформы «Синтакс- помощник«:
Приведенный в этом ролике пример работы с синтакс-помощником – это не какое-то особенное и самобытное действие в процессе чтения чужого кода. Это обычная рутинная, рефлекторная повседневность. Это как во время ходьбы размахивать руками. Не задумываемся, просто машем и все тут.
Ну, вот смотрите сами, как идет дальнейший анализ нашей функции:
А вот так освоенные нами «F12«, <Ctrl + » —«> и «Поиск в Синтакс-помощнике» помогают осознать следующую часть алгоритма:
Изучение привлекаемых объектов
В процессе чтения кода кроме вызываемых или системных процедур и функций мы можем еще наткнуться на привлечение других объектов. Вот сейчас мы в рамках контекста формы документа с алгоритмом разбираемся. Но в самом алгоритме прописано получение данных из совсем другого объекта. Смотрите, как можно и в этом случае воспользоваться теми правилами чтения кода, что мы уже изучили:
Отладчик, показывай!
Хорошо когда Вам абсолютно прозрачны преобразования данных, выполняемые в коде алгоритма. То есть читаете код и понимаете: «ага, сюда, значит, у них заходит проволока, вот этот барабан крутится, вот эти насадки загибают, а вот эта – обрезает. «
Но иногда понимание сводится к следующей схеме:

Наглядность! Вот что требуется при чтении сложных фрагментов кода.
Наглядность преобразований данных на каждом этапе.
Так вот, платформа «1С:Предприятие» имеет шикарный инструмент для обеспечения наглядности. Называется он – «Отладчик».
Итак, отладчик позволяет посмотреть результат любой переменной, метода или функции, выполнимых в рамках текущего кода (текущего контекста).
За работу, товарищи!
А что в алгоритме было дальше… — узнайте, пожалуйста, сами.
Ну, правда, попробуйте.
Убедитесь, что это не сложно и по-своему приятно.
Ведь что может быть приятнее для начинающего программиста, чем полностью разобраться в сложном, запутанном деле алгоритме.
Горячие клавиши 1С — сочетаем несочетаемое
Здравствуйте! При начале работы, когда мы набираемся опыта, у нас вырабатываются определенные привычки, и привычка использовать горячие клавиши принесет нам удобство в работе и быстроту. Поэтому так важно использовать сочетание клавиш, когда только начинаешь учиться. Использование горячих клавиш значительно ускоряет работу и увеличивают количество возможных действии с помощью клавиатуры. Речь пойдет об использовании горячих клавиш в конфигураторе.

Кодирование
При написании, когда можно сэкономить время, используя следующие сочетания клавиш:
Ctrl + Пробел — вызов контекстной подсказки или автодополнения.
Ctrl + Q — вызов шаблона, значительно ускорит написание кода.
Alt-Shift‑F — отформатировать участок кода, чтоб он стал читабельным.
Ctrl-F1 — поиск в синтакс — помощнике, подводим курсор к функции платформы или ключевому слову и нажимаем.
Исследование кода
Когда исследуем большие участки кода, то тяжело обойтись без следующих сочетаний клавиш.
Alt+F2 – установить, снять закладку с текущей строки.
F2 – перейти к следующей закладке.
Shift+F2 — перейти к предыдущей закладке.
F‑12 – ставим курсор на процедуре или функции и переходим к определению процедуры или функций.
Ctrl — (минус) — перемещает назад в модуль, на который прыгнули через F12.
Ctrl — T — найти в дереве. Если находиться в модуле, то в дереве конфигурации выделиться объект, чей это модуль.
Ctrl+F — найти объект метаданных или его реквизит в дереве метаданных.
Быстрое перемещение по ветвям конструкций Если… ИначеЕсли… Иначе.… и между
началом и концом цикла.
Ctrl-[ — перейти назад.
Ctrl-] — перейти вперед.
Ctlr‑G — перемещения к конкретной строке кода.
Отладка кода
Отладка кода очень важное действие, без которого не обходится написание кода и исследование чужого.
F5 — запуск отладки.
F9 – поставить, убрать точку останова.
F10 — шагнуть через, т.е. не заходить в процедуры и функции, а выполнить следующую строку кода.
F11 — шагнуть в, т.е. выполняет следующую строку кода с заходом в процедуры и функции.
Shift-F9 — рассчитать выражение.
Ctrl+Shift+F9 — отключить точку останова.
Окно служебных сообщений
В окно служебных сообщений выводятся ошибки, результаты поиска и т.д. Для работы с окном сообщений и полезны следующие горячие клавиши:
Ctrl-Alt‑Z — окно сообщений очистить.
Ctrl-Shift‑Z — окно сообщений очистить и закрыть.
Заключение.
Здесь я собрал наиболее используемые сочетания клавиш, на самом деле их намного больше. Чтобы посмотреть Горячие клавиши в конфигураторе необходимо зайти в Меню справка — Содержание справки — Сочетания клавиш (Конфигуратор).
Формируйте привычку использовать горячие клавиши, запоминается лучше когда используешь, а не когда учишь.
П.С.
Я часто использую сочетание клавиш в режиме “Предприятия” Alt + Shift + R — восстановить размеры окна. Очень полезно когда, пользователь сильно менял форму и из неё «пропали» некоторые реквизиты. Зовет тебя, ты делаешь Alt + Shift + R, он с удивлением смотрит, как это у тебя получилось
Как посмотреть код 1с
8(495)005-62-29
skype: live:di-sem
@programmist_1C
Отправить заявку
Советы программистам 1с при работе с конфигуратором
Подсветка текущего идентификатора

Позволяет подсвечивать текущий идентификатор выбранным цветом.
Выделяются все идентикаторы у которых такое же имя.
Очень удобно для поиска идентификатора по тексту кода.
Отладка под определенным пользователем

Позволяет запускать отладку под определенным пользователем.
Незаменимо когда ошибка появляетося только у определенного пользователя или когда пользователю не хватает прав, но неизвестно каких.
Работа с открытыми окнами в конфигураторе

Позволяет расположить окна в удобном виде.
Выделить их все и закрыть.
Форматирование текста кода
Выделить нужный фрагмент кода и нажать Alt+Shift+F
либо через меню:



Предположим, вы дорабатываете незнакомую конфигурацию и в каком-то модуле вам попался неотформатированный текст. Вам трудно в нем разобраться и вы хотите улучшить его читаемость, да и вообще сделать более «приличным».
В этом случае вам не нужно вручную двигать строки текста с помощью клавиши Tab, так как это гораздо удобнее и быстрее сделать с помощью форматирования блока текста.
Для этого выделите этот фрагмент текста (или сразу весь модуль – Ctrl + A) и нажмите кнопку Форматировать (Alt + Shift + F) в командной панели Текст.
Вывод списка всех процедур модуля + заготовки предопределенных процедур

Вернуться в исходное место после команды «Перейти к определению».
Во время анализа кода мы хотим посмотреть что за процедура или функция вызывается. Жмем ПКМ и выбираем перейти к определению и переходим к нужной процедуре/функции.

Но после просмотра функции мы хотим вернуться обратно. Для этого жмем «CTRL» + «-«:

Посмотреть где используется выделенная процедура/функция

Откуда была вызвана процедура/функция? Стек вызовов.
Допустим что в этой процедуре у нас ошибка мы ставим точку останова, но видим что в процедуру уже поступают неверные параметры.

Нужно узнать откуда была вызвана данная процедура. Вызываем стек вызовов:

Видим все процедуры из которорых мы перешли к текущей:

Вырезать часть кода в отдельную процедуру/функцию

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


Закладки и перейти к строке.
Бывает что код достаточно большой и нужно «прыгать» от одного места к другому.
Искать место глазами совсем неудобно.
Лучше воспользоваться следующими инструментами.
1 Переход к строке.
Запоминаем номер строки, он написан в правой нижней части экрана

Жмем в любом месте этого модуля кнопку или сочетание клавиш

В нужной строке жмем Alt+F2 либо через меню

Переход по закладкам горячие клавиши:
F2 — Следующая закладка
Shift+F2 — Предыдущая закладка
Остановить отладчик до наступления ошибки.
Отладчик будет остановлен на строке на которой будет ошибка.



Проверим что скажет отладчик.

и остановит процедуру на нужной строке

Вычислять выражение не меняя код.
В контекстном меню при остановке отладчика есть команда «Вычислить выражение». Shift+F9


В поле «Выражение» мы можем написать любой код и тут же получить ответ. Например:

Контекстная подсказка по параметрам

Принудительно вызвать обычную контекстную подсказку: CTRL+Пробел
При изменении объекта метаданных отключить автоматический поиск ссылок на него.
Инструмент безусловно полезный, но нужен он не всегда.

Отключается в Сервис-Параметры. Убрать галочки в группе «Рефакторинг при изменениях в метаданных и формах»:

- Главная

- Блог

- В помощь 1с программисту

- Советы программистам 1с при работе с конфигуратором
