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

Пример кода 1С по созданию уникальных записей в регистре сведений

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


Пример кода 1С по созданию уникальных записей в регистре сведений

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

В форме записи регистра сведений запишем следующий код:

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

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


Этот блог читают уже более 3000 человек
- читай и ТЫ!

9 ответы
  1. Надежда says:

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

    Ответить
  2. Softmaker
    Softmaker says:

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

    Ответить
  3. Варвара says:

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

    Ответить
  4. Softmaker
    Softmaker says:

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

    Ответить
  5. Антон says:

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

    Ответить
  6. Алена says:

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

    Ответить
  7. Softmaker
    Softmaker says:

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

    Ответить
  8. Вячеслав says:

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

    Ответить

Ответить

Want to join the discussion?
Feel free to contribute!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *