Как избавиться от большого количества комментариев в коде с использованием EDT + Git

15.11.22

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

Публикация освещает вопрос улучшения качества и читабельности кода путем отказа от излишних комментариев. Рассматривается пример из опыта работы команды разработки на EDT + Git. Команда работает в EDT меньше года. Конфигурация сильно доработана и не обновляется типовыми релизами.

Многие команды разработчиков в процессе выполнения доработок обрамляют код своими (фамильными) комментариями, а также не забывают оставить предыдущую версию кода в виде комментария. Эти комментарии помогают в любой момент времени понять: кто, когда, по какой задаче и какие изменения внес.

// {begin 03.06.2022 Жу... №10208 }
//	    Параметры_С.Вставить("НадписьИнфо", строка_ВыгодаПоКарте);
	    Параметры_С.Вставить("НадписьИнфо", Элементы.ДекорацияИнфо03.Заголовок);
// {end 03.06.2022 Жу... №10208 }

Статья посвящена обратному процессу, то есть, очистке этих комментариев из конфигурации. Интерес к этой статье может появиться у команд, которые перешли, находятся в процессе перехода или планируют переход на EDT + git.

Суть проблемы

Ни для кого не секрет, что в процессе развития бизнеса у программистов появляется все больше и больше задач на доработку. Решение этих задач чаще всего (не всегда) связано с внесением программистами нового кода. Со временем, в результате разработки нового функционала, в системе появляется все больше комментариев. Через несколько лет (или раньше, зависит от размера команды и прыткости каждого ее члена) разработчики начинают терять приличное время на чтение и понимание кода, что отражается на их производительности. Код становится плохо читаем, а скрыть эти комментарии не представляется возможным (в пределах среды разработки).

Польза же от самих комментариев снижается со временем. Есть несколько причин:

Комменты поверх комментов. Разработчики вносят все больше и больше правок, иногда поверх уже кем то доработанного ранее кода. И тут появляется сложность при чтении кода, т.к. надо еще понять, а какой комментарий к чему относится, какой свежее и правильнее. Особенно это касается часто изменяемых участков кода. 

Устаревание комментария. Со временем бизнес логика меняется, и изначальный комментарий становится не актуальным для прикладной задачи. При этом разработчику при выполнении доработки приходится читать длинные поясняющие комментарии или закомментированный другими разработчиками код. 

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

Большое количество комментариев загромождает код, и сильно отвлекает разработчика от основной задачи - понять, что же этот код делает. Мое самое любимое - это закомментированный запрос в 100500 строк, и следом исправленный вариант запроса. Пока пролистаешь, забудешь о чем шла речь. Еще очень приятно, когда посреди запроса прячутся комменты..

Отрицание

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

&НаКлиенте
Процедура ДобавитьВКорзинуФрагмент(ВыбранноеЗначение_ТЗ)
	
	//НовыеСтроки = ПараметрыДанных.НовыеСтроки;
	//ПараметрыТовара = ПараметрыДанных.ПараметрыТовара;
	// Начало изменений БИТ Пят... И.Н.
	//	Если Объект.Товары.Количество() = 0 И (Не СуммаСдачи = 0) Тогда
	//		СуммаСдачи = 0;	
	//	КонецЕсли;	
	// Окончание изменений БИТ Пят... И.Н.
	
	//ВИТТА_ЛАА_2017-12-05 {
	Если ВИТТА_ОптимизированноеПробитие Тогда
		//КопияОбъекта = Объект;
		//ВИТТА_ДобавитьВКорзинуНаСервере(ВыбранноеЗначение_ТЗ, КопияОбъекта, ПараметрыУказанияСерий, ИдентификаторЧековойСмены, ТекущийПродавец);
		//КопироватьДанныеФормы(КопияОбъекта, Объект);
		ВИТТА_ДобавитьВКорзинуНаКлиенте(ВыбранноеЗначение_ТЗ);
		//Если ТекущаяСтрока <> Неопределено Тогда
		//	Элементы.РеквизитТаблица.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор();
		//	СтрокаДисплеяПокупателя = Строка(ТекущаяСтрока.Номенклатура);
		//КонецЕсли;	
	Иначе
		ДобавитьВКорзинуНаСервере(ВыбранноеЗначение_ТЗ);//ПараметрыТовара, НовыеСтроки);
	КонецЕсли;
	//ВИТТА_ЛАА_2017-12-05 }	
	
	//	Если Не ИспользоватьНоменклатуруПродаваемуюСовместно Тогда
	//		ПодборТоваровКлиентСервер.УстановитьТекстИнформационнойНадписи(ЭтаФорма);
	//	КонецЕсли;
	
	СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма);
	//ВИТТА_ЛАА_2017-12-05 {
	Если НЕ ВИТТА_ОптимизированноеПробитие Тогда	
		БИТ_ЧекККМКлиент.ПересчитатьДокументНаКлиенте(ЭтаФорма, Объект, Истина);	
		Модифицированность = Истина;
	КонецЕсли;
	//ВИТТА_ЛАА_2017-12-05 }
	
	// Если добавление товара в корзину производилось при заполненной строке поиска,
	// то вернуть фокус ввода на строку поиска.
	//ИмяТекущегоЭлементаСтрокиПоиска = ПодборТоваровКлиент.ИмяТекущегоЭлементаСтрокиПоиска(ЭтаФорма);
	//Если ЗначениеЗаполнено(ЭтаФорма[ИмяТекущегоЭлементаСтрокиПоиска]) Тогда
	//	ПодборТоваровКлиент.УстановитьТекущийЭлементСтрокаПоиска(ЭтаФорма);
	//КонецЕсли;
	
КонецПроцедуры

Согласитесь, подобный код читать нелегко. Нужно в коде из 40 строк найти 10 полезных.

Сделал простой опросник на Google Forms для команды разработчиков. Вот, какие результаты мы получили:

 

 

Приняли решение обсудить этот вопрос на ретроспективе.

Гнев

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

Нам не удалось принять решение и придти к консенсусу по поводу комментариев. Однако, немного поработав совместно на доске Miro, нам удалось классифицировать комментарии, которыми пользуется команда, накидать предложений (иногда даже безумных) для последующего мозгового штурма, и наметить дальнейший план действий.

Вот что из этого получилось:

 

Решением по итогам ретроспективы стало

1. Проведение мозгового штурма (к следующей ретроспективе договорились, что каждый разработчик оставит свой стикер с комментариями и мыслями под каждой идеей)

2. К следующей ретроспективе изучаем стандарты в части комментариев, смотрим практику других команд. Назначены ответственные.

Торг

К следующей ретроспективе мы подошли более подготовлено. Изучили стандарты, пообщались с другими командами (в том числе не 1с разработчики), разработчики высказались по идеям на доске Miro:

 

На картинке не все видно, но суть отражает.

Команды, разрабатывающие приложения не на 1с, так или иначе используют систему контроля версий, и никогда не пишут комментарии по каждой измененной строке кода. Какие-то команды используют удаленные Git репозитории, кто то разворачивает его в компании локально. Для просмотра изменений используют функционал Git (GitLab, GitHub, Bitbucket), некоторые команды считают удобным использование приложений (SMARTGIT и прочие).

В результате длительного обсуждения, прений и разногласий, команда пришла к выводу, что для просмотра истории изменения кода функционала Git + EDT будет достаточно. Главное вносить корректные коммиты, целиком отражающие суть внесенных изменений.

Решения, принятые на ретро:

1) Сносим все (не несущие пользы) комментарии в части кода, который сейчас дорабатывается и будет тестироваться.

2) Добавляем комменты для кода, который будем менять / удалять в будущем (например, после проверки гипотез).

3) Добавляем комменты для кода, который можно интерпретировать неоднозначно. Комментарии,  в этом случае, поясняют программисту, почему именно так и не иначе.

4) Оставляем практику описания процедур и функций. 

Депрессия

После завершения ретроспективы все разошлись по рабочим местам, и приступили к написанию кода "по-новому", соблюдая договоренности, достигнутые на ретро. Однако, некоторым разработчикам было тяжело изменить манеру написания своего кода, старые комментарии казались очень ценными, их уничтожение казалось невосполнимой утратой. Новые комментарии очень сильно напрашивались. Причина тому - не все до конца понимали, как работают механизмы  чтения истории кода в EDT, а разбираться лень и некогда. 

Решение пришло достаточно быстро. При слиянии веток видно, что разработчик добавил лишний комментарий. С такими комментарием пришлось поработать, показать разработчику функционал по просмотру истории кода в EDT, и проконтролировать дальнейшие его доработки на наличие коментов.

Принятие

Постепенно команда начала понимать, что вся история сохраняется, ее просмотр не доставляет неудобств и не занимает много времени. При этом код становится чище, и на его чтение тратится меньше времени.

Для приличия, на примере редактирования части модуля посмотрим функционал EDT для просмотра истории изменения кода:                           

Если ЗначениеЗаполнено(Источник.ВИТТА_Основание) Тогда //по заказу
	СтруктураДжСон.Вставить("order_id",Источник.ВИТТА_Основание.НомерПоДаннымКлиента);          //Номер заказа
	//begin 25.12.2020 ВИТТА Ант... № 835
	//СтруктураДжСон.Вставить("add_txn_id",?(Источник.ВИТТА_Основание.ВИТТА_ИсточникЗаказа = Перечисления.ВИТТА_ИсточникЗаказа.Телефон,Источник.Номер,""));//Идентификатор чека
	//end 25.12.2020 ВИТТА Ант... № 835
	СтруктураДжСон.Вставить("order_total",Источник.ВИТТА_Основание.СуммаДокумента);				//Сумма заказа
Иначе
	СтруктураДжСон.Вставить("order_total",Источник.СуммаДокумента);
	//begin 25.12.2020 ВИТТА Ант... № 835
	СтруктураДжСон.Вставить("add_txn_id", Источник.Номер);//Идентификатор чека
	СтруктураДжСон.Вставить("client_id", СокрЛП(Источник.Склад.Код));
	
//end 25.12.2020 ВИТТА Ант... № 835
КонецЕсли;

Убираем комментарии из кода


Если ЗначениеЗаполнено(Источник.ВИТТА_Основание) Тогда
     СтруктураДжСон.Вставить("order_id",Источник.ВИТТА_Основание.НомерПоДаннымКлиента);          
	 СтруктураДжСон.Вставить("order_total",Источник.ВИТТА_Основание.СуммаДокумента);				
Иначе
	 СтруктураДжСон.Вставить("order_total",Источник.СуммаДокумента);
	 СтруктураДжСон.Вставить("add_txn_id", Источник.Номер);										
	 СтруктураДжСон.Вставить("client_id", СокрЛП(Источник.Склад.Код));
КонецЕсли;

В коммите GIT указываем, по какой задаче работали, и что сделано (в примере просто укажу номер задачи). Сливаем ветку в основную. Далее разработчики затягивают эти изменения в свои ветки.

Для просмотра истории кода в EDT команда использует несколько возможностей:

 

1 способ. Непосредственно в дереве объектов есть возможность открыть историю изменения объекта:

 

 

Открывается вся история изменений этого объекта. В истории видим, кто, когда и зачем внес изменения:

 

 

С помощью прокрутки увидим сами изменения:

 

 

2 способ. В контексте самого модуля можно сразу видеть какие строки были изменены. Для этого надо щелкнуть правой кнопкой мыши на левом поле редактора и выбрать пункт "Показать информацию о редакции". В этом случае, EDT начнет выделять цветом измененные строки прямо в редакторе:

 

 

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

 

 

 

При наведении мышкой на подкрашенную строчку, можно перейти к истории.

 

 

Можно открыть информацию, и прокрутить к нужной строке. Снова наводим мышь на подкрашенное поле, EDT покажет, что было изменено.

 

 

Замечу, что все изменения так же можно найти в любой системе контроля версий. Как бы, для этого они и предназначены.

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

Вот так, по простому о сложном или сложно о простом, кому как зайдет.

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

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

Комментарии EDT git

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

DevOps и автоматизация разработки Мониторинг Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    14052    mrXoxot    49    

63

DevOps и автоматизация разработки Программист 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Полный цикл разработки расширения 1С в пакетном режиме DESIGNER: выгрузка, правка, гейт компиляции, применение к базе и контроль результата — без единого клика в конфигураторе. Разбираю семь мин, на которых подорвался лично: почему LoadConfigFromFiles возвращает нулевой код на битом модуле, зачем нужен Xvfb, как pgrep находит сам себя, кто держит базу и как отличить работающий сеанс от забытого, и почему после рестарта сервера база остаётся закрытой. Платформа 8.3.27, УТ 11.5, сервер на Linux.

24.08.2026    2428    YA_2159986692    7    

14

Рефакторинг и качество кода Обновление 1С Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    5537    1c-izh    21    

21

DevOps и автоматизация разработки Программист Бесплатно (free)

Хватит ограничивать себя родным и уютным стеком 1С. Пора расширять кругозор и осваивать смежные стеки! Разберемся, как Docker может упростить жизнь одинэснику: от сборки и тестирования 1С до запуска инфраструктуры и автоматизации CI/CD, причем быстро, воспроизводимо и без лишнего мусора в системе.

08.05.2026    6211    sleemp    81    

37

Инструментарий разработчика Рефакторинг и качество кода Программист 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    14029    1391    KHoroshulinAV    63    

95

DevOps и автоматизация разработки Мониторинг Системный администратор Программист Бесплатно (free)

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

06.04.2026    14695    vladimir-89    12    

33

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

ИИ действительно помогает команде ускориться: быстрее разбирать код, быстрее входить в сложные участки, быстрее запускать доработки. Проблема в том, что вместе со скоростью он может ускорять и другое — накопление скрытой сложности, рост цены изменений и потерю управляемости. В статье разбираю, почему первые успехи с ИИ так легко опьяняют, когда система начинает выставлять счёт и что нужно сделать, чтобы ускорение не превратилось в новый виток технического долга.

17.03.2026    4222    IgorVasilyev    54    

28

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    26340    Ibrogim    83    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 7623 15.11.22 09:16 Сейчас в теме
Думаю надо еще в сторону обновляемости копать: изменение форм переделывать на динамический вывод элементов, события на перехват подключаемых команд, часть автономных доработок переносить в расширения.
Рамзес; shastin87; +2 Ответить
2. shastin87 9 15.11.22 11:34 Сейчас в теме
(1) Но это, как говорит Леонид Каневский, уже совсем другая история..
3. dhurricane 15.11.22 15:42 Сейчас в теме
Осталось дело за малым - перейти на EDT. :-) Ну что касается темы статьи, то мне видится идеальным подходом на данный момент с одной стороны отсутствие каких-либо служебных комментариев в нетиповых объектах конфигурации и обрамляющие (без сохранения исходного кода) служебные комментарии в типовых модулях.
sapervodichka; t278; +2 Ответить
4. shastin87 9 15.11.22 16:06 Сейчас в теме
(3) Функционал Git можно использовать и без EDT, оставаясь в конфигураторе. Для этого в конфигураторе есть возможность выгружать конфу в файлы, и загружать из файлов. А вот уже система контроля версий поможет сохранить и показать историю изменения кода.
sapervodichka; +1 Ответить
5. dhurricane 15.11.22 16:44 Сейчас в теме
(4) Мы его используем, но это далеко не так удобно, как blame прямо в редакторе модуля.
sapervodichka; +1 Ответить
6. user1615287 07.07.24 16:12 Сейчас в теме
И тебе привет, Илья =)
shastin87; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация