Имя: Пароль:
1C
1С v8
Контроль уникальности поля "Наименование" в справочнике
,
0 lucifer
 
15.05.12
09:17
Уникальность проверяется по коду, а можно ли сделать проверку уникальности по полю "Наименование" я имею ввиду может в конфигураторе есть опция такая, или это только программно можно сделать?
1 andrewks
 
15.05.12
09:18
программно
2 a_alenkin
 
15.05.12
09:25
Сделай очень длинный текстовый код и назови "Наименование"
Как справочник Пользователи в типовых
3 Amra
 
15.05.12
09:27
(0) Программно. Можешь посмотреть в УТ 11, там реализован контроль наименований номенклатуры и характеристик
4 lucifer
 
15.05.12
09:32
спасибо
5 andrewks
 
15.05.12
09:34
(2) плохая идея, на мой взгляд. для пользаков, может, и сойдёт, а в общем - плохая
6 vmv
 
15.05.12
09:47
запросом проверять и все дела, спользуя ПОДОБНО для "нечеткой" уникальности.

менеджеры объектов и метод НайтиПоНаименованию работатют аналогично
7 lucifer
 
15.05.12
10:03
делаю так
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
 Предупреждение(ТекущийЭлемент.Наименование);
КонецПроцедуры

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


ругается что нет поле Наименование, как мне передать в функцию наименование?
8 andrewks
 
15.05.12
10:05
просто ссылку на эл-т передавай
9 Aprobator
 
15.05.12
10:05
(7) так откель ему взяться на клиенте то?
10 lucifer
 
15.05.12
10:07
(8) как?
11 lucifer
 
15.05.12
10:07
(9) а как быть?
12 Aprobator
 
15.05.12
10:12
либо просто:

....
Предупреждение(ТекущийЭлемент); // представление все равно будет с наименования считано, ну не код же у тебя выбран для представления
....


либо

...
Предупреждение(СчитатьНаименование(ТекущийЭлемент));
...

&НаСервереБезКонтекста
Функция СчитатьНаименование(СсылкаНаЭлемент)
     Возврат СсылкаНаЭлемент.Наименование
КонецФункции
13 Aprobator
 
15.05.12
10:15
а млин. У тебя в коде описка. Вместо Предупреждение надо ПроверкаНаименования, но суть та же.
14 lucifer
 
15.05.12
10:22
(13)

Ошибка при вызове метода контекста (СчитатьНаименование)
   город=СчитатьНаименование(ТекущийЭлемент);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ПолеФормы'
15 lucifer
 
15.05.12
10:59
нет идей?
16 lucifer
 
15.05.12
11:17
сделал по другому в функцию ничего не передаю а в самой функции
Запрос.УстановитьПараметр("ГородСущ", Объект.Наименование);
все работает
17 Aprobator
 
15.05.12
14:38
тогда, что такое у тебя ТекущийЭлемент?
18 Aprobator
 
15.05.12
14:43
уж не ПолеФормы (свойство формы с таким именем есть - ссылается на ПолеФормы) у тебя там?
19 andrewks
 
15.05.12
14:44
(18) конечно поле, см (14)
20 Aprobator
 
15.05.12
16:03
(19) ну тады кирдык. Через текущий элемент то по любому не взлетит. Либо Объект, если это форма элемента справочника, ну а если форма списка, то там вроде в сторону ТекущиеДанные смотреть надо. А вообще народ вообще разучился читать СП, пользоваться отладчиком и думать своей головой.