Почему в 1С нельзя использовать текстовые поля вместо ссылок на справочники?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В практике разработки на платформе 1С:Предприятие иногда встречаются ситуации, когда вместо классических ссылочных типов данных (ссылок на справочники или документы) используются обычные текстовые реквизиты. На первый взгляд может показаться, что раз «оно работает», то разницы нет. Однако это опасное заблуждение. Рассмотрим подробнее, почему подмена ссылочной модели текстовыми значениями является критической ошибкой проектирования и к каким последствиям это приведет в будущем.

Нарушение ссылочной целостности и принципов нормализации

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

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

  1. Аномалия обновления: Представим, что у нас есть справочник Контрагенты. Если в документах вместо ссылки хранится текст «ООО Ромашка», то при переименовании компании в «ООО Ромашка Плюс» данные в старых документах не изменятся. Вам придется запускать обработку для поиска и замены текста во всех табличных частях всех документов. В случае использования ссылки (тип СправочникСсылка.Контрагенты), переименование происходит мгновенно для всей базы, так как ссылка указывает на уникальный идентификатор (UUID), а не на текст.
  2. Аномалия удаления: Если пользователь удалит элемент справочника, на который ссылается текстовое поле, в системе останется «мертвая» строка. Вы никогда не сможете узнать, к какому именно объекту она относилась, какие у него были реквизиты или свойства. Платформа 1С при использовании ссылок имеет встроенный механизм «Поиск ссылок на объект», который не позволит удалить данные, используемые в учете, обеспечивая тем самым чистоту базы.

Производительность системы и работа СУБД

Выясним причину, по которой текстовые поля замедляют работу программы. Ссылка в 1С — это UUID (16 байт). Текстовое поле может занимать сотни байт.

Индексация и поиск: СУБД (будь то SQL Server или PostgreSQL) гораздо эффективнее работает с фиксированными двоичными данными. Поиск по ссылке — это сравнение 16-байтовых последовательностей. Поиск по строке — это посимвольное сравнение с учетом кодировки, регистра и региональных настроек. Если в вашей табличной части миллионы строк, разница в скорости формирования отчета может отличаться в десятки раз.

Операции соединения (JOIN): Посмотрим на пример типичного запроса, когда нам нужно вытащить дополнительный реквизит (например, Артикул) из справочника, имея только текст в документе:


// Плохой пример: соединение по строке
ВЫБРАТЬ
    ТЧ.Штрихкод,
    Спр.Артикул
ИЗ
    Документ.ПриходнаяНакладная.Товары КАК ТЧ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Спр
    ПО ТЧ.Штрихкод = Спр.Штрихкод // Огромная нагрузка на CPU и диск

В случае использования ссылки соединение происходит по внутреннему идентификатору, который всегда проиндексирован платформой «из коробки»:


// Правильный пример: соединение по ссылке
ВЫБРАТЬ
    ТЧ.Номенклатура.Штрихкод,
    ТЧ.Номенклатура.Артикул
ИЗ
    Документ.ПриходнаяНакладная.Товары КАК ТЧ

Во втором случае платформа даже позволяет использовать обращение «через точку», что делает код чище, а выполнение — оптимальнее.

Человеческий фактор и ошибки ввода

Проанализируем ситуацию с точки зрения пользователя. Текстовое поле — это «черная дыра» для ошибок. Рассмотрим типичные примеры, которые «сломают» вашу отчетность:

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

Сложность сопровождения и стандарты 1С

Фирма «1С» в своих стандартах разработки четко указывает на необходимость строгой типизации. Использование типа Строка там, где подразумевается конкретная сущность — это признак низкой квалификации разработчика.

Рассмотрим, какие инструменты платформы становятся недоступны при использовании текста:

  1. Механизм представлений: Вы не сможете легко изменить формат отображения данных в списках.
  2. Критерии отбора: Вы не сможете быстро найти все документы, где упоминается конкретный элемент справочника.
  3. Типизация в коде: Программист не сможет использовать контекстную подсказку и проверку типов, что увеличивает количество ошибок при доработке системы.

Когда текстовые поля оправданы?

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

Заключение и аргументы для вендора

Если вендор утверждает, что «и так работает», приведите следующие аргументы:

  1. Стоимость владения: Любой отчет по этой табличной части будет писаться дольше и работать медленнее.
  2. Риск потери данных: При случайном переименовании или удалении элементов справочника связь с историческими данными будет потеряна.
  3. Масштабируемость: При росте базы (например, до 100 Гб) текстовые соединения приведут к критическим задержкам (Timeouts).

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

← На главную