СПРАВОЧНИКИ
|
Назначение справочников |
Психушка.
Один придурок другому: -Тебе понравился мой рассказ, который я тебе вчера дал почитать? -Да, но как-то всё размыто и много действующих лиц. Входит врач: -Так, придурки, кто спёр мою телефонную книгу?... |
Назначение
справочников Система 1С:Предприятие позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: сотрудников, организаций, товаров и т. д. Каждый такой объект называется элементом справочника. С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его «поведения». Атрибуты справочников В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие. Помимо кода и наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике может быть создан список реквизитов. Используя механизм реквизитов справочника, легко организовать, например, картотеку сотрудников. Например, справочник Сотрудники почти наверняка будет иметь атрибуты Должность, Оклад и другие. Фирма 1С предвосхитила программистов и ввела во все справочники два уже заданных атрибута: Код и Наименование. Действительно, практически любой объект из реальной жизни содержит эти атрибуты. Например, для сотрудников кодом выступает табельный номер, а наименованием -- фамилия, имя, отчество (ФИО). Типы данных Для каждого атрибута справочника нужно указать его тип данных, например, "число", "строка", "дата". Это базовые типы, но можно указать и сложные типы данных. Например атрибут Должность имеет тип данных Должности. В этом случае, значения этого атрибута будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения атрибутов одного справочника выбираются из другого справочника.
Иерархические справочники Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Подчиненные справочники Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что "Сотрудник владеет налоговыми льготами".
Сравнение
справочников с другими объектами
|
Форма списка справочника Для удобства работы пользователей со справочником на этапе конфигурирования можно создать несколько видов экранных форм для показа справочника. В зависимости от контекста вызова справочника можно задать использование определенного диалога для работы с ним. Лучше один раз увидеть,
чем сто раз услышать, поэтому ниже для примера приведена форма списка
справочника Сотрудники: Модуль формы списка содержит процедуры и функции, которые действуют в контексте данной формы (в контексте объекта Справочник). Предопределенные процедуры вызываются системой 1С при наступлении определенных событий.
В форме списка справочника элементы могут быть отсортированы в различном порядке: по коду, по наименованию или по любому реквизиту, у которого в Конфигураторе установлен флажок Сортировка. Задать тип сортировки можно программно методом Сортировка (Способ, ФлагРазрешенияИзменения) Процедура ПриОткрытии() Отбор В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок "Отбор по реквизиту" в Конфигураторе . Процедура ПриОткрытии() Статический фильтр В 1С нельзя установить отбор по периодическому реквизиту или по нескольким реквизитам одновременно (сложный фильтр). В этом случае выходом из положения может быть метод ИспользоватьСписокЭлементов. Этому методу нужно передать список элементов, которые должны быть показаны. Предварительно этот список нужно сформировать. Процедура ПоказатьРаботающихПлотников()
КонецПроцедуры Форма элемента и форма группы Если справочник имеет сложную структуру, тогда его элементы удобнее редактировать в отдельном окне, а не в списке. Ниже приведена форма элемента справочника Сотрудники. В форме элемента справочника также есть предопределенные процедуры:
|
Программное
создание элемента справочника Ниже в справочник
Сотрудники программно добавляется новый сотрудник в группу Работающие.
В справочнике заполняется поля Наименование, ДатаПриема и пара периодических
реквизитов. СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Программное создание групп СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот. Транзакции При создании множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное создание всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется. СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Для Ном = 1 По 100
Цикл ЗафиксироватьТранзакцию(); |
Простой
перебор СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Фильтрация (отбор) СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Фильтрация в цикле СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
КонецЦикла; Порядок сортировки Перед выборкой можно задать порядок сортировки следующими методами: ПорядокКодов() Например, ниже открывается выборка сотрудников, отсортированных по номерам по убыванию: СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Запрос к справочнику Перебор элементов справочника можно организовать через Запрос. Часто это бывает удобнее, если применяется сложное условие отбора или группировка элементов. Подробнее см. Запросы |
Поиск
элемента СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Поиск по коду Если СпрСотр.НайтиПоКоду(1)
= 1 Тогда Поиск
по наименованию Режим = 1; // 1 -
поиск внутри установленного подчинения (родителя) (по умолч.); 0 - поиск
во всем справочнике Поиск по реквизиту ИмяРекв = "Год";
//у реквизита должен быть установлен флажок Сортировка в Конфигураторе Поиск элемента в цикле СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
КонецЦикла; Запрос к справочнику Поиск элемента справочника можно организовать через Запрос. Часто это бывает удобнее, если применяется сложное условие отбора. Подробнее см. Запросы |
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Внимание! Если вы производите непосредственное удаление элемента, то следите, чтобы на него не было ссылок в других объектах. Например, удаляемый сотрудник может использоваться в документе Отпуск. При его удалении ссылочная целостность базы данных будет нарушена. В этом случае рекомендуется пользоваться пометкой на удаление. Можно программно получить список объектов, содержащих ссылку на удаляемый объект методом НайтиСсылки(объект). Пометка на удаление Для контроля ссылочной целостности базы данных удаляемые элементы всего лишь помечаются на удаление. Затем специальной командой меню Операции => "Удаление помеченных объектов" в монопольном режиме система 1С проконтролирует ссылочную целостность и физически удалит элементы из базы данных, если на них нет ссылок в других объектах. СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); //можно
проверить, помечен ли элемент на удаление //можно
снять пометку на удаление Транзакции При удалении множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное удаление (пометка на удаление) всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется. СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ВыбратьЭлементы(); ЗафиксироватьТранзакцию(); |
Иерархический
справочник - это также многоуровневый справочник, или справочник
с группами. Назначение иерархических справочников Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Возможное количество уровней вложенности справочника задается в Конфигураторе. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую. Программное создание группы СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот. Установка
текущей группы Информация о текущем элементе Если справочник многоуровневый, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:
Возможность выбора группы в реквизите диалога Часто бывает удобно для реквизитов на форме, имеющих тип Справочник, отключить возможность выбора группы. Тогда в данное поле может быть выбран только элемент и не может быть выбрана группа. В общем, проще один раз попробовать, чем несколько раз объяснять. Форма.ВыбрСотрудник.ВыборГруппы(0); //отключить возможность выбора группы Запросы к иерархическому справочнику Запросы к иерархическому справочнику имеют некоторые особенности. Подробнее см. Запросы |
Справочник-владелец,
это также справочник-хозяин. Назначение подчиненных справочников Любой справочник может использоваться как сам по себе, так и быть подчиненным какому-либо другому справочнику. Например, справочник договоров может использоваться отдельно, а может быть связан со справочником организаций. Чтобы подчинить справочник какому-либо из справочников, уже существующих в системе, в поле «Подчинен» следует выбрать наименование этого справочника. Такой справочник в системе 1С:Предприятие называется владельцем. В отличие от многоуровневого справочника, в котором все элементы имеют одинаковую структуру, использование механизма подчиненных справочников позволяет связать элементы разной структуры. В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Внешне работа с подчиненным справочником в системе 1С:Предприятие будет выглядеть следующим образом. Если для подчиненного справочника установлен режим показа в виде иерархического списка, то перед использованием справочника сначала должен быть выбран элемент справочника-владельца. При показе на экране подчиненный справочник будет содержать в своем заголовке наименование элемента-владельца, а список элементов подчиненного справочника будет содержать только элементы, относящие к элементу-владельцу. При смене элемента-владельца информация в окне подчиненного справочника будет соответствующим образом обновлена. Если открыть подчиненный справочник, не выбрав элемент-владелец, то в окне подчиненного справочника не будет отображаться ни одного элемента, а в заголовке окна будет выдано сообщение «Не задан элемент-владелец». При работе с системой 1С:Преднриятие для подчиненного справочника может быть отключен показ в виде иерархического списка. В этом случае в окне подчиненного справочника будут отображаться все элементы этого справочника, то есть элементы, починенные разным владельцам, будут показываться вперемешку. Тем не менее, любой элемент подчиненного справочника «знает» своего владельца: если для справочника включен режим «Редактировать в диалоге» (см. ниже п. «Создание форм справочника»), наименование элемента-владельца будет выдаваться в заголовке окна редактирования элемента справочника. Установка текущего владельца СпрДоговоры = СоздатьОбъект("Справочник.Договоры"); Информация о текущем элементе Если справочник подчиненный, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:
|
Подобное свойство
реквизита справочника позволяет, например, легко организовать хранение
истории изменения курсов в справочнике валют. В режиме использования конфигурации для периодического реквизита можно вызвать окно «История». Это окно представляет собой таблицу, состоящую из двух граф: дата изменения значения реквизита справочника и значение на эту дату. Окно «История» позволяет редактировать историю изменений значения реквизита напрямую: вводить новые строки, редактировать или удалять существующие. Методы
периодических реквизитов //так
мы установим сотруднику категорию на определенную дату Внимание! Эти методы можно применять, если ранее не применялся метод ИспользоватьДату Установка даты выборки периодических реквизитов //можно
установить дату выборки периодических реквизитов для всего справочника //тогда
ниже уже нельзя использовать методы Установить и Получить Объект "Периодический" Для работы с историей периодического реквизита очень удобно использовать объект "Периодический". Пример, вывести историю карьеры сотрудника за текущий год: ИсторияКарьеры = СоздатьОбъект("Периодический"); С помощью объекта Периодический можно также редактировать и удалять значения. Полный список методов см. в Синтакс-помощнике. Проведение документов При проведении документа часто требуется установить новое значение периодического реквизита на определенную дату. Это называется движение документа. В этом случае следует применять метод УстановитьРеквизитСправочника: Процедура ОбработкаПроведения()
КонецПроцедуры Если документ имеет табличную часть и вы хотите, чтобы движения документа были привязаны к номеру строки документа, тогда следует применять метод ПривязыватьСтроку. Процедура ОбработкаПроведения()
КонецПроцедуры |
Назначение
подбора Организация подбора Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>) ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1); Процедура ОбработкаПодбора(Элемент,КонтФормы) Можно воспользоваться контекстом формы и сразу перейти в нужную группу, например: ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1); Процедура ОбработкаПодбора(Элемент,КонтФормы) Установка и получение значений из подбора КонтФормыПодбора.УстановитьЗначениеВПодборе(<ИмяРеквизита>,<Значение>) <ИмяРеквизита>
- строка с именем реквизита формы подбора значения; КонтФормыПодбора.ПолучитьЗначениеИзПодбора(<Выражение>) <Выражение> - строковое выражение, значение которого вычисляется в контексте формы подбора и возвращается в качестве результата. |
|
Цикл по справочникам КолвоСправочниковВКонфигурации
= Метаданные.Справочник();
КонецЦикла; т.е. если вызвать метод Метаданные.Справочник() без параметров, то он вернет общее количество справочников в конфигурации. Если передать ему в качестве параметра номер или название справочника, то он вернет справочник как объект конфигурации. Цикл по реквизитам справочника кфгСпрСотр = Метаданные.Справочник("Сотрудники"); КолвоРеквизитов =
кфгСпрСотр.Реквизит();
КонецЦикла; т.е. если вызвать метод Метаданные.Справочник(Х).Реквизит() без параметров, то он вернет общее количество реквизитов справочника Х в конфигурации. Если передать ему в качестве параметра номер или название реквизита, то он вернет реквизит справочника как объект конфигурации. Обращение к атрибутам по имени При работе с метаданными часто применяются следующие методы:
Что можно скачать Так как работа с метаданными плохо документирована самой фирмой 1С, то рекомендуется скачать следующий файл, который является файлом для Синтакс-помощника. В нем содержится описание работы с некоторыми методами объекта Метаданные. Распакуйте и поместите als-файл в каталог Program Files\1cv77\BIN и он будет подключен к Синтакс-помощнику. |