наверх
Свободные IT публикации
логин:
пароль:

Справочники

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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