Имя: Пароль:
1C
1С v8
Не работает проверка справочника на уникальность имени элемента
,
0 0level
 
15.10.13
11:04
Здравствуйте.

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





Функция ЗаполнитьДок(ТаблицаДанных)
     -----------------------------------------------------
    Для Каждого Строк из ТаблицаДанных Цикл
        --------------------------------------------
            
        //вставка
        СоздатьСпециальность(строк.специальность, Объект.Организация.Наименование);
        СоздатьКатегорию(строк.категория, Объект.Организация.Наименование);
        СоздатьВидДолжности(строк.виддолжности, Объект.Организация.Наименование);
          // конец вставка
        
        
        
        ////
        -------------------------
    КонецЦикла;
         НовыйДокумент.Записать();
         НовыйДокумент.Ссылка.ПолучитьФорму().Открыть();
КонецФункции
1 Nenaviwu1c20
 
15.10.13
11:07
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоКоду (FindByCode)
Синтаксис:

НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
Параметры:

<Код> (обязательный)

Тип: Число; Строка.
Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<ПоискПоПолномуКоду> (необязательный)

Тип: Булево.
Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь
<Родитель> (необязательный)

Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)

Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка.
Если для справочника код не задан (длина = 0), то будет возвращено Неопределено.
Описание:

Осуществляет поиск элемента по его коду.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

СтрокаКода = "840";
Валюты = Справочники.Валюты;
НайденнаяСсылка = Валюты.НайтиПоКоду(СтрокаКода);
Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда
    Сообщить("Валюты """ + СтрокаКода + """ еще нет");
КонецЕсли;
2 hhhh
 
15.10.13
11:08
так у вас Владелец - это ссылка или наименование всё-таки?
3 Nenaviwu1c20
 
15.10.13
11:08
СправочникМенеджер.<Имя справочника>.НайтиПоНаименованию (CatalogManager.<Имя справочника>.FindByDescription)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоНаименованию (FindByDescription)
Синтаксис:

НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
Параметры:

<Наименование> (обязательный)

Тип: Строка.
Строка, содержащая искомое наименование.
<ТочноеСоответствие> (необязательный)

Тип: Булево.
Определяет режим поиска по полному соответствию.
Поиск будет успешным, если строка поиска: в случае значения параметра Ложь - будет соответствовать левой части наименования; в случае значения параметра Истина - будет полностью совпадать с наименованием (за исключением "хвостовых" пробелов в наименовании).
Значение по умолчанию: Ложь
<Родитель> (необязательный)

Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)

Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0), то будет возвращено Неопределено.
Описание:

Осуществляет поиск элемента по его наименованию.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если существует несколько элементов с указанным наименованием, то будет найден только один из них.
Пример:

СтрокаНаименования = "USD";
Валюты = Справочники.Валюты;
НайденнаяСсылка = Валюты.НайтиПоНаименованию(СтрокаНаименования);
Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда
    Сообщить("Валюты """ + СтрокаНаименования + """ еще нет");
КонецЕсли;
4 Nenaviwu1c20
 
15.10.13
11:08
(2) Зачем запрос лишний.Пускай по наименование ищет
5 0level
 
15.10.13
11:09
Блин как тут редактировать тему??? )))
Вопрос в следующем. Процедура проверяет есть ли совпадение по имени и владельцу если нет то создает данный элемент. Данные загружаются из эксель. В итоге данные в справочнике дублируются, создается несколько элементов с одним именем.
6 Nenaviwu1c20
 
15.10.13
11:09
там и владелейц есть
7 Nenaviwu1c20
 
15.10.13
11:09
(5) Чувак ты как в экзеле проверяешть владельца?
8 Nenaviwu1c20
 
15.10.13
11:10
Фактичечки владелец - это ссылка на элемент,а я думаю что твой владелец это тип строка с наименованием владельца
9 0level
 
15.10.13
11:10
владелец организация, она выбирается на форме обработки
10 hhhh
 
15.10.13
11:11
(9) тогда вот это нереальный бред у вас

            НоваяКатегория.Владелец= Справочники.Организации.НайтиПоНаименованию(Владелец).ПолучитьОбъект().Ссылка;


должно быть

НоваяКатегория.Владелец=Владелец;

или

Справочники.Организации.НайтиПоНаименованию(Владелец)
11 hhhh
 
15.10.13
11:11
да, НоваяКатегория.Владелец=Владелец;
12 0level
 
15.10.13
11:18
НоваяКатегория.Владелец=Владелец  не работает. я думаю по тому  что в процедуру под именем перем владелец передается Объект.Организация.Наименование
13 hhhh
 
15.10.13
11:21
(12) тогда вот здесь бредите

      |    И Категория.Владелец = &Владелец";


ну как строка может быть владельцем чего-то?
14 0level
 
15.10.13
11:27
Использовал вместо запроса пример
СтрокаНаименования = "USD";
Валюты = Справочники.Валюты;
НайденнаяСсылка = Валюты.НайтиПоНаименованию(СтрокаНаименования);
Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда
    Сообщить("Валюты """ + СтрокаНаименования + """ еще нет");
КонецЕсли;

Теперь работает!  Но хотелось бы разобраться почему запрос лажает!

есть точно такие же запросы по другим справочникам и все работает
15 0level
 
15.10.13
11:28
Процедура СоздатьКатегорию2 (наименование, Владелец)
    
Категории = Справочники.КвалификационнаяКатегорияСотрудника;
НайденнаяСсылка = Категории.НайтиПоНаименованию(наименование);
Если НайденнаяСсылка = категории.ПустаяСсылка() Тогда
НоваяКатегория = Справочники.КвалификационнаяКатегорияСотрудника.СоздатьЭлемент();
             НоваяКатегория.Владелец= Справочники.Организации.НайтиПоНаименованию(Владелец).ПолучитьОбъект().Ссылка;
            
             НоваяКатегория.Наименование = наименование;
      НоваяКатегория.Записать();
    
КонецЕсли;
    
КонецПроцедуры
16 0level
 
15.10.13
11:30
Спасибо . вот вчем было

  |    И Категория.Владелец.Наименование = &Владелец";
  вместо
  |    И Категория.Владелец = &Владелец";
17 hhhh
 
15.10.13
11:30
(15)  Запрос.Параметры.Вставить("Владелец", Владелец);

Владелец у вас символьная строка. А должно быть ссылка.
18 0level
 
15.10.13
11:30
тоесть наоборот
19 Defender aka LINN
 
15.10.13
11:44
(12) Феерично