1с как найти реквизит справочника

Содержание:

1.      Когда возникает необходимость проверить наличие реквизита 1С?

2.      Как можно получить метаданные объекта 1С?  

1.    Когда возникает необходимость проверить наличие реквизита 1С

Потребность проверки наличия реквизита обычно возникает при написании общих, универсальных процедур или функций, к примеру, когда необходимо выполнить ряд однообразных действий, проверить заполнение перед проведением, при этом реквизитный состав обрабатываемых объектов метаданных отличается незначительно (например, в документе, отражающем продажу товара, есть реквизит Склад, а в документе, отражающем перемещение товара – реквизиты Склад-отправитель и Склад-получатель).

В ряде типовых конфигураций 1С предлагается стандартная функция проверки наличия реквизита в объекте (расположена в модуле “ОбщегоНазначения”)

Функция ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта) Экспорт

            Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

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

2. Как можно получить метаданные объекта 1С

Однако написать свою функцию также не представляет труда. В первую очередь необходимо получить метаданные объекта 1С одним из способов:

через функцию Метаданные() объекта

пример синтаксиса: СправочникСсылка.Метаданные()

                                    ДокументСсылка.Метаданные()

через свойство глобального контекста Метаданные

пример синтаксиса: Метаданные.Справочники.[ИмяСправочника]

                                    Метаданные.Документы.[ИмяДокумента]

Далее через свойство “Реквизиты” использовать функцию Найти(). В случае, если реквизит не найден, возвращается значение Неопределено.

Пример 1

Метаданные = Контрагент.Метаданные();

Если Метаданные.Реквизиты.Найти(«Ответственный») = Неопределено Тогда

            Возврат Ложь;

Иначе

            Возврат Истина;

КонецЕсли;

Пример 2

Функция ПолучитьОрганизацию(Контрагент, Пользователь)

            Если Метаданные.Справочники.Контрагенты.Реквизиты.Найти(«Организация») <> Неопределено Тогда

                        Возврат Контрагент.Организация;

            Иначе

                        Возврат Пользователь.Организация;

            КонецЕсли;

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

Описанный алгоритм подходит для случаев проверки наличия реквизита шапки. Но что делать, когда возникает необходимость определить, существует ли реквизит в табличной части 1С (справочника или документа)? Для этого используется следующая конструкция:

Метаданные.Справочники.<ИмяСправочника>.ТабличныеЧасти.Реквизиты.Найти(<ИмяОбъектаПоиска>).

При обработке таблиц значений также возможно выполнить проверку существования колонки – в этом случае применяется метод Свойство(), с помощью которого, помимо основной функции – получения значения элемента по указанному имени, можно проверить, имеется ли указанного свойство.

Пример синтаксиса:

Если НЕ ТекущаяСтрока.Свойство(«Исключить») ИЛИ НЕ ТекущаяСтрока.Исключить Тогда

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

КонецЕсли;

Специалист компании ООО «Кодерлайн»

Кондренко Анна Сергеевна

 +6 

   

Распечатать

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

Код 1C v 8.2 УП

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

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

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

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

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

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


Код 1C v 8.х

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

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


Код 1C v 7.x

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

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

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

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

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

В данном случае рассмотрим поиск по реквизиту. Реквизит может браться любой кроме реквизитов с неограниченной длиной и типом ХранилещеЗначений.

Синтаксис:

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

Параметры:

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

ИмяРекизита — имя реквизита [строка].

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

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

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

Результат:

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

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

Если реквизит отсутствует в справочнике, то возвращается Неопределено.

Пример:

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

Справочники

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Найти элемент справочника в 1С 8 можно тремя способами:

    1) Поиск по коду

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

    Пример:

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

    Описание параметров метода НайтиПоКоду:

    • <Код> (обязательный). Тип: Число, Строка. Описание: искомый код, строка или число в зависимости от настроек справочника в конфигураторе.
    • <ПоискПоПолномуКоду> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному коду, истина — искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом “/”. Значение по умолчанию: Ложь.
    • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
    • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

    2) Поиск по наименованию

    Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

    Связаться с нами можно по телефону +7 499 350 29 00.

    Услуги и цены можно увидеть по ссылке.

    Будем рады помочь Вам!

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

    Пример:

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

    Описание параметров метода НайтиПоНаименованию:

    • <Наименование> (обязательный). Тип: Строка. Описание: строка, содержащая искомое наименование.
    • ТочноеСоответствие> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному соответствию, поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования, в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением “хвостовых” пробелов в наименовании). Значение по умолчанию: Ложь.
    • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
    • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

    3) Поиск по произвольному реквизиту

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

    Пример:

    НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул","А-255");
    

    Описание параметров метода НайтиПоРеквизит:

    • <ИмяРеквизита> (обязательный). Тип: Строка. Описание: имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения: произвольный, кроме ХранилищеЗначения и строк произвольной длины.
    • <ЗначениеРеквизита> (обязательный). Тип: Произвольный. Описание: значение реквизита, по которому должен выполняться поиск.
    • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
    • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

    Добавить комментарий