# Переменная имеет тип значения

Система строгой типизации кода проверяет что каждая переменная имеет тип значения

## Неправильно

Объявляемая локальная переменная в методе:

```bsl
// @strict-types

Процедура Тест() Экспорт
	Перем ТестПеременная;
	
	// здесь код
КонецПроцедуры
```

Объявляемая переменная в модуле объекта и скрытая инициализация в каком-то методе:

```bsl
// @strict-types

Перем ПараметрыОбъекта;

Процедура ПередЗаписью(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыОбъекта = НовыеПараметрыОбъекта();
	
	Если ЗначениеЗаполнено(ПараметрыОбъекта.Парам1) Тогда
		// здесь код
	КонецЕсли;
	
КонецПроцедуры

// Возвращаемое значение:
//  Структура:
// * Парам1 - Строка -
Функция НовыеПараметрыОбъекта()
	
	Параметры = Новый Структура();
	Параметры.Вставить("Парам1", "Строковое значение");
	
	Возврат Параметры;
	
КонецФункции
```

## Правильно

Инициализируйте локальную переменную с пустым значением по умолчанию:

```bsl
// @strict-types

Процедура Тест() Экспорт
	ТестПеременная = 0;
	
	// здесь код
КонецПроцедуры
```

Инициализируйте переменную модуля значением по умолчанию в коде модуля и типизируйте строчным типизирующим комментарием в месте определения переменной.

```bsl
// @strict-types

Перем ПараметрыОбъекта; // См. НовыеПараметрыОбъекта


Процедура ПередЗаписью(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ПараметрыОбъекта.Парам1) Тогда
		// здесь код
	КонецЕсли;
	
КонецПроцедуры


// Возвращаемое значение:
//  Структура:
// * Парам1 - Строка -
Функция НовыеПараметрыОбъекта()
	
	Параметры = Новый Структура();
	Параметры.Вставить("Парам1", "String value");
	
	Возврат Параметры;
	
КонецФункции

// Обязательная инициализация значения в коде модуля
ПараметрыОбъекта = НовыеПараметрыОбъекта();
```

## См.

