1С Предприятие. Практика программирования на платформе v7


Использование подчиненных справочников


При создании конкретных конфигураций довольно часто возникают задачи, когда надо реализовать для каждого конкретного элемента справочника -список относящихся к нему объектов (отношение один-ко-многим). В нашем примере имеется справочник оборудования, и каждый элемент справочника может иметь произвольный список единиц измерения данного оборудования. Для того чтобы ввести новый или отредактировать существующий элемент справочника «Единицы», сначала откройте форму списка справочника владельца «Оборудование», выберите в нем курсором нужный элемент. Затем откройте форму списка подчиненного справочника «Единицы», он будет отображать список единиц измерения данного оборудования. Теперь можно добавлять, редактировать или удалять записи в справочнике «Единицы». Выбор элементов подчиненного справочника, в форме, при условии, что в форме существует элемент диалога, в котором выбран элемент справочника владельца, для которого производится выбор, реализуется в конфигурации при помощи указания в палитре свойств реквизита формы, предназначенного для выбора элемента подчиненного справочника, параметра «Связан с». В нем вводится имя идентификатора реквизита формы, который содержит элемент родительского справочника. В этом случае при выборе элемента подчиненного справочника автоматически будет производиться выбор из элементов, подчиненных выбранному элементу справочника-родителя. Другим способом установки элемента справочника владельца, по значению которого должен выполняться выбор подчиненного справочника является вызов метода ИспользоватьВладельца(<?>) для объекта подчиненного

VII. Справочники_____________________________________________________________ 75

справочника. Это позволяет определить выбор подчиненного справочника даже в том случае, когда в форме нет элемента диалога имеющего тип справочника - владельца. Для выборки элементов подчиненного справочника по владельцу, после метода ИсполъзоватьВладельца(< ?>) надо вызвать метод ВыбратьЭлементы() и далее методы ПолучитьЭлемент() или НайтиЭлемент(< ?>), НайтиПоКоду(< ?>), НайтиПоНаименованию(< ?>).




Упражнение 9. (Необязательное) Создайте в форме элемента и форме списка справочника «Оборудование» алгоритм, позволяющий при создании нового элемента программно создавать подчиненный элемент в справочнике «Единицы» с Наименованием «шт.» и Коэффициентом равным 1.

Опишем для этого предопределенные процедуры ПриЗакрытии() в модуле формы и в модуле формы списка справочника «Оборудование», потому что последовательность директив в кнопке «ОК» в форме следующая: #3аписать? Закрыть.

Метод ТекущийЭлемент() возвращает значение записанного в базу данных позиционированного текущего элемента справочника.

В модуле формы:

Перем ФлагНового;

Процедура ВводНового(признак,копируемый)

Если признак=1 Тогда

ВвестиСтроку(Наименование,"Введите наименование",25);



КонецЕсли;

Если Родитель.Выбран()=1 Тогда

Цена=Родитель.ГрЦена;

КонецЕсли;

ФлагНового-1;

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

Процедура ПриЗакрытии()

Если ФлагНового=1 Тогда

Ед=Создать0бъект("Справочник.Единицы");

Ед.ИспользоватьВладельца(ТекущийЭлемент());

Ед.Новый();

Ед.Наименование="шт.";

Ед.Коэффициент=1;

Ед.Записать();

КонецЕсли;

76   ______________________ 1C:Предприятие. Практика программирования на платформе V7

КонецПроцедуры ФлагНового=0;

В модуле формы списка мы можем создать несколько элементов, поэтому создадим список значений новых значений.

Метод РазмерСписка( ) возвращает число элементов в списке значений.

Метод ПолучитьЗначение(<Позиция>,<Строка>) позволяет получить значение из указанной

позиции списка. Возвращает значение из списка.

<Позиция> - номер позиции в списке, из которой возвращается значение (изменяется от 1 до

РазмерСписка); <Строка> - идентификатор переменной, в которой возвращается символьное

представление получаемого значения.

Метод НаЙтиПоКоду(<Код>,<ФлагПоиска>) позволяет найти элемент справочника по коду.

Возвращает: 1 - если действие выполнено;

О - если действие не выполнено (элемент не найден).

<Код> - выражение со значением искомого кода,



<флагПоиска> - флаг поиска (необязателен):

0 - поиск во всем справочнике вне зависимости от родителя;

1 - поиск внутри установленного подчинения (родителя);

2 - поиск по полному коду через разделитель.

Значение по умолчанию:

О - если код уникален во всем справочнике; 2 - если код уникален только'в группе. Его можно использовать только для объектов, созданных функцией СоздатьОбъект.

Перем СписокНовых;

Процедура ПриРедактированииНовойСтроки ()

Если Родитель.Выбран()=1 Тогда

Цена=Родитель.ГрЦена;

КонецЕсли;

СписокНовых.ДобавитьЗначение(Код,Наименование);

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

Процедура ПриЗакрытии()

Перем Стр;

Если СписокНовых.РазмерСписка()>0 Тогда

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

Для i=1 по  СписокНовых.РазмерСписка() Цикл

Если Новый.НайтиПоКоду (СписокНовых.ПолучитьЗначение (i, Стр),0) =1  Тогда

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

Ед.Новый();

Ед.Наименование="шт.";

Ед.Коэффициент = 1;

Ед.Записать();

КонецЕсли;

VII. Справочники_____________________________________________________________ 77

КонецЦикла;//

КонецЕсли;

КонецПроцедуры СписокНовых=Создать0бъект("СписокЗначений");

На приведенном ниже рисунке показано, как выглядят формы списков обоих справочников и форма элемента справочника «Единицы». В форме списка справочника «Единицы» отключен режим иерархии, но благодаря текстовому реквизиту «Владелец» можно различить единицы измерения с одинаковыми наименованиями и кодами , принадлежащие разным владельцам, в форме списка.




Содержание раздела