Как найти все наименования в справочнике 1с

  • Как создать элемент (группу) справочника?
  • Как найти элемент справочника?
  • Как удалить элемент справочника?
  • Как перебрать элементы справочника?
  • Как выбрать все элементы из определенной группы?
  • Как перебрать элементы подчиненного справочника с помощью запроса?
  • Как перебрать элементы подчиненного справочника с помощью выборки справочника?
  • Как открыть форму списка (элемента) справочника?
  • Как добавить запись в табличную часть элемента справочника?
  • Как удалить строки из табличной части справочника?
  • Как перебрать строки табличной части справочника?
  • Как создать элемент в нужной группе?
  • Как узнать, есть ли у текущего элемента подчиненные?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника, если подчиненных справочников нексолько?
  • Как получить всех родителей выбранного элемента справочника?
  • Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
  • Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
  • Как найти все элементы справочника, в которых не заполнен строковый реквизит?
  • Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
  • Как организовать программный выбор элемента справочника?
  • Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

Как создать элемент (группу) справочника?

НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент();
НовыйЭлемент.Наименование = "военный билет"; 
// Установить другие реквизиты.  
// .....
НовыйЭлемент.Записать(); 

НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); 
// Получить ссылку на группу, в которой будет находиться новый элемент
Родитель = Справочники.Банки.НайтиПоКоду("000000001"); 
НовыйЭлемент.Наименование = "АКБ"; 
НовыйЭлемент.Код = "000000011"; 
НовыйЭлемент.Родитель = Родитель; 
// Установить другие реквизиты 
// .....
НовыйЭлемент.Записать(); 

НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); 
// Получить ссылку на группу, в которой должна находиться создаваемая группа
Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); 
НоваяГруппа.Наименование = "Модельная обувь"; 
НоваяГруппа.Родитель = Родитель; 
// Установить другие реквизиты  
// .....
НоваяГруппа.Записать(); 

// Создать новый элемент в корне справочника
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
НовыйЭлемент.Наименование = "IT отдел";  
НовыйЭлемент.Записать(); 

// Получить ссылку на родителя для добавляемых элементов
Родитель = НовыйЭлемент.Ссылка; 
// Создать дочерний элемент. 
НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
НовыйЭлемент.Наименование = "Группа разработки"; 
НовыйЭлемент.Родитель = Родитель;  
НовыйЭлемент.Записать();

Как найти элемент справочника?

// Поиск по коду
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); 
Если РезультатПоиска.Пустая() Тогда 
    // Выполнить действия, предусмотренные в случае, когда элемент не найден.  
КонецЕсли; 

// Поиск по наименованию
РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки"); 

// Поиск по реквизиту
РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");

Как удалить элемент справочника?

// Найти ссылки на удаляемый элемент. 
МассивСсылок = Новый Массив; 
МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); 
НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); 

Если НайденныеСсылки.Количество() > 0 Тогда 
    Сообщить("Нельзя удалять элемент, на него имеются ссылки"); 
Иначе 
    УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); 
    УдаляемыйЭлемент.Удалить(); 
КонецЕсли; 

УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);

Как перебрать элементы справочника?

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

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

Как выбрать все элементы из определенной группы?

Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель); 
Пока Выборка.Следующий() Цикл 
    Наименование = Выборка.Наименование;
КонецЦикла; 

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

Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель); 
Пока Выборка.Следующий() Цикл 
    Наименование = Выборка.Наименование;  
КонецЦикла; 

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

Как перебрать элементы подчиненного справочника с помощью запроса?

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

Как перебрать элементы подчиненного справочника с помощью выборки справочника?

Процедура ПереборПодчиненыхЭлементов(Контрагент) 
    // Получить выборку по указанному контрагенту
    Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); 
    Пока Выборка.Следующий() Цикл 
        ОчереднойПодчиненый = Выборка.Ссылка; 
    КонецЦикла; 
КонецПроцедуры

Как открыть форму списка (элемента) справочника?

Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); 
Форма.Открыть();

Элемент = Справочники.Номенклатура.НайтиПоКоду("00070"); 
Форма = Элемент.ПолучитьФорму(); 
Форма.Открыть();

Как добавить запись в табличную часть элемента справочника?

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

Как удалить строки из табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); 
ОбъектСправочника.ВидыДеятельности.Очистить(); 
ОбъектСправочника.Записать(); 

ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); 

// Создать структуру для отбора удаляемых строк
СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); 

// Получить массив удаляемых строк
ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); 

// Удалить строки
Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл 
    ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); 
КонецЦикла; 

ОбъектСправочника.Записать();

Как перебрать строки табличной части справочника?

ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл 
    Сообщить(ТекущаяСтрока.ВидДеятельности); 
КонецЦикла;

Как создать элемент в нужной группе?

КодГруппы = "330100"; 
ПоискПоПолномуКоду = Ложь; // значение по умолчанию 
Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); 

Если Группа.Пустая() Тогда 
    Группа = Справочники.Номенклатура.СоздатьГруппу(); 
    Группа.Код = КодГруппы; 
    Группа.Наименование = "Загруженные"; 
    Группа.Записать(); 
ИначеЕсли НЕ Группа.ЭтоГруппа Тогда 
    Сообщить("Найден элемент справочника с указанным кодом!"); 
    // Предусмотреть прерывание алгоритма...
КонецЕсли; 

Спр = Справочники.Номенклатура.СоздатьЭлемент(); 
Спр.Наименование = "Программно созданный"; 
// Реквизиты заполняются в соответствии с задачей
// .....
Спр.Родитель = Группа.Ссылка; 
Спр.Записать(); 

Группа = Справочники.Номенклатура.Загруженные; 

КодЭлемента = "330100"; 
ПоискПоПолномуКоду = Ложь; // Значение по умолчанию 
Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); 

Если Родитель.Пустая() Тогда 
Родитель = Справочники.Номенклатура.СоздатьЭлемент(); 

Родитель.Код = КодЭлемента; 
Родитель.Наименование = "Загруженные"; 

Родитель.Записать(); 
КонецЕсли; 

Спр = Справочники.Номенклатура.СоздатьЭлемент(); 
Спр.Наименование = "Программно созданный"; 
// Реквизиты заполняются в соответствии с задачей
// .....
Спр.Родитель = Родитель.Ссылка; 
Спр.Записать();

Как узнать, есть ли у текущего элемента подчиненные?

Выборка = Справочники.Номенклатура.Выбрать( , Владелец); 
Если Выборка.Следующий() = Истина Тогда 
    // Есть подчиненные элементы.
КонецЕсли;

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

Как узнать количество подчиненных элементов у выбранного элемента справочника?

Выборка = Справочники.ЕдиницыИзмерения.Выбрать( , Владелец); 
КоличествоЭлементов = 0; 
Пока Выборка.Следующий() Цикл 
    КоличествоЭлементов = КоличествоЭлементов + 1; 
КонецЦикла; 

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

Если Выборка.Следующий() Тогда 
    КоличествоЗаписей = Выборка.КоличествоЗаписей; 
КонецЕсли;

Как узнать количество подчиненных элементов у выбранного элемента справочника, если подчиненных справочников несколько?

ВЫБРАТЬ
    СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов 
ИЗ 
    (ВЫБРАТЬ 
        КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных 
    ИЗ 
        Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения 
    ГДЕ
        ЕдиницыИзмерения.Владелец = &Владелец 

    ОБЪЕДИНИТЬ ВСЕ 

    ВЫБРАТЬ 
        КОЛИЧЕСТВО(*) 
    ИЗ 
        Справочник.СерииНоменклатуры КАК СерииНоменклатуры 
    ГДЕ
        СерииНоменклатуры.Владелец = &Владелец
    ) КАК ВложенныйЗапрос

Как получить всех родителей выбранного элемента справочника?

МассивРодителей = Новый Массив; 
Родитель = СсылкаНаЭлемент.Родитель; 

Пока НЕ Родитель.Пустая() Цикл
    МассивРодителей.Добавить(Родитель);
    Родитель = Родитель.Родитель; 
КонецЦикла; 

Для Каждого ТекущийРодитель Из МассивРодителей Цикл
    // Работа с текущим родителем
КонецЦикла;
ВЫБРАТЬ 
    Номенклатура.Ссылка КАК Ссылка 
ИЗ 
    Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
    Номенклатура.Ссылка = &Ссылка 
ИТОГИ ПО 
    Ссылка ТОЛЬКО ИЕРАРХИЯ 
ТекущийЭлементНоменклатуры = ЭлементНоменклатура; 

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Номенклатура.Родитель, 
    |    Номенклатура.Родитель.Родитель, 
    |    Номенклатура.Родитель.Родитель.Родитель, 
    |    Номенклатура.Родитель.Родитель.Родитель.Родитель, 
    |    Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель 
    |ИЗ 
    |    Справочник.Номенклатура КАК Номенклатура 
    |ГДЕ 
    |    Номенклатура.Ссылка = &ТекущийЭлементНоменклатуры"; 

Пока Истина Цикл 
    Запрос.УстановитьПараметр("ТекущийЭлементНоменклатуры", ТекущийЭлементНоменклатуры); 
    Результат = Запрос.Выполнить(); 
    Если Результат.Пустой() Тогда 
        Прервать; 
    КонецЕсли; 
    Выборка = Результат.Выбрать(); 
    Выборка.Следующий(); 

    Для НомерКолонки = 0 По Результат.Колонки.Количество() - 1 Цикл 
        ТекущийЭлементНоменклатуры = Выборка[НомерКолонки]; 
        Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
            Прервать; 
        Иначе 
            Сообщить(ТекущийЭлементНоменклатуры); 
        КонецЕсли; 
    КонецЦикла; 

    Если ТекущийЭлементНоменклатуры = Справочники.Номенклатура.ПустаяСсылка() Тогда 
        Прервать;
    КонецЕсли; 
КонецЦикла;

Как получить запросом «полный» код элементов справочника, если тип кода — Строка?

ВЫБРАТЬ 
    Контрагенты.Ссылка, 
    ВЫБОР 
        КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код 
        КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА 
            Контрагенты.Родитель.Код + "/" + Контрагенты.Код 
        ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + 
            "/" + Контрагенты.Код 
    КОНЕЦ КАК ПолныйКод 
ИЗ 
    Справочник.Контрагенты КАК Контрагенты

Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?

Запрос = Новый Запрос(
    "ВЫБРАТЬ 
    |    Контрагенты.Ссылка КАК Ссылка 
    |ИЗ 
    |    Справочник.Контрагенты КАК Контрагенты 
    |ГДЕ 
    |    (Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) 
    |ИТОГИ ПО 
    |    Ссылка ТОЛЬКО ИЕРАРХИЯ"
); 
Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");

Как найти все элементы справочника, в которых не заполнен строковый реквизит?

ВЫБРАТЬ 
    ФизическиеЛица.Ссылка 
ИЗ 
    Справочник.ФизическиеЛица КАК ФизическиеЛица 
ГДЕ 
    (ФизическиеЛица.ИНН = "") 

ВЫБРАТЬ 
    ФизическиеЛица.Ссылка 
ИЗ 
    Справочник.ФизическиеЛица КАК ФизическиеЛица 
ГДЕ 
    (ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")

Как перенести все элементы справочника «Контрагенты» из одной группы в другую?

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

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

Как организовать программный выбор элемента справочника?

// Получить форму выбора справочника как подчиненную форме документа 
ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 

// Открыть полученную форму 
ФормаВыбора.Открыть(); 

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) 
    ПолученноеЗначение = ЗначениеВыбора; 
    // Дальнейшая обработка значения...
КонецПроцедуры 

ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 
Выбрано = ФормаВыбора.ОткрытьМодально(); 

Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) 
    // Запретить стандартную обработку. 
    СтандартнаяОбработка = Ложь; 
    // Получить форму выбора справочника как подчиненную полю ввода
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); 
    // Открыть полученную форму 
    ФормаВыбора.Открыть(); 
КонецПроцедуры 

Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) 
    // Отключить стандартную обработку (при необходимости)
    СтандартнаяОбработка = Ложь; 
    ПолученноеЗначение = ВыбранноеЗначение; 
    // Дальнейшая обработка значения...
КонецПроцедуры

Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

Процедура ЗагрузитьФотографию(Элемент)
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Текст (*,*)|*.*";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите картинку";
    Если ДиалогОткрытияФайла.Выбрать() Тогда 
        ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла);
        ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка);
        Фотография = ЭлементХранилища;
    КонецЕсли;
КонецПроцедуры

ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла);
элХранилища = Новый ХранилищеЗначения(ВыбФайл);
Фотография = элХранилища;

 +6 

   

Распечатать

1С 8.3 : Поиск элемента, найти элемент справочника

Код 1C v 8.2 УП

 &НаКлиенте
Процедура ПоКнопкеНайти(Команда)
// Вставить содержимое обработчика.

Сообщить(НайтиКонтрагента("000000001"));

КонецПроцедуры

&НаСервере
Функция НайтиКонтрагента(КодКонтрагента)

Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента;
КонрагентДляПоиска = Справочники.Контрагенты;
СсылкаНайденногоКонрагента = КонрагентДляПоиска.НайтиПоКоду(КодКонтрагента);
Если СсылкаНайденногоКонрагента = КонрагентДляПоиска.ПустаяСсылка() Тогда
Возврат "Контрагент не найден";
Иначе
Возврат СсылкаНайденногоКонрагента.Наименование;
КонецЕсли;

КонецФункции;


Код 1C v 8.х

 // Ниже перечислены несколько способов поиска,если элемент найден, то он возвращается,
// иначе возвращается Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту("Оклад", 5000);

//далее нужно проверить найденное значение так:
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// или так:
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;


Код 1C v 7.x

  СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);

//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;

//еще пример
спр=СоздатьОбъект("Справочник.Материалы");
Если спр.НайтиПоНаименованию("Пряжа шерстяная")=1 Тогда
Предупреждение("Найденный элемент справочника имеет код "+спр.ТекущийЭлемент().Код);
Иначе
Предупреждение("Элемент с заданным наименованием не найден");
КонецЕсли;

поиск всех элементов справочника с опред наименованием

Я
   Башмак

28.04.08 — 13:00

Приветствую всех читающих это.

Хочу найти все элементы справочника, имеющих одно и тоже наименование.

можно

Спр.ПорядокНаименований();

НайтиПоНаименованию(наим1,0,1);

Пусть нашли 1-й элемент, как теперь проверить следующие, такое же ли у них наименование?

Помогите добрым советом.

   Стрелок

1 — 28.04.08 — 13:01

1. перебор справочника

2. запрос

   Стрелок

2 — 28.04.08 — 13:02

3. поиск по наименованию с удалением в транзакции и отменой оной по завершению работы

   Guk

3 — 28.04.08 — 13:03

(0) Делай в транзакции с удалением найденных элементов…

   Ёпрст2

4 — 28.04.08 — 13:03

(0)

СЗ=СоздатьОбъект(«СписокЗначений»);

НачатьТранзакцию();

Пока Спр.НайтиПоНаименованию(наим1,0,1)=1 Цикл

  СЗ.ДобавитьЗначение(Спр.ТекущийЭлемент());

  Спр.Удалить();

КонецЦикла;

ОтменитьТранзакцию();

СЗ.ВыбратьЗначение(,);

Или запросом …

   Smitt

5 — 28.04.08 — 13:04

Процедура Сформировать()

   Перем Запрос, ТекстЗапроса;

   //Создание объекта типа Запрос

   Запрос = СоздатьОбъект(«Запрос»);

   ТекстЗапроса =

   «//{{ЗАПРОС(Сформировать)

   |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;

   |Наименование = Справочник.Номенклатура.Наименование;

   |Группировка ТекущийЭлемент;

   |Условие(Наименование = ВыбНаименование);

   |»//}}ЗАПРОС

   ;

   // Если ошибка в запросе, то выход из процедуры

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

       Возврат;

   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса

   // Заполнение полей «Заголовок»

   Пока Запрос.Группировка(1) = 1 Цикл

       // Заполнение полей ТекущийЭлемент

   КонецЦикла;

   // Вывод заполненной формы

КонецПроцедуры

   dk

6 — 28.04.08 — 13:04

1. Плохой вариант

начатьтранзакцию()
пока спр.найтипонаименованию.. цикл
   сообщить(спр.текущийэлемент)
   спр.удалить(1)
конеццикла
отменитьтранзакцию

2. Правильный вариант

ТекстЗапроса = "
Эл = Спр. ...текущийэлемент
наим = спр...Наименование
Условие Найти(Наим, Искомое) > 0"
   Omskdizel

7 — 28.04.08 — 13:05

Можно легко через ТаблицуЗначений

   Omskdizel

8 — 28.04.08 — 13:07

В нее пихаешь наименования, в соседнюю колонку единички, потом ТЗ.Свернуть(«1″,»2»). В той строке, где не 1 будет стоять количество одинаковых наименований. ИМХО проще юзанья запросов и тем более транзакций.

   ZanderZ

9 — 28.04.08 — 13:08

(8) да конечно а как ты потом сам элемент то найдешь твоим то способом…

   Ёпрст2

10 — 28.04.08 — 13:09

(8) И при большом количестве элементов ппц твоей ТЗ …

ЗЫ: Лучше всего Select …

   Omskdizel

11 — 28.04.08 — 13:20

(9) Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?

(10) У меня на 200000 элементах все прекрасно работало, я помнится поиск ссылок на список из тысяч 100 элементов делал, с этой ТЗ все упомянутое работало. Более того, справочников с гораздо меньшим объемом подавляющее большинство, так что нарваться на сие маловероятно.

   dk

12 — 28.04.08 — 13:22

(11) А на формирование этой ТЗ сколько времени ушло? :)

хотя тоже вариант нормальный для некоторых ситуаций.

   Ёпрст2

13 — 28.04.08 — 13:23

(11) тупое решение, во-первых — перебор всего справочника, во-вторых — тз.

И это никак не лучше мнимой транзакции, которая в разы быстрее, и ну никак не лучше запроса, ибо медленнее.

   Ёпрст2

14 — 28.04.08 — 13:24

+13 Да еще и сортировка этой тз + перебор в этой тз …

   Ёпрст2

15 — 28.04.08 — 13:25

+14 И хранение копии этой тз в несвёрнутом виде …

   Omskdizel

16 — 28.04.08 — 13:28

В моем варианте находятся все дубли наименований. Если знать наименование, то запрос ессно лучше полного перебора.

   Omskdizel

17 — 28.04.08 — 13:31

(14)(15) Что-то не пойму, чем тебе это не нравится? Очень часто пользовал, работает шустро.

   ZanderZ

18 — 28.04.08 — 13:31

(11) «Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?

» че то не догнал а сами то как элементы найдешь опять по справочнику искать ??

если ты свернешь по наименованиям то у тебя и будут в таблице только наименования не сами элементы то ….

   Башмак

19 — 28.04.08 — 13:34

Спасибо

А что насчет select?

   Ёпрст2

20 — 28.04.08 — 13:33

(17) Ложное заблуждение в (8).

   Omskdizel

21 — 28.04.08 — 13:37

(18) Ну если и такое надо рассказывать :) Сортировать по второй колонке, где количество документов дублей :) И все верхние будут как раз дублями, пока в «2» единичку не встретишь.

   ZanderZ

22 — 28.04.08 — 13:37

(19) запрос или прямой запрос

   Omskdizel

23 — 28.04.08 — 13:38

(20) Почитай (16), а то прям расходился

   ZanderZ

24 — 28.04.08 — 13:38

(21) ты че то не догоняешь по моему….

   ZanderZ

25 — 28.04.08 — 13:39

+(24) извени (16) не увидел … только муторно и долго в начале в ТЗ потом запрос …

   Omskdizel

26 — 28.04.08 — 13:41

(25) Не, ты уж определись, либо ТЗ, либо Запрос. Просто я (0) несколько неправильно понял.

   ZanderZ

27 — 28.04.08 — 13:43

(26) ну так вот я тебя и спрашивал как из твоей Тз найти ССЫЛКИ на элементы, а если ты предлагаешь потом еще отдельно запрос делать для получения ссылок, то проще сразу запрос мутить с группировкой по Наименованию

   Omskdizel

28 — 28.04.08 — 13:49

(27) Нее, ты наверное не понял. В ТЗ справочник кидаешь, в этой же ТЗ делаешь еще колонку в которой ставишь 1, потом ТЗ.Свернуть(«1″,»2»), ТЗ.Сортировать(«2-«) потом перебор до тех пор, пока ТЗ.ПолучитьЗначение(НомерСтроки,2)<>1

   Башмак

29 — 28.04.08 — 13:50

А если ВыбратьЭлементыПоРеквизиту, где реквизит — наименование и перебрать элементы этой выборки?

   Omskdizel

30 — 28.04.08 — 13:50

Можно и во время перебора справочника поймать дубли в принципе, главное его сначала отсортировать по наименованию.

   Omskdizel

31 — 28.04.08 — 13:51

(29) А интересный вариант. Только вот не знаю, к Наименование его можно прикрутить или нет.

   ZanderZ

32 — 28.04.08 — 13:51

(28) как это ты в тз свернешь справочник то если там будут ЭЛЕМЕНТЫ ??????

ты понимаешь разницу м/у Наименованием справочника и Элемента справочника ….

   Ёпрст2

33 — 28.04.08 — 13:51

(29) Наименование, как и Код — это «атрибуты» справочника, не совсем реквизиты его…и для них свои методы.

   ZanderZ

34 — 28.04.08 — 13:53

(29) не получится надо доп Реквизит делать с отбором в него писать наименования, а потом уже твое …

   Omskdizel

35 — 28.04.08 — 13:54

(32) Почитай внимательно (8). Неужто сам додумать не можешь, что в ТЗ можно и наименования пихать?

   ZanderZ

36 — 28.04.08 — 13:56

(35) ты че то гоняешь реально ты же свернешь по наименованию как ты потом элемент то получишь ????

у тебя будет в ТЗ

К1            К2

Наименование1  2

Наименование2  3

Наименование3  1

и дальше твои действия отобрал я 1-е и 2-е значени из тз и ????

   Ёпрст2

37 — 28.04.08 — 13:59

(36) Как-как .. копию отсортированнной  несвёрнутой ТЗ хранить надобно … в неё потом искать — перебирать ..

   ZanderZ

38 — 28.04.08 — 14:00

(0) самое оптимальное в (5) если надо найти все совпадения по всем то тогда маленько исправить  

   |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;

   |Наименование = Справочник.Номенклатура.Наименование;

   |Группировка Наименование ;

   |Группировка ТекущийЭлемент без групп;

потом в обходе

Пока Запрос.Группировка(1) Цикл

Кол = 0;

 Пока Запрос.Группировка(2) Цикл

   сз.ДобавитьЗначений(Запрос.ТекущийЭлемент);

   Кол = Кол +1;

 КонецЦикла;

  Если Кол = 1 тогда

   сз.УдалитьЗначение();

  КонецЕсли;

   Башмак

39 — 28.04.08 — 14:01

мне нужны некоторые реквизиты элементов с повторяющимися наименованиями, потому тз вряд ли поможет

(29) было бы идеальным, но (34)-верно, проверил.

   ZanderZ

40 — 28.04.08 — 14:01

(37) и в чем прикол то хранения ???

тогда уже после свертки заново переберать справочник и искать с сортировкой по наименованию…

   Ёпрст2

41 — 28.04.08 — 14:07

(40) Это ты у автора поста спроси…

ЗЫ: Если нужны все несовпадения, то Запрос + 1 группировка + Функция Счётчик в запросе и привет, в обходе, там где значение функции >1 — и есть дубли.

Если нужна скорость, то select + like %%%(если по части наименования)…

   Omskdizel

42 — 28.04.08 — 14:10

(36) Ну сделай К3, где собственно элемент будешь хранить. И не надо ничего особо перебирать дополнительно. Или прям код расписать, чтобы такие вопросы за ненадобностью отвалились?

  

Omskdizel

43 — 28.04.08 — 14:35

(38) И чем это лучше перебора справочника? :) А если надо по Наименованию и Артикулу совпадения искать?

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Кол1");
ТЗ.НоваяКолонка("Кол2");
...
ТЗ.НоваяКолонка("КолN");
Спр=СоздатьОбъект("Справочник.Нужный");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
 Если Спр.ЭтоГруппа()=1 Тогда
  Продолжить;
 КонецЕсли;
 ТЗ.НоваяСтрока();
 ТЗ.Кол1=Спр.Реквизит1;
 ТЗ.Кол2=Спр.Реквизит2;
 ...
 ТЗ.КолN-1=Спр.ТекущийЭлемент();
 ТЗ.КолN=1;
КонецЦикла;
ТЗ.Свернуть("1,2,...,N-1","N");
ТЗ.Сортировать("N-");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
 Если ТЗ.КолN=1 Тогда
  Прервать;
 //Трындец, кончились дубли....
 
 КонецЕсли;
//Здесь поступаем по собственному хотению с дублями....
 
КонецЦикла;

Справочники

  • Как создать элемент (группу) справочника?
  • Как найти элемент справочника?
  • Как удалить элемент справочника?
  • Как перебрать элементы справочника?
  • Как выбрать все элементы из определенной группы?
  • Как перебрать элементы подчиненного справочника с помощью запроса?
  • Как перебрать элементы подчиненного справочника с помощью выборки справочника?
  • Как открыть форму списка (элемента) справочника?
  • Как добавить запись в табличную часть элемента справочника?
  • Как удалить строки из табличной части справочника?
  • Как перебрать строки табличной части справочника?
  • Как создать элемент в нужной группе?
  • Как узнать, есть ли у текущего элемента подчиненные?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника?
  • Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?
  • Как получить всех родителей выбранного элемента справочника?
  • Как получить запросом «полный» код элементов справочника, если тип кода — Строка?
  • Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?
  • Как найти все элементы справочника, в которых не заполнен строковый реквизит?
  • Как перенести все элементы справочника «Контрагенты» из одной группы в другую?
  • Как организовать программный выбор элемента справочника?
  • Как сохранить фотографию сотрудника в справочнике «Сотрудники»?
  • Как узнать, что справочник новый (УФ)?
  • Как создать элемент (группу) справочника?

    НовыйЭлемент = Справочники.ДокументыУдостоверяющиеЛичность.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "военный билет"; 
    
    // Установить другие реквизиты.  
    ....
    
    НовыйЭлемент.Записать(); 
    
    НовыйЭлемент = Справочники.Банки.СоздатьЭлемент(); 
    
    // Получить ссылку на группу, в которой будет находиться новый элемент. 
    Родитель = Справочники.Банки.НайтиПоКоду("000000001"); 
    
    НовыйЭлемент.Наименование = "АКБ"; 
    НовыйЭлемент.Код = "000000011"; 
    НовыйЭлемент.Родитель = Родитель; 
    
    // Установить другие реквизиты.  
    ....
    
    НовыйЭлемент.Записать(); 
    
    НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу(); 
    
    // Получить ссылку на группу, в которой должна находиться создаваемая группа. 
    Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Обувь", Истина); 
    
    НоваяГруппа.Наименование = "Модельная обувь"; 
    НоваяГруппа.Родитель = Родитель; 
    
    // Установить другие реквизиты.  
    ....
    
    НоваяГруппа.Записать(); 
    
    
    // Создать новый элемент в корне справочника. 
    НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
    НовыйЭлемент.Наименование = "IT отдел";  
    НовыйЭлемент.Записать(); 
    
    // Получить ссылку на родителя добавляемых элементов. 
    Родитель = НовыйЭлемент.Ссылка; 
    
    // Создать дочерний элемент. 
    НовыйЭлемент = Справочники.Подразделения.СоздатьЭлемент(); 
    НовыйЭлемент.Наименование = "Группа разработки"; 
    НовыйЭлемент.Родитель = Родитель;  
    
    НовыйЭлемент.Записать();

    Как найти элемент справочника?

    // Найдем по коду
    РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030"); 
    Если РезультатПоиска.Пустая() Тогда 
    	// Выполнить действия, предусмотренные в случае, когда элемент не найден.  
    КонецЕсли; 
    
    // Найдем по наименованию
    РезультатПоиска = Справочники.Номенклатура.НайтиПоНаименованию("Кроссовки"); 
    
    // Найдем по реквизиту
    РезультатПоиска = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "К-120002");

    Как удалить элемент справочника?

    // Найти ссылки на удаляемый элемент. 
    МассивСсылок = Новый Массив; 
    МассивСсылок.Добавить(СсылкаНаУдаляемыйЭлемент); 
    НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); 
    
    Если НайденныеСсылки.Количество() > 0 Тогда 
    	Сообщить("Нельзя удалять элемент, на него имеются ссылки"); 
    Иначе 
    	УдаляемыйЭлемент = СсылкаНаУдаляемыйЭлемент.ПолучитьОбъект(); 
    	УдаляемыйЭлемент.Удалить(); 
    КонецЕсли; 
    
    УдаляемыйЭлемент.УстановитьПометкуУдаления(Истина);

    Как перебрать элементы справочника?

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

    Как выбрать все элементы из определенной группы?

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

    Как перебрать элементы подчиненного справочника с помощью запроса?

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

    Как перебрать элементы подчиненного справочника с помощью выборки справочника?

    Процедура ПереборПодчиненыхЭлементов(Контрагент) 
    
    	// Получить выборку по указанному контрагенту. 
    	Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); 
    
    	Пока Выборка.Следующий() Цикл 
    		ОчереднойПодчиненый = Выборка.Ссылка; 
    	КонецЦикла; 
    
    КонецПроцедуры

    Как открыть форму списка (элемента) справочника?

    Форма = Справочники.Номенклатура.ПолучитьФормуСписка(); 
    Форма.Открыть();
    
    Элемент = Справочники.Номенклатура.НайтиПоКоду("00070"); 
    Форма = Элемент.ПолучитьФорму(); 
    Форма.Открыть();

    Как добавить запись в табличную часть элемента справочника?

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

    Как удалить строки из табличной части справочника?

    ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
    ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект(); 
    ОбъектСправочника.ВидыДеятельности.Очистить(); 
    ОбъектСправочника.Записать(); 
    
    
    ОбъектСправочника = ВыбранныйЭлемент.ПолучитьОбъект(); 
    
    // Создать структуру для отбора удаляемых строк. 
    СтруктураОтбора = Новый Структура("ВидДеятельности", ВыбранныйВидДеятельности); 
    
    // Получить массив удаляемых строк. 
    ПодходящиеСтроки = ОбъектСправочника.ВидыДеятельности.НайтиСтроки(СтруктураОтбора); 
    
    // Удалить строки. 
    Для Каждого ОчереднаяСтрока Из ПодходящиеСтроки Цикл 
    	ОбъектСправочника.ВидыДеятельности.Удалить(ОчереднаяСтрока); 
    КонецЦикла; 
    
    ОбъектСправочника.Записать();

    Как перебрать строки табличной части справочника?

    ЭлементСправочника = Справочники.Контрагенты.НайтиПоКоду("Ю0006"); 
    Для Каждого ТекущаяСтрока Из ЭлементСправочника.ВидыДеятельности Цикл 
    	Сообщить(ТекущаяСтрока.ВидДеятельности); 
    КонецЦикла;

    Как создать элемент в нужной группе?

    КодГруппы = "330100"; 
    ПоискПоПолномуКоду = Ложь; // значение по умолчанию 
    Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду); 
    
    Если Группа.Пустая() Тогда 
    	Группа = Справочники.Номенклатура.СоздатьГруппу(); 
    
    	Группа.Код = КодГруппы; 
    	Группа.Наименование = "Загруженные"; 
    	Группа.Записать(); 
    
    ИначеЕсли Не Группа.ЭтоГруппа Тогда 
    	Сообщить("Найден элемент справочника с указанным кодом!"); 
    
    	// Предусмотреть прерывание алгоритма.
    
    КонецЕсли; 
    
    Спр = Справочники.Номенклатура.СоздатьЭлемент(); 
    Спр.Наименование = "Программно созданный"; 
    
    // Реквизиты заполняются в соответствии с задачей.  
    
    Спр.Родитель = Группа.Ссылка; 
    Спр.Записать(); 
    
    
    Группа = Справочники.Номенклатура.Загруженные; 
    
    
    КодЭлемента = "330100"; 
    ПоискПоПолномуКоду = Ложь; //Значение по умолчанию 
    Родитель = Справочники.Номенклатура.НайтиПоКоду(КодЭлемента, ПоискПоПолномуКоду); 
    
    Если Родитель.Пустая() Тогда 
    Родитель = Справочники.Номенклатура.СоздатьЭлемент(); 
    
    Родитель.Код = КодЭлемента; 
    Родитель.Наименование = "Загруженные"; 
    
    Родитель.Записать(); 
    КонецЕсли; 
    
    Спр = Справочники.Номенклатура.СоздатьЭлемент(); 
    Спр.Наименование = "Программно созданный"; 
    // Реквизиты заполняются в соотвествии с задачей. 
    
    Спр.Родитель = Родитель.Ссылка; 
    Спр.Записать();

    Как узнать, есть ли у текущего элемента подчиненные?

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

    Как узнать количество подчиненных элементов у выбранного элемента справочника?

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

    Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один?

    ВЫБРАТЬ
    	СУММА(КоличествоПодчиненных) КАК КоличествоПодчиненныхЭлементов 
    ИЗ 
    	(ВЫБРАТЬ 
    		КОЛИЧЕСТВО(*) КАК КоличествоПодчиненных 
    	ИЗ 
    		Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения 
    	ГДЕ ЕдиницыИзмерения.Владелец = &Владелец 
    
    	ОБЪЕДИНИТЬ ВСЕ 
    
    	ВЫБРАТЬ 
    		КОЛИЧЕСТВО(*) 
    	ИЗ 
    		Справочник.СерииНоменклатуры КАК СерииНоменклатуры 
    	ГДЕ СерииНоменклатуры.Владелец = &Владелец ) КАК ВложенныйЗапрос

    Как получить всех родителей выбранного элемента справочника?

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

    Как получить запросом «полный» код элементов справочника, если тип кода — Строка?

    ВЫБРАТЬ 
    	Контрагенты.Ссылка, 
    	ВЫБОР 
    		КОГДА (Контрагенты.Родитель.Код ЕСТЬ NULL ) ТОГДА Контрагенты.Код 
    		КОГДА (Контрагенты.Родитель.Родитель.Код ЕСТЬ NULL ) ТОГДА 
    			Контрагенты.Родитель.Код + "/" + Контрагенты.Код 
    		ИНАЧЕ Контрагенты.Родитель.Родитель.Код + "/" + Контрагенты.Родитель.Код + "/" + Контрагенты.Код
    			 
    	КОНЕЦ КАК ПолныйКод 
    ИЗ 
    	Справочник.Контрагенты КАК Контрагенты

    Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят?

    Запрос = Новый Запрос("ВЫБРАТЬ 
    	|	Контрагенты.Ссылка КАК Ссылка 
    	|ИЗ 
    	|	Справочник.Контрагенты КАК Контрагенты 
    	|ГДЕ 
    	|	(Контрагенты.Наименование ПОДОБНО &ЧастьНаименования) И (НЕ Контрагенты.ЭтоГруппа) 
    	|ИТОГИ ПО 
    	|	Ссылка ТОЛЬКО ИЕРАРХИЯ"); 
    
    Запрос.УстановитьПараметр("ЧастьНаименования", "%" + ПолеВводаПодстрока + "%");

    Как найти все элементы справочника, в которых не заполнен строковый реквизит?

    ВЫБРАТЬ 
    	ФизическиеЛица.Ссылка 
    ИЗ 
    	Справочник.ФизическиеЛица КАК ФизическиеЛица 
    ГДЕ 
    	(ФизическиеЛица.ИНН = "") 
    
    
    ВЫБРАТЬ 
    	ФизическиеЛица.Ссылка 
    ИЗ 
    	Справочник.ФизическиеЛица КАК ФизическиеЛица 
    ГДЕ 
    	(ФизическиеЛица.СтраховойНомерПФР = "") ИЛИ (ФизическиеЛица.СтраховойНомерПФР = " - -")

    Как перенести все элементы справочника «Контрагенты» из одной группы в другую?

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

    Как организовать программный выбор элемента справочника?

    // Получить форму выбора справочника как подчиненную 
    // форме документа 
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 
    
    // Открыть полученную форму 
    ФормаВыбора.Открыть(); 
    
    
    Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) 
    
    	ПолученноеЗначение = ЗначениеВыбора; 
    	// Дальнейшая обработка значения.  
    
    КонецПроцедуры 
    
    
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , ЭтаФорма); 
    Выбрано = ФормаВыбора.ОткрытьМодально(); 
    
    
    Процедура ПолеВводаНачалоВыбора(Элемент, СтандартнаяОбработка) 
    
    	// Запретить стандартную обработку. 
    	СтандартнаяОбработка = Ложь; 
    
    	// Получить форму выбора справочника как подчиненную полю ввода. 
    	ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора( , Элемент); 
    
    	// Открыть полученную форму 
    	ФормаВыбора.Открыть(); 
    
    КонецПроцедуры 
    
    
    Процедура ПолеВводаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) 
    
    	// Отключить стандартную обработку (при необходимости). 
    	СтандартнаяОбработка = Ложь; 
    
    	ПолученноеЗначение = ВыбранноеЗначение; 
    	// Дальнейшая обработка значения.  
    
    КонецПроцедуры

    Как сохранить фотографию сотрудника в справочнике «Сотрудники»?

    Процедура ЗагрузитьФотографию(Элемент) 
    	Режим = РежимДиалогаВыбораФайла.Открытие; 
    	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); 
    	ДиалогОткрытияФайла.ПолноеИмяФайла = ""; 
    	Фильтр = "Текст (*,*)|*.*"; 
    	ДиалогОткрытияФайла.Фильтр = Фильтр; 
    	ДиалогОткрытияФайла.МножественныйВыбор = Ложь; 
    	ДиалогОткрытияФайла.Заголовок = "Выберите картинку"; 
    	Если ДиалогОткрытияФайла.Выбрать() Тогда 
    		ВыбраннаяКартинка = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла); 
    		ЭлементХранилища = Новый ХранилищеЗначения(ВыбраннаяКартинка); 
    		Фотография = ЭлементХранилища; 
    	КонецЕсли; 
    КонецПроцедуры 
    
    ВыбФайл = Новый ДвоичныеДанные(ДиалогОткрытияФайла.ПолноеИмяФайла); 
    элХранилища = Новый ХранилищеЗначения(ВыбФайл); 
    Фотография = элХранилища;

    Как узнать, что справочник новый (УФ)?

    ФлНовый =  Параметры.Ключ.Пустая();

    У справочников в 1С есть встроенные функции для поиска в них элементов, к ним относится НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту;

    В данном случае рассмотрим поиск по наименованию.

    Синтаксис:

    Справочники.<НазваниеСправочника>.НайтиПоНаименованию (<Значение>, <ПоискПоПолномуСоответсвию>, <Родитель>, <Владелец>)

    Параметры:

    НазваниеСправочника — наименование справочника, к примеру Сотрудники.

    Значение— значение в реквизите Наименование.

    ПоискПоПолномуСоответсвию — По умолчанию установлен в значении Ложь, т.е. ищется соответствие левой части (пример: ищем Алекс то найдем Алексей). Но если установить в истину то поиск будет вестись по полному значению, кроме пробелов в конце строки.  (необязательный)

    Родитель — Ссылка на родителя. Поиск будет вестись только по тем элементам где указан данный родитель. (необязательный)

    Владелец — Ссылка на элемент владельца справочника, указанного на закладке Владельцы. (необязательный)

    Результат:

    Если элемент не найден возвращается ПустаяСсылка, иначе ссылка на элемент.

    Если существует несколько элементов, возвращается только 1.

    Пример:

    НаименованиеЭлемента = "Иванов Иван Иванович";
    ТекСправочник = Справочники.Преподаватели;
    РезультатПоискаПоНаименованию = ТекСправочник.НайтиПоНаименованию(НаименованиеЭлемента);
    Если РезультатПоискаПоНаименованию = ТекСправочник.ПустаяСсылка() Тогда
      Сообщить("Не найден");
    Иначе
      Сообщить(РезультатПоискаПоНаименованию.код);
    КонецЕсли;

    Поиск с учетом родителя:

    Университет = Справочники.Университеты.НайтиПоНаименованию("МГИМО");
    Преподователь = ТекСправочник.НайтиПоНаименованию("Иванов Иваон Иванович",,Университет);

    Понравилась статья? Поделить с друзьями:

    Не пропустите также:

  • Если в сзв м ошибка в снилс как исправить
  • Failed to initialize renderer fallout new vegas как исправить
  • Как найти мощность рабочей машины
  • Как найти сослуживцев в одноклассник
  • Как найти коэффициент оборота оборотных средств

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии