← Назад к вопросам

Что такое определяемые типы в 1С?

2.3 Middle🔥 221 комментариев
#Объекты метаданных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Определяемые типы в 1С

Определяемые типы — это пользовательские типы данных, которые позволяют ограничить значения переменных и параметров конкретными типами или наборами объектов 1С.

Что такое определяемый тип?

Определяемый тип — это способ явно указать, какие значения может содержать переменная или параметр функции:

// Переменная может содержать ссылку на Контрагента или строку
Переменная: СправочникСсылка.Контрагенты = Справочники.Контрагенты.ПустаяСсылка();

// Параметр функции может быть документом или Неопределено
Процедура ОбработатьДокумент(Документ: ДокументОбъект.СчётФактура, Параметр = Неопределено)
КонецПроцедуры

Синтаксис определяемых типов

Базовый синтаксис:

Переменная: ТипДанных = ЗначениеПоУмолчанию;
Параметр: ТипДанных
Функция МояФункция(): ТипДанных

Примеры определяемых типов

1. Простые типы

// Строка
Текст: Строка;

// Число
Количество: Число;

// Дата
Дата: Дата;

// Булево значение
Флаг: Булево;

2. Ссылки на справочники

// Ссылка на справочник (пустая ссылка или ссылка на элемент)
Контрагент: СправочникСсылка.Контрагенты;

// Инициализация
Контрагент = Справочники.Контрагенты.НайтиПоКоду(1);

// Использование в функции
Функция ПолучитьНаименование(КонтрагентПараметр: СправочникСсылка.Контрагенты)
    Возврат КонтрагентПараметр.Наименование;
КонецФункции

3. Объекты справочников

// Объект справочника (для редактирования)
Элемент: СправочникОбъект.Контрагенты;

Процедура ОтредактироватьКонтрагента()
    Элемент = Справочники.Контрагенты.НайтиПоКоду(1).ПолучитьОбъект();
    Элемент.Наименование = "Новое имя";
    Элемент.Записать();
КонецПроцедуры

4. Ссылки и объекты документов

// Ссылка на документ
Документ: ДокументСсылка.СчётФактура;

// Объект документа
ОбъектДокумента: ДокументОбъект.СчётФактура;

// Функция с типизированным параметром
Функция ПолучитьНомер(ДокСсылка: ДокументСсылка.СчётФактура)
    ДокОбъект = ДокСсылка.ПолучитьОбъект();
    Возврат ДокОбъект.Номер;
КонецФункции

5. Перечисления

// Значение перечисления
Статус: ПеречислениеСсылка.СтатусыДокументов;

Процедура УстановитьСтатус()
    Статус = Перечисления.СтатусыДокументов.Проведён;
КонецПроцедуры

6. Таблицы значений и другие типы

// Таблица значений
Таблица: ТаблицаЗначений;

// Массив
Список: Массив;

// Структура
Данные: Структура;

// Соответствие
Мапа: Соответствие;

Комбинирование типов (Union Types)

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

// Может быть ссылкой на Контрагента или строкой
Значение: СправочникСсылка.Контрагенты, Строка;

// Может быть документом, справочником или Неопределено
Объект: ДокументСсылка.СчётФактура, 
        СправочникСсылка.Контрагенты,
        Неопределено;

Процедура ОбработатьЗначение(Значение: СправочникСсылка.Контрагенты, Строка)
    Если ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
        Сообщение("Это ссылка: " + Значение.Наименование);
    Иначе
        Сообщение("Это строка: " + Значение);
    КонецЕсли;
КонецПроцедуры

Практические примеры

Пример 1: Типизированная функция поиска

// Функция с явным типом результата
Функция НайтиКонтрагента(Наименование: Строка): СправочникСсылка.Контрагенты
    Запрос = Новый Запрос(
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   Контрагенты.Ссылка
        |ИЗ
        |   Справочник.Контрагенты Как Контрагенты
        |ГДЕ
        |   Контрагенты.Наименование = &Наименование"
    );
    Запрос.УстановитьПараметр("Наименование", Наименование);
    
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат.Следующий() Тогда
        Возврат Результат.Ссылка;
    Иначе
        Возврат Справочники.Контрагенты.ПустаяСсылка();
    КонецЕсли;
КонецФункции

// Использование
МойКонтрагент: СправочникСсылка.Контрагенты;
МойКонтрагент = НайтиКонтрагента("ООО Компания");

Пример 2: Типизированная процедура обработки

Процедура ОбработатьДокумент(
    ДокументСсылка: ДокументСсылка.СчётФактура,
    Статус: ПеречислениеСсылка.СтатусыДокументов
)
    ДокОбъект = ДокументСсылка.ПолучитьОбъект();
    ДокОбъект.Статус = Статус;
    ДокОбъект.Записать();
    
    Сообщение("Документ " + ДокОбъект.Номер + " обработан");
КонецПроцедуры

// Безопасное использование — IDE подскажет правильные типы
ОбработатьДокумент(
    СчётСсылка,
    Перечисления.СтатусыДокументов.Проведён
);

Пример 3: Проверка типа

Процедура ОбработатьДанные(Данные: СправочникСсылка.Контрагенты, Строка, Неопределено)
    Если Данные = Неопределено Тогда
        Сообщение("Данные не определены");
        
    ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда
        Сообщение("Строка: " + Данные);
        
    ИначеЕсли ТипЗнч(Данные) = Тип("СправочникСсылка.Контрагенты") Тогда
        Сообщение("Контрагент: " + Данные.Наименование);
        
    КонецЕсли;
КонецПроцедуры

Преимущества определяемых типов

  1. Читаемость кода — явно указано, какие типы ожидаются
  2. IDE помощь — автозаполнение и подсказки в 1C:Studio
  3. Ранее обнаружение ошибок — синтаксический анализатор предупредит о неправильном типе
  4. Документирование — разработчик сразу видит ожидаемый тип
  5. Рефакторинг — изменение типа автоматически подсвечивает все использования

Общие типы в 1С

ТипИспользование
СтрокаТекстовые значения
ЧислоЧисловые значения
ДатаДаты и времена
БулевоЛогические значения (Истина/Ложь)
СправочникСсылка.<Имя>Ссылка на элемент справочника
СправочникОбъект.<Имя>Объект справочника для редактирования
ДокументСсылка.<Имя>Ссылка на документ
ДокументОбъект.<Имя>Объект документа для редактирования
ПеречислениеСсылка.<Имя>Значение перечисления
ТаблицаЗначенийТаблица данных в памяти
МассивМассив значений
СтруктураСтруктурированные данные
СоответствиеMap/Dictionary
НеопределеноОтсутствие значения

Лучшие практики

  1. Всегда типизируй параметры — облегчает понимание функции
  2. Указывай тип возврата — функция должна возвращать то, что обещала
  3. Используй Union типы разумно — не переусложняй
  4. Проверяй типы перед использованием — используй ТипЗнч() если нужно
  5. Избегай Неопределено — предпочитай конкретные типы

Определяемые типы — это основа для написания типобезопасного и поддерживаемого кода на 1С.

Что такое определяемые типы в 1С? | PrepBro