|
Регистр сведений проверка на уникальность | ☑ | ||
---|---|---|---|---|
0
Vladislava-smile
29.09.15
✎
03:57
|
Есть регистр сведений с 3-мя измерениями, Код(строка), номенклатура, строка. Сейчас идет проверка уникальности только по номенклатуре и по коду, надо сделать уникальной и строку. В свойствах что-то не нашла ничего ... Или перед записью нового элемента надо перебирать весь набор записей и проверять на соответствие?
|
|||
1
krunm
29.09.15
✎
05:11
|
v8: Проверка уникальности элементов справочника, читайте 33 комментарий
|
|||
2
Vladislava-smile
29.09.15
✎
05:17
|
(1) Спасибо, сделала уже так:
Процедура ПередЗаписью(Отказ, Замещение) Для Каждого Запись из ЭтотОбъект Цикл // Проверка на уникальность кодаИНСТАЛЛ и КодаКНР Запрос = Новый Запрос("ВЫБРАТЬ | СоответствиеНоменклатурыИнсталлКНР.КодИНСТАЛЛ, | СоответствиеНоменклатурыИнсталлКНР.КодКНР |ИЗ | РегистрСведений.СоответствиеНоменклатурыИнсталлКНР КАК СоответствиеНоменклатурыИнсталлКНР"); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Если Запись.КодИНСТАЛЛ=Результат.КодИНСТАЛЛ тогда Сообщить("Номенклатура Инсталл с кодом Инсталл "+Запись.КодИНСТАЛЛ+" уже записана!!!"); Отказ=Истина; ИначеЕсли Запись.КодКНР=Результат.КодКНР тогда Сообщить("Номенклатура Инсталл с кодом КНР "+Запись.КодКНР+" уже записана!!!"); Отказ=Истина; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
3
Альбатрос
29.09.15
✎
05:22
|
(2) =)
|
|||
4
Vladislava-smile
29.09.15
✎
05:32
|
(3) И что это значит "=)"?
|
|||
5
jurassic
29.09.15
✎
05:34
|
вот бы придумали такой механизм, который сам бы контролировал уникальность записей в таблице по какому-то набору полей...
|
|||
6
Vladislava-smile
29.09.15
✎
05:38
|
(5) - это намек, что такой способ есть или просто мысли в слух? ) Потому что я искала, ничего похожего не нашла ...
|
|||
7
Альбатрос
29.09.15
✎
05:38
|
(4) Для начала запрос в цикле без "ГДЕ". Затем ты говоришь, что у тебя 3 измерения регистра. Платформа не даст сама тебе сделать запись с одинаоквыми ключевыми полями.
|
|||
8
Альбатрос
29.09.15
✎
05:39
|
(6) именно намек.
|
|||
9
Vladislava-smile
29.09.15
✎
05:46
|
(7) - это понятно, что не даст, но мне нужно чтобы не было во всем регистре одинаковых значений по измерению. (8) - окей, еще поищу. Спасибо.
|
|||
10
Vladislava-smile
29.09.15
✎
05:49
|
(5) Может ссылочкой кто поделится ...
|
|||
11
Альбатрос
29.09.15
✎
05:51
|
(9) Ну так сделай его единственным измерением и все
|
|||
12
jurassic
29.09.15
✎
05:52
|
(9) тогда у тебя одно измерение
|
|||
13
Vladislava-smile
29.09.15
✎
05:53
|
(11) не вариант, так как уникальными должны быть 2 кода. Это делается для обмена. Код в первой базе и код во второй соответственно.
|
|||
14
jurassic
29.09.15
✎
05:55
|
(13) выходит, у тебя два измерения. что за строка?
|
|||
15
mehfk
29.09.15
✎
05:56
|
(13) Два измерения дают тебе отношение многие ко многим. Одно измерение и один ресурс дадут тебе отношение один к одному.
|
|||
16
jurassic
29.09.15
✎
05:58
|
(15) щито? (изм1 - рес1, изм1 - рес2) - это один к одному?
|
|||
17
Альбатрос
29.09.15
✎
06:07
|
(16) этот вариант невозможен, он правильно говорит
|
|||
18
Vladislava-smile
29.09.15
✎
06:20
|
И итог то какой в ваших дебатах, господа? ))
|
|||
19
Альбатрос
29.09.15
✎
06:35
|
(18) Ну ищи запросом, только переделай. Можно еще разделить на 2 регистра
|
|||
20
Vladislava-smile
29.09.15
✎
06:46
|
(19) Не, лучше запрос, а чем этот не вариант? У меня сначала так было:
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 СоответствиеНоменклатурыИнсталлКНР.КодИНСТАЛЛ ИЗ РегистрСведений.СоответствиеНоменклатурыИнсталлКНР КАК СоответствиеНоменклатурыИнсталлКНР ГДЕ СоответствиеНоменклатурыИнсталлКНР.КодИНСТАЛЛ = &КодИНСТАЛЛ"); Запрос.УстановитьПараметр("КодИНСТАЛЛ", Запись.КодИНСТАЛЛ); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда //Есть такая запись И второй, только к другому. Это лучше? |
|||
21
Альбатрос
29.09.15
✎
06:51
|
(20) В ГДЕ просто добавь ИЛИ и второго запроса не нужно.
И все равно не комильфо, ибо запрос в цикле. Тем более запрос, который шерстит все записи по регистру. |
|||
22
magicSan
29.09.15
✎
06:55
|
не проще срез последнеих в объектной модели по нужному измирению смотреть?
|
|||
23
Альбатрос
29.09.15
✎
06:58
|
(22) вангую, что РС не периодический
|
|||
24
ВедущийП
29.09.15
✎
07:01
|
Процедура ПередЗаписью(Отказ, Замещение)
Запрос = Новый Запрос("ВЫБРАТЬ | СоответствиеНоменклатурыИнсталлКНР.КодИНСТАЛЛ, | СоответствиеНоменклатурыИнсталлКНР.КодКНР |ИЗ | РегистрСведений.СоответствиеНоменклатурыИнсталлКНР КАК СоответствиеНоменклатурыИнсталлКНР"); Таб = Запрос.Выполнить().Выбрать().Выгрузить(); Таб.Индексы.Добавить("КодИНСТАЛЛ"); Таб.Индексы.Добавить("КодКНР"); Для Каждого Запись из ЭтотОбъект Цикл // Проверка на уникальность кодаИНСТАЛЛ и КодаКНР Если Таб.Найти(Запись.КодИНСТАЛЛ,"КодИНСТАЛЛ") <> НЕОПРЕДЕЛЕНО тогда Сообщить("Номенклатура Инсталл с кодом Инсталл "+Запись.КодИНСТАЛЛ+" уже записана!!!"); Отказ=Истина; ИначеЕсли Таб.Найти(Запись.КодКНР,"КодКНР") <> НЕОПРЕДЕЛЕНО тогда Сообщить("Номенклатура Инсталл с кодом КНР "+Запись.КодКНР+" уже записана!!!"); Отказ=Истина; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
25
ВедущийП
29.09.15
✎
07:01
|
Таб = Запрос.Выполнить().Выбрать().Выгрузить();
меняем на Таб = Запрос.Выполнить().Выгрузить(); |
|||
26
ВедущийП
29.09.15
✎
07:02
|
Идея (24) в том, что мы не дергаем базу в цикле.
|
|||
27
ВедущийП
29.09.15
✎
07:06
|
Можно дальше оптимизировать, например передавать в запрос список реквизитов и смотреть на результат.
|
|||
28
magicSan
29.09.15
✎
07:07
|
(23) тогда просто получить
|
|||
29
magicSan
29.09.15
✎
07:07
|
Вариант синтаксиса: Для непериодического регистра
Синтаксис: Получить(<Отбор>) Параметры: <Отбор> (необязательный) Тип: Структура. Структура, содержащая отбор по измерениям регистра. В переданной структуре должны содержаться те измерения, по которым должны быть отфильтрованы записи. В элементе структуры задается имя и значение отбора. Должны указываться значения для всех измерений. Параметр обязателен для регистров, имеющих измерения. Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение. Неиспользуемым в сеансе разделителям регистра в структуре должен соответствовать элемент с указанным значением отбора, так же, как для всех измерений, иначе будет вызвано исключение. Если параметр не указан, то отбор не используется. Возвращаемое значение: Тип: Структура. Структура, содержащая значения ресурсов. Описание: Получает ресурсы регистра сведений по указанным ключевым полям. |
|||
30
ВедущийП
29.09.15
✎
07:08
|
(29) В цикле это будет аналогично запросу.
|
|||
31
magicSan
29.09.15
✎
07:14
|
(30)Только тут две строчки а с запросом 10ок
|
|||
32
Альбатрос
29.09.15
✎
07:15
|
(31) не в строчках дело, а в оптимизации
|
|||
33
Альбатрос
29.09.15
✎
07:15
|
(24) норм вармант
|
|||
34
magicSan
29.09.15
✎
07:17
|
(32) смешно.
|
|||
35
Альбатрос
29.09.15
✎
07:20
|
(34) И что же тебя рассмешило?
|
|||
36
magicSan
29.09.15
✎
07:25
|
(35) гумно партянку выложили и рассуждаете о высоких материях оптимизации.
|
|||
37
Альбатрос
29.09.15
✎
07:31
|
(36) Ну мы-то можем рассуждать, а вот тебе до понятия оптимзации по ходу далеко еще
|
|||
38
magicSan
29.09.15
✎
07:36
|
(37) Я может чего не понял - нафига весь регистр перебирать? создавать таблицы значений искать в них - дурь какая-то.
|
|||
39
Альбатрос
29.09.15
✎
07:49
|
(38) Как думаешь, в какой запрос трансформируется метод .Получить() при обращении к БД?
|
|||
40
magicSan
29.09.15
✎
07:52
|
(39) как думаешь что проще получить результат или индексировать создавать тзх и исктаь в ней?
|
|||
41
Альбатрос
29.09.15
✎
07:55
|
(40) Если твой результат получается путем запроса как в (24) в цикле, то нахрен он нужен. В (24) нужно только отбор в запросе наложить и все
|
|||
42
itlikbez
29.09.15
✎
07:56
|
Забавно. Два уникальных ключа. Получается, нужно два справочника создавать. Или слепить два кода в один, что будет лучше.
|
|||
43
itlikbez
29.09.15
✎
08:01
|
А нет, слепить не получится. Только два справочника.
|
|||
44
itlikbez
29.09.15
✎
08:04
|
А и два справочника не нужно. Один индексированный реквизит в дополнение к коду решает проблему.
|
|||
45
Vladislava-smile
29.09.15
✎
08:13
|
Всем спасибо за такую отзывчивость, выберу что-нибудь, главное, что сейчас вариантов много )), (44) доп. реквизиты плодить не хочется только ...
|
|||
46
ЧеловекДуши
29.09.15
✎
08:31
|
Все бред. Так и непонятно, для каких таких обменов нужна такая головомойка? :)
|
|||
47
Krolik Bezobraznik
29.09.15
✎
08:42
|
Вообще не понял из за чего сыр бор. Чем набор записей РС не угодил?
|
|||
48
magicSan
29.09.15
✎
09:04
|
(41) Перед записью делаешь отбор по текущим данным - какой накуй цикл???
|
|||
49
itlikbez
29.09.15
✎
10:11
|
(45) А это никакой не доп. реквизит. Самый что ни на есть основной. У тебя, как понимаю, два кода и каждый должен быть уникальным. Первый код хранишь в коде, а второй в индексированном реквизите. Перед записью делаешь поиск по реквизиту. Вот собственно и все.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |