Контроль уникальности реквизита справочника |
Я |
09.08.12 — 17:51
Каким образом нужно правильно это делать?
1 — 09.08.12 — 17:52
В обработке проверки заполнения
2 — 09.08.12 — 17:53
Как вариант
3 — 09.08.12 — 17:54
Если нужно обеспечить контроль и при тупой программной записи, тогда в перед записью.
4 — 09.08.12 — 17:54
Перед записью контролировать неправильно
5 — 09.08.12 — 17:55
(4)почему?
6 — 09.08.12 — 17:56
При одновременной записи в справочник в этом случае возможно появление дублей.
7 — 09.08.12 — 17:57
Перед записью элемент справочника еще в базу не записан, поэтому второй поток не сможет выявить не уникальность реквизита.
8 — 09.08.12 — 17:58
(6)тогда при записи )
9 — 09.08.12 — 17:59
(8) Тоже неправильно)
10 — 09.08.12 — 18:01
(9)тебе не угодишь (
в типовой поиск дублей делается передЗаписью
11 — 09.08.12 — 18:04
(7)создай тогда какую нить табличку и блокируй её, или блокируй всю табл справочника
12 — 09.08.12 — 18:13
(11) Если вся эта шняга затевается для того чтобы юзеры не били контров с одинаковым ИНН и вероятность наступления одномоментного ввода элементов с одинаковым реквизитами 10 в минус ХЗ какой степени, то зачем все эти геморрои?
13 — 10.08.12 — 09:29
(11) Блокировать всю таблицу не правильно, т. к. при этом снижается производительность системы. Кроме того как это сделать?
(12) Нет, ИНН здесь ни при чем. Речь о многопотоковой параллельной работе со справочниками.
14 — 10.08.12 — 09:34
(13) регистр сведений заведите с двумя измерениями: элемент справочника и его реквизит.
15 — 10.08.12 — 09:36
А чо, ПриИзменении не подойдет?
16 — 10.08.12 — 09:37
Перед записью запросом ГДЕ МойСправочник.ИмяРеквизита = &Реквизит
17 — 10.08.12 — 09:38
(13)>>Кроме того как это сделать?
в транзакции ДЛЯ ИЗМЕНЕНИЯ, или неробит?
18 — 10.08.12 — 09:41
(7) Воспроизведи.
19 — 10.08.12 — 09:46
(18) Я должен воспроизвести? Можешь мне поверить, или проверить)
(14) Почему с 2-мя измерениями? по моему измерение должно быть одно — реквизит, проверяемый на уникальность. ну и ресурс можно сделать — ссылка на элемент справочника….
20 — 10.08.12 — 09:47
(17) ДЛЯ ИЗМЕНЕНИЯ в режиме управляемых блокировок вроде не работает
21 — 10.08.12 — 09:49
1) первая проверка:
ПередЗаписью — пробегаемся по всему справочнику
Здесь же записываем значение реквизита (которое вводится сейчас) во временный РС «ЗначенияКоторыеВводятсяСейчас»
2) вторая проверка
ПриЗаписи — смотрим РС «ЗначенияКоторыеВводятсяСейчас», нет ли там таких значений, вводимых в данный момент другими (с полной блокировкой этот регистр)
3) Периодически (тут надо подумать) чистим наш вспомогательный РС (блокируя в этот момент таблицу справочника).
Ессно, в файловой версии это работать не будет. Да и в постгри, наверное, тоже.
22 — 10.08.12 — 09:51
(19) да, с одним измерением круче, можно прямо в ПриИзменении реквизита на форме проверять.
23 — 10.08.12 — 09:55
(21) Хитрый алгоритм, насколько он оптимален с точки зрения производительности? Особенно такие моменты как «ПередЗаписью — пробегаемся по всему справочнику «…
(22) Меня больше интересует программная запись)
24 — 10.08.12 — 09:57
Насчет регистра сведений — это вы загнули. А с учетом многопользовательского режима работы — совсем уж лишнее. Пятое колесо в телеге
25 — 10.08.12 — 09:59
(24) Дело в том, что только использование регистра сведений позволяет на уровне платформы гарантированно контролировать уникальность набора измерений записи.
26 — 10.08.12 — 10:00
(24) почему? Зато уникальность сама по себе будет контролироваться. На уровне платформы. И как раз это для многопользовательской версии, для однопользовательской это не нужно.
27 — 10.08.12 — 10:07
(25) нужно еще учесть тип значения или у вас строка?
28 — 10.08.12 — 10:10
(27) Строка, длиной больше 254 символов…
29 — 10.08.12 — 10:17
(28) все-таки вводить регистр сведений для уникальности будет избыточно. Даже если открыто одновременно две формы у разных пользователей… Можно в код ПослеЗаписи поставить запрос по этому реквизиту, если выдаст более одного значения в результат, то вот и получишь поиск неуникального. Если же искать среди не записанных, в том числе и без самого себя, то гарантированного результата не достигнуть, имхо
30 — 10.08.12 — 10:19
+ имхо, потому что это все методы самой 1С. Если работать с транзакциями без 1С, то вполне допускаю мысль, что где-то они в решении такой задачи смогут помочь
31 — 10.08.12 — 10:21
(23) В любом случае понадобится таблица, хранящая все значения. Хоть тот же справочник, хоть отдельный РС (в том случае, если реквизитов в справочнике ну очень много, чтобы таблица была меньше).
Речь вообще про какие объемы? Сколько элементов в секунду будет вводиться?
32 — 10.08.12 — 10:25
(29) ПослеЗаписи, когда транзакция уже зафиксирована и данные внесены в БД, в случае не уникальности реквизита, придется удалять записанные данные, кроме того в этом случае возможна ситуация когда оба одновременно записываемых элемента (в случае 2-х конкурентных потоков) с одинаковыми реквизитами будут удалены
33 — 10.08.12 — 10:28
Чем типовое решение, с показом возможных дублей, не годится?
34 — 10.08.12 — 10:28
+ кстати, для объекта справочник события ПослеЗаписи нет)
35 — 10.08.12 — 10:30
(33) насчет типового решения не могу ничего сказать, т к не видел его
36 — 10.08.12 — 10:40
(26) Хм… на «уровне платформы»… Это об той самойплатформе речь, где функционал распределенной информационной базы встроен. Риб-база — и все ваши «навороты» для обеспечения уникальности становятся бессмысленными.
37 — 10.08.12 — 10:45
(36) В случае распределенной базы данных, да и в общем случае распределенных систем, использующих общие данные, должна быть отдельная база с так называемыми мастер-данными, для контроля уникальности и синхронизации общих элементов со всеми системами использующими эти данные.
38 — 10.08.12 — 11:20
(28) Можно подробнее, что хранится в этом реквизите?
Технически, гарантированно обеспечить уникальность реквизита при многопользовательской работе можно только двумя способами:
1) Сериализовать все изменения сущности (будь то справочник, регистр и т.д.). То есть блокировать некий общий ресурс перед записью, проверить уникальность, записать, снять блокировку. Платформа позволяет это сделать несколькими способами.
2) Ввести ограничение уникальности на уровне СУБД (unique constraint или unique index). Тут есть такие варианты:
а) хранить данные, требующие уникальности, в реквизите, для которого платформа сама создает в БД такое ограничение (например код справочника, единственное измерение РС (19));
б) создать дополнительное ограничение самостоятельно через SQL (и самому же его поддерживать, платформа о нем не знает и может его снести)
39 — 10.08.12 — 11:42
(38) Вариант 2-б мне нравится можно попробовать)
40 — 10.08.12 — 11:54
(38) Хранится строка, содержащая url-адрес.
41 — 10.08.12 — 11:57
(40) Похоже на самостоятельную сущность. Подумайте о 2а.
42 — 10.08.12 — 12:02
(41) Мне нужно получить некий идентификатор (ссылку) для дальнейшей нормальной работы с этими url-адресами. В случае использования справочника ссылка формируется автоматически при записи. В случае использования 2а, выходит что придется поддерживать 2 сущности справочник — для формирования ссылок и регистр сведений — для контроля уникальности. и делать 2 записи вместо одной…
43 — 10.08.12 — 12:17
(42) Вычислите хэш от URL и сделайте его кодом справочника (или частью кода).
44 — 10.08.12 — 12:29
(43) Он точно будет уникальным?
45 — 10.08.12 — 12:41
вот стоило бы в самом начале указать, какого характера инфу сохранять и получить совет из (43)
46 — 10.08.12 — 12:48
(45) Хэш не гарантирует уникальность
47 — 10.08.12 — 12:51
(46) md5 ?
48 — 10.08.12 — 12:54
(19) Ну вот я какбе и не верю.
49 — 10.08.12 — 13:00
50 — 10.08.12 — 13:01
целая дискуссия по поводу использования md5 хэшей в качестве примари кей. Тут не все так однозначно
51 — 10.08.12 — 13:01
(48) Проверь)
52 — 10.08.12 — 13:04
угу. это даже не задумываясь о самой задаче исключения урлов, идентичных друг другу при отсечении хвостовых пробелов
53 — 10.08.12 — 13:22
(44) Не точно. Добавьте проверку на коллизии. Можно еще один разряд добавить на случай коллизии, но я бы не стал.
(50) Не нашел там серьезных аргументов против. Кроме того, Код это не primary key.
54 — 10.08.12 — 15:30
(42)делай подчинённый справочник, код у которого твой уникальный реквизит, ессно должна быть уникальность кодов
55 — 10.08.12 — 15:41
(54) Длина кода ограничена
Defender aka LINN
56 — 11.08.12 — 10:59
(51) Вот я и говорю: воспроизведи для начала.
0 / 0 / 0 Регистрация: 19.10.2012 Сообщений: 8 |
|
1 |
|
1C 8.x Проверка уникальности наименования19.10.2012, 20:58. Показов 34109. Ответов 16
Здравствуйте, я новичок в программировании 1С. Напишите, пожалуйста, как выполнить пункт 1.1.3. Разработать учебную настройку сладского учета. Разработка должна вестись «с нуля», т.е. создать новую конфигурацию. 1.Справочники
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
19.10.2012, 22:07 |
2 |
тип числа длинна 15 точность 2
1 |
duk337 2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
||||
20.10.2012, 00:56 |
3 |
|||
Запросом — надо приводить строки. Лучше
1 |
Dethmontt Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
||||
20.10.2012, 03:11 |
4 |
|||
Тогда уж хотя бы так…
2 |
0 / 0 / 0 Регистрация: 19.10.2012 Сообщений: 8 |
|
21.10.2012, 18:09 [ТС] |
5 |
Спасибо большое. Вы мне очень помогли. Код работает)
0 |
semen9 |
|
12.12.2012, 16:15 |
6 |
Всем привет, а если к этому коду еще добавить проверку по реквизиту как это реализовать? |
Милагрес 0 / 0 / 0 Регистрация: 19.10.2012 Сообщений: 8 |
||||
12.12.2012, 21:20 [ТС] |
7 |
|||
я сделала это задание так:
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
13.12.2012, 00:21 |
8 |
я сделала это задание так: А если потребуется что то изменить в номенклатуре (кроме наименования) то как ее потом записать? она же найдет сама себя в базе =)) Добавлено через 1 минуту Чем этот:
Тогда уж хотя бы так…
0 |
2954 / 1766 / 82 Регистрация: 03.11.2011 Сообщений: 8,280 |
|
14.12.2012, 12:51 |
9 |
|ГДЕ Может не сравниться. В запросе критична длина строки.
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
14.12.2012, 13:07 |
10 |
Это побеждается СОКРЛП()
0 |
ArturiosBoss 0 / 0 / 0 Регистрация: 06.12.2016 Сообщений: 2 |
||||
06.12.2016, 15:27 |
11 |
|||
А если потребуется что то изменить в номенклатуре (кроме наименования) то как ее потом записать? она же найдет сама себя в базе =)) Тут на самом деле всё просто если использовать запрос от уважаемой Милагрес будет и проверять уникальность и изменять запись
0 |
Dethmontt |
06.12.2016, 17:19
|
Не по теме: ArturiosBoss, с 2012 года
0 |
ArturiosBoss |
06.12.2016, 21:02
|
Не по теме: ничего страшного кому-то пригодиться, тем более ответа адекватного не было на ваш вопрос
0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,907 |
||||
09.12.2016, 14:25 |
14 |
|||
ArturiosBoss, ваш ответ более чем не адекватный. Если я поменяю наименование уже созданного элемента на то, которое уже есть в базе, то ваш код отработает не так как нужно.
А вот этот участок кода призван нагрузить систему и все!
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
09.12.2016, 23:48 |
15 |
Joker_vad, ArturiosBoss,
0 |
0 / 0 / 0 Регистрация: 21.11.2017 Сообщений: 1 |
|
22.11.2017, 09:59 |
16 |
Объясните други то как лучше всего сделать.
0 |
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,907 |
|
22.11.2017, 11:44 |
17 |
Знакомое ТЗ, у нас такое же на приеме на работу, один из первых пунктов. Перед записью, проверять есть ли такое же наименование в базе. Причем нужно проверить так чтобы, он самого себя не находил, если элемент уже записан и его нужно будет подредактировать. Никаких условий на новый объект не нужно, т.к элемент может быть перезаписан.
0 |
Уважаемые опытные разработчики 1С, прошу проконсультировать начинающего.
Имеется справочник «Товары», который, помимо стандартных реквизитов, имеет реквизит цена с примитивным типом «число». Необходимо чтобы перед записью элемента справочника проверялась уникальность наименования. Если наименование не уникально, запись производиться не должна с выдачей соответствующего сообщения.
Погуглив, нашел следующее решение (проверял — работает):
1) В модуле объекта пишем код:
Процедура ПередЗаписью(Отказ)
ИмяОбъекта = ЭтотОбъект.Метаданные().Имя;
СтрРеквизитов = Новый Структура; //
СтрРеквизитов.Вставить("Наименование", Наименование);
Если Не ОбщегоНазначения.ПрошелКонтрольУникальностиСправочникаПоРеквизиту(ИмяОбъекта, СтрРеквизитов, Ссылка) Тогда
Сообщить("Подобный элемент справочника /" + Наименование + "/ существует!
|Модуль: Контроль уникальности элементов справочника." );
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
2) Создаем общий модуль и там прописываем:
&НаСервере
Функция ПрошелКонтрольУникальностиСправочникаПоРеквизиту(ИмяОбъекта, СтрРеквизитов, ЗначениеСсылка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Спр.Ссылка
|ИЗ
| Справочник." + ИмяОбъекта + " КАК Спр
|ГДЕ
| Спр.Ссылка <> &парЗначениеСсылка
|";
Нум = 0;
Для Каждого Знч Из СтрРеквизитов Цикл
ИмяПараметраВЗапросе = " = &Пар" + Строка(Нум);
Запрос.Текст = Запрос.Текст + " И Спр." + Знч.Ключ + ИмяПараметраВЗапросе;
Запрос.УстановитьПараметр("Пар" + Строка(Нум), Знч.Значение);
Нум = Нум + 1;
КонецЦикла;
Запрос.УстановитьПараметр("парЗначениеСсылка", ЗначениеСсылка);
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса.Пустой();
КонецФункции
Есть ощущение, что слишком громоздкое решение задачи. Подскажите, пожалуйста, есть ли более простое / рациональное решение?
Программный код для проверки наличия дублирующегося элемента справочника до записи (8.2).
Для обычного и управляемого приложения.
При разработке своей конфигурации возникла проблема, когда пользователи от лени не просматривая справочники начинают дублировать записи. Чистить после них справочники достаточно запарно, на двойные элементы задействованы ссылки. Поэтому попробовал ограничить их при вводе новых элементов. Немного помучился с логикой, забыл двоичную арифметику. Вот что получилось. После окончательной проверки в своей конфе вставлю это и в стандартные (уже вставил). Может кому еще пригодится. Сразу оговорюсь критерий, что является дублем определен тот который подходит мне. Это пример и каждый волен доработать его по своему. Проверено на 8.2. Зараннее прошу прощения за оформление поста.
Итак для обычного приложения
В ОбщиеМодули помещаете СвойМодуль РаботаСоСправочниками и внем прописываете процедуру
// Проверяет существует элемент в справочнике или нет
// Вызывается перед записью элемента
//
// Элемент — Объект Элемент
// Реквизит — Реквизит для поиска
// Отказ — Отказ от записи элемента
//
Процедура ПроверитьЭлемент(Элемент, Реквизит, Отказ) Экспорт
// Проверяем совпадение наименования
Отбор = Реквизит;
Найдено = Справочники[Элемент.Метаданные().Имя].НайтиПоНаименованию(Отбор, Истина);
Если Найдено = Справочники[Элемент.Метаданные().Имя].ПустаяСсылка() Тогда
// Такого элемента нет
// Перезаписываем элемент справочника
Отказ = Ложь;
ИначеЕсли Найдено.Код = Элемент.Код Тогда
// Это редактируемый элемент
// Перезаписываем элемент справочника
Отказ = Ложь;
Иначе
Предупреждение(«Такой элемент есть в справочнике», 10);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
После этого во все формы Элементов справочников, которые необходимо контролировать, помещаем процедуру для события Формы
Процедура ПередЗаписью(Отказ)
// Проверим существование элемента с таким Наименованием
РаботаСоСправочниками.ПроверитьЭлемент(ЭтотОбъект, Наименование, Отказ);
КонецПроцедуры
А теперь для управляемого приложения
В нем почти все также, но немного другое обращение к форме.
В ОбщиеМодули помещаем СвойМодуль РаботаСоСправочниками и в нем прописываем процедуру
// Проверяет существует элемент в справочнике или нет
// Вызывается перед записью элемента
//
// Наимен — Реквизит для поиска
// Элемент — Объект Элемент
// Отказ — Отказ от записи элемента
//
Процедура ПроверитьЭлемент(Наимен, Элемент, Отказ) Экспорт
// Проверяем совпадение наименования
Отбор = Наимен;
Найдено = Справочники[Элемент.Метаданные().Имя].НайтиПоНаименованию(Отбор, Истина);
Если Найдено = Справочники[Элемент.Метаданные().Имя].ПустаяСсылка() Тогда
// Сообщить(«1-Такого элемента нет»);
// Перезаписываем элемент справочника
Отказ = Ложь;
ИначеЕсли Найдено.Код = Элемент.Код Тогда
// Сообщить(«2-Это редактируемый элемент»);
// Перезаписываем элемент справочника
Отказ = Ложь;
Иначе
// Сообщить(«3-Такой элемент уже есть в справочнике»);
// Запрещаем запись этого элемента
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
После этого в формы Элементов справочников, которые необходимо контролировать, помещаем процедуру для события Формы
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
РаботаСоСправочниками.ПроверитьЭлемент(ЭтаФорма.Объект.Наименование, ЭтаФорма.Объект.Ссылка, Отказ);
Если Отказ Тогда
Предупреждение(«Такой элемент есть в справочнике», 10);
КонецЕсли;
КонецПроцедуры
Вот и все. Переделывайте и используйте на свое усмотрение. Удачи.
Показывать по
10
20
40
сообщений
Новая тема
Ответить
Eagle77
Дата регистрации: 08.06.2004
Сообщений: 36
Здравствуйте, коллеги! Как можно средствами языка 1С осуществить проверку на уникальность наименования или другого реквизита справочника при записи? Т.е. в случае, если такое наименование уже есть в справочнике, выдавалось бы сообщение типа «Такое наименование уже есть в справочнике».<br><br>Заранее спасибо.
Eagle77
Дата регистрации: 08.06.2004
Сообщений: 36
Сам догадался ) Извините за беспокойство)))
Квазимодо
Дата регистрации: 12.05.2004
Сообщений: 559
расскажи уж как? может предложат другие способы :]
Eagle77
Дата регистрации: 08.06.2004
Сообщений: 36
«ЗАДАЧА: Есть справочник телефонных номеров, необходимо организовать контроль за вводом номеров, чтобы избежать дублей.<br><br>РЕШЕНИЕ: <br><br>1. В предопределенной процедуре формы элемента справочника ПриОткрытии() пишем:<br><br> Если ПустоеЗначение(Наименование) = 1 Тогда<br><br> ПроверятьДубль = 1;<br><br> КонецЕсли; <br><br>Это для того, чтобы проверка не включалась в случае, если мы просто открываем существующий элемент справочника, а потом его сохраняем. Если не сделать такой проверки, то всегда при сохранении существующего элемента справочника будет выдаваться сообщение «Такой номер уже есть» и т.д.<br><br>2. В предопределенной процедуре элемента справочника ПриЗаписи() пишем:<br><br> Если ПроверятьДубль = 1 Тогда<br><br> Если ПроверкаДублей(Наименование) = 1 Тогда<br><br> Сообщить(«Такой номер телефона уже имеется в базе»);<br><br> Наименование = «»»»;<br><br> СтатусВозврата(0);<br><br> КонецЕсли; <br><br> КонецЕсли; <br><br>Ну здесь вроде все понятно без комментариев. А функция ПроверкаДублей() выглядит так:<br><br> спр = СоздатьОбъект(«Справочник.ТелефонныеНомера»);<br><br> спр.ВыбратьЭлементы();<br><br> Если спр.НайтиПоНаименованию(Телефон) = 1 Тогда<br><br> Возврат 1;<br><br> Иначе<br><br> Возврат 0;<br><br> КонецЕсли; <br><br>Ничего сложного:)) Тут есть один нюанс, но т.к. в моей задаче такой ситуации не возникнет, я не стал делать дополнительные проверки, хотя, это не совсем правильно — нужно по максимуму все предусматривать и поддерживать логическую целостность независимо от того, кто работает с программой. Обязательно допишу чуть позже. С удовольствием посмотрю любой другой способ(-ы) <br><br>Один из простейших способов — сделать номер телефона кодом, тогда будет автоматическая проверка на уникальность, но в моей задаче так не получится. Мне нужно именно наименование. Специфика такая ))»
Показывать по
10
20
40
сообщений
-
Добрый день. Имеется самописный конфиг на платформе 8.2, возможно ли настроить проверку уникальности реквизита справочника какими-нибудь встроенным способом или данная проверка осуществляется только для номера?
Вопрос №2: Насколько правильно будет писать запрос ко всем элементам справочника (не более 10 000 объектов) перед записью, с целью проверки уникальности данного реквизита, или лучше завести регистр сведений? -
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
Во первых что это за потребность такая? Что там уникального нужно хранить?
Скорость чтения данных из таблиц не сильно зависит от того справочник или регистр сведений.
-
Online
nbIpKuH_BaH9I
Модераторы
Команда форума
Модератор- Регистрация:
- 16 сен 2009
- Сообщения:
- 8.096
- Симпатии:
- 549
- Баллы:
- 204
Ну разве что виртуальная таблица
Делайте свою проверку перед записью. Ничего страшного в этом нет. Только сильно не переусердствуйте.
-
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
Виртуальная да… но для РС это срезы… тут вроде как про контроль уникальности речь… срезы мало чем помогут.
-
Offline
rifat
Опытный в 1С- Регистрация:
- 13 июн 2013
- Сообщения:
- 99
- Симпатии:
- 2
- Баллы:
- 29
Можно включить индексирование того реквизита справочника, по которому проверяете уникальность, если конечно это целесообразно.
-
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
И зачем индексировать то что индексировать в принципе не нужно?
-
Offline
rifat
Опытный в 1С- Регистрация:
- 13 июн 2013
- Сообщения:
- 99
- Симпатии:
- 2
- Баллы:
- 29
Если будет производиться поиск по справочнику по этому реквизиту, разве не ускорит поиск? Если ошибаюсь поправьте.
-
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
Может и будет производится поиск быстрее. Но прежде чем включить индексирование нужно без включенного режима посмотреть. Может скорость работы будет приемлемой и дополнительно ничего индексировать не нужно.
-
Online
nbIpKuH_BaH9I
Модераторы
Команда форума
Модератор- Регистрация:
- 16 сен 2009
- Сообщения:
- 8.096
- Симпатии:
- 549
- Баллы:
- 204
Это только усугубит ситуацию. Для создания индекса система выделяет определенные ресурсы. У справочника нет так много комбинаций полей таблицы как скажем у регистра с 10 измерениями. Так что индекс вообще здесь не нужен.
-
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
А ещё нужно и тип реквизита знать. А то если там строка неограниченной длинны например… то индексы раздует так что потом база будет вешать неприлично много.
Как пример у меня есть база. Из за кривой структуры индексировались поля неограниченной длинны. Размер базы был более 70 Гб.
Хотя там реальных данных на 1.5 Гб. -
Всем спасибо, проверять на уникальность нужно строку 13-14 символов, буду делать через запрос к справочнику перед записью.
Элементов в справочнике будет не более 10 000, а в 99% случаев даже не более 1000, думаю можно будет справиться и без индексов. -
Offline
TODD22
Профессионал в 1С
Команда форума- Регистрация:
- 23 фев 2009
- Сообщения:
- 5.064
- Симпатии:
- 185
- Баллы:
- 104
А что на уникальность то проверяешь?
-
строку 13-14 символов, штрих-код товара
-
Offline
rshakiro
Профессионал в 1С
Команда форума- Регистрация:
- 17 мар 2011
- Сообщения:
- 2.261
- Симпатии:
- 145
- Баллы:
- 104
Обычно ШК создается на основе кода элемента справочника(который уникален)…
-
Online
nbIpKuH_BaH9I
Модераторы
Команда форума
Модератор- Регистрация:
- 16 сен 2009
- Сообщения:
- 8.096
- Симпатии:
- 549
- Баллы:
- 204
Штрихкоды хранить только в регистре сведений. Посмотрите этот механизм в любой типовой со складом. УТ например. Там прекрасно этот механизм реализован.
-
Offline
LordMaverick
Профессионал в 1С- Регистрация:
- 17 мар 2014
- Сообщения:
- 4.000
- Симпатии:
- 465
- Баллы:
- 104
не разумно, это в 7.7 его можно было ещё в реквизите справочника товара хранить
а сейчас, как уже сказали, это удобнее в РСа ещё бывают ситуации когда на одну позицию одновременно есть более одного ШК
pin1986 |
|
||
---|---|---|---|
Доброго дня! Прошу не судить строго, я новичок в 1С — учусь! Вопрос след. плана. нужен модуль для проверки уникальности имени в справочниках (номенклатура)- Создаю общий модуль Код 1C v 8.3
В модуле объекта Код 1C v 8.3
В итоге номенклатура с одинаковым именем не создается, но тогда и ничего не удаляется. Помогите, пожалуйста. |
Yandex |
|
||
---|---|---|---|
pin1986 |
|
||
---|---|---|---|
Вопрос закрыт! |
Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку |