Подсчет числа строк с кодом, с комментариями (и т.п.) в конфигурации

26.01.20

Разработка - Механизмы платформы 1С

Если вам требуется для вашей конфигурации по-быстрому подсчитать количество строк с кодом, количество строк с объявлением процедур и функций, количество строк с комментариями и т.п., то вы можете использовать предлагаемый код. Надеюсь, кому-нибудь пригодится. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.12.1567) на обычных формах.

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

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

Итак, приступаем. Всё чрезвычайно просто. 

Первое, с чего нужно начать - в режиме конфигуратора выгрузить конфигурацию в файлы в какой-нибудь каталог. См. Рис.1.

Второе - читаем все файлы "*.bsl" из этого каталога в массив. В этих (кодовых) файлах и лежит текст программ.

Третье - последовательно построчно читаем файлики с предыдущего шага и считаем, что там нам нужно.

Четвертое - просто выводим результат.

 

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	МассивФайлов = НайтиФайлы(КаталогСФайлами, "*.bsl", Истина);
	
	МойРезультат = Новый Структура;
	МойРезультат.Вставить("СчКодовыхФайлов", 0);
	МойРезультат.Вставить("СчОбъявленийПроцедурФункций", 0);
	МойРезультат.Вставить("СчКомментариев", 0);
	МойРезультат.Вставить("СчСтрокКода", 0);
	МойРезультат.Вставить("СчПустыхСтрок", 0);
	МойРезультат.Вставить("СчВсегоСтрок", 0);

	Для Каждого Файл Из МассивФайлов Цикл
		ПросчитатьФайл(Файл.ПолноеИмя, МойРезультат);
	КонецЦикла;
	
	
	Для Каждого Показатель Из МойРезультат Цикл
		Сообщить(Показатель.Ключ + ": " + Формат(Показатель.Значение, "ЧН=0; ЧГ=0"));	
	КонецЦикла;	

КонецПроцедуры

Процедура ПросчитатьФайл(ПолноеИмяФайла, МойРезультат)
	
	МойРезультат["СчКодовыхФайлов"] = МойРезультат["СчКодовыхФайлов"] + 1; 	
		
	Текст = Новый ЧтениеТекста(ПолноеИмяФайла, КодировкаТекста.ANSI);
	Стр = Текст.ПрочитатьСтроку();
	Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
		ПросчитатьСтроку(Стр, МойРезультат);
		Стр = Текст.ПрочитатьСтроку();
	КонецЦикла;
	
КонецПроцедуры	

Процедура ПросчитатьСтроку(Стр, МойРезультат)
	
	МойРезультат["СчВсегоСтрок"] = МойРезультат["СчВсегоСтрок"] + 1;	
	
	ТекСтрока = СокрЛП(Стр);
	Если ТекСтрока = "" Тогда
		МойРезультат["СчПустыхСтрок"] = МойРезультат["СчПустыхСтрок"] + 1;
	Иначе
		НачСтроки =  Лев(СокрЛП(Стр), 2);
		Если НачСтроки = "//" Тогда
			МойРезультат["СчКомментариев"] = МойРезультат["СчКомментариев"] + 1;
		ИначеЕсли ВРег(НачСтроки) = "ФУ" ИЛИ ВРег(НачСтроки) = "ПР" Тогда
			МойРезультат["СчОбъявленийПроцедурФункций"] = МойРезультат["СчОбъявленийПроцедурФункций"] + 1;
		Иначе
			МойРезультат["СчСтрокКода"] = МойРезультат["СчСтрокКода"] + 1;	
		КонецЕсли;	
	КонецЕсли;	
	
КонецПроцедуры	

 

На выходе программы получим результат:

 

Подсчет строк статистика

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4512    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5289    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6408    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12087    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8819    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15984    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Nikola23 696 26.01.20 10:14 Сейчас в теме
Эта штука не считает строки в которых комментарий после кода.
Многострочный комментарий, вероятно, надо считать как 1, а не как много. Но это зависит от задачи.

А вообще, вопрос главный, почему к полю структуры обращаетесь через

-- структура["Ключ"]

вместо

-- структура.Ключ
?
2. Идальго 226 26.01.20 10:17 Сейчас в теме
(1) Да, не считает. Это не для точного подсчета, а лишь для приблизительного. Вы вольны переделать как вам угодно.
А по поводу главного вопроса - да не знаю, вроде это допустимо)))
3. Nikola23 696 26.01.20 21:27 Сейчас в теме
(2) Допустимо, не спорю.
А зачем? С практической точки - это дает что-то? Я засомневался. Вдруг я чего-то не знаю.
Куча символов и переключение клавиатуры.
4. Идальго 226 26.01.20 21:35 Сейчас в теме
(3) Я привык так. Оно же имена ключей другим цветом делает и мне привычнее писать и читать именно так. Думаю что и нет больше ничего с практической точки зрения.
5. Ndochp 103 28.01.20 10:56 Сейчас в теме
(1) Не автор, но:
1. Единообразная работа со структурами и соответствиями
2. Единообразная работа при динамическом формировании имени ключа
6. Senator_I 166 28.01.20 16:51 Сейчас в теме
Спасибо, пригодилась обработка.
7. DWZ2 28.01.20 22:11 Сейчас в теме
ИначеЕсли ВРег(НачСтроки) = "ФУ" ИЛИ ВРег(НачСтроки) = "ПР" Тогда


А если процедура или функция не с начала строки будут?

И как насчёт переменных с именами на "Фу" или "Пр"? (если вдруг человек без отступов пишет)
8. Идальго 226 29.01.20 00:03 Сейчас в теме
(7) Ну там же есть код, из которого совершенно ясно что будет. Кроме того, вы можете запустить код и проверить))) Можете даже переделать парсинг под себя.
Повторюсь, это не супер точный подчет (хотя для прикидки вполне годится) и кроме того, обычно, в одной строке делают не больше одного объявления, которое после СокрЛП() попадет под приведенное условие.
9. DWZ2 29.01.20 09:55 Сейчас в теме
(8)
Ну там же есть код, из которого совершенно ясно что будет. Кроме того, вы можете запустить код и проверить)))


Вопрос риторический.


(8)
Можете даже переделать парсинг под себя.


Мне-то зачем? Я, хвала Всевышнему, пока ещё способен написать подобную программу с нуля. Просто, по крайней мере раньше, было принято выкладывать программы "под ключ".

(8)
в одной строке делают не больше одного объявления


Ох, напишет какой-нибудь умник код в одну строчку, как некоторые на JavaScript, тогда ";" считать и парсить придётся.
14. DrAku1a 1679 06.02.20 17:52 Сейчас в теме
(7)Верно подмечено.
ИначеЕсли ВРег(НачСтроки) = "ФУ" и ВРег(Лев(СтрЗаменить(СокрЛП(Стр), Символы.Таб, " "), 8))="ФУНКЦИЯ " Тогда
МойРезультат["СчОбъявленийПроцедурФункций"] = МойРезультат["СчОбъявленийПроцедурФункций"] + 1;
и аналогично для процедур... т.к. 1С выполняет проверку второй части условия только при истинности первой части - то второе условие не будет проверяться на каждой строке текста.
10. ico 31.01.20 08:26 Сейчас в теме
Скажите, а какое практическое применение могут получить данные подсчеты комментариев и некомментариев?
Это для какого-то особенного начисления ЗП кодеру или для чего-то более привлекательного?
11. Идальго 226 31.01.20 09:16 Сейчас в теме
(10) Ахха нет, я думаю, что считать ЗП кодерам по количеству строк это какая-то сказочная дикость. Но, может кто-то именно так и делает))) Моё мнение, что количество строк кода д.б. наоборот минимальным, но не в ущерб ясности и производительности.

Количество или доля строк с комментариями может характеризовать качество кода. Многие считают, что "хороший" код должен не иметь комментарив вообще, или иметь только минимальное их количество (т.к. "хороший код д.б. ясным и без комментариев"). Примерно тоже самое со строками объявлений процедур и функций - можно рассчитать сколько в среднем в них кодовых строк. Многиими считается, что кодовых строк в них не д.б. очень много, дабы читалось удобно.
Вот таких вот "практических" оценок чистоты кода можно много придумать)))

Я же использовал этот подсчет строк для презентации, в которой показывал темпы роста кодовой базы в одном из своих проектов.
12. lmnlmn 69 31.01.20 09:24 Сейчас в теме
(11) Для автоматизированного управления качеством кода уже давно есть системы которые этот код не считают а анализируют. На Инфостарте есть публикации по SonarCube в частности. Хотя, да, я сам люблю смотреть на меняющиеся в интересную для меня сторону циферки))
13. Идальго 226 31.01.20 09:58 Сейчас в теме
15. DWZ2 07.02.20 10:35 Сейчас в теме
(11)
Ахха нет, я думаю, что считать ЗП кодерам по количеству строк это какая-то сказочная дикость. Но, может кто-то именно так и делает)))


Был случай, когда программистам начисляли зарплату наравне с чертёжниками, то есть по числу листов формата А4 с кодом.
Оставьте свое сообщение