К статье
Практический материал

Разработка и Конфигурация · 11 мин

Каким может быть тип данных ресурса у регистра сведений 1С

Какие типы данных доступны для ресурсов регистра сведений 1С, как выбрать подходящий тип, чем ресурс отличается от измерения и реквизита, типичные ошибки и FAQ.

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

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

Ниже разобраны все доступные типы данных для ресурса, критерии выбора, отличие ресурса от измерения и реквизита, а также ошибки, которые чаще всего встречаются при проектировании регистров сведений.

Какие типы данных доступны для ресурса регистра сведений

Платформа 1С:Предприятие позволяет назначить ресурсу любой тип, доступный в системе типов конфигурации. На практике используются четыре группы.

Первая группа — примитивные типы: Число (с указанием длины и точности), Строка (фиксированной или переменной длины, в том числе неограниченная), Дата (дата, время или дата со временем) и Булево (Истина/Ложь). Это самые частые варианты: цена, курс валюты, процент ставки, признак активности, комментарий.

Вторая группа — ссылочные типы: ссылки на справочники, документы, перечисления, планы видов характеристик, планы счетов и другие объектные типы. Например, ресурс «Ответственный» типа СправочникСсылка.Пользователи или ресурс «Статус» типа ПеречислениеСсылка.СтатусыЗаказа.

Третья группа — ХранилищеЗначения. В нём можно сохранить произвольные сериализуемые данные: картинку, табличный документ, структуру, двоичные данные файла. Четвёртая группа — составной тип: ресурс может принимать значения нескольких типов одновременно, например строку или ссылку на справочник.

Хранится количественный показательТип Число

Задайте достаточную длину и точность, чтобы не терять дробную часть

Хранится текст или комментарийТип Строка

Для длинных текстов используйте неограниченную длину

Хранится связь с объектомСсылочный тип

Выберите конкретный тип ссылки, а не составной без необходимости

Хранится файл или картинкаХранилищеЗначения

Учитывайте рост размера таблицы регистра

Примитивные типы: число, строка, дата, булево

Тип Число подходит для цен, курсов, коэффициентов, остатков и любых измеримых величин. При настройке указывают длину (общее количество цифр) и точность (количество знаков после запятой). Для курсов валют и коэффициентов стоит закладывать точность с запасом — округление на этапе хранения испортит расчёты, и восстановить исходные значения будет невозможно.

Тип Строка применяют для кодов, адресов, комментариев, настроек в текстовом виде. Фиксированная длина дополняет значение пробелами справа, что иногда мешает сравнению; переменная длина хранит строку как есть. Неограниченная строка удобна для длинных текстов, но по ней нельзя построить индекс и использовать в отборах так же эффективно.

Тип Дата используют для сроков действия, дат последнего изменения, плановых дат. Важно выбрать состав даты: только дата, только время или дата и время вместе. Тип Булево — для простых признаков: «Активен», «ИспользоватьСкидку», «Основной». Если значений больше двух, булево не подходит — нужен тип ПеречислениеСсылка.

Ссылочные типы и перечисления

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

Для ограниченного набора предопределённых значений правильный выбор — перечисление. Например, ресурс «СпособДоставки» типа ПеречислениеСсылка.СпособыДоставки. Перечисление компактно хранится, быстро сравнивается и исключает опечатки, неизбежные при хранении тех же значений строкой.

Составной ссылочный тип (например, ссылка на справочник «Контрагенты» или «ФизическиеЛица») допустим, но усложняет запросы: для соединений и проверок придётся использовать конструкции ВЫРАЗИТЬ и ВЫБОР КОГДА. Если значение всегда одного вида, составной тип создавать не нужно.

ХранилищеЗначения и составные типы

ХранилищеЗначения — универсальный контейнер. Через него в регистре сведений хранят изображения, печатные формы, настройки в виде структур, сериализованные таблицы значений. Записывается значение через конструктор Новый ХранилищеЗначения(Значение), а читается методом Получить().

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

Составной тип оправдан, когда бизнес-логика реально допускает разнородные значения. Типичный пример — ресурс «Значение» в регистре дополнительных сведений, где для разных свойств хранятся числа, строки, даты и ссылки. Минус — снижение производительности запросов и невозможность строгой типизации на уровне СУБД.

Сравнение вариантов

Примитивный тип

Быстрые отборы и индексы, строгая проверка ввода. Подходит для фиксированных показателей: цены, даты, признака

Ссылочный тип

Контроль целостности и навигация к объекту. Подходит для связей, но не фиксирует исторические реквизиты объекта

ХранилищеЗначения

Гибкость для файлов и структур. Не участвует в отборах, увеличивает размер таблицы

Составной тип

Универсальность для разнородных значений. Усложняет запросы и замедляет соединения

Как выбрать тип ресурса: практический порядок

Выбор начинается с вопроса: что именно представляет собой значение? Если это измеримая величина — берите Число и сразу определяйте точность по самому требовательному сценарию расчёта. Если текст — Строку, оценив максимальную реальную длину. Если значение выбирается из списка — ПеречислениеСсылка, а не строку.

Далее проверьте, понадобится ли по ресурсу поиск и отбор. Если да — ХранилищеЗначения и неограниченная строка не подойдут как основной вариант: отборы по ним либо невозможны, либо неэффективны. Если значение должно ссылаться на объект, уточните, всегда ли это объект одного вида; если да, задайте одиночный ссылочный тип.

Последний шаг — оценка будущего роста. Изменение типа после накопления данных возможно, но при несовместимости типов платформа очистит значения. Поэтому сомнительные места (точность числа, длина строки) лучше закладывать с запасом сразу.

Порядок выбора типа ресурса
  1. 1
    Определите природу значения: величина, текст, дата, признак, объект или файл
  2. 2
    Для величины задайте Число с достаточной точностью, для текста — Строку с запасом по длине
  3. 3
    Для списка предопределённых значений создайте перечисление и используйте ссылку на него
  4. 4
    Для связи с объектом выберите одиночный ссылочный тип конкретного вида
  5. 5
    Проверьте, нужны ли отборы и соединения по ресурсу — при необходимости исключите ХранилищеЗначения
  6. 6
    Запишите тестовые значения и выполните типовой запрос, чтобы убедиться в корректности выбора

Чем ресурс отличается от измерения и реквизита

Измерение — это разрез хранения, ключ записи регистра. Ресурс — хранимое значение в этом разрезе. Реквизит — дополнительная информация о записи, не входящая в ключ и обычно не используемая в отборах. Один и тот же тип данных может применяться и там, и там, но роль разная.

Частая проектная ошибка — поместить в ресурс то, что должно быть измерением. Например, если хранится цена товара по складам, то склад — измерение, а цена — ресурс. Если склад сделать ресурсом, запись «цена товара» станет уникальной только по товару, и хранить разные цены по складам не получится.

Обратная ошибка — вынести в измерение то, что является значением. Измерения входят в уникальный индекс, поэтому лишнее измерение раздувает ключ и меняет семантику регистра. Правило простое: всё, что отвечает на вопрос «в разрезе чего», — измерения; всё, что отвечает на вопрос «что храним», — ресурсы; всё остальное — реквизиты.

Типичные ошибки
01
Недостаточная точность числа — дробная часть обрезается при записи, расчёты расходятся без возможности восстановления
02
Хранение предопределённых значений строкой — опечатки в данных, невозможность надёжного отбора, лишний объём
03
Составной тип «на всякий случай» — замедление запросов и усложнение кода без реальной потребности
04
ХранилищеЗначения для данных, по которым нужен поиск — отборы невозможны, приходится перепроектировать регистр
05
Изменение типа ресурса в заполненном регистре — потеря существующих значений при несовместимости типов

Изменение типа ресурса в существующем регистре

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

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

FAQ по типам ресурсов регистра сведений

Можно ли сделать ресурс регистра сведений составного типа?

Да. В палитре свойств ресурса отметьте несколько типов, например Число и СправочникСсылка. Учтите, что составной тип усложняет запросы: для сравнений и соединений потребуется приведение через ВЫРАЗИТЬ, а производительность отборов снизится.

Какой тип выбрать для хранения картинки в регистре сведений?

Используйте ХранилищеЗначения и помещайте в него объект Картинка или двоичные данные. Для больших файлов разумнее хранить файл в томе или в справочнике присоединённых файлов, а в регистре держать только ссылку — это сдержит рост таблицы регистра.

Можно ли сделать отбор по ресурсу типа ХранилищеЗначения?

Нет. Содержимое хранилища недоступно для отборов, соединений и упорядочивания в запросах. Если по значению нужен поиск, храните его в явном типе (строка, число, ссылка), а в хранилище выносите только вспомогательные данные.

Что произойдёт с данными, если уменьшить длину строки ресурса?

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

Чем перечисление лучше строки для ресурса со списком значений?

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

Может ли ресурс регистра сведений не иметь типа?

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

Итог

Что важно запомнить

Ресурс регистра сведений принимает примитивные, ссылочные типы, ХранилищеЗначения или составной тип. Выбирайте тип по природе значения и требованиям к отборам: величины — Число с запасом точности, списки значений — перечисление, связи — одиночные ссылки, файлы — ХранилищеЗначения. Тип меняйте до накопления данных либо с предварительной проверкой на копии базы.