|
v7: запрет на создание одинаковых элементов справочника | ☑ | ||
---|---|---|---|---|
0
СовсемЗеленый
29.08.11
✎
01:38
|
Как сделать чтобы при создании нового элемента справочника, производилась проверка на уникальность наименования?
|
|||
1
Sereja
29.08.11
✎
01:39
|
(0) Смотри процедуру ПриЗаписи()
|
|||
2
Cthulhu
29.08.11
✎
01:41
|
ох, замордуют тебя одинаково выглядящими буквами различных языковых алфавитов.
|
|||
3
СовсемЗеленый
29.08.11
✎
01:59
|
что призаписи я понял, но как указать что с чем сравнивать?((((
|
|||
4
Никола_
Питерский 29.08.11
✎
02:07
|
(3) зачет !!!
|
|||
5
Sereja
29.08.11
✎
02:17
|
(0) Ну судя по (0) делай запрос по справочнику, отбирай все элементы с твоим наименованием. Если Запрос вернет тебе больше чем одну запись, следовательно такое наименование уже есть
|
|||
6
Anarki
29.08.11
✎
02:28
|
(0)Почему больше чем одну запись? По идее хотя бы одну. Создаваемый элемент то еще не записан.
|
|||
7
Sereja
29.08.11
✎
02:32
|
(6) А если уже записан ? то при перезаписи ссылка на самого себя точно будет. Короче в условии нужнно вставлять неравенство на ТекущийЭлемент()
|
|||
8
Anarki
29.08.11
✎
02:33
|
А вообще если справочник не сильно большой то.
Спр = СоздатьОбъект("Справочник.Контрагенты"); Спр.ВыбратьЭлементы() Пока Спр.ПолучитьЭлемент() = 1 Цикл СпрТек = Спр.ТекущийЭлемент(); Если СпрТек.Наименование = Наименование Тогда Сообщить("!!!",!); СтатусВозврата(0); Возврат; КонецЕсли; КонецЦикла Типо того. |
|||
9
Anarki
29.08.11
✎
02:36
|
(8)Оу, куйню написал)) Спр.НайтиПоНаименованию(Наименование) легче.
|
|||
10
Cthulhu
29.08.11
✎
02:37
|
(8): уже записанный - при записи сам себя найдет, ругнется - и алё.
|
|||
11
Sereja
29.08.11
✎
02:38
|
(9) Делайте запросом и все у вас будет хорошо
|
|||
12
Cthulhu
29.08.11
✎
02:40
|
(11): тогда уж прямым, с LIKE
|
|||
13
СовсемЗеленый
29.08.11
✎
15:05
|
(8) примерно так же сначала и написал, ругалосё.
(11) попробую сделать прямым запросом |
|||
14
chief accountant
29.08.11
✎
15:30
|
(13) прямой запрос-то зачем?
|
|||
15
ParaWiz
29.08.11
✎
15:40
|
плохо другое, не панацея это, по одной конторе помню
можно придумать вариантов 20 разных как назвать "водка беленькая" даже если жестко административными мерами приказом как должна наименоваться номенклатура |
|||
16
СовсемЗеленый
29.08.11
✎
21:38
|
(14) почему бы и нет )))
(15) та |
|||
17
Sk0rp
29.08.11
✎
22:15
|
(15) StrMatch
|
|||
18
Aleksey
29.08.11
✎
22:18
|
(12) А like зачем? Оно же тормознутое
|
|||
19
GreyK
29.08.11
✎
22:27
|
(0) После того, как ты сообщишь что такое уникальность в твоем справочнике, будет больше нужных тебе ответов.
|
|||
20
Лефмихалыч
29.08.11
✎
22:29
|
(0) зачем? Чтобы нельзя было завести два принципиально разных ООО "Вектор"?
|
|||
21
Cthulhu
30.08.11
✎
04:11
|
по уникальности регистрационных кодов контролируй.
|
|||
22
СовсемЗеленый
30.08.11
✎
17:34
|
(20) Допустим что принципиально разных с одним наименованием нет
|
|||
23
FN
30.08.11
✎
17:38
|
(22)
ООО Вектор ООО вектор ООО ВЕКТОР ООО "Вектор" Вектор ООО Общество с ограниченной отвественностью "Вектор" Вектор ООО это дубли? Составить правила внесения в базу. После этого дубли сами "вылезут" |
|||
24
Смотрящий от 1С
30.08.11
✎
17:40
|
давно когда то писал
Если (НовыйКонтрагент = 1) ИЛИ (Скопирован = 1) Тогда Контр = СоздатьОбъект("Справочник.Контрагенты"); рс = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = "-- qryMaker:Отчет1.2008.12.18.18.09.48 |SELECT Контрагенты.ID [Ссылка $Справочник.Контрагенты] | ,$Контрагенты.ИНН ИНН | , Контрагенты.PARENTID [Родитель $Справочник.Контрагенты] |FROM $Справочник.Контрагенты AS Контрагенты With (NOLOCK) |"; ТекстЗапроса=ТекстЗапроса+"WHERE (Контрагенты.ISMARK = 0) "; // Если ПустоеЗначение(Наименование) = 0 Тогда ТекстЗапроса=ТекстЗапроса+" AND ( Rtrim(Контрагенты.DESCR) LIKE :Наименование) "; // КонецЕсли; рс.УстановитьТекстовыйПараметр("Наименование", "%"+Строка(СокрЛП(Наименование))+"%"); тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); Если тз.КоличествоСтрок() > 0 Тогда Сообщить("В справочнике найдены похожие контрагенты. Для открытия формы выберите строку и нажмите ОК."); Сообщить("Для продолжения ввода нажмите ОТМЕНА"); Сообщить("Ввод дублей контрагентов ЗАПРЕЩЕН!"); Если тз.ВыбратьСтроку(ВыбраннаяСтрока,"Похожий контрагент уже есть!",60) = 1 Тогда тз.ПолучитьСтрокуПоНомеру(ВыбраннаяСтрока); Если Контр.НайтиЭлемент(Тз.Ссылка)>0 Тогда ОткрытьФорму(Контр.ТекущийЭлемент(),,0); ОчиститьОкноСообщений(); СтатусВозврата(0); Возврат; КонецЕсли; Иначе ОчиститьОкноСообщений(); КонецЕсли; //здесь надо закрыть активную форму // ТекущийЭлемент().Удалить(0); // Форма.Закрыть(); КонецЕсли; |
|||
25
alex-pro
30.08.11
✎
17:45
|
Зачем такие сложности?
запретите английские буквы в наименовании, удаляйте лишние пробелы при записи и проверяйте обычным запросом. |
|||
26
alex-pro
30.08.11
✎
17:46
|
А если приемлимы условия
НовыйКонтрагент = 1) ИЛИ (Скопирован = 1) то вообще НайтиПоНаименованию отлично сработает. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |