Как в регистре сведений обеспечить уникальность каждой записи?
Приветствую вас, дорогие читатели! Ещё раз мы уделим внимание работе с регистрами сведений. Уже было написано Как сделать блокировку записи регистра сведений при её редактировании в форме записи? или Как открыть форму записи регистра сведений из строки табличного поля? В статье с примерами работы в 1С вы найдёте описание работы с регистрами сведений здесь, здесь и тут. А сейчас рассмотрим пример, как создавать уникальные записи в регистре сведений. Итак, приступим!
Сначала создадим измерение с типом «УникальныйИдентификатор». Назовём это измерение «Счетчик». В форме записи регистра сведений запишем следующий код:
Процедура ПередЗаписью(Отказ) Если НЕ ЗначениеЗаполнено(Счетчик) Тогда КлючУникальности = Новый УникальныйИдентификатор; Счетчик = КлючУникальности; КонецЕсли; КонецПроцедуры
Теперь, перед записью в измерение «Счетчик», устанавливается уникальное значение. Сообщение «Запись с такими ключевыми полями существует!» перестанет появляться. По сути, в регистре сведений создаётся поле с автоинкрементом. Теперь можно изменять и удалять записи регистра сведений, используя это уникальное значение.
Регистр сведений у меня всегда вызывал большие вопросы.. Мы когда проходили эту тему на занятиях в институте, я болела и пропустила лекции. Пришлось изучать все самой. Если честно, то я рада, что наткнулась на ваши примеры. Сейчас для меня уникальность — точно не проблема!
Здравствуйте, Надежда! Великолепно, что объяснение о том, как в регистре сведений обеспечить уникальность каждой записи был полезен для вас!
А если мне надо, чтобы регистр сведений содержал не уникальные строки (записи), а уникальность по столбцу определенному проставлялась. Это как делается?
Здравствуйте, Варвара! Регистр сведений это таблица базы данных, в которой изначально поддерживается уникальность наименования столбцов. В таблицу БД вы не сможете добавить два одинаковых по названию столбца :))))))
Имелось ввиду что по определенному измерению проводить анализ на уникальность добавляемой записи
У меня выдает ошибку на этот код: Если НЕ ЗначениеЗаполнено(ИнвентарныйНомер) Тогда
КлючУникальности = Новый УникальныйИдентификатор;
ИнвентарныйНомер= КлючУникальности;
КонецЕсли;
Здравствуйте, Алена! У вас в регистре сведений создано измерение ИнвентарныйНомер? Ругается, так как вы не создали.
Не знаю как у Вас, Автор. Но у меня это заработало только тогда, когда слегка изменил Ваш код, и вставил его непосредственно в обработку проведения, в цикл проведения по регистру накопления каждой позиции табличной части.
Я изменил условие "Если НЕ" на простое "Если", т.к. если значение не заполнено, то это означает что и позиция в списке не повторяется.
Вот что у меня получилось, и прекрасно заработало.
Пример с переодического регистра сведений установки цены:
Движения.РегистрУстановкаЦен.Записывать = Истина;
Для Каждого СтрокаТЧТовары Из Товары Цикл
Если ЗначениеЗаполнено(Счетчик) Тогда
КлючУникальности = Новый УникальныйИдентификатор;
Счетчик = КлючУникальности;
КонецЕсли;
Движение = Движения.РегистрУстановкаЦен.Добавить();
Движение.Период = Дата;
Движение.ТоварИлиУслуга = СтрокаТЧТовары.ТоварИлиУслуга;
Движение.Цена = СтрокаТЧТовары.Цена;
Движение.Счетчик = Счетчик;
КонецЦикла;
Здорово, спасибо, Вячеслав!
Спасибо большое! Воспользовался Вашим способом, и он работает! Спасибо еще раз! Дай Вам Бог здоровья :)
Рад, что вам помогло! Всего доброго!