Как скрыть пустой уникальный идентификатор в табличной части и правильно проверить его заполненность?

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

В процессе разработки внешних обработок или сложных конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью использования типа УникальныйИдентификатор непосредственно в реквизитах табличных частей. Особенность этого типа данных заключается в том, что он не может быть «пустым» в привычном понимании, как пустая строка или Неопределено. По умолчанию система заполняет незаполненный реквизит этого типа значением, состоящим из нулей: 00000000-0000-0000-0000-000000000000. С точки зрения логики платформы — это и есть «пустое» значение, но визуально оно перегружает интерфейс и мешает пользователю.

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

Особенности типа УникальныйИдентификатор и «нулевое» значение

Для начала проанализируем, почему 1С ведет себя именно так. Тип УникальныйИдентификатор — это 128-битное число, которое в интерфейсе представляется в виде шестнадцатеричной строки. В отличие от ссылочных типов (например, СправочникСсылка), которые могут принимать значение ПустаяСсылка, или примитивных типов, UUID всегда инициализирован. Значение из одних нулей является валидным идентификатором с точки зрения структуры данных, но системно зарезервировано как эквивалент пустоты.

Рассмотрим ситуацию, когда нам нужно программно определить, заполнено ли поле. Мы можем столкнуться с тем, что стандартная проверка не всегда очевидна. Разберем наиболее надежные способы проверки в коде.

Способ 1. Использование функции ЗначениеЗаполнено()

В современных версиях платформы 8.3 функция ЗначениеЗаполнено() была оптимизирована для работы с UUID. Проанализируем пример кода, который позволяет быстро проверить реквизит:


// Предположим, ТекущаяСтрока — это строка табличной части
Если ЗначениеЗаполнено(ТекущаяСтрока.Идентификатор) Тогда
    // Логика для заполненного UUID
    Сообщить("Идентификатор задан: " + ТекущаяСтрока.Идентификатор);
Иначе
    // Логика для "нулевого" UUID
    Сообщить("Поле пустое");
КонецЕсли;

Важно понимать, что ЗначениеЗаполнено(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")) вернет Ложь. Это самый «чистый» и рекомендуемый способ проверки, так как он не требует создания дополнительных объектов для сравнения.

Способ 2. Сравнение с эталонным пустым идентификатором

Иногда требуется явное сравнение, особенно если вы работаете в старых релизах платформы или пишете универсальные алгоритмы. В этом случае мы можем создать образец пустого UUID и сравнивать значения с ним. Посмотрим на пример реализации:


ПустойУИД = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");

Если ТекущаяСтрока.Идентификатор = ПустойУИД Тогда
    // Мы нашли пустую строку
    ВызватьИсключение "Необходимо заполнить уникальный идентификатор!";
КонецЕсли;

Обратите внимание: вызов Новый УникальныйИдентификатор() без параметров сгенерирует новый случайный GUID, а не пустой. Для получения пустого значения обязательно нужно передать строку из нулей в конструктор.

Визуальное скрытие нулей через Условное оформление

Теперь перейдем к эстетической части вопроса. Пользователи не должны видеть строку 00000000-0000-0000-0000-000000000000, так как она не несет полезной информации. Самым эффективным методом решения этой задачи в Управляемых формах является использование Условного оформления. Это позволяет скрыть текст, не меняя при этом само значение в данных.

Разберем по шагам, как настроить условное оформление:

  1. Откройте форму вашей обработки или объекта.
  2. Перейдите на закладку «Условное оформление».
  3. Добавьте новый элемент оформления.
  4. В поле «Оформление» установите параметр «Текст». Оставьте значение текста абсолютно пустым.
  5. В поле «Условие» добавьте новое условие: Объект.ИмяВашейТабличнойЧасти.ИмяРеквизитаУИД Равно Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000").
  6. В поле «Оформляемые поля» выберите колонку вашей табличной части, в которой отображается UUID.

После этой настройки, как только значение в колонке станет «нулевым», платформа перестанет отрисовывать длинную строку нулей, и ячейка будет выглядеть пустой. Это значительно повышает удобство работы (юзабилити) интерфейса.

Использование свойства «Формат»

Многие разработчики пытаются решить проблему через свойство колонки «Формат», используя конструкцию ЧН= (отображение нуля). Однако проанализируем ситуацию: тип УникальныйИдентификатор не является числовым, поэтому стандартные форматные строки для чисел здесь не работают.

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

Альтернативный подход: Использование строкового типа

Если специфика вашей задачи позволяет отойти от строгого использования типа УникальныйИдентификатор в самой табличной части, рассмотрим вариант хранения данных в виде Строки (длина 36).

Преимущества строкового хранения:

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

Недостатки и риски:

При использовании строк, преобразовывать значение в UUID нужно будет только в момент вызова бизнес-логики:


Попытка
    НужныйУИД = Новый УникальныйИдентификатор(СтрокаИзТЧ);
Исключение
    Сообщить("Некорректный формат идентификатора!");
КонецПопытки;

Работа с пустыми UUID в запросах

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

Важно помнить, что в языке запросов 1С нельзя просто написать ГДЕ Идентификатор = "00000000...". Вам необходимо передать пустой идентификатор как параметр запроса.


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ВТ_Данные.СсылкаНаОбъект
    |ИЗ
    |   &ВТ_Данные КАК ВТ_Данные
    |ГДЕ
    |   ВТ_Данные.Идентификатор <> &ПустойУИД";

Запрос.УстановитьПараметр("ВТ_Данные", ТабличнаяЧасть.Выгрузить());
Запрос.УстановитьПараметр("ПустойУИД", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));

Результат = Запрос.Выполнить();

Особенности сериализации

Выясним причину, по которой иногда «нулевые» UUID вызывают ошибки при обмене данными. При сериализации в XML или JSON (например, через СериализаторXDTO), пустой УникальныйИдентификатор будет записан как строка из нулей. Если внешняя система (веб-сервис или мобильное приложение) ожидает значение null или просто отсутствие узла, это приведет к ошибке парсинга.

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

Выводы

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

Эти методы позволят вам создавать профессиональные интерфейсы и надежные алгоритмы обработки данных в среде 1С.

← На главную