Зачем нужны подчиненные справочники и что такое владелец в 1с
Сегодня мы рассмотрим, как реализована работа с подчиненными справочниками на уровне встроенного языка и конфигуратора.
Чтобы справочник А сделать подчиненным справочнику Б - надо в режиме Конфигуратор в свойствах справочника А в поле "Подчинен" - выбрать справочник Б. Этого будет достаточно.
При работе с подчиненным справочником появляется один важный метод: «Использовать Владельца» и важный атрибут «Владелец».
Метод «ИспользоватьВладельца» - может применяться к объектам типа «Справочник» в нескольких случаях:
1. В качестве параметра выборки. Применяется для объектов полученных с помощью функции «СоздатьОбъект», являющихся подчиненными справочниками. Метод используется ДО метода «ВыбратьЭлементы». Дальнейшая выборка элементов с помощью функции ПолучитьЭлемент() будет происходить только среди элементов подчиненного справочника, для которых владельцем является элемент, установленный методом «ИспользоватьВладельца»
2. При создании нового элемента в подчиненном справочнике метод «ИспользоватьВладельца» - устанавливает владельца создаваемому элементу.
3. Для объектов типа «Справочник», являющихся реквизитами формы (например в документе или отчете) метод «ИспользоватьВладельца» позволяет программно установить владельца, который будет использован при выборе данного реквизита.
Атрибут «Владелец» - предоставляет доступ к значению элемента сопряженного справочника, которому подчинен выбранный элемент. Важно помнить, что этот атрибут может быть изменен, но только для объектов, полученных с помощью функции «СоздатьОбъект».
Это теоретические сведения.
Рассмотрим практические примеры. Все практические примеры используют справочники «Контрагенты» - «Расчетные счета». Эти справочники есть во многих конфигурациях, и Вы без проблем сможете опробовать примеры.
Пример 1. Перебрать все элементы справочника «Контрагенты» и подчиненного ему справочника «РасчетныеСчета».
Процедура Пример1()
Контр=СоздатьОбъект("Справочник.Контрагенты");
Рсч=СоздатьОбъект("Справочник.РасчетныеСчета");
Контр.ВыбратьЭлементы();//открываем выборку контрагентов
Пока Контр.ПолучитьЭлемент()=1 цикл
Сообщить("Контрагент "+Контр.Наименование);//сообщаем того по куму будем выводить счета
рсч.ИспользоватьВладельца(контр.ТекущийЭлемент());////ВОТ ОН!
рсч.ВыбратьЭлементы();//теперь открываем выборку
Пока рсч.ПолучитьЭлемент()=1 цикл//получаем из выборки новый элемент
сообщить("_____"+рсч.Наименование+" №"+рсч.Номер);// выводим имя и номер счета
конецЦикла;
конецЦикла;
КонецПроцедуры
Пример 2. Как перебрать элементы подчиненного справочника, «не глядя» на владельца. Номера и названия счетов всех контрагентов.
Процедура Пример2()
Рсч=СоздатьОбъект("Справочник.РасчетныеСчета");
рсч.ВыбратьЭлементы(0);//теперь открываем выборку
//Ноль означает, что выбираем без учета иерархии
//это все-равно, что отключить иерархический список в меню "Действия"
Пока рсч.ПолучитьЭлемент()=1 цикл//получаем из выборки новый элемент
сообщить(+рсч.Наименование+" №"+рсч.Номер);// выводим имя и номер счета
конецЦикла;
КонецПроцедуры
Пример 3. В примере 2 кроме названия и номера счета вывести название контрагента.
Процедура Пример3()
Рсч=СоздатьОбъект("Справочник.РасчетныеСчета");
рсч.ВыбратьЭлементы(0);//теперь открываем выборку
Пока рсч.ПолучитьЭлемент()=1 цикл//получаем из выборки новый элемент
Контрагент=рсч.Владелец;//вот мы и посмотрели на владельца
сообщить(рсч.Наименование+" №"+рсч.Номер+" "+Контрагент);
конецЦикла;
КонецПроцедуры
Обратите внимание! Очень важный момент. Разница между примером 1 и примером 3 – в первом случае перебираем справочник-владелец, а во втором случае – подчиненный справочник. В первом случае все счета оказываются сгруппированы по контрагентам. Во втором случае – один контрагент может встретиться несколько раз в разных местах (у разных счетов).
Пример 4. Для выбранного в форме контрагента – создать новый расчетный счет.
Процедура Пример4()
Рсч=СоздатьОбъект("Справочник.РасчетныеСчета");
Если ПустоеЗначение(выбКонтрагент)=1 тогда//смотрим - есть ли контрагент
предупреждение("Укажите контрагента - хозяина");//если нет - ругаемся
возврат; // и уходим
конецЕсли;
рсч.ИспользоватьВладельца(ВыбКонтрагент);//используем нового контрагента как владельца
рсч.Новый();//делаем новый элемент
рсч.Наименование="Валютный"; //заполняем реквизиты
рсч.Номер=777777777777;
//.
//.
рсч.Записать();//не забываем записать!
КонецПроцедуры
Важно: бывает так, что в диалоге лежит 2 реквизита. При этом один из них подчинен другому. Например, такое есть в любой расходной или приходной накладной: реквизит «Контрагент» и реквизит «Договор» (или основание). Вы точно знаете, что договор надо выбирать из списка договоров конкретного контрагента. Подчиненность можно установить программно: Договор.ИспользоватьВладельца(Контрагент). Программно надо устанавливать в момент выбора контрагента. Но можно подчиненность установить прямо в свойствах подчиненного реквизита – в поле «Связан с» - надо написать имя реквизита-владельца. В этом случае – после выбора владельца в реквизите хозяине, в подчиненном реквизите – автоматически будет устанавливаться выборка элементов по хозяину. Пример можно посмотреть в любой расходной накладной.
Задание для самостоятельной работы.
1. Не часто, но иногда требуется подчиненные элементы перенести (или скопировать) из под одного владельца – другому владельцу. Встроенного механизма – нет. Попробуйте написаться обработку, выполняющую перенос или копирование элементов из одного подчинения в другое.
2. Для тех, кому первое задание показалось легким: попробуйте написать универсальную обработку, которая бы позволяла работать с любыми двумя справочниками – один из которых владелец, а другой подчиненный.
3. Вопрос на засыпку: что будет после выполнения следующего программного кода. Где искать подчиненные элементы? Как система отреагирует на провокацию?
Процедура Засыпка()
пусто=ПолучитьПустоеЗначение("Справочник.Контрагенты");
Рсч=СоздатьОбъект("Справочник.РасчетныеСчета");
рсч.ВыбратьЭлементы(0);//теперь открываем выборку
Пока рсч.ПолучитьЭлемент()=1 цикл//получаем из выборки новый элемент
рсч.Владелец=пусто;// чистим владельца
рсч.Записать(); //и записываем с ПУСТЫМ пладельцем
конецЦикла;
КонецПроцедуры
Продолжение одинэсной темы, ответы на книгу Радченко, занятие 2 и 3.
Для чего используется объект конфигурации "Подсистема"?
Подсистема - основной элемент для построения интерфейса 1С:Предприятие. Подсистемы выделяют в конфигурации функциональные части, на которые логически разбивается прикладное решение.
Как описать логическую структуру при помощи Подсистем?
При помощи разделения на функциональные части, представляющие собой отдельные предметные области.
Как управлять порядком вывода и отображения подсистем в конфигурации?
Правый клик мыши по конфигурации, выбираем команду "Открыть командный интерфейс конфигурации", поменять позиции можно с помощью стрелочек.
Управление порядком вывода подсистем. |
Что такое окно редактирования объекта конфигурации и в чем его отличие от панели свойств?
Окно редактирования - в основном используется для создания новых объектов.
Палитра свойств - не привязано к конкретному объекту конфигурации.
Для чего предназначен объект конфигурации Справочник?
Справочник предназначен для работы со списками данных, описания их свойств и структуры.
Какие характерные особенности объекта конфигурации Справочник?
Справочник состоит из элементов; Каждый элемент представляет собой отдельную запись в таблице, хранящей информацию из этого справочника;
Элемент также может содержать дополнительную информацию, которая подробнее описывает этот элемент - одинаковый для всех элементов справочника - реквизит; Реквизит также является объектом конфигурации;
Для чего используются реквизиты и табличные части справочника?
Реквизиты используются для описания дополнительной информации, описывающей элемент справочника;
Табличная часть используется для описания информации элемента справочника, одинаковой по структуре, но различной по количеству.
Зачем нужны иерархические справочники и что такое Родитель?
Иерархические справочники нужны для группировки элементов справочника по какому-либо признаку или принципы. Различаются несколько типов иерархий: иерархия групп и элементов - элемент справочника, представляющий группу - родитель для всех элементов и групп, входящих в эту группу;
Иерархия элементов - родителем является не группой элементов справочника, а непосредственно сам элемент.
Зачем нужны подчиненные справочники и что такое Владелец?
Элементы одного справочника могут быть подчинены элементам другого справочника, и в таком случае устанавливается связь один-ко-многим. Так же может быть использована связь один-к-одному, когда каждый элемент подчиненного справочника связан с одним из элементов справочника-владельца.
Какие основные формы существуют у справочника?
Форма элемента - для редактирования или создания элемента справочника;
Форма группы - для редактирования или создания группы справочника;
Форма списка - для отображения списка элементов в справочнике;
Форма выбора группы - для выбора одной из группы справочника;
Что такое предопределенные элементы справочника?
Элементы справочника, создающиеся в конфигураторе, данные элементы пользователь удалить не может; Служат для хранения информации всегда, независимо от действий пользователя;
Чем с точки зрения конфигурации отличается обычный элемент от предопределенного?
На предопределенные элементы могут быть завязаны алгоритмы работы конфигурации, следовательно, система добавляет эти элементы в структуру базы данных сама, без участия пользователя.
Как пользователь может отличить обычный элемент от предопределенного?
С помощью пиктограммы
Очень часто в 1С 8.3. в справочнике необходимо настроить определенный порядок подчинения элементов. Для реализации подобных задач из простого справочника необходимо сделать иерархический справочник 1С.
В платформе 1С существует два вида иерархии – иерархия групп и элементов и иерархия элементов.
Иерархия групп и элементов
Для того, чтобы справочник имел иерархию групп и элементов, необходимо в редакторе справочника на закладке Иерархия установить флаг Иерархический справочник, а свойству Вид иерархии установить значение Иерархия групп и элементов.
Тогда у справочника можно будет создавать группы, и размещать элементы в группах.
При иерархии групп или элементов существуют группы (каталоги), в которые входят или другие группы, или элементы. И группы, и элементы являются экземплярами объекта справочника.
Группа это тоже экземпляр объекта справочника, по которому не ведется какой-либо учёт (как правило), и который может быть родителем другого экземпляра, т.е. в группу могут входить другие группы и элементы справочников.
Иерархия элементов
Иерархия элементов настраивается похожим способом: в редакторе справочника на закладке Иерархия устанавливается флаг Иерархический справочник, но свойству Вид иерархии следует установить значение Иерархия элементов.
После этого, каждый элемент может быть родителем другого элемента.
Родитель иерархического справочника 1С
У каждого элемента иерархического справочника должен быть родитель. В случае иерархии групп и элементов родитель это группа иерархического справочника, в случае иерархии элементов, родитель это элемент.
Родитель это стандартный реквизит справочника. Если иерархия отключена, то этот стандартный реквизит не доступен. Как у этого справочника Сотрудники.
А если иерархия включена, то этот реквизит доступен. Как у справочника Контрагенты.
Если форма элемента справочника автоматически генерируется платформой (т.е. она не создана), то этот реквизит отображается на управляемой форме. И, в случае иерархии групп и элементов в нем указана группа, в которую входит этот элемент.
Если группа не указана, то значит элемент верхнего уровня.
Также, родитель имеется у элементов справочника с иерархией элементов.
Создать элемент иерархического справочника 1С
Для того, чтобы создать группу справочника (в случае, иерархии групп и элементов), необходимо воспользоваться методом менеджера справочника СоздатьГруппу(). А для создания элемента следует воспользоваться методом СоздатьЭлемент(). Если мы хотим, чтобы вновь созданный элемент входил в какую-то группу, то следует в свойство Родитель этого элемента записать ссылку на нужную группу.
В коде ниже, создаем группу, а потом создаем элемент, который входит в эту группу:
Заметьте, группа в коде выше, группа верхнего уровня. У неё при создании не был задан Родитель.
В случае иерархии элементов всегда нужно создавать элементы, но также следует в свойстве Родитель созданного элемента указать ссылку на другой элемент, которому будет подчинен созданный.
Изменить элемент иерархического справочника 1С
Если мы хотим поменять подчиненность элемента иерархического справочника, или вообще убрать её, т.е. сделать из элемента элемент верхнего уровня, то следует работать со стандартным реквизитом Родитель. В случае, изменения подчиненности, этому реквизиту нужно присвоить ссылку на другую группу.
Если же мы хотим сделать элемент верхнего уровня, то этому реквизиту нужно присвоить пустую ссылку.
Поиск в иерархическом справочнике 1С
В платформе 1С имеется возможность искать в определенной группе иерархического справочника, для этого следует в методах НайтиПоНаименованию, НайтиПоКоду и НайтиПоРеквизиту заполнять параметр Родитель.
Например, поиск в определенной группе будет осуществляться так:
Выборка иерархического справочника 1С
В платформе 1С 8.3. существует возможность выбрать элементы иерархического справочника, которые входят в ту или иную группу, для этого следует воспользоваться методом Выбрать с заполненным параметром Родитель. В этом случае будут выбраны группы и элементы, которых входят непосредственно в указанную группу, но не будут выбраны группы элементы, которые входят в подчиненные группы. Чтобы выбрать элемент и группы, входящие в какую-то группу, следует воспользоваться методом ВыбратьИерархически.
Например, при таком коде:
Будут выбраны элементы, входящие в указанную группу.
А в этом случае:
Будут выбраны элементы, которые входят и в указанную группу, и в подчиненные ей группы.
И Выбрать, и ВыбратьИерархически отбирают и группы, и элементы справочников. Поэтому, в коде выше было использовано свойство ссылки справочника ЭтоГруппа. Это свойство имеет значение Истина, если ссылка является группой справочника.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Курс лекций
Форум
Справочник – это агрегатный тип данных, средство для работы со списками однородных элементов данных. Название и структура каждого конкретного справочника определяются при его создании в конфигураторе. У любого справочника существуют два реквизита, которые создаются автоматически – «Код» и «Наименование». Реквизиты справочников могут быть периодическими, т.е. иметь значения, связанные с датой. При изменении значения периодического реквизита старое значение сохраняется, при этом новое значение начинает действовать с указанной даты, старое – до указанной даты.
Свойства справочника редактируются в окне редактирования «Справочник». Для визуального представления справочника существуют «Форма элемента», «Форма группы» и «Формы списка» (их может быть несколько).
Если один справочник подчинен другому (задается в поле «подчинен» окна редактирования), то каждый элемент подчиненного справочника будет соответствовать элементу справочника-владельца. Для этого есть специальный реквизит «Владелец», по которому можно найти элемент справочника-владельца.
Справочник может иметь иерархическую структуру. Число уровней иерархии определяется в поле «Кол-во уровней» в окне редактирования. Для задания иерархии используется реквизит «Родитель», который и определяет, к какой группе относится элемент. Наиболее важные функции:
- ЭтоГруппа() – возвращает 1, если текущий элемент справочника – группа;
- ПринадлежитГруппе(<Группа>) – возвращает 1, если текущий элемент принадлежит группе <Группа>;
- Уровень() – возвращает номер уровня текущего элемента.
Глубина вложенности групп настраивается в конфигураторе и не может превышать 10 уровней.
Обычно для обработки элементов справочника используется следующая последовательность команд:
Есть несколько способов поиска элемента справочника:
- НайтиЭлемент(<Элемент>),
- НайтиПоКоду(<Код>),
- НайтиПоНаименованию(<Наименование>),
- НайтиПоРеквизиту (<Реквизит>, <Значение>).
В последнем случае необходимо, чтобы элементы справочника были отсортированы по этому реквизиту – в свойстве реквизита в закладке «Дополнительно» нужно поставить флажок «Сортировка».
Пример. Следующая функция выполняет поиск элемента справочника по наименованию. Если элемент с таким наименованием не найден, то создается новый элемент. Параметр «Справ» – строка с идентификатором справочника, «Наим» – наименование по которому производится поиск элемента. Функция возвращает ссылку на найденный или созданный элемент.
Для удаления текущего элемента справочника используется функция Удалить(<Режим>), где <режим> может иметь значение 0 – пометка на удаление, 1 – непосредственное удаление (используется по умолчанию). Вообще непосредственное удаление не рекомендуется, из-за возможного нарушения ссылочной целостности базы данных.
Чтобы удалить помеченные на удаление объекты через систему 1С:Предприятие 7.7, нужно зайти в программу в монопольном режиме и в меню «Операции» выбрать пункт «Удаление помеченных объектов…».
Документы в системе 1С: Предприятие используются для ввода, просмотра и корректировки информации о совершаемых хозяйственных операциях. У любого документа есть три обязательных реквизита «ДатаДок», «ВремяДок», «НомерДок». Дата и время, – наиболее важные характеристики документов, так как позволяют устанавливать строгую временную последовательность совершения операций. Форма документа редактируется при нажатии кнопки «Форма».
Реквизиты шапки документа задаются в списке «Реквизиты шапки». Реквизиты табличной части задаются в списке «Реквизиты табличной части».
Для того чтобы документ формировал проводки, необходимо
- создать хотя бы один план счетов.
- поставить флажок «Разрешить проведение документа».
- поставить флажок «Бухгалтерский учет».
Формирование проводок происходит в «Модуле документа» в предопределенной процедуре «Обработка проведения».
Обычно для обработки документов используется следующая последовательность команд:
Для ввода документа используется функция «Новый()», далее заполняются реквизиты шапки документа. Для ввода новой строки документа используется функция «НоваяСтрока()» и заполняются реквизиты табличной части документа.
Для просмотра списка документов используется «Журналы документов». Создание журнала производится в конфигураторе. В диалоговой форме задаются графы – реквизиты документов, входящих в журнал. Реквизиты табличной части можно добавить в журнал только в том случае, если в свойствах реквизита в закладке «Дополнительно» стоит флажок «Итог по колонке».
В соответствии с заданием №1 из приложения 3 создать справочники и документы в новой информационной базе.
Читайте также: