Поделитесь опытом, лайфхаками, как вы справляетесь со сложностью кода. Например, механизм выполнения команды обработки может быть раскидан по разным модулям, и вам нужно его изменить. Но вы этот механизм видите впервые. И вот в первый день садишься, делаешь, вроде всё понятно, но на второй день часть уже забываешь где что находится. Может вы рисуете какие-то блок схемы? Или другим образом упрощаете себе работу?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Особо никаких записей не делаю. Так, если совсем небольшие пометки, например в блокноте или в Excel.
Зафиксировать стек вызова, значения и прочее.
Никаких схем не рисую (хотя не против них, если кому помогает, я только за).
Возможно самое важное, в этом деле необходимо погруженность, что бы не отвлекали и была возможность поработать над задачей несколько дней (в сложных случаях).
Хорошо помогает замер производительности. Потом ходишь по коду и видно, какие строки были выполнены.
Сложный механизм состоит из частей. Надо сосредоточится на том, что необходимо поменять или отладить. Остальное выкидывать из внимания.
Как можно быстрее найти конкретное место сбоя или, где, что необходимо поменять. И уже работать локально, как можно быстрее поймать конкретику. То есть не обязательно пытаться понять весь автомобиль, если проблема, ну не знаю, в бензонасосе.
Сложно сразу всё вспомнить, как-то так вот само получается...
UPD. Хорошо помогает история изменений, прошлые версии. Особенно, если раньше работало, а потом перестало.
Зафиксировать стек вызова, значения и прочее.
Никаких схем не рисую (хотя не против них, если кому помогает, я только за).
Возможно самое важное, в этом деле необходимо погруженность, что бы не отвлекали и была возможность поработать над задачей несколько дней (в сложных случаях).
Хорошо помогает замер производительности. Потом ходишь по коду и видно, какие строки были выполнены.
Сложный механизм состоит из частей. Надо сосредоточится на том, что необходимо поменять или отладить. Остальное выкидывать из внимания.
Как можно быстрее найти конкретное место сбоя или, где, что необходимо поменять. И уже работать локально, как можно быстрее поймать конкретику. То есть не обязательно пытаться понять весь автомобиль, если проблема, ну не знаю, в бензонасосе.
Сложно сразу всё вспомнить, как-то так вот само получается...
UPD. Хорошо помогает история изменений, прошлые версии. Особенно, если раньше работало, а потом перестало.
Иду по коду, ставлю закладки (шифт+ф2), потом если нужно по закладкам.
Обычно есть какая-то логика в разделении кода на части. Есть мнение у некоторых, что это снижает сложность, т.к. снижается когнитивная и цикломатическая сложность кода. Но это работает только тогда, когда выделяются малосвязанные целостные блоки. В действительности для большинства сложных алгоритмов это больше фетиши архитекторов, которые "достигают показателей", чтобы сонар не ругался. Ну это в принципе идиотский показатель, т.к. код становится запутанным, особенно если приходится передавать в эти подпрограммы кучу локальных переменных. Если же подпрограммы действительно делают то, что должны, и ничего больше, имеют пару параметров и не зависят от глобального контекста, то это и правда уменьшает сложность кода.
ЗЫ: вот, например, не сильно полезная практика получать текст запроса из отдельной процедуры, т.к. потом в месте обработки ты не видишь того, что возвращает запрос, т.к. текст запроса далеко. С другой стороны, если этот текст запроса используется в более, чем одном модуле, то уже появляется смысл, т.к. изменять нужно один запрос, а не два. Но многие вообще не заморачиваются здравым смыслом и тащат текст запроса в отдельную процедуру, усложняя жизнь себе и, особенно, коллегам, которые потом вынуждены бегать туда-сюда. С другой стороны, можно открыть два окна или разделить окно пополам. Не помню, умеет такое 1С или нет...
Обычно есть какая-то логика в разделении кода на части. Есть мнение у некоторых, что это снижает сложность, т.к. снижается когнитивная и цикломатическая сложность кода. Но это работает только тогда, когда выделяются малосвязанные целостные блоки. В действительности для большинства сложных алгоритмов это больше фетиши архитекторов, которые "достигают показателей", чтобы сонар не ругался. Ну это в принципе идиотский показатель, т.к. код становится запутанным, особенно если приходится передавать в эти подпрограммы кучу локальных переменных. Если же подпрограммы действительно делают то, что должны, и ничего больше, имеют пару параметров и не зависят от глобального контекста, то это и правда уменьшает сложность кода.
ЗЫ: вот, например, не сильно полезная практика получать текст запроса из отдельной процедуры, т.к. потом в месте обработки ты не видишь того, что возвращает запрос, т.к. текст запроса далеко. С другой стороны, если этот текст запроса используется в более, чем одном модуле, то уже появляется смысл, т.к. изменять нужно один запрос, а не два. Но многие вообще не заморачиваются здравым смыслом и тащат текст запроса в отдельную процедуру, усложняя жизнь себе и, особенно, коллегам, которые потом вынуждены бегать туда-сюда. С другой стороны, можно открыть два окна или разделить окно пополам. Не помню, умеет такое 1С или нет...
(6)
Когда запрос на 100500 экранов довольно удобно - F12 и смотри что там, обратно Ctrl + "-". Но если проблема не в запросе, то проматывать эти простыни запаривает.
ЗЫ: вот, например, не сильно полезная практика получать текст запроса из отдельной процедуры, т.к. потом в месте обработки ты не видишь того, что возвращает запрос, т.к. текст запроса далеко.
Когда запрос на 100500 экранов довольно удобно - F12 и смотри что там, обратно Ctrl + "-". Но если проблема не в запросе, то проматывать эти простыни запаривает.
(8) Я как-то отлаживал запрос примерно на 4,5к строк, который внутри СКД был. И это после того, как я его сократил чуток. Грусть-тоска. В итоге переписали весь механизм, новый запрос менее 500 строк + 500 строк постобработки. Работает в разы быстрее. Не вспомню, чтобы я и на 500-то строк запросы когда помимо этого писал.
(6),
(8),
(9)
#Область Запрос_такой_то
Запрос.Текст = "Выбрать ...
|...
|...";
#КонецОбласти
И можно колесо не использовать. Но кто же в типовых будет это делать :-)
А если 1С удосужится и перестанет фантики делать в УФ, а займется языком запросов, то тексты запросов можно будет сократить в разы или даже на порядок.
Но этого не будет, пока файловую свою не забросят. Это возможно, но этого не будет.
(8),
(9)
#Область Запрос_такой_то
Запрос.Текст = "Выбрать ...
|...
|...";
#КонецОбласти
И можно колесо не использовать. Но кто же в типовых будет это делать :-)
А если 1С удосужится и перестанет фантики делать в УФ, а займется языком запросов, то тексты запросов можно будет сократить в разы или даже на порядок.
Но этого не будет, пока файловую свою не забросят. Это возможно, но этого не будет.
Прикрепленные файлы:

(10) Не люблю области внутри процедур, не прижилось как-то (( Вот сами методы с удовольствием группирую в иерархическое облачное небо! А отдельные куски кода - пока никак. Я старый ретроград. Понять и простить ))
А зато все "вынесенные в отдельные методы" запросы - можно сгруппировать в одном области модуля )) Тоже очень удобно - например, запросы по всем движениям документа лежат в одном месте. Мне вот так удобнее.
А зато все "вынесенные в отдельные методы" запросы - можно сгруппировать в одном области модуля )) Тоже очень удобно - например, запросы по всем движениям документа лежат в одном месте. Мне вот так удобнее.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот