Имя: Пароль:
1C
1С v8
Контроль уникальности наименования
,
0 ЧайнаяРоза
 
29.11.13
09:49
Здравствуйте!
Есть обработчик события,который проверяет уникальность наименования элемента справочника Группа:

Процедура ПередЗаписью(Отказ)группы
    Если ЭтоНовый()Тогда
        Запрос=Новый Запрос
        ("ВЫБРАТЬ Наименование ИЗ Справочник.Группа ГДЕ Наименование=&Наименование");
        Запрос.УстановитьПараметр("Наименование", Наименование);
        Результат=Запрос.Выполнить();
        Если НЕ Результат.Пустой() Тогда
            Сообщить("Группа с таким наименованием уже есть!");
            Отказ=Истина;
        КонецЕсли;
    КонецЕсли;            
КонецПроцедуры

Вставила его в модуль объекта справочника Группа. Все работает верно, но при попытке записи элемента с неуникальным наименованием появляется не только сообщение:"Группа с таким наименованием уже есть!", но и появляется окно 1С:Предприятие - "Не удалось записать:"Группа!". Подскажите,пожалуйста, как устранить это окно
1 tixis
 
29.11.13
09:54
Так в самом справочнике стоит конроль уникальности, в принцыпе ваша проверка не нужна
2 Ненавижу 1С
 
гуру
29.11.13
09:55
(1) не бреши ))
3 Галахад
 
гуру
29.11.13
09:55
Отказ = Ложь; :-)
4 craxx
 
29.11.13
09:56
(1) Уникальность наименования!
5 stix2010
 
29.11.13
09:57
это системное сообщение при Отказ=Ложь
6 ЧайнаяРоза
 
29.11.13
09:57
Если Отказ=Ложь поставить, то не будет смысла в процедуре)
7 Defender aka LINN
 
29.11.13
09:58
(0) А если я содам группу, запишу, а потом изменю ей имя на уже существующее?
8 ЧайнаяРоза
 
29.11.13
09:58
И как можно сделать так, чтобы это системное сообщение не выдавалось?
9 hhhh
 
29.11.13
09:58
(5) нет
10 ЧайнаяРоза
 
29.11.13
09:59
А как же тогда организовать контроль уникальности наименования?
11 stix2010
 
29.11.13
09:59
курить обработчик в форме
12 stix2010
 
29.11.13
10:02
или подписку
13 ЧайнаяРоза
 
29.11.13
10:03
Если в модуль формы элемента поместить процедуру, то выдаются ошибки:
Запрос.УстановитьПараметр("Наименование", <<?>>Наименование); (Проверка: Сервер)
{Справочник.Группа.Форма.ФормаЭлемента.Форма(18,8)}: Процедура или функция с указанным именем не определена (ЭтоНовый)
        Если <<?>>ЭтоНовый()Тогда (Проверка: Сервер)
14 ЧайнаяРоза
 
29.11.13
10:07
stix2010, Подписку - это как?)
15 stix2010
 
29.11.13
10:09
Вам бы книжек почитать
16 stix2010
 
29.11.13
10:10
из серии ЖКК
17 Kupogun
 
29.11.13
10:16
по меньшей мере надо проверить изменение наименования там же

если Ссылка.Наименование <> Наименование тогда
        Запрос=Новый Запрос
        ("ВЫБРАТЬ Наименование ИЗ Справочник.Группа ГДЕ Наименование=&Наименование");
        Запрос.УстановитьПараметр("Наименование", Наименование);
        Результат=Запрос.Выполнить();
        Если НЕ Результат.Пустой() Тогда
            Сообщить("Группа с таким наименованием уже есть!");
            Отказ=Истина;
        КонецЕсли;
КонецЕсли;
18 kosts
 
29.11.13
10:16
А в чем проблема то. Это же наверное редкое событие, запись группы с совпадающим наименованием. Пусть себе появляется предупреждение...
Забей.
Лучше определи как сказали возможность переименовать существующий
19 mzelensky
 
29.11.13
10:17
(0) Еще небось и в модуле формы это делаете... :(
20 Kupogun
 
29.11.13
10:19
где фото?
21 kosts
 
29.11.13
10:19
(19) а почему бы и нет зависит от общей задачи
22 mzelensky
 
29.11.13
10:21
(21) Потому что это ЛАЖА! Получается разное поведение в зависимости от того, откуда записывается справочник.
23 mzelensky
 
29.11.13
10:22
(20) Что-то я смотрю на форуме прям наплыв женской части начеления...и все без фото...

Даже не знаю - радоваться или опечалиться.
24 stix2010
 
29.11.13
10:23
это бородатые админы
25 mzelensky
 
29.11.13
10:26
(24) Судя по вопросам очень может быть
26 stix2010
 
29.11.13
10:26
Запрос.УстановитьПараметр("Наименование", <<?>>Наименование); (Проверка: Сервер)

Это чо УФ?

Не знать, что такое подписки стыдно на сегодня, Общие-> подписки и события
27 kosts
 
29.11.13
10:29
(22) И че. Это не документ, что бы по разному проводиться. Часть реквизитов проверяем в форме, часть в объекте, зависит от задачи и целей.
28 mzelensky
 
29.11.13
10:31
(27) Извините, коллега, но вынужден не согласиться.
29 stix2010
 
29.11.13
10:42
(17) у Вас методы объектов + видимость не выполняются/видятся скорее всего по причине отсутствия основного реквизита объекта в данной форме

(28) с точки зрения кошерности кода при поставленных условиях я бы проверял в подписке ПередЗаписью
30 kosts
 
29.11.13
10:43
(28) Немного изменим изначальную задачу, скажем, нужно предупредить пользователя о существовании совпадающего элемента и выдать подтверждение записи. Как через модуль объекта это сделать?
31 Рэйв
 
29.11.13
10:45
(10)Сделай код строковым и подставляй его вместо наименования.Система сама будет следить за уникальностью .
32 stix2010
 
29.11.13
10:53
(30) Хы, а что нельзя?
Что мешает в модуле объекта Вопрос() использовать?
Хотя за такое руки надо сразу отрывать, потому как метод в транзакции идет.
Хотя при Отказ=истина, второе сообщение так и останется
33 zakidonoff
 
29.11.13
10:54
(0) Сообщить(Не удалось записать:""Группа!""");
Тогда предупреждением будет: не удалось записать, а в строке - почему не удалось.
Или УФ?
34 ЧайнаяРоза
 
29.11.13
20:17
Всем спасибо за ответы!
Проблема решена!
В форме объекта написала процедуру:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Отказ=НЕ (Справочники.Группа.ПустаяСсылка()=Справочники.Группа.НайтиПоНаименованию(СокрЛП(Объект.Наименование),Истина));
    Если Отказ=Истина Тогда
        Сообщить("Группа с таким наименованием уже есть!");
    КонецЕсли;
КонецПроцедуры
35 Мимохожий Однако
 
29.11.13
21:01
Вместо НЕ Справочники.Группа.ПустаяСсылка()=Справочники.Группа.НайтиПоНаименованию(СокрЛП(Объект.Наименование)
логичнее использовать
НЕ Справочники.Группа.НайтиПоНаименованию(СокрЛП(Объект.Наименование) = Неопределено
...
так в СП