|   |   | 
| 
 | Регистр сведений проверка на уникальность | ☑ | ||
|---|---|---|---|---|
| 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) А это никакой не доп. реквизит. Самый что ни на есть основной. У тебя, как  понимаю, два кода и каждый должен быть уникальным. Первый код хранишь в коде, а второй в индексированном реквизите. Перед записью делаешь поиск по реквизиту. Вот собственно и все.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |