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

Приветствую вас, дорогие читатели! Ещё раз мы уделим внимание работе с регистрами сведений. Уже было написано Как сделать блокировку записи регистра сведений при её редактировании в форме записи? или Как открыть форму записи регистра сведений из строки табличного поля? В статье с примерами работы в 1С вы найдёте описание работы с регистрами сведений здесьздесь и тут. А сейчас рассмотрим пример, как создавать уникальные записи в регистре сведений. Итак, приступим!

Сначала создадим измерение с типом «УникальныйИдентификатор». Назовём это измерение «Счетчик». В форме записи регистра сведений запишем следующий код:

Процедура ПередЗаписью(Отказ)
	Если НЕ ЗначениеЗаполнено(Счетчик) Тогда
		КлючУникальности = Новый УникальныйИдентификатор;
		Счетчик = КлючУникальности;
	КонецЕсли;
КонецПроцедуры

Теперь, перед записью в измерение «Счетчик», устанавливается уникальное значение. Сообщение «Запись с такими ключевыми полями существует!» перестанет появляться. По сути, в регистре сведений создаётся поле с автоинкрементом. Теперь можно изменять и удалять записи регистра сведений, используя это уникальное значение.


ПОДПИСКА

11 ответы
  1. Надежда говорит:

    Регистр сведений у меня всегда вызывал большие вопросы.. Мы когда проходили эту тему на занятиях в институте, я болела и пропустила лекции. Пришлось изучать все самой. Если честно, то я рада, что наткнулась на ваши примеры. Сейчас для меня уникальность — точно не проблема!

  2. Softmaker говорит:

    Здравствуйте, Надежда! Великолепно, что объяснение о том, как в регистре сведений обеспечить уникальность каждой записи был полезен для вас!

  3. Варвара говорит:

    А если мне надо, чтобы регистр сведений содержал не уникальные строки (записи), а уникальность по столбцу определенному проставлялась. Это как делается?

  4. Softmaker говорит:

    Здравствуйте, Варвара! Регистр сведений это таблица базы данных, в которой изначально поддерживается уникальность наименования столбцов. В таблицу БД вы не сможете добавить два одинаковых по названию столбца :))))))

  5. Антон говорит:

    Имелось ввиду что по определенному измерению проводить анализ на уникальность добавляемой записи

  6. Алена говорит:

    У меня выдает ошибку на этот код: Если НЕ ЗначениеЗаполнено(ИнвентарныйНомер) Тогда
    КлючУникальности = Новый УникальныйИдентификатор;
    ИнвентарныйНомер= КлючУникальности;
    КонецЕсли;

  7. Softmaker говорит:

    Здравствуйте, Алена! У вас в регистре сведений создано измерение ИнвентарныйНомер? Ругается, так как вы не создали.

  8. Вячеслав говорит:

    Не знаю как у Вас, Автор. Но у меня это заработало только тогда, когда слегка изменил Ваш код, и вставил его непосредственно в обработку проведения, в цикл проведения по регистру накопления каждой позиции табличной части.
    Я изменил условие "Если НЕ" на простое "Если", т.к. если значение не заполнено, то это означает что и позиция в списке не повторяется.
    Вот что у меня получилось, и прекрасно заработало.
    Пример с переодического регистра сведений установки цены:
    Движения.РегистрУстановкаЦен.Записывать = Истина;
    Для Каждого СтрокаТЧТовары Из Товары Цикл
    Если ЗначениеЗаполнено(Счетчик) Тогда
    КлючУникальности = Новый УникальныйИдентификатор;
    Счетчик = КлючУникальности;
    КонецЕсли;
    Движение = Движения.РегистрУстановкаЦен.Добавить();
    Движение.Период = Дата;
    Движение.ТоварИлиУслуга = СтрокаТЧТовары.ТоварИлиУслуга;
    Движение.Цена = СтрокаТЧТовары.Цена;
    Движение.Счетчик = Счетчик;
    КонецЦикла;

  9. грайм псина говорит:

    Спасибо большое! Воспользовался Вашим способом, и он работает! Спасибо еще раз! Дай Вам Бог здоровья :)

  10. softmaker говорит:

    Рад, что вам помогло! Всего доброго!

Комментарии закрыты.