← Назад ко всем вопросам

Как обеспечить уникальность реквизита в справочнике

1️⃣ Как кратко ответить

Для обеспечения уникальности реквизита в справочнике в 1С:Предприятие необходимо использовать механизм уникальных индексов. Это достигается путем установки свойства "Уникальность" для соответствующего реквизита в конфигураторе. Также можно использовать программные проверки на уникальность при записи объекта.

2️⃣ Подробное объяснение темы

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

Зачем это нужно

Уникальность реквизита позволяет гарантировать, что в справочнике не будет двух элементов с одинаковым значением определенного реквизита. Это особенно важно для таких реквизитов, как код, артикул, номер документа и т.д., где дублирование может привести к путанице и ошибкам в бизнес-процессах.

Как это работает

  1. Установка уникального индекса в конфигураторе:

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

    • В некоторых случаях может потребоваться дополнительная проверка уникальности на уровне кода, например, если уникальность зависит от нескольких реквизитов или от бизнес-логики.
    • Для этого можно использовать обработчик события "ПередЗаписью" объекта справочника.

Пример кода

Процедура ПередЗаписью(Отказ, РежимЗаписи)
    // Проверка уникальности реквизита "Код"
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Справочник.Ссылка
        |ИЗ
        |   Справочник.МойСправочник КАК Справочник
        |ГДЕ
        |   Справочник.Код = &Код
        |   И Справочник.Ссылка <> &ТекущаяСсылка";
​
    Запрос.УстановитьПараметр("Код", ЭтотОбъект.Код);
    Запрос.УстановитьПараметр("ТекущаяСсылка", ЭтотОбъект.Ссылка);
​
    Результат = Запрос.Выполнить();
    Если Результат.Найдено() Тогда
        Отказ = Истина;
        Сообщить("Элемент с таким кодом уже существует.");
    КонецЕсли;
КонецПроцедуры
  • Процедура ПередЗаписью(Отказ, РежимЗаписи): Обработчик события, который вызывается перед записью объекта справочника.
  • Запрос = Новый Запрос; Создание нового объекта запроса для выполнения SQL-запроса.
  • Запрос.Текст: Устанавливает текст запроса, который выбирает элементы справочника с таким же значением реквизита "Код", но с другой ссылкой (чтобы исключить текущий элемент).
  • Запрос.УстановитьПараметр: Устанавливает параметры запроса, такие как код и текущая ссылка.
  • Результат = Запрос.Выполнить(); Выполняет запрос и возвращает результат.
  • Если Результат.Найдено() Тогда: Проверяет, найден ли элемент с таким же кодом.
  • Отказ = Истина; Сообщить("Элемент с таким кодом уже существует."); Если элемент найден, устанавливает отказ в записи и выводит сообщение пользователю.

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

Тема: Метаданные 1С
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки