Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 10 - Назначение справочников.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
282 Кб
Скачать
☆

Программное создание групп

7.7

СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.НоваяГруппа(); СпрСотр.Наименование = "Работающие"; СпрСотр.Записать(); СпрСотр.НоваяГруппа(); СпрСотр.Наименование = "Уволенные"; СпрСотр.Записать();

 

8.0

Нов = Справочники.Сотрудники.СоздатьГруппу(); Нов.Наименование = "Работающие"; Нов.Записать();

Нов = Справочники["Сотрудники"].СоздатьГруппу(); Нов.Наименование = "Работающие"; Нов.Записать();

Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.

Транзакции

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

7.7

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

Для Ном = 1 По 100 Цикл .....СпрСотр.Новый(); .....СпрСотр.Наименование = "Новый " + Строка(Ном); .....СпрСотр.Записать(); КонецЦикла;

ЗафиксироватьТранзакцию();

8.0

СпрСотр = Справочники.Сотрудники; НачатьТранзакцию();

Для Ном = 1 По 100 Цикл .....Нов = СпрСотр.СоздатьЭлемент(); .....Нов.Наименование = "Новый " + Строка(Ном); .....Нов.Записать(); КонецЦикла;

ЗафиксироватьТранзакцию();

 

Перебор элементов

Простой перебор

СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Режим = 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); //пометка на удаление КонецЦикла;

ЗафиксироватьТранзакцию();

Иерархические справочники

Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Возможное количество уровней вложенности справочника задается в Конфигураторе.

Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.

Внимание! Иерархический справочник - это также многоуровневый справочник, или справочник с группами. Группа справочника в 1С часто называется "родитель".