|
Запрет на дублирование наименования номенклатуры | ☑ | ||
---|---|---|---|---|
0
Яна93
10.02.15
✎
16:26
|
Добрый день!
У меня такой вопрос.. в Бухгалтерии 3.0 хочу прописать на запрет дублирования наименования в справочнике номенклатуры.. вот что есть у меня сейчас: В модуле формы элемента в процедуру Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) добавила следующую строчку.. Отказ = ОбщегоНазначения.ПроверитьНаИдентичностьНаименования(ЭтотОбъект); А в общем модуле ОбщегоНазначения добавила функцию Функция ПроверитьНаИдентичностьНаименования(СамОбъект) экспорт Отказ = Ложь; Если СамОбъект.ЭтоНовый() тогда Запрос = новый запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Родитель |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Наименование = &Наименование"; Запрос.УстановитьПараметр("Наименование", СамОбъект.Наименование); Результат = Запрос.Выполнить().Выбрать(); Если НЕ результат.Количество() = 0 тогда Сообщить("Номенклатура с таким именем уже существует:"); Пока результат.Следующий() цикл Сообщить(Строка(результат.ссылка)+" в папке: "+Строка(Результат.родитель)); КонецЦикла; Отказ = истина; КонецЕсли; КонецЕсли; Возврат (Отказ); КонецФункции но выходит сообщение об ошибке {ОбщийМодуль.ОбщегоНазначения.Модуль(2957)}: Метод объекта не обнаружен (ЭтоНовый) Если СамОбъект.ЭтоНовый() тогда |
|||
1
Chameleon1980
10.02.15
✎
16:30
|
запросом не?
|
|||
2
Яна93
10.02.15
✎
16:33
|
(1) Запросом я сравниваю наименования, если присутствует - то вывожу сообщение пользователю..
|
|||
3
GreatOne
10.02.15
✎
16:34
|
с упр. формами не работаю,но вроде там реквизитформывзначение()
|
|||
4
alle68
10.02.15
✎
16:34
|
(0) Посмотри на 2-й параметр.
|
|||
5
piter3
10.02.15
✎
16:35
|
могу ошибаться,но ТекущийОбъект.ЭтоНовый()
|
|||
6
1976vas
10.02.15
✎
16:36
|
СамОбъект - скорее всего ссылка
|
|||
7
Chameleon1980
10.02.15
✎
16:37
|
именно объект
СправочникОбъект.<Имя справочника>.ЭтоНовый (CatalogObject.<Имя справочника>.IsNew) СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>) ЭтоНовый (IsNew) Синтаксис: ЭтоНовый() Возвращаемое значение: Тип: Булево. Истина - изменяется еще ни разу не записанный элемент; Ложь - элемент уже записан. Описание: Определяет, записан ли элемент в базу данных. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: Если Объект.ЭтоНовый() Тогда Объект.Наименование = "Новый элемент"; КонецЕсли; может найтипонаименоанию ? |
|||
8
Chameleon1980
10.02.15
✎
16:37
|
может найтипонаименоанию ?
|
|||
9
GreatOne
10.02.15
✎
16:38
|
Да нет же объектов в форме
|
|||
10
Яна93
10.02.15
✎
16:39
|
(5) {ОбщийМодуль.ОбщегоНазначения.Модуль(2957,7)}: Переменная не определена (ТекущийОбъект)
Если <<?>>ТекущийОбъект.ЭтоНовый() тогда (Проверка: Сервер) |
|||
11
Яна93
10.02.15
✎
16:40
|
(8) так?
Если СамОбъект.ЭтоНовый() тогда Контр = Справочники.Номенклатура.НайтиПоНаименованию("Наименование", СамОбъект.Наименование); |
|||
12
Kain_wrath
10.02.15
✎
16:40
|
Проверку ЭтоНовый() перекинь в процедуру ПередЗаписью и оттуда уже вызывай свою проверку
|
|||
13
salvator
10.02.15
✎
16:41
|
(10) А передаешь как, так?
Отказ = ОбщегоНазначения.ПроверитьНаИдентичностьНаименования(ТекущийОбъект); |
|||
14
Kain_wrath
10.02.15
✎
16:41
|
ПередЗаписью клиента, а не сервера
|
|||
15
anatoly
10.02.15
✎
16:42
|
Пол: Женский
Род занятий: Бухгалтер кто пустил бухгалтершу в конфигуратор??? |
|||
16
Яна93
10.02.15
✎
16:42
|
сколько вариантов..сейчас попробую))
|
|||
17
Яна93
10.02.15
✎
16:43
|
(15) я курсы проходила))
|
|||
18
Kain_wrath
10.02.15
✎
16:43
|
фотка решает
|
|||
19
GreatOne
10.02.15
✎
16:45
|
там нет объекта. я не прав или меня упорно никто не видит? Дайте знать, уже самому интересно!
|
|||
20
alle68
10.02.15
✎
16:47
|
(19) Интересно - смотри (13) или (4).
|
|||
21
GreatOne
10.02.15
✎
16:48
|
(20) То есть вас тоже не замечают?
|
|||
22
Яна93
10.02.15
✎
16:49
|
(13) сразу сработал твой вариант!! Спасибо всем огромное!))
С ума сойти как приятно когда код работает)))) |
|||
23
Злопчинский
10.02.15
✎
16:49
|
"Печенье Юбилейное" и "Печенка Юбиленинка" - поймет что один товар? ;-)
|
|||
24
Яна93
10.02.15
✎
16:50
|
(23) вот с этим уже ни чего не поделаешь)) возможно крутой программист сможет..но не я))
|
|||
25
alle68
10.02.15
✎
16:52
|
(22) Молодец. Не учла такой вариант: наименование стало одинаковым в результате изменения элемента, когда объект уже не нов.
|
|||
26
anatoly
10.02.15
✎
16:52
|
(24) это (23) уже никому не нужные извращения...
вообще номенклатура по артикулу должна однозначно различаться. |
|||
27
Яна93
10.02.15
✎
16:59
|
(25) действительно, когда объект уже записан то модуль его не замечает)) ну чуть позже попробую осилить..пока наслаждаюсь маленькой победой))
|
|||
28
salvator
10.02.15
✎
17:01
|
(27) Просто убери условие на "ЭтоНовый" и будет тебе еще одна маленькая победа.
|
|||
29
Яна93
10.02.15
✎
17:06
|
(28) {ОбщийМодуль.ОбщегоНазначения.Модуль(2957)}: Преобразование значения к типу Булево не может быть выполнено
Если ТекущийОбъект тогда а тут уже ругаться начал..может лучше оставить ЭтоНовый? |
|||
30
alle68
10.02.15
✎
17:07
|
(27) Завидую!
(28) Этого недостаточно. Мало того, это запретит любые изменения. |
|||
31
Яна93
10.02.15
✎
17:07
|
(28) тем более получается он каждый раз будет проверять справочники при закрытии..а в нашем случае будет проверять лишь новые..
|
|||
32
salvator
10.02.15
✎
17:09
|
(30) Ага, точно. Это я погорячился :))
|
|||
33
anatoly
10.02.15
✎
17:19
|
(31) не при закрытии а перед записью надо проверять.
|
|||
34
salvator
10.02.15
✎
17:43
|
(31) Можно использовать свойство Модифицированность.
Если оно равно Истина, то проводить проверку на наименование. Только добавить в запрос условие на неравенство проверяемого объекта. Чтобы при установке прежнего наименования не вылезло ошибки. |
|||
35
Garykom
гуру
10.02.15
✎
17:46
|
(0) а если " " (пробел) лишний в середине, начале или конце наименования добавят?
это дубля или нет? может еще 220 к клаве и током автоматом бить когда такое пытаются делать? )) |
|||
36
Garykom
гуру
10.02.15
✎
17:47
|
(35)+ хотя не,
лучше сразу на тревожную кнопку идет вызов дежурного админа баз данных и группы оперативного реагирования в лице сисадмина и команды программистов |
|||
37
anatoly
10.02.15
✎
17:48
|
(35) идея в (23) еще суровее ))
можно до бесконечности выдумывать критерии "одинаковости". например: большие и маленькие буквы, латиница и похожие кириллица... |
|||
38
Garykom
гуру
10.02.15
✎
17:51
|
(37)+ ага а потом "пойдет у меня все равно почти дубли заводят"
и как сделать расстояние Левенштайна и прочие fuzzy string search (методы нечеткого поиска и сравнения)? |
|||
39
SUA
10.02.15
✎
17:51
|
Не трогайте типовую бухгалтерию ей еще жить и обновляться хочется!!!
а так Функция ПроверитьНаИдентичностьНаименования(СамОбъект) экспорт Отказ = Ложь; Запрос = новый запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Родитель.Наименование КАК Группа |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Наименование = &Наименование И Номенклатура.Ссылка<>&Ссылка"; Запрос.УстановитьПараметр("Наименование", СамОбъект.Наименование); Запрос.УстановитьПараметр("Ссылка", СамОбъект.Ссылка); Результат = Запрос.Выполнить().Выбрать(); Если НЕ результат.Количество() = 0 тогда Сообщить("Номенклатура с таким именем уже существует:"); Пока результат.Следующий() цикл Сообщить(СамОбъект.Наименование+" в папке: "+Результат.Группа); КонецЦикла; Отказ = истина; КонецЕсли; Возврат (Отказ); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |