Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Определяемые типы в 1С
Определяемые типы — это пользовательские типы данных, которые позволяют ограничить значения переменных и параметров конкретными типами или наборами объектов 1С.
Что такое определяемый тип?
Определяемый тип — это способ явно указать, какие значения может содержать переменная или параметр функции:
// Переменная может содержать ссылку на Контрагента или строку
Переменная: СправочникСсылка.Контрагенты = Справочники.Контрагенты.ПустаяСсылка();
// Параметр функции может быть документом или Неопределено
Процедура ОбработатьДокумент(Документ: ДокументОбъект.СчётФактура, Параметр = Неопределено)
КонецПроцедуры
Синтаксис определяемых типов
Базовый синтаксис:
Переменная: ТипДанных = ЗначениеПоУмолчанию;
Параметр: ТипДанных
Функция МояФункция(): ТипДанных
Примеры определяемых типов
1. Простые типы
// Строка
Текст: Строка;
// Число
Количество: Число;
// Дата
Дата: Дата;
// Булево значение
Флаг: Булево;
2. Ссылки на справочники
// Ссылка на справочник (пустая ссылка или ссылка на элемент)
Контрагент: СправочникСсылка.Контрагенты;
// Инициализация
Контрагент = Справочники.Контрагенты.НайтиПоКоду(1);
// Использование в функции
Функция ПолучитьНаименование(КонтрагентПараметр: СправочникСсылка.Контрагенты)
Возврат КонтрагентПараметр.Наименование;
КонецФункции
3. Объекты справочников
// Объект справочника (для редактирования)
Элемент: СправочникОбъект.Контрагенты;
Процедура ОтредактироватьКонтрагента()
Элемент = Справочники.Контрагенты.НайтиПоКоду(1).ПолучитьОбъект();
Элемент.Наименование = "Новое имя";
Элемент.Записать();
КонецПроцедуры
4. Ссылки и объекты документов
// Ссылка на документ
Документ: ДокументСсылка.СчётФактура;
// Объект документа
ОбъектДокумента: ДокументОбъект.СчётФактура;
// Функция с типизированным параметром
Функция ПолучитьНомер(ДокСсылка: ДокументСсылка.СчётФактура)
ДокОбъект = ДокСсылка.ПолучитьОбъект();
Возврат ДокОбъект.Номер;
КонецФункции
5. Перечисления
// Значение перечисления
Статус: ПеречислениеСсылка.СтатусыДокументов;
Процедура УстановитьСтатус()
Статус = Перечисления.СтатусыДокументов.Проведён;
КонецПроцедуры
6. Таблицы значений и другие типы
// Таблица значений
Таблица: ТаблицаЗначений;
// Массив
Список: Массив;
// Структура
Данные: Структура;
// Соответствие
Мапа: Соответствие;
Комбинирование типов (Union Types)
Переменная может иметь несколько возможных типов:
// Может быть ссылкой на Контрагента или строкой
Значение: СправочникСсылка.Контрагенты, Строка;
// Может быть документом, справочником или Неопределено
Объект: ДокументСсылка.СчётФактура,
СправочникСсылка.Контрагенты,
Неопределено;
Процедура ОбработатьЗначение(Значение: СправочникСсылка.Контрагенты, Строка)
Если ТипЗнч(Значение) = Тип("СправочникСсылка.Контрагенты") Тогда
Сообщение("Это ссылка: " + Значение.Наименование);
Иначе
Сообщение("Это строка: " + Значение);
КонецЕсли;
КонецПроцедуры
Практические примеры
Пример 1: Типизированная функция поиска
// Функция с явным типом результата
Функция НайтиКонтрагента(Наименование: Строка): СправочникСсылка.Контрагенты
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты Как Контрагенты
|ГДЕ
| Контрагенты.Наименование = &Наименование"
);
Запрос.УстановитьПараметр("Наименование", Наименование);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Ссылка;
Иначе
Возврат Справочники.Контрагенты.ПустаяСсылка();
КонецЕсли;
КонецФункции
// Использование
МойКонтрагент: СправочникСсылка.Контрагенты;
МойКонтрагент = НайтиКонтрагента("ООО Компания");
Пример 2: Типизированная процедура обработки
Процедура ОбработатьДокумент(
ДокументСсылка: ДокументСсылка.СчётФактура,
Статус: ПеречислениеСсылка.СтатусыДокументов
)
ДокОбъект = ДокументСсылка.ПолучитьОбъект();
ДокОбъект.Статус = Статус;
ДокОбъект.Записать();
Сообщение("Документ " + ДокОбъект.Номер + " обработан");
КонецПроцедуры
// Безопасное использование — IDE подскажет правильные типы
ОбработатьДокумент(
СчётСсылка,
Перечисления.СтатусыДокументов.Проведён
);
Пример 3: Проверка типа
Процедура ОбработатьДанные(Данные: СправочникСсылка.Контрагенты, Строка, Неопределено)
Если Данные = Неопределено Тогда
Сообщение("Данные не определены");
ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда
Сообщение("Строка: " + Данные);
ИначеЕсли ТипЗнч(Данные) = Тип("СправочникСсылка.Контрагенты") Тогда
Сообщение("Контрагент: " + Данные.Наименование);
КонецЕсли;
КонецПроцедуры
Преимущества определяемых типов
- Читаемость кода — явно указано, какие типы ожидаются
- IDE помощь — автозаполнение и подсказки в 1C:Studio
- Ранее обнаружение ошибок — синтаксический анализатор предупредит о неправильном типе
- Документирование — разработчик сразу видит ожидаемый тип
- Рефакторинг — изменение типа автоматически подсвечивает все использования
Общие типы в 1С
| Тип | Использование |
|---|---|
Строка | Текстовые значения |
Число | Числовые значения |
Дата | Даты и времена |
Булево | Логические значения (Истина/Ложь) |
СправочникСсылка.<Имя> | Ссылка на элемент справочника |
СправочникОбъект.<Имя> | Объект справочника для редактирования |
ДокументСсылка.<Имя> | Ссылка на документ |
ДокументОбъект.<Имя> | Объект документа для редактирования |
ПеречислениеСсылка.<Имя> | Значение перечисления |
ТаблицаЗначений | Таблица данных в памяти |
Массив | Массив значений |
Структура | Структурированные данные |
Соответствие | Map/Dictionary |
Неопределено | Отсутствие значения |
Лучшие практики
- Всегда типизируй параметры — облегчает понимание функции
- Указывай тип возврата — функция должна возвращать то, что обещала
- Используй Union типы разумно — не переусложняй
- Проверяй типы перед использованием — используй
ТипЗнч()если нужно - Избегай Неопределено — предпочитай конкретные типы
Определяемые типы — это основа для написания типобезопасного и поддерживаемого кода на 1С.