СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Режим = 0; //выбирать без учета иерархии, 1 - с учетом (по умолч.) 
СпрСотр.ВыбратьЭлементы(Режим);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....<действия с очередным элементом/группой> 
КонецЦикла;


Фильтрация (отбор)
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
РежимИерархии = 1; //1- выбирать с учетом иерархии, 0 - без учета
РежимГрупп = 0; //0 - не включать в выборку группы, 1 - включать
ИмяРеквизита = "Год"; //в Конфигураторе у реквизита должен быть установлен флажок Отбор
Значение = 1980;
СпрСотр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита,Значение,РежимИерархии, РежимГрупп);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....<действия с очередным элементом> 
КонецЦикла;


Фильтрация в цикле
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(РабочаяДата()); 
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
Если СпрСотр.Должность <> длжПлотник Тогда
....Продолжить; //этого сотрудника пропускаем, перейти в начало цикла
КонецЕсли;
<действия с очередным элементом>
КонецЦикла;


Порядок сортировки
Перед выборкой можно задать порядок сортировки следующими методами:
ПорядокКодов()
ПорядокНаименований()
ПорядокРеквизита(ИмяРекв) //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ОбратныйПорядок()

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


Запрос к справочнику
Перебор элементов справочника можно организовать через Запрос. Часто это бывает удобнее, если применяется сложное условие отбора или группировка элементов.

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

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


Поиск по коду
Если СпрСотр.НайтиПоКоду(1) = 1 Тогда
....ЭлементИлиГруппа = СпрСотр.ТекущийЭлемент();
КонецЕсли;


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


Поиск по реквизиту
ИмяРекв = "Год"; //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ФлагГлобПоиска = 1; // 1- искать во всем справочнике, 0 - искать в пределах подчинения 
Если СпрСотр.НайтиПоРеквизиту(ИмяРекв,1980,ФлагГлобПоиска)=1 Тогда
.....НайденныйЭлемент = СпрСотр.ТекущийЭлемент();
КонецЕсли;


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


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

Непосредственное удаление
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(ВыбрСотрудник); 
СпрСотр.Удалить(); //непосредственное удаление


Внимание! Если вы производите непосредственное удаление элемента, то следите, чтобы на него не было ссылок в других объектах. Например, удаляемый сотрудник может использоваться в документе Отпуск. При его удалении ссылочная целостность базы данных будет нарушена. В этом случае рекомендуется пользоваться пометкой на удаление.

Можно программно получить список объектов, содержащих ссылку на удаляемый объект методом НайтиСсылки(объект).

Пометка на удаление
Для контроля ссылочной целостности базы данных удаляемые элементы всего лишь помечаются на удаление. Затем специальной командой меню Операции => "Удаление помеченных объектов" в монопольном режиме система 1С проконтролирует ссылочную целостность и физически удалит элементы из базы данных, если на них нет ссылок в других объектах.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(ВыбрСотрудник); 
СпрСотр.Удалить(0); //пометка на удаление
//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = СпрСотр.ПометкаУдаления();
//можно снять пометку на удаление
СпрСотр.НайтиЭлемент(ВыбрСотрудник); 
СпрСотр.СнятьПометкуУдаления(); 


Транзакции
При удалении множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное удаление (пометка на удаление) всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется.

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
НачатьТранзакцию(); 
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
......СпрСотр.Удалить(0); //пометка на удаление
КонецЦикла; 
ЗафиксироватьТранзакцию();


Strazik


2012-01-13 • Просмотров [ 782 ]