gifts2017

Технологическая проверка кода конфигурации (7.7)

Опубликовал Владислав Чинючин (vcv) в раздел Программирование - Инструментарий

1С 7.7 не имеет практически никаких средств, предназначенных для контроля правильности кода. В синтаксически правильном, с точки зрения 1С, коде можно, например, определить переменную НомерДок в модуле документа. Эта обработка может помочь найти некоторые "плохие решения" в коде.

Проверяются следующие потенциальные ошибки:

- Описание параметра или переменной, совпадающей с глобальной переменной, переменной контекста или реквизитом контекста

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

Также в обязательном порядке контролируется факт присваивания глобальной переменной в модуле какого-либо объекта. По хорошему, чем меньше подобных "сторонных эффектов", тем надёжней код. Не говоря уже о том, что вы можете случайно использовать то же самое имя переменной, что и в глобальном модуле, считая, что переменная локальная.

- Присваивание параметров процедуры/функции, переданных по ссылке

Несмотря на то, что метод "возврата значения в параметре" часто используется в 1С, это может привести к сложно определяемым ошибкам, когда вы меняете в процедуре значение её параметра, который не предназначен, по алгоритму, для возврата значения.

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

// Изменяемые параметры: Парам1, Парам2, ...

расположенный непосредственно перед (или сразу поле) строки с Процедура/Функция.

- Присваивание неявно описанной переменной

Несмотря на то, что при программировании на 1С практически не пользуются предварительным объявлением переменных посредством ключевого слова "Перем", такое объявление может иметь смысл. Оно позволяет контролировать использование одного и того же имени переменной с разным смыслом. Например, у вас объявлена в глобальном модуле переменная Сервис как СоздатьОбъект("Сервис"), а в модуле класса Сервис = СоздатьОбъект("ПоставщикДанных.Сервис"). И если вы не использовали явное определение переменной в модуле класса, у вас будет фактически испорчено значение глобальной переменной.

- Отсутствие инициализации описанной переменной

Тут и описывать нечего. Во многих языках программирования считается, что неинициализированная переменная - это ошибка.

 

Для работы обработке требуется утилита gcomp, расположеная в каталоге, входящем в path.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Технологическая проверка кода конфигурации
.ert 77,00Kb
04.09.15
5
.ert 77,00Kb 5 Скачать
Утилита GComp
.zip 155,76Kb
03.09.15
0
.zip 155,76Kb 0 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Brr (brr) 04.09.15 09:36
Не во всех конфигурациях есть функция глРазделить.
2. Владислав Чинючин (vcv) 04.09.15 10:39
(1) brr, Спасибо. Обновил обработку.
Что бы не скачивать заново, можно вставить в код
Функция глРазделить(Знач Стр,Разделитель=",") Экспорт
	Если Разделитель=" " Тогда
		Пока Найти(Стр,"  ")>0 Цикл
			Стр = СтрЗаменить(Стр,"  "," ")
		КонецЦикла
	КонецЕсли;
	Возврат СтрЗаменить(Стр,Разделитель,РазделительСтрок)
КонецФункции // глРазделить()
...Показать Скрыть

P.S. А что, больше никаких впечатлений/мнений? Хотя бы на уровне полезно/бесполезно/фигнянепонятная?
Я вижу, что в ней надо делать какое-то условное разделение глобальных переменных на "константы", которые не должны переприсваиваться и "переменные", которые должны. Но пока не придумал, как сделать это покрасивее.
3. Brr (brr) 04.09.15 12:57
4. aspirator 23 (aspirator23) 12.09.15 15:43
(2) vcv, наверняка полезно, но ты знаешь где сейчас 7.7 и где 8.хх... :)
Хотя сам тоже иногда пишу для 7.7
5. Владислав Чинючин (vcv) 12.09.15 20:03
(4) aspirator23, На мой взгляд, если не считать всякие ларьки, которым небольших денег жалко, 7.7 осталась в крупных отраслевых решениях. Которые переводить на 1с8 может быть слишком сложно/дорого. Как, например, у меня. Металлоторговля. 7.7 типа комплексная, переписанная почти полностью. Типового решения от 1С, удовлетворившего бы наши нужды, нет. Отраслевого тоже. Покупать что-то типовое и прилично дописывать - вариант дорогой и не факт, что какие-то заметные выгоды принесёт по стоимости разработки и поддержки.
Хотя, несомненно, хочется заполучить более современный инструмент разработки и ряд типового функционала (меньше велосипедов писать).
Но пока приходится жить с проектом на 7.7.
Иваныч; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа