Система 1С:Предприятие оперирует десятками различных типов данных — от простых чисел до сложных объектов метаданных. Понимание их классификации и особенностей критично для разработчиков, администраторов и даже опытных пользователей, которые хотят автоматизировать рутинные операции. Без знания типов данных невозможно корректно написать запрос, создать отчёт или интегрировать 1С с внешними системами.

В этой статье мы разберём все категории типов данных в 1С 8.3, покажем их иерархию, приведём примеры использования в коде и объясним, какие ловушки таят в себе неявные преобразования. Особое внимание уделим составным типам (массивы, структуры, соответствия) и специальным объектам (документы, справочники), которые часто становятся источником ошибок у новичков.

1. Примитивные (базовые) типы данных

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

  • 🔢 Число — целое или дробное значение (например, 42 или 3.14). Поддерживает арифметические операции и функции округления.
  • 📝 Строка — последовательность символов в кодировке Unicode (пример: "Привет, мир!"). Максимальная длина — 2 млрд символов.
  • 🗓️ Дата — дата и время (например, '2026-12-31 23:59:59'). Хранится в внутреннем формате и автоматически адаптируется к региональным настройкам.
  • 🅱️ Булево — логическое значение (Истина или Ложь). Используется в условиях и циклах.
  • 🆔 Null — специальное значение "неопределённость". Возникает при отсутствии данных или ошибках преобразования.

Примитивные типы часто становятся источником скрытых ошибок из-за неявного приведения. Например, сложение числа со строкой (5 + "3") вернёт строку "53", а не 8. Чтобы избежать таких ситуаций, используйте явное преобразование функцией Число():

Результат = Число("123") + 456; // Вернёт 579, а не "123456"
⚠️ Внимание: При работе с датами учитывайте, что функция ТекущаяДата() возвращает дату сервера 1С, а не клиентского компьютера. Это может привести к расхождениям в распределённых системах.
📊 Какой примитивный тип данных вы используете чаще всего?
Число
Строка
Дата
Булево

2. Составные типы данных

Эти типы позволяют хранить наборы значений или пар "ключ-значение". Они незаменимы для обработки сложных данных, передачи параметров между функциями и временного хранения промежуточных результатов.

Тип Описание Пример объявления Когда использовать
Массив Упорядоченный список элементов с доступом по индексу (начинается с 0). МойМассив = Новый Массив(1, 2, 3); Хранение однотипных данных фиксированного размера.
Структура Набор пар "ключ-значение", где ключ — строка. МояСтруктура = Новый Структура("Имя, Возраст", "Иван", 30); Передача именованных параметров в функции.
Соответствие Ассоциативный массив с произвольными ключами (не только строками). МойСловарь = Новый Соответствие;
МойСловарь.Вставить(123, "Сто двадцать три");
Сложные поиски по нестроковым ключам.
СписокЗначений Коллекция с возможностью отображения в интерфейсе (например, в выпадающих списках). МойСписок = Новый СписокЗначений;
МойСписок.Добавить("Элемент1");
Интерактивные элементы форм.

Один из самых распространённых составных типов — Структура. Она удобна для возврата нескольких значений из функции:

Функция ПолучитьДанныеОПользователе()

Результат = Новый Структура;

Результат.Вставить("Имя", "Алексей");

Результат.Вставить("Возраст", 28);

Результат.Вставить("Активен", Истина);

Возврат Результат;

КонецФункции

⚠️ Внимание: При работе с Соответствием помните, что ключи сравниваются по значению, а не по типу. Например, ключи 123 (число) и "123" (строка) будут считаться разными!
💡

Для быстрого создания структуры из массива пар "ключ-значение" используйте конструктор: Новый Структура("Ключ1, Ключ2", Значение1, Значение2). Это сокращает код на 30-40% по сравнению с поэлементным добавлением.

3. Ссылочные типы (объекты метаданных)

Это уникальная особенность , которая выделяет её среди других языков программирования. Ссылочные типы представляют собой ссылки на объекты конфигурации: справочники, документы, регистры и т.д. Они хранят не сами данные, а указатели на них в базе.

Основные виды ссылочных типов:

  • 📁 СправочникСсылка — ссылка на элемент справочника (например, Справочники.Номенклатура.НайтиПоНаименованию("Монитор")).
  • 📄 ДокументСсылка — ссылка на документ (пример: Документы.ЗаказПокупателя.СоздатьДокумент()).
  • 📊 РегистрСведенийСсылка — ссылка на запись регистра (используется в отчётах и запросах).
  • 👤 ПланВидовХарактеристикСсылка — ссылка на элемент ПВХ (для сложных аналитических разрезов).

Ключевая особенность ссылочных типов — они автоматически контролируют права доступа. Если у пользователя нет прав на чтение справочника, попытка получить данные по ссылке вызовет ошибку.

// Пример работы со ссылочным типом

СсылкаНаТовар = Справочники.Номенклатура.СоздатьЭлемент();

СсылкаНаТовар.Наименование = "Ноутбук";

СсылкаНаТовар.Записать();

// Теперь можно использовать ссылку для получения данных

НаименованиеТовара = СсылкаНаТовар.Наименование;

Как проверить, что ссылка указывает на существующий объект?

Используйте метод Ссылка.Пустая() или конструкцию ТипЗнч(Ссылка) = Тип("СправочникСсылка.Номенклатура"). Пустые ссылки часто возникают после удаления объектов или ошибок в коде.

4. Специальные типы для работы с файлами и двоичными данными

Эта категория типов предназначена для обработки внешних данных: файлов, картинок, PDF-документов и т.д. В 1С 8.3 для этих целей используются:

  • 📎 ДвоичныеДанные — хранит произвольные байтовые последовательности (например, содержимое файла).
  • 🖼️ Картинка — специализированный тип для изображений (поддерживает форматы JPEG, PNG, BMP).
  • 📑 Файл — объект для чтения/записи файлов на диске или в временном хранилище.
  • 🔗 HTTPСервисОтвет — результат вызова веб-сервиса (включает тело ответа, заголовки, статус).

Работа с двоичными данными требует осторожности из-за ограничений памяти. Например, попытка загрузить файл размером 2 ГБ в переменную типа ДвоичныеДанные приведёт к ошибке переполнения.

// Пример загрузки файла в двоичные данные

ПутьКФайлу = "C:\Temp\document.pdf";

ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);

// Сохранение двоичных данных обратно в файл

ДвоичныеДанныеФайла.Записать("C:\Temp\copy_document.pdf");

⚠️ Внимание: При работе с Картинка помните, что метод ПолучитьДвоичныеДанные() возвращает данные в формате PNG, даже если исходное изображение было в JPEG. Это может увеличить размер файла в 2-3 раза.

5. Типы для работы с запросами и результатами

Эти типы используются при выполнении запросов к базе данных и обработке их результатов. Они оптимизированы для работы с большими объёмами данных и поддерживают отложенное чтение (lazy loading).

Тип Назначение Пример использования
Запрос Объект для формирования и выполнения SQL-подобных запросов. Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 10 ИЗ Справочник.Номенклатура");
РезультатЗапроса Хранит данные, возвращённые запросом. Поддерживает итерацию. Результат = Запрос.Выполнить();
Пока Результат.Следующий() Цикл ...
ТаблицаЗначений Двумерная структура для хранения данных в памяти (аналог таблицы БД). Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Наименование");
ДеревоЗначений Иерархическая структура для отображения древовидных данных. Дерево = Новый ДеревоЗначений;
Узел = Дерево.Строки.Добавить();

Один из самых мощных инструментов — ТаблицаЗначений. Она позволяет эмулировать работу с базой данных в памяти, что ускоряет обработку небольших наборов данных:

ТаблицаТоваров = Новый ТаблицаЗначений;

ТаблицаТоваров.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка"));

ТаблицаТоваров.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));

НоваяСтрока = ТаблицаТоваров.Добавить();

НоваяСтрока.Артикул = "ABC123";

НоваяСтрока.Цена = 1999.99;

💡

Для ускорения работы с большими таблицами значений (>10 000 строк) используйте метод Индексировать() перед поиском или сортировкой. Это сокращает время операций в 5-10 раз.

6. Типы для интеграции и веб-сервисов

С развитием облачных технологий в появились специализированные типы для работы с веб-сервисами, JSON, XML и другими форматами обмена данными. Они позволяют интегрировать 1С с внешними системами: сайтами, CRM, платежными шлюзами.

  • 🌐 HTTPСоединение — объект для отправки HTTP-запросов (GET, POST, PUT).
  • 📜 JSON — тип для работы с данными в формате JSON (сериализация/десериализация).
  • 📥 XML — поддержка XML-документов и XDTO-пакетов.
  • 🔑 WSОписание — описание WSDL для работы с SOAP-сервисами.

Пример работы с JSON:

// Преобразование структуры в JSON

Данные = Новый Структура("Имя, Возраст", "Мария", 25);

JSONТекст = Новый ЗаписьJSON;

JSONТекст.УстановитьСтроку();

ЗаписатьJSON(JSONТекст, Данные);

РезультатJSON = JSONТекст.Закрыть();

// Обратное преобразование

ЧтениеJSON = Новый ЧтениеJSON;

ЧтениеJSON.УстановитьСтроку(РезультатJSON);

ВосстановленныеДанные = ПрочитатьJSON(ЧтениеJSON);

⚠️ Внимание: При работе с HTTPСоединение всегда проверяйте свойство СтатусКода ответа. Код 200 не гарантирует корректность данных — сервер мог вернуть ошибку в теле ответа (например, {"error": "Invalid token"}).

Проверьте доступность endpoint по HTTP|Создайте резервную копию базы|Настройте права пользователя для внешних соединений|Протестируйте обмен на тестовом сервере-->

7. Пользовательские типы и расширения

Помимо стандартных типов, в можно создавать собственные типы данных через механизм расширений или внешние компоненты. Это актуально для:

  • 🔧 Сложных бизнес-логик (например, тип "Адрес" с валидацией по ФИАС).
  • 🔌 Интеграции со специализированным оборудованием (сканеры, весы).
  • 📦 Работы с нестандартными форматами данных (например, протоколы обмена с банками).

Пример создания пользовательского типа через расширение:

// В модуле расширения

Процедура СоздатьТипАдрес() Экспорт

НовыйТип = Новый ОписаниеТипов("Структура", ,

Новый КвалификаторыСтруктуры("Улица, Дом, Квартира", Новый КвалификаторыСтруктуры("Строка, Строка, Строка")));

Возврат НовыйТип;

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

Пользовательские типы требуют тщательного документирования, так как их поведение неочевидно для других разработчиков. Всегда описывайте:

  • 📌 Формат хранения данных.
  • 🔄 Правила преобразования в стандартные типы.
  • ⚡ Ограничения и возможные исключения.

8. Типы для отладки и диагностики

Эта категория включает типы, которые используются для анализа кода, профилирования и диагностики ошибок. Они редко встречаются в бизнес-логике, но незаменимы при разработке:

  • 🐞 ОписаниеОшибки — содержит информацию об исключении (текст, модуль, строка кода).
  • ⏱️ Секундомер — замер времени выполнения кода.
  • 📡 ИнформацияОСистеме — данные о версии платформы, лицензиях, оборудовании.
  • 📋 ЖурналРегистрации — запись событий для последующего анализа.

Пример использования Секундомер для оптимизации кода:

Секундомер = Новый Секундомер;

Секундомер.Запустить();

// Код, время выполнения которого нужно замерить

Для Сч = 1 По 10000 Цикл

// ... операции ...

КонецЦикла;

Секундомер.Остановить();

Сообщить("Время выполнения: " + Секундомер.ПолучитьЗначение() + " мс");

⚠️ Внимание: Данные из ИнформацияОСистеме могут отличаться в зависимости от режима работы (тонкий клиент, веб-клиент, сервер). Например, свойство ТолькоТонкийКлиент вернёт Истина только в тонком клиенте.

FAQ: Частые вопросы о типах данных в 1С

Как определить тип переменной в 1С?

Используйте функцию ТипЗнч(). Она возвращает строку с описанием типа, например: "Число", "СправочникСсылка.Номенклатура" или "Структура".

Пример:

Переменная = 123;

ТипПеременной = ТипЗнч(Переменная); // Вернёт "Число"

Для проверки принадлежности к группе типов (например, "это ссылка на любой справочник") используйте конструкцию:

Если ТипЗнч(Переменная) = Тип("СправочникСсылка") Тогда

// Код для любой справочной ссылки

КонецЕсли;

Чем отличаются Структура и Соответствие?

Структура:

  • Ключи — всегда строки.
  • Поддерживает доступ через точку: Структура.Ключ.
  • Оптимизирована для передачи параметров в функции.

Соответствие:

  • Ключи — любые типы (числа, даты, ссылки).
  • Доступ только через методы: Соответствие.Получить(Ключ).
  • Поддерживает сложные алгоритмы поиска.

Выбор зависит от задачи: для простых случаев хватит Структуры, для сложных поисков — Соответствие.

Как преобразовать Дату в строку в нужном формате?

Используйте функцию Формат() с шаблоном:

ДатаСейчас = ТекущаяДата();

СтрокаДаты = Формат(ДатаСейчас, "ДФ='dd.MM.yyyy'"); // "31.12.2026"

СтрокаВремени = Формат(ДатаСейчас, "ДЛФ='DT'"); // "31 декабря 2026 г. 23:59:59"

Полный список форматных строк смотрите в документации 1С (раздел "Форматирование данных").

Можно ли создать массив с элементами разных типов?

Да, в массивы могут хранить элементы любых типов, включая смешанные:

СмешанныйМассив = Новый Массив;

СмешанныйМассив.Добавить(123); // Число

СмешанныйМассив.Добавить("Текст"); // Строка

СмешанныйМассив.Добавить(Истина); // Булево

СмешанныйМассив.Добавить(ТекущаяДата()); // Дата

Однако такое использование усложняет обработку данных. Для сложных структур лучше применять Структуру или ТаблицуЗначений.

Как передать таблицу значений в веб-сервис?

Таблицу значений нужно преобразовать в JSON или XML. Пример для JSON:

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Имя");

Таблица.Колонки.Добавить("Возраст");

ЗаписьJSON = Новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

ЗаписатьJSON(ЗаписьJSON, Таблица);

JSONСтрока = ЗаписьJSON.Закрыть();

// Отправка через HTTPСоединение

HTTP = Новый HTTPСоединение("api.example.com");

Ответ = HTTP.Постить("/data", JSONСтрока, , , "application/json");

Для обратного преобразования используйте ЧтениеJSON и ПрочитатьJSON().