Реквизиты объекта справочники

Содержание

Справочники

Описание

Справочники хранят в себе одинаковые по структуре данные. Например, справочник товаров или справочник должностей. Справочники это ссылочный тип данных, на любой элемент справочника можно сослаться, в документах, константах или вообще в каких либо реквизитах.

Структура справочника

Справочник обычно описываются следующим набором данных:

  • Пользовательские реквизиты — при проектировании пользователь определяет какие данные, какого типа будут храниться в справочнике. Например у справочника Банковские счета будут определены реквизиты: номер счета, банк и тд, для справочника контрагенты ИНН, КПП и тд.

  • Предопределенные реквизиты — любой справочник обладает набором предопределенных реквизитов.

  • Табличные части — справочник может любое количество табличных частей.

Предопределенные реквизиты

У каждого справочника есть номер и наименование. В принципе их можно отключить, указав длину 0. Так же код может быть числовым или текстовым, если код текстовый для удобства сортировки система дополняет код лидирующими нулями на всю длину кода, например если у справочника указана длина кода 9 и справочнику был присвоен код 3 то система дополнит нулями до такого вида: «000000003». Также в случае если имеется распределенная база в код обычно добавляется префикс той базы в которой был создан элемент, например: «ЦН0000003». Нужно учитывать эту особенность если вы соберетесь указывать числовой код, этот объект не сможет корректно работать в распределенной базе. У справочника есть и другие предопределенные реквизиты:

  • ЭтоГруппа – Имеет смысл только для иерархических справочников. Указывает на то что элемент является группой.

  • Родитель — Имеет смысл только для иерархических справочников. Указывает на группу или элемент который является родителем для этого справочника.

  • Владелец – Имеет смысл только для подчиненных справочников. Указывает на владельца данного справочника.

  • ПометкаУдаления – атрибут с типом булево, указывает помечен ли элемент на удаление или нет.

  • Ссылка – это самый главный атрибут, справочник потому и называется ссылочным типом, потому, что у него есть уникальная ссылка, которая хранится в этом атрибуте.

  • Предопределенный – атрибут с типом булево указывает на то, что элемент создан в конфигураторе.

Иерархичность.

Иерархия это способность выводить справочник в виде дерева. Эта возможность бывает очень удобной, в случаях когда в справочнике содержится много информации. В таких случаях бывает полезно разложить номенклатуру «по полочкам». При включении иерархичности у справочника, добавляются два стандартных реквизита ЭтоГруппа и Родитель. Манипулируя значением реквизита Родитель, можно переназначать родителей элемента. Строится иерархия на группах, в эти группы могут входить другие элементы или другие группы. Аналогию можно провести с проводником windows или с большинством файловых систем если вам будет удобно: есть папки в которых могут быть как файлы так и папки в которых в свою очередь тоже могут быть и файлы и папки итд. Иерархия может работать и без групп. То есть родителями могут выступать другие элементы справочника. Такой вид иерархии называется иерархия элементов. Если мы настроили иерархию, у нас появляется возможность настраивать, для какого типа могут использоваться реквизиты, для групп, элементов, или и для того и для другого. Иерархия настраивается на закладке Иерархия свойств справочника.

Подчиненность

Подчиненность это возможность сделать несколько записей одного справочника уникальными для одной записи другого справочника(если вы знакомы с основами реляционных баз даных, это связь, один ко многим ). Например: у одного контрагента, может быть много договоров, но это будут только его договора, у второго контрагента будет свой набор договоров. В этом случае справочник договоры подчинен справочнику контрагенты. Подчинение справочника реализовано предопределенным реквизитом Владелец, следовательно у одной конкретно взятой записи справочника, может быть только один владелец. В то же время у одного справочника может быть несколько владельцев. Владельцами могут быть не только справочники, а также планы обмена, планы видов характеристик, планы счетов, планы видов расчета. Также можно указать вид объекта для подчинения, доступны элементы, группы или и то и другое. Если для справочника определены подчиненные справочники и у элемента справочника не назначена основная форма, то при открытии элемента этого справочника в режиме предприятия, в управляемых формах система автоматически добавит панель для открытия подчиненных справочников с фильтром на поле владелец по текущему элементу. Такое поведение можно настроить и на уже существующих формах. FIXME(скрин)

Ввод по Строке

При выборе ссылочных данных в 1С есть возможность выбрать элемент справочника или документ, набирая ключевые реквизиты объекта который мы хотим найти, выглядит это следующим образом: пользователь, набирает «масло моторное» в поле ввода с типом «Справочник.Номенклатура» и нажимает ввод. 1С находит все записи которые начинаются с названия со слов «масло моторное» и показывает их в виде выпадающего списка под полем где пользователь вводил текст. Такой же ввод возможен и для документов. Это поведение системы можно настроить на закладке «Формы». Там есть поле Ввод по строке, по умолчанию для справочников указана возможность поиска по коду и наименованию, но туда можно добавить и свои реквизиты, для того, что бы добавить этот реквизит, он должен быть индексирован и реквизит должен быть примитивного типа.

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

Предопределенные элементы справочников определяются в конфигураторе на закладке Прочие. При создании элемента указывается имя и наименование предопределенного элемента. Имя и будет являться идентификатором для обращения к этому предопределенному элементу, поэтому к имени предъявляются такие же требования как и к другим идентификаторам(не может начинаться с числа, нельзя использовать пробелы и тд). Наименование может быть любым, его пользователь и увидит в справочнике и сможет его при желании изменить. Пользователь не может изменить имя который был указано при создании этого элемента, зато он может удалить предопределенный элемент.FIXME(надо бы найти номер релиза когда это стало возможным).
Обращение к предопределенным элементам происходит так:

НашаФирма = Справочники.Контрагенты.НашаДочерняяФирма

Таким образом, очень удобно ссылаться на предопределенные элементы из встроенного языка или опираться на них при построении каких то условий. Предопределенные элементы справочников можно использовать в схемах СКД и запросах.

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

Для предопределенных элементов справочников, стандартный реквизит Предопределенный имеет значение Истина. Это свойство которое доступно только на чтение, но это не означает, что нельзя «обычный» элемент справочника сделать предопределенным и наоборот. В последних релизах 8.3FIXME(Надо узнать в каких именно), появилась возможность переопределять предопределенные элементы изменяя свойство ИмяПредопределенныхДанных. Например, вот так можно сделать элемент не предопределенным:

ПредОпрЭлемент = Справочники.МойСправочник.НайтиПоКоду("КодЭлемента").ПолучитьОбъект();
ПредОпрЭлемент.ИмяПредопределенныхДанных = “”;
ПредОпрЭлемент.Записать();

И наоборот указав в свойстве ИмяПредопределенныхДанных имя предопределенного элемента справочника, можно сделать его предопределенным. У иерархических справочников возможно указывать предопределенные группы. Предопределенные элементы нельзя создавать у подчиненных справочников. В пользовательском режиме предопределенный элемент отличается, от обычного, следующим образомFIXME(показать скрин).

Подсказка. Предопределенные элементы часто используют для того, что бы избавиться в коде от конструкций вида: НайтиПоКоду и НайтиПоНаименованию. Использование этих методов считается дурным тоном, так как наименование и код справочника достаточно часто изменяются. Обычно поступают следующим образом: Создают справочник, например Настройки с единственным реквизитом Значение. После этого в конфигураторе добавляют предопределенный элемент с нужным названием а в режиме 1с Предприятие, задают его значение. Теперь вместо того что бы писать в коде:

Нашафирма = Справочники.Организации.НайтиПоНаименованию("ООО Рога и копыта")

или что еще хуже

Нашафирма = Справочники.Организации.НайтиКоду("000112")

Можно просто указать:

Нашафирма = Справочники.Настройки.НашаФирма.Значение

подробнее можно почитать здесь http://infostart.ru/public/275145/

Классы для работы со справочниками.

Все классы справочника можно увидеть в ветке Прикладные объекты –> Справочники.

Cправочники это элементы которые хранятся в базе данных, считается очевидным, что обращение к любому из классов возможно только на сервере.

Справочник менеджер

Справочник менеджер – можно получить с помощью переменных глобального контекста:

Номенклатура = Справочники.Номенклатура;

Этот класс служит для:

  • Поиска по наименованию, коду или другому реквизиту.

    Ножницы = Справочники.Номенклатура.НайтиПоНаименованию("Ножницы канцелярские");
  • Программного создания групп или элементов:

    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭлемент.Реквизит1 = "КакоеТоЗначение";
    НовыйЭлемент.Записать();
  • Делать выборки:

    Выборка = Справочники.Номенклатура.Выбрать()

    Получать пустые ссылки:

    Пусто = Справочники.Номенклатура.ПустаяСсылка(); 

И много еще разных возможностей которые можно наблюдать в синтаксис помощнике в ветке: Прикладные объекты – >Справочники – СправочникМенеджер.<ИмяСправочника>

Справочник ссылка

Справочник ссылка – самый часто используемый тип. Используется для чтения данных справочника. Его можно получить с помощью НайтиПоНаименованию, НайтиПоКоду и др методов класса СправочникМенеджер. Так же его можно получить с помощь класса Выборка и этот тип данных хранится в реквизите Cсылка объекта класса Справочник объект.
В этом классе нам доступны все реквизиты справочника, табличные части и все стандартные реквизиты. Абсолютно все свойства этого класса нам доступны только на чтение. Для того что бы изменять реквизиты справочника нам нужен класс Справочник Объект. Получить его можно с помощью метода Получить Объект().

Справочник Объект

Класс Справочник Объект отличается от класса Справочник Ссылка не многим, основная его функция обеспечить возможность изменения элемента справочника. Запись происходит с помощью метода Записать()

Справочник Выборка

Справочник Выборка получается с помощью методов Выбрать и Выбрать Иерахически он позволяет обойти элементы справочника в цикле, с помощью метода Следующий().

Популярные приемы работы со справочниками

Поиск по наименованию.

Несмотря на то, что неоднократно рассматривается поиск элемента справочника по наименованию, «зашивать» в код значения из базы данных считается дурным тоном.

Для поиска по наименованию используется функция НайтиПоНаименованию(). Для использования этого метода необходимо указать наименование по которому будет происходить поиск. Если поиск должен проходить по точному соответствию с указанной строкой то вторым параметром, нужно указать Истина, иначе поиск будет проходить по первым буквам указанного шаблона поиска, то есть если в качестве строки для поиска указать «Слон» то под шаблон попадут и «Слон» и «Слон игрушечный» и «Слонопотам». Поиск можно ограничить определенной группой, если справочник иерархический или владельцем, если справочник подчиненный. Если значение не найдено, метод вернет пустую ссылку того типа справочника для которого производился поиск.

Поиск по коду

Для поиска по коду используется функция НайтиПоКоду(). Для использования этого метода необходимо в параметре «Код» указать код, по которому будет производиться поиск. Если в качестве кода указывается полный путь с учетом иерархии (уровни справочника разделяются символом «/»), то второй параметр поиск по полному коду, необходимо установить в Истина. Например:
Номенклатура «Слонопотам» с кодом «001142» находится в папке «Мягкие Игрушки» с кодом «000826» которая находится в папке «Игрушки» с кодом 000375. Тогда можно найти ее с помощью вот такой строки

Слонопотам = Справочники.Номенклатура.НайтиПоКоду("000375/000826/001142", Истина);

Или можно искать сразу:

Слонопотам = Справочники.Номенклатура.НайтиПоКоду("001142");

Поиск можно ограничить определенной группой, если справочник иерархический или владельцем, если справочник подчиненный. Если значение не найдено, метод вернет пустую ссылку того типа справочника для которого производился поиск. Поиск может осуществляться и по реквизиту с помощью одноименного метода, главное условие реквизит должен быть индексирован.

Выборка

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

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл 
	Наименование = Выборка.Наименование;
КонецЦикла;

При использовании метода Следующий() в классе выборка, текущим устанавливается следующий элемент из текущей выборки. Если в выборка спозиционировалась на определенном элементе, она возвращает Истина, иначе Ложь. Для класса Справочник Выборка доступны все поля и табличные части, которые определены для текущего справочника, а так же есть свойство Ссылка которое позволяет получить ссылку на текущий элемент справочника из выборки.
Для того что бы при выборке учитывалась иерархия справочника, необходимо использовать метод ВыбратьИерархически().

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

Элементы и группы справочников, можно создавать и не посредственно из программного кода. Для этого используется следующий код:

НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемнт();
НовыйЭлемент.Наименование = "ТестоваяНоменклатура";
НовыйЭлемент.ПолноеНаименование = "ТестоваяНоменклатура";
//Заполнение всех остальных элементов
НовыйЭлемент.Записать();

Группа справочника создается аналогично с помощью метода СоздатьГруппу()
В том случае, если у справочника установлено свойство Автонумерация код указывать не нужно, он устанавливается автоматически.

Проверка переменной с типом СправочникСсылка на заполненность

Иногда возникает необходимость проверить заполнено ли значение с типом «Справочник.Ссылка». Такая необходимость может возникнуть, когда реквизит какого либо объекта имеет тип «Справочник.Ссылка» или когда вы например ищете элемент справочника по коду или наименованию, или в ряде других случаев, когда метод возвращает пустую ссылку на справочник. Есть несколько способов это сделать:

  1. Использовать метод глобального контекста ЗначениеЗаполнено() который можно применить к любому типу а не только к справочнику. Доступно и на клиенте и на сервере.

  2. Сравнить c пустой ссылкой менеджера этого справочника. Например:

    Если ПроверяемоеЗначение = Справочники.Номенклатура.ПустаяСсылка() Тогда

    Только для сервера

  3. Использовать метод ‘Пустая()’ доступный на клиенте для объектов класса «Справочник ссылка».

Проверка элемента справочника на вхождение в какую либо группу или подчинение элементу

Когда мы говорим о проверке подчиненности, необходимо понимать, что все методы справедливы не только для групп, но и для элементов, если у справочника установлен вид иерархии «Иерархия элементов».
Здесь возможно несколько вариантов: если у нас есть группа и нам необходимо знать если ли именно в ней и нигде иначе определенный элемент справочника, то можно сравнить предопределенный реквизит Родитель нужного нам элемента справочника с ссылкой на группу, например:

Если КакойтоЭлемент.Родитель = НужнаяГруппа Тогда

Если справочник многоуровневый и нужно знать есть ли элемент в этой группе или где то в подчинненых группах то можно воспользоваться методом «ПринадлежитЭлементу()» этот метод вернет Истина если элемент содержится в текущей или любой подчиненной группе. Например в этом случае

НужнаяГруппа = НайтиПоНаименованию("ГруппаРаз");
Если НашЭлемент.ПринадлежитЭлементу(НужнаяГруппа) Тогда

условие будет истинным.

СправочникСсылка <> СправочникОбъект

При работе со справочниками очень важно понимать, что во всех реквизитах, выборках и тд, мы чаще всего работаем с типом СправочникСсылка и этот тип позволяет получить любую информацию которая находится в его реквизитах, но не поддерживает запись. Для изменения реквизитов справочника и записи следует использовать тип СправочникОбъект. Преобразовать ссылку в объект можно с помощью метода ПолучитьОбъект() Например:

КонтрагентПетров = Справочники.Контрагенты.НайтиПоНаименованию("Петров Иван Сергеевич");
КонтрагентОбъект = КонтрагентПетров.ПолучитьОбъект();
//Здесь идут какие то изменения
КонтрагентОбъект.Записать(); //и непосредственно запись

Проверка на то что ссылка является ссылкой на справочник

Проверить то что справочник является ссылкой можно очень просто, с помощью одной строки:

Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(СсылкаНаЭлементСправочника));

Где СсылкаНаЭлементСправочника проверяемая ссылка, эта строка вернет Истина если проверяемая ссылка является ссылкой на какой либо элемент справочника.

Объект 1С «Справочники» — это прикладные объекты конфигурации 1С, предназначенные для хранения в информационной базе данных, имеющих одинаковую структуру и списочный характер (например, список сотрудников, перечень товаров, список контрагентов).

Т.о. Справочник предназначен для хранения справочной информации об однотипных объектах и представляет собой список, заполняемый пользователем на этапе исполнения прикладного решения.

Справочник хранится в таблице. Запись (строка) таблицы определяет объект базы данных – элемент справочника. Но объект базы данных включает не только запись в основной таблице справочника, но и все записи всех табличных частей справочника, относящиеся к данному объекту. Таким образом, объект базы данных включает в себя:

  1. запись основной таблицы;
  2. записи табличных частей.

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

Использование справочника:

  1. позволяет избежать многократного ввода одной и той же информации (например, наименования контрагента);
  2. обеспечивает сквозную идентификацию (например, идентификацию контрагента при отгрузке и оплате).

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

1С Справочники

Особенности Справочника 1С:

  1. каждый элемент справочника может иметь сложную структуру, задаваемую разработчиком на этапе конфигурирования;
  2. каждый элемент справочника характеризуется кодом и наименованием;
  3. каждый элемент справочника может содержать некоторую дополнительную информацию,  описывающую этот элемент (например, артикул и др.);
  4. поддерживается режим автоматической нумерации элементов (автоматической генерации кода для нового элемента справочника);
  5. позволяет осуществлять контроль уникальности кодов справочника, не разрешая создавать элементы с одинаковыми кодами.

Реквизиты справочника 1С

Реквизиты справочника (документа) 1С – это поля справочника (документа), которые отображаются на форме, и предназначенные для заполнения пользователем в процессе исполнения прикладного решения.

Все справочники содержат два обязательных (предопределенных) реквизита:

  1. Код;
  2. Наименование.

Например, для сотрудников кодом может выступать табельный номер, а наименованием — фамилия, имя и отчество (ФИО).

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

Набор такой информации является одинаковым для всех элементов конкретного справочника.

Рисунок «Реквизиты справочника 1С»

Реквизиты справочника 1С

[свернуть]

Каждый реквизит 1С имеет свойства, отображаемые в палитре свойств реквизита.

Основные свойства реквизитов справочника 1С (в зависимости от Типа могут отличаться)

Основные свойства реквизитов справочника 1С

  1. Имя – наименование реквизита в языке 1С (в имени реквизитов не должно быть пробелов и знаков препинания).
  2. Синоним – отображение наименования реквизита для пользователя в режиме 1С:Предприятие.
  3. Тип – тип данных, хранящихся в реквизите:
    • Число — используется для численных значений;
    • Строка — строковые значения, может быть ограничена по длине;
    • Дата — дата и/или время;
    • Булево — использование флагов (значения Истина/Ложь или Да/Нет);
    • ХранилищеЗначения (хранилище значений 1С) – это объект, который позволяет хранить в базе данных прочие значения, например картинки и файлы, структуры и таблицы значений. (подробнее…);
    • УникальныйИдентификатор — статистически уникальный 128-битный идентификатор, позволяющий создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов (подробнее здесь и здесь);
    • СправочникСсылка, ДокументСсылка и т.д. — хранит ссылку, идентифицирующую объект в базе данных; используется везде, где нужно хранить ссылку на элемент (подробнее).

Флаг «Составной тип данных» позволяет выбрать несколько типов данных одновременно:

Составной тип данных

В этом случае пользователю в прикладном решении будет отображаться кнопка «Т», при нажатии на которую откроется окно «Выбор типа данных».

[свернуть]

  • Использование (Для элемента; Для группы; Для группы и элемента) — установка «Для группы и элемента» позволит задавать данный реквизит и для элементов иерархического  справочника, и для его групп.
  • Индексировать – позволяет указать системе, что нужно создать дополнительный индекс, содержащий соответствующий реквизит:
    1. «Индексировать» — индекс строится непосредственно по реквизиту. Включать, если требуется только поиск с помощью запроса объектов по данному реквизиту (без упорядочивания). Создаваемый индекс потребляет меньше ресурсов системы.
    2. «Индексировать с доп. упорядочиванием» — для использования в динамических  списках; индекс строится по реквизиту, а также по некоторому полю, которое обычно используется для упорядочивания объектов этого типа. Включать, если требуется просмотр списка с отбором по реквизиту.
  • Полнотекстовый поиск — участие в механизме полнотекстового поиска, позволяет быстро находить нужную информацию в данных информационной базы и в справочной системе.
  • История данных — хранение истории изменения прикладных данных пользователями.
  • Заполнять из данных заполнения — свойство определяет возможность заполнения реквизита из данных заполнения. Используется для заполнения реквизитов из значений текущего отбора списков. Читай также Как программно при открытии формы передать в нее нужные данные заполнения,  Как открыть форму с заполнением.
  • Значение заполнения — см. выше. Читай также Обработчик проверки заполнения.
  • Проверка заполнения — функция ПроверитьЗаполнение() проверяет заполнение реквизитов, у которых свойство «Проверка заполнения» установлено в значение «Показывать ошибку». Если реквизит не заполнен, то выводится сообщение об ошибке (возвращает ЛОЖЬ). Читай также здесь о программной проверке заполнения..

[свернуть]

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

Справочники допускают также создание предопределенных элементов, которые существуют в справочнике всегда, вне зависимости от действий пользователя. Такие элементы справочника создаются разработчиком при разработке прикладного решения и не могут быть удалены или перемещены пользователем.

Обычные элементы непостоянны для конфигурации и в процессе работы пользователя они могут появиться (или исчезнуть). Предопределенные элементы, напротив, постоянны (теоретически пользователь может их удалить, но , как правило, пользователю не даются права не только на интерактивное удаление предопределенных элементов, но и на интерактивное удаление объектов вообще). Поэтому конфигурация может работать с ними вполне уверенно и опираться на них  средствами встроенного языка при отработке различных алгоритмов. 

Рисунок «Предопределенные элементы справочника 1С»

Закладка «Прочее» в окне редактирования объекта конфигурации «Справочник»:

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

[свернуть]

Табличные части справочника 1С

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

Рисунок

Табличные части справочника 1С

[свернуть]

Справочники поддерживают иерархическое расположение элементов (групп элементов). Например, в справочнике Номенклатура могут быть созданы группы «Товары» и «Услуги», в которых располагаются элементы номенклатуры, относящиеся к этим группам.

Виды иерархии элементов справочников 1С:

  1. Иерархия групп и элементов — группы справочника могут включать в себя как элементы, так и другие группы, создавая тем самым многоуровневую иерархическую структуру.

    Рисунок «Закладка «Иерархия» в окне редактирования объекта конфигурации «Справочник»

    Иерархия элементов справочника 1С

    [свернуть]

  2. Иерархия элементов — элементы справочника будут относиться не к группам, а к другим элементам этого же справочника. Такой вид иерархии может использоваться, например, при создании справочника «Задачи», где одна задача может включать в себя несколько других задач.

Подчинение справочников (Список владельцев справочника)

Справочники могут находиться в состоянии подчинения по отношению друг к другу, т.е. элементы одного справочника могут быть подчинены элементам или группам другого справочника:

  • если справочник иерархический (содержит подчиненные элементы), то у него будет доступен стандартный реквизит Родитель;
  • если справочник подчинен другому объекту конфигурации, у него будет доступен реквизит Владелец.

Например, справочник «Кассы» может быть подчинен справочнику «Организации».

Рисунок «Подчинение справочников 1С»

Подчинение справочников (Список владельцев справочника)

[свернуть]

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

Значения свойства ИспользованиеПодчинения (SubordinationUse):

  • Группам (ToFolders)
  • ГруппамИЭлементам (ToFoldersAndItems)
  • Элементам (ToItems)

Свойство ИспользованиеПодчинения определяет использование ограничение подчинения для групп и элементов подчиненных справочников. Если у справочника несколько владельцев, то ограничение применяется ко всем владельцам.

Формы справочника 1С

Для того чтобы пользователь мог просматривать и изменять данные, содержащиеся в справочнике, система поддерживает несколько форм представления справочника, которые генерируются автоматически.

Наряду с этим разработчик имеет возможность создать собственные формы, которые система будет использовать вместо форм по умолчанию

Форма списка справочника 1С

Форма списка 1С используется для просмотра данных, содержащихся в справочнике, и позволяет:

  • выполнять навигацию по справочнику;
  • добавлять, помечать на удаление и удалять элементы и группы справочника;
  • перемещать элементы и группы.

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

Конструктор формы списка справочника на закладке «Далее» всегда позволяет разместить на диалоге список элементов и, кроме того, для иерархических справочников с иерархией групп и элементов, — дерево групп.

Рисунок «Форма списка 1С»

Справочник 1С форма списка

Форма списка 1С

[свернуть]

Форма элемента справочника 1С

Форма элемента справочника 1С используется для просмотра и изменения данных отдельных элементов справочника. Как правило, она представляет данные в удобном для восприятия и редактирования виде.

В конструкторе формы элемента справочника на втором шаге (кнопка «Далее») указать размещение табличного поля, содержащего данные подчиненного справочника, нельзя, такие действия нужно выполнять уже при работе с формой.

Рисунок «Форма элемента справочника 1С»

Форма элемента 1С

Форма элемента справочника 1С

[свернуть]

Форма группы справочника 1С

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

Форма выбора, форма выбора группы 1С

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

Кроме всех перечисленных форм, система поддерживает еще форму выбора группы справочника, предназначенную для выбора только среди групп, содержащихся в справочнике.

Рисунок «Форма выбора группы 1С»

Форма выбора группы 1С

[свернуть]

Макеты 1С

Справочнику могут быть сопоставлены несколько макетов, предназначенных

  • для формирования печатных форм справочника или
  • для отображения дополнительной информации, имеющей отношение к справочнику.

Рисунок «Макеты 1С»

Макеты 1С

[свернуть]

Использование программного кода для работы со справочниками 1С

Указанные ниже части программного кода должны размещаться в процедурах, функциях или модулях, выполняемых на стороне сервера (читай Программные модули платформы 1С: предназначение и свойства).

Ссылка на справочник

Для работы со справочником из какого-либо модуля требуется сначала создать ссылку на этот справочник.

// 1 вариант

Сотрудники = Справочники.Сотрудники; 

// 2 вариант

Должности = Справочники[«Должности»];

[свернуть]

Создание и запись нового элемента справочника

//создаем новый элемент справочника

НовЭлемент = Справочники.Сотрудники.СоздатьЭлемент();

//определяем значения реквизитов нового элемента справочника

НовЭлемент.Наименование = «Иванов Иван Иванович»;

НовЭлемент.Подразделение «Администрация»;

НовЭлемент.Оклад = 10000;

// записываем новый элемент в базу данных

НовЭлемент.Записать();

[свернуть]

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// если элемент найден, то он возвращается, иначе возвращается значение <Неопределено>

//обращаемся к справочнику Сотрудники

СпрСотрудники = Справочники.Сотрудники;

//ищем сотрудника по коду

Сотрудник = СпрСотрудники.НайтиПоКоду(25);   

//или ищем по наименованию

Сотрудник = СпрСотрудники.НайтиПоНаименованию(«Иванов Иван Иванович»); 

//или ищем по реквизиту

Сотрудник = СпрСотрудники.НайтиПоРеквизиту(«Оклад», 10000);   

//проверяем значение

Если Сотрудник = Неопределено Тогда

//действия в случае, если элемент не найден

КонецЕсли;

[свернуть]

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

Выборка = Справочники.Сотрудники.Выбрать();

// начало перебора элементов справочника в цикле

Пока Выборка.Следующий() 1 Цикл 

//действия с очередным элементом …

Сообщить(«Сотрудник « + Выборка.Наименование);

КонецЦикла;

[свернуть]

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

СпрСотрудники = Справочники.Сотрудники;

//непосредственное удаление текущего элемента справочника

СпрСотрудники.Удалить();

// проверка, помечен ли элемент на удаление

Пометка = СпрСотрудники.ПометкаУдаления; //обратите внимание: это свойство

Если Пометка = Истина Тогда

//элемент помечен на удаление

КонецЕсли;

//установить пометку на удаление

СпрСотрудники.УстановитьПометкуУдаления (Истина); 

//снять пометку на удаление

СпрСотрудники.УстановитьПометкуУдаления (Ложь);

[свернуть]

Создание и запись новой группы справочника (для иерархического справочника)

// 1 вариант 

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

НовГруппа.Наименование = «Работающие»;

НовГруппа.Записать(); 

// 2 вариант 

НовГруппа = Справочники[«Сотрудники»].СоздатьГруппу();

НовГруппа.Наименование = «Работающие»;

НовГруппа.Записать();

[свернуть]

Перебор элементов внутри группы (родителя)

СпрСотрудники = Справочники.Сотрудники;

ГруппаРаботающие = СпрСотрудники.НайтиПоНаименованию(«Работающие»);

Выборка = СпрСотрудники.Выбрать(ГруппаРаботающие);

Пока Выборка.Следующий() 1 Цикл

//действия с очередным элементом

Сообщить(«Сотрудник « + Выборка.Наименование);

КонецЦикла;

[свернуть]

Перебор элементов справочника, принадлежащих элементу другого справочника (владельца)

Пусть справочник «Кассы»подчинен другому справочнику «Организации».

Выборка = Справочники.Кассы.Выбрать( ,Организация); 

// где Организация — ссылка на элемент справочника «Организации»,

//см. также справку по СправочникМенеджер.<Имя справочника>

Пока Выборка.Следующий() = 1 Цикл

 //действия с очередным элементом

Сообщить(«касса « + Выборка.Наименование);

КонецЦикла;

[свернуть]

Транзакция при работе со справочниками 1С

Транзакция — логически связанная, неделимая последовательность действий: транзакция может быть либо выполнена целиком, либо вообще не выполнена.

Транзакция при работе со справочниками используется:

  • при создании множества элементов справочника для ускорения работы;
  • для повышения надежности операций (в случае какого-либо сбоя транзакция не выполняется, изменения не вносятся, все останется также, как до запуска транзакции).

Транзакции широко применяются в банковской сфере.

Транзакции в 1С могут быть:

  1. созданы автоматически (примеры — обработка проведения документа, запись элемента справочника в базу данных, запись набора записей регистра сведений и т.д.);
  2. описаны разработчиком с помощью методов:
    • ТранзакцияАктивна() — узнать, активна ли транзакция;
    • НачатьТранзакцию() — активация транзакции;
    • ЗафиксироватьТранзакцию() — фиксация результатов транзакции;
    • ОтменитьТранзакцию() —  отмена действия транзакции.

ВАЖНО! 1С не поддерживает вложенных транзакций:

  • если вы несколько раз открываете транзакцию, она «сливается» в одну;
  • если вы фиксируете или отменяете подобную транзакцию, то это действие производится со всеми транзакциями, активируемыми ранее.

СпрСотрудники = Справочники.Сотрудники;

НачатьТранзакцию();

Для Ном = 1 По 100 Цикл

 Нов = СпрСотрудники.СоздатьЭлемент();

 Нов.Наименование = «Новый « + Строка(Ном);

 Нов.Записать();

КонецЦикла;

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

[свернуть]

Справочники

Справочники — это прикладные объекты конфигурации. Они позволяют хранить в информационной базе данные, имеющие одинаковую структуру и списочный характер. Это может быть, например, список сотрудников, перечень товаров, список поставщиков или покупателей.

Структура справочника

Каждый элемент справочника характеризуется кодом и наименованием. Система поддерживает режим автоматической нумерации элементов, при котором она самостоятельно может генерировать код для нового элемента справочника. Кроме этого система позволяет осуществлять контроль уникальности кодов справочника, не разрешая создавать элементы с одинаковыми кодами:


Справочники

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


Справочники

Кроме этого, каждый элемент справочника может содержать некоторый набор информации, которая одинакова по своей структуре, но различна по количеству, для разных элементов справочника. Например, для каждого сотрудника в справочнике Физические лица это может быть контактная информация или информация о составе семьи, образовании. Для хранения подобных данных служат табличные части справочника:


Справочники

Справочники могут поддерживать иерархическое расположение элементов. Например, в справочнике Номенклатура могут быть созданы группы: Бытовая техникаОбувьПродукты и т. д., в которых располагаются элементы, относящиеся к этим группам. Кроме того группы справочника могут включать в себя и другие группы, создавая тем самым многоуровневую иерархическую структуру.


Справочники

В справочниках возможен и другой вид иерархии, при котором элементы справочника будут относиться не к группам, а к другим элементам этого же справочника. Такой вид иерархии может использоваться, например, при создании справочника Задачи, где одна задача может включать в себя несколько других задач.


Справочники

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


Справочники

Справочники допускают также создание предопределенных элементов, которые существуют в справочнике всегда, вне зависимости от действий пользователя. Такие элементы справочника создаются разработчиком при разработке прикладного решения и не могут быть удалены или перемещены пользователем.

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


Справочники

Формы справочника

Для того чтобы пользователь мог просматривать и изменять данные, содержащиеся в справочнике, система поддерживает несколько форм представления справочника. Система может автоматически генерировать все нужные формы справочника. Наряду с этим разработчик имеет возможность создать собственные формы, которые система будет использовать вместо форм по умолчанию:


Справочники

Форма списка

Для просмотра данных, содержащихся в справочнике, используется форма списка. Она позволяет выполнять навигацию по справочнику, добавлять, помечать на удаление и удалять элементы и группы справочника, перемещать элементы и группы. Форма списка может представлять данные в иерархическом и не иерархическом виде и позволяет выполнять сортировку и отбор отображаемой информации по нескольким критериям:


Справочники

Форма элемента

Для просмотра и изменения данных отдельных элементов справочника используется форма элемента. Как правило, она представляет данные в удобном для восприятия и редактирования виде:


Справочники

Форма группы

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


Справочники

Форма выбора, форма выбора группы

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


Справочники

Кроме всех перечисленных форм, система поддерживает еще форму выбора группы справочника, предназначенную для выбора только среди групп, содержащихся в справочнике.

Макеты

Справочнику могут быть сопоставлены несколько макетов, содержащих данные, необходимые для обеспечения работы справочника:


Справочники

Макеты могут использоваться для формирования печатных форм справочника или для отображения дополнительной информации, имеющей отношение к справочнику.

Что такое реквизиты 1С?

Мы с Вами недавно обсуждали справочники 1С и документы 1С. Работа пользователя со справочниками и документами в 1С состоит из заполнения полей на форме.

Реквизиты 1С – это поля справочника и документа, которые отображаются на форме, чтобы пользователь их заполнил.

Рассмотрим подробно тему реквизитов в 1С.

Что такое Реквизиты 1С

Каждый справочник и документ 1С состоит из набора полей. Такие поля называются реквизиты 1С (для программиста 1С).

В конфигураторе, в дереве конфигурации 1С, раскройте любой справочник или документ и Вы увидите ветку Реквизиты. Это список реквизитов (полей) справочника.

Поглядите как те же реквизиты 1С выглядят на форме справочника 1С.

Каждый реквизит 1С имеет свойства, в которых указано какой вид значения хранится в реквизите (строка, число и т.п.) и как с ним будет работать пользователь.

Нажмите правой кнопкой на любой реквизит 1С и нажмите Свойства. В окне справа откроется список свойств выбранного реквизита.

Основные свойства реквизитов 1С:

  • Имя – наименование реквизита 1С в языке 1С (внимание – в имени реквизитов не должно быть пробелов и знаков препинания)
  • Синоним – наименование реквизита каким его увидит пользователь в режиме Предприятие
  • Тип – указывает какие данные можно будет хранить в реквизите 1С, нажмите на кнопку «…», чтобы изменить тип; основные типы:
    o Число — используется для цифр, а также для радиопереключателя
    o Строка — может быть ограничена по длине, дело в том, что не везде возможно использование неограниченной длины
    o Дата
    o Булево — для того, чтобы на форме была галочка (значения Истина/Ложь или Да/Нет)
    o СправочникСсылка или ДокументСсылка – выбор значения справочника или документа.

    Вы можете поставить галочку Составной тип данных и тогда 1С позволит Вам выбрать несколько типов данных одновременно. В этом случае пользователю будет отображаться кнопка Т, при нажатии на которых он выберет какие данные он хотел бы ввести.

  • Использование –можно сделать разные реквизиты (поля) для элемента справочника и для группы справочника
  • Индексировать – требуется включать для тех реквизитов, по которым будет сортировка и поиск, однако нельзя включить для всех вообще – будет работать медленно.

Стандартные реквизиты 1С

Как Вы заметили, на форме справочника есть реквизиты 1С, которые отсутствуют в списке в конфигураторе: группа, наименование, БИК.

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

Это – стандартные реквизиты 1С. Что это такое? У каждого объекта 1С есть набор реквизитов 1С по умолчанию. У справочников это, например – код и наименование. У документов это – дата и номер.

Стандартные реквизиты 1С можно посмотреть следующим образом:

  • Зайдите в редактор объекта 1С (справочника или документа), нажав на него два раза мышкой
  • В открывшемся редакторе выберите закладку Данные
  • Здесь Вы можете настроить стандартные реквизиты Код и Наименование справочника
  • Нажмите кнопку Стандартные реквизиты 1С, чтобы посмотреть полный список.

Общие реквизиты 1С

Начиная с версии 1С 8.2.14 в 1С появился новый Объект 1С – Общие реквизиты 1С. С помощью него можно добавить реквизит (поле), который будет присутствовать сразу во множестве справочников и документов.

Свойства общего реквизита 1С:

  • Автоиспользование – добавляет общий реквизит 1С сразу во все справочники и документы
  • Состав – позволяет добавить общий реквизит 1С только в нужные справочники и документы (автоиспользование тогда в значение Не использовать).

Как добавить реквизит 1С

Нажмем правой кнопкой на ветку Реквизиты 1С нужного справочника и выберем Добавить.

Введем нужно Имя реквизита 1С, например «АдресОфиса» и синоним «Адрес офиса». Тип оставим по умолчанию Строка, но поставим галочку Неограниченная длина.

Добавим еще один реквизит 1С точно так же, только выберем тип Булево, назовем его «РаботаетПоВыходным».

Как вывести реквизит на форму 1С (толстый клиент 1С)

Раскроем ветку Формы того же справочника. Чтобы открыть форму — выберем форму элемента и нажмем на нее два раза мышкой.

Потяните мышкой за край формы и растяните ее (необязательный пункт).

В панели конфигуратора нажмите кнопку «Размещение данных». Также можно использовать меню Форма / Размещение данных.

Вы видите – наши реквизиты на форму не выведены. Установите на них галочку. А также галочки Вставить надписи и Разместить автоматически.

Вуаля!

Как вывести реквизит на форму 1С (тонкий клиент 1С)

Раскроем ветку Формы того же справочника. Выберем форму элемента и нажмем на нее два раза мышкой.

На закладке Реквизиты раскройте строку Объект. Вы увидите список реквизитов, добавленных ранее в справочник.

Теперь просто перетяните из правого окна в левую нужный реквизит и он появится на форме.

Вуаля!

Реквизиты формы 1С

В толстом клиенте у формы есть свои собственные реквизиты. Они находятся на закладке Реквизиты.

Эти реквизиты не сохраняются в базе данных, однако их можно использовать на форме для полей, которые нужны для работы с формой.

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

Периодические реквизиты 1С

В 1С версии 7.7 были периодические реквизиты. Их смысл таков: значение у реквизита разное в разные даты. Например, значение на 1 сентября – одно, а на 1 октября – другое. У одного и того же реквизита.

В 1С 8 периодических реквизитов нет. Это реализуется следующим образом:

  • Добавляем регистр сведений и делаете его периодическим. Период может быть – секунда, день, месяц, квартал, год.

  • Добавляем измерение, у которого тип – нужный нам справочник (которому мы делаем периодический реквизит)

  • Добавляем в регистр сведений нужный реквизит (или несколько). Они будут периодические.

  • Теперь пользователь в форме элемента выбирает меню Перейти / ИмяСозданногоРегистра и может смотреть и изменять периодические реквизиты. Возможно вывести их на форму, но в этом случае придется дополнительно программировать.

Загрузка…

Справочники в 1С используются для работы с постоянной или условно постоянной информацией, но, в отличие от констант, данная информация может содержать множество значений. К примеру, если мы разрабатываем конфигурацию для учета движения товаров на складе, то такой информацией может быть вид товара, информация о самих товарах, информация о складах и т.п. Таким образом, справочники необходимы для хранения аналитики учета (то, по чему в дальнейшем будет осуществляться анализ, например, сколько товаров продано). В пользовательском режиме работа осуществляется с элементами справочника. Именно элементы справочника и являются объектами аналитики (именно они и будут анализироваться). Например, у справочника Товары могут быть элементы «Гвозди», «Хлеб» и «Молоко».

Элементы справочника создают операторы в пользовательском режиме 1С. В дальнейшей своей работе они могу использовать тот или иной созданный ранее элемент справочника. Например, элементы справочника Товары могут использоваться в отображении прихода или расхода товара в соответствующих документах.

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

Применительно к товарам это может быть артикул, полное наименование, наименование для продажи, вид товара и т.п. Еще новая возможность справочников (в 1С 7.7. этого нет) — это возможность создавать табличные части, в которых хранится однотипная информация, количество которой может быть изменчивым. Например, для товара это могут быть какие-то дополнительные свойства.

Реквизитов и табличных частей может быть неограниченное количество.

Создать новый справочник в 1С достаточно просто. Для этого необходимо зайти в конфигуратор 1С, открыть окно конфигурации, выделить ветвь Справочники, вызвать правой кнопкой мышки контекстное меню, где выполнить команду Добавить.

Создать новый справочник 1С

После этого откроется конструктор справочника, где на закладке «Основные» необходимо ввести имя справочника.

Имя справочника 1С

На закладке Данные можно задать длину кода и наименования, тип кода (число или строка) и основное представление элемента справочника (в виде кода или в виде строки).

Код и наименование справочника 1С

А также можно создать необходимые реквизиты и табличные части.

Реквизиты и табличные справочника 1С

В отличие от наименования, код может элементу справочника присваиваться автоматически, если установлен флаг Автонумерация на закладке нумерация.

Автонумерация справочника 1С

Реквизиты справочников 1С создаются на закладке Данные в окне реквизитов.

Реквизиты справочника 1С

В качестве реквизитов справочника могут выступать, как примитивные типы, так и ссылочные. Например, мы уже создали справочник ВидыТоваров, а сейчас создадим справочник Товары, где будут реквизиты Артикул (тип Строка) и ВидТовара (ссылка на справочник ВидыТоваров).

Реквизит справочника 1С с примитивным типом

Реквизит справочника 1С с ссылочными типом

В режиме «1С: Предприятия» это будет выглядеть следующим образом.

Элементы простого справочника

Справочник с ссылочным реквизитом

Обращаю внимание, на что влияет свойство «Основное представление» (закладка Данные конструктора справочника). Если у нас основное представление в виде наименования, то представление элемента справочника в каком-либо реквизите будет в виде наименование этого элемента, как на рисунке представлен элемент справочника ВидыТоваров в реквизите справочника Товары. А если основное представление в виде кода, то тогда представление этого элемента будет в виде кода элемента.

Основное представление справочника код

Основное представление справочника в виде кода

Табличные части справочников 1С

Табличные части создаются на закладке «Данные» в конструкторе справочника.

Табличные части справочников 1С

Можно создавать неограниченное количество табличных частей.

Сделаем справочник Комплектация, у которого будет табличная часть Состав.

Справочник 1С с табличной частью

У табличной части может быть неограниченное количество реквизитов. Для того, чтобы создать реквизит табличной части, её необходимо выделить и нажать на кнопку «Добавить реквизит».

Добавление реквизита табличной части справочника

Реквизиты табличной части могут быть как примитивных типов, так и ссылочных.

Реквизиты табличной части справочника

Табличная часть справочника 1с

Подчиненные справочники 1С

В конфигурации 1С 8.3 можно разрабатывать Подчиненные справочники. В Подчиненном справочнике каждый его элемент имеет владельца, который является элементом или группой другого справочника. Элемент подчиненного справочника не может существовать без владельца.

Сделаем возможность учета единиц измерения. Сначала создадим справочник «Классификатор единиц измерения», в котором будут храниться различные единицы измерения (штуки, килограммы и тд).

Справочник 1С классификатор единиц измерения

У справочника Товары сделаем реквизит основная единица измерения (ссылка на справочник классификатор единиц измерения)

Реквизит справочника 1С Основная единица измерения

И сделаем справочник, подчиненный справочнику Товары, в котором будут храниться коэффициенты соотношений единиц измерения к основной единице измерения товара. К примеру, основная единица измерения килограмм, но есть еще единица тонна и центнер. Соответственно в первом случае коэффициент будет 1000, а во втором 100.

Создадим справочник ЕдиницыИзмерения.

На закладке Владельцы установим, что владельцем этого справочника является справочник Товары.

Владелец справочника 1С

И создадим реквизиты: Коэффициент (тип число) и единица измерения (тип ссылка на справочник «Классификатор единиц измерения»).

Реквизиты справочника Единицы измерения

Вот как это будет выглядеть в режим «1С: Предприятия».

Справочник 1С

Подчиненный справочник 1С

Подробно о подчиненных справочниках читайте в этой статье:

Подчиненный справочник 1С

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

Любой справочник можно сделать Иерархическим – это значит, что пользователь сможет создавать каталоги (или, говоря простым языком, папки), в которых будут содержаться элементы.

Сделаем справочник Товары иерархическим. Для этого переходим на закладку «Иерархия» конструктора справочника и установим флаг «Иерархический».

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

Иерархия у справочников бывает двух видов: Иерархия групп и элементов и просто Иерархия элементов.

Иерархия групп — это каталоги, которые в себе содержат определенные элементы. А что такое Иерархия элементов? Это когда один элемент подчинен другому.

Посмотрим, как выглядит иерархический справочник в «1С:Предприятии»

Иерархический справочник 1С в 1с предприятии

Как видите, в форме списка появилось две команды. «Создать» и «Создать группу». При выполнении команды «Создать» будет открыта форма на создание нового элемента, а при выполнении команды «Создать группу» — форма на создание группы (папки).

Создание групп и элементов

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

Подробно, про иерархический справочник читайте в этой статье:

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

Что такое предопределенные элементы справочников, и как с ними работать, читайте в этой статье:

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

Формы справочников в 1С 8.3

Остальные статьи по теме конфигурирования:

Документы в 1С 8.3

Журнал документов в 1С 8.3

Подсистемы 1С 8.3

Общие реквизиты в 1С

Более подробно и основательно работа со справочникам в дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Справочники в 1С – объекты для хранения однородно постоянной и условно постоянной информации. В справочниках системы 1С Предприятие 8.3 обычно хранят:

  • список физических лиц
  • список сотрудников
  • виды документов
  • номенклатуру
  • список организаций и т.п.

Каждая запись в справочнике называется элементом справочника.

Основные особенности справочников в том, что они могут быть иерархическими и иметь владельца в виде другого справочника.

Добавление справочника в конфигурацию 1С 8.3.

Для добавления справочника необходимо в дереве объектов метаданных перейти на узел “Справочники” и с помощью контекстного меню данного узла у вас будет возможность добавить новый справочник в конфигурацию.

Для примера добавим новый справочник и на открытой вкладке “Основные” в поле “Имя” введем название: “ПримерСправочника”. Как мы зададим поле “Имя” справочника, так мы сможем обратиться к нему из кода в конфигураторе 1C. Синоним зададим “(Softrema) Пример справочника”.

Синоним – это название справочника, которое мы будем видеть в пользовательском режиме.

Вкладка “Подсистемы”.

На этой вкладке можем отметить к каким подсистемам относится справочник, например, подсистемы могут быть: “Закупки”, “Продажи”, “Казначейство”, “Бюджетирование” и т.п.

Подсистемы служат для того, чтобы логически разделить предназначение объекта метаданных. Не редки случаи, когда один справочник относится к нескольким подсистемам, например, “Продажи”, и к подсистеме “Закупки”, примером служит справочник “Партнеры” в УТ (Управлении торговлей).

Вкладка “Иерархия”.

Содержит настройки для создания справочника иерархичным.

Вид иерархии справочника может выбран один из списка:

  • Иерархия групп и элементов. Является классическим вариантом, который содержит папки и вложенные в них элементы.

  • Иерархия элементов. При данной настройке элементы справочника могут выступать еще и родителями дочерних записей.

Отличия данных настроек приведены на картинках.

Вкладка “Владельцы”.

У справочника может быть владелец, что бы понять смысл данной опции, представим, что у нас есть два справочника, “Регион” и “Офис”. В справочнике “Регион” перечислены регионы страны, а в справочнике “Офис” представлены офисы, входящие в данный регион. Т.к. “Офис” подчинен своему “Региону”, справочник “Регион” будет владельцем справочника “Офис”.

Вкладка “Данные”.

На данной вкладке можно добавить новые реквизиты справочника и табличные части. На данной вкладке нужно внимательно отнестись к полям “Длина кода” и “Длина наименования” справочника. Длина наименования может быть максимум 150 символов.

Вкладка “Формы”.

Объект метаданных “Справочник” поддерживает следующие формы:

  • форма элемента
  • форма группы
  • форма списка
  • форма выбора
  • форма выбора группы

Рассмотрим некоторые из них.

Форма элемента открывается тогда, когда мы открываем элемент справочника из 1С Предприятия. Что бы программно открыть новую форму элемента справочника достаточно написать код:

ОткрытьФорму(«Справочник. ПримерСправочника.ФормаОбъекта»);

Если необходимо открыть форму справочника модально, нужно написать следующий код:

ОткрытьФорму(«Справочник. ПримерСправочника.ФормаОбъекта»,, ЭтаФорма);

В третьем параметром указываем значение “ЭтаФорма”, это будет означать, что текущая форма является владельцем открываемой формы. Оба примера необходимо выполнять в функции или процедуре с директивой “&НаКлиенте”, т.к. формы открываются только на клиенте.

Форма списка справочника. Данная форма содержит список всех элементов, когда мы только открываем справочник. Примером может служить список сотрудников или организаций. Что бы открыть форму списка справочника из конфигуратора, нужно написать так:

ОткрытьФорму(«Справочник. ПримерСправочника.ФормаСписка»);

Форма выбора справочника. Форма выбора справочника открывается, тогда, когда мы выбираем элемент, например, если мы принимаем на работу сотрудника, мы кликаем по реквизиту “Сотрудник” из документа “Прием на работу” и перед нами открывается форма со списком сотрудников, именно эта форма и называется формой выбора справочника.

Как создать новую группу справочника?

Для создания новой группы справочника нужно выполнить код на 1С:

НоваяГруппаСправочника = Справочники.ПримерСправочника. СоздатьГруппу();
НоваяГруппаСправочника.Наименование = «Новая группа справочника»;
НоваяГруппаСправочника.Записать();

Как создать элемент справочника программно?

Новый элемент справочника создается аналогично предыдущему примеру:

НовыйЭлементСправочника = Справочники.ПримерСправочника. СоздатьЭлемент();
НовыйЭлементСправочника.Наименование = «Имя нового элемента справочника»;
НовыйЭлементСправочника.Записать();

Как создать элемент справочника в группе?

Для того, чтобы разместить новый элемент справочника в группе, достаточно в предыдущем примере при создании элемента указать строчку перед вызовом функции “Записать()”:

НовыйЭлементСправочника.Родитель = НоваяГруппаСправочника.Ссылка;

Как получить нужное нам значение справочника?

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

Запросы к справочникам 1С.

Описываются через конструкцию “Запрос”, например, выберем из справочника значения реквизитов Ссылка, Владелец и Родитель:

Запрос = Новый Запрос(«ВЫБРАТЬ
| ПримерСправочника.Ссылка КАК Ссылка,
| ПримерСправочника.Владелец КАК Владелец,
| ПримерСправочника.Родитель КАК Родитель
|ИЗ
| Справочник.ПримерСправочника КАК ПримерСправочника»);
ЗапросВыборка = Запрос.Выполнить().Выбрать();
Пока ЗапросВыборка.Следующий() Цикл
ЗначениеЭлементаСправочника = ЗапросВыборка.Ссылка;
ВладелецЭлементаСправочника = ЗапросВыборка.Владелец;
РодительЭлементаСправочника = ЗапросВыборка.Родитель;
КонецЦикла;

Функции поиска элементов, поддерживаемые самим справочником.

Что бы найти нужный нам элемент, можно воспользоваться функциями:

НайтиПоКоду(“Код справочника”);

В параметрах нужно указать код искомого элемента справочника

Или
НайтиПоНаименованию (“Наименование элемента”);

В данном случае необходимо указать название искомого элемента.

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

Вернуться назад

&НаСервере
Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере()
 
    /// Как создать новый элемент справочника в 1с 8.3, 8.2
 
    // создадим новый элемент справочника Города
    // с именем Владивосток
    Владивосток = Справочники.Города.СоздатьЭлемент();
    Владивосток.Наименование = "Владивосток";
    Владивосток.Записать();
 
    /// Как создать новую группу справочника в 1с 8.3, 8.2
 
    // создадим новую группу справочника Города
    ГородаУМоря = Справочники.Города.СоздатьГруппу();
    ГородаУМоря.Наименование = "Города у моря";
    ГородаУМоря.Записать();
 
    /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2
 
    // перенесём созданный Владивосток в группу "Города у моря"
    Владивосток.Родитель = ГородаУМоря.Ссылка;
    Владивосток.Записать();
 
    /// Как внести изменения в элемент справочника по ссылке 
    /// в 1с 8.3, 8.2
 
    // найдём город Калькутта
    КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта");
    Если Не КалькуттаСсылка.Пустая() Тогда
        // изменим и запишем численность жителей в городе
        Калькутта = КалькуттаСсылка.ПолучитьОбъект();
        Калькутта.Численность = 1000000;
        Калькутта.Записать();
    КонецЕсли;
 
    /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2
 
    ПустаяСсылка = Справочники.Города.ПустаяСсылка();
    Если ПустаяСсылка.Пустая() Тогда
        Сообщить("Ссылка действительно пустая.");
    КонецЕсли;
 
    /// Как узнать принадлежность элемента справочника группе
    /// с учетом уровней иерархии в 1с 8.3, 8.2
 
    ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь");
    РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия");
 
    // проверим принадлежит ли город Пермь группе Россия
 
    Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда
        Сообщить("Элемент Пермь находится в группе Россия.");
    КонецЕсли;
 
    /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2
 
    // скопируем элемент Пермь
 
    КопияПерми = ПермьСсылка.Скопировать();
    КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ";
    КопияПерми.УстановитьНовыйКод();
    КопияПерми.Записать();
 
    /// Как выяснить уровень вложенности элемента справочника 
    /// в 1с 8.3, 8.2
 
    Сообщить(КопияПерми.Уровень()); // 1
 
    /// Как заблокировать элемент справочника перед изменениями 
    /// в 1с 8.3, 8.2
 
    // выполним блокировку элемента справочника
    // от изменения другими режимами или пользователями
 
    Пермь = ПермьСсылка.ПолучитьОбъект();
    Если Не Пермь.Заблокирован() Тогда
        Пермь.Заблокировать();
        // тут идёт какой-то долгий алгоритм
        // в результате которого мы меняем
        // заблокированный элемент
        Пермь.Численность = 5000;
        Пермь.Записать();
        // и только потом освобождаем его
        // для других режимов и пользователей
        Пермь.Разблокировать();
    КонецЕсли;
 
    /// Как заполнить новый элемент справочника на основании 
    /// в 1с 8.3, 8.2
 
    // в модуле справочника Города я определил процедуру
    // ОбработкаЗаполнения, которая обрабатывает ситуации
    // когда мы заполняем один элемент на основании
    // данных другого (см. в базе для скачивания)
 
    Хабаровск = Справочники.Города.СоздатьЭлемент();
    Хабаровск.Заполнить(
        Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро")
    );
    Хабаровск.Наименование = "Хабаровск";
    Хабаровск.Записать();
 
    /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2
 
    // пометим на удаление только что созданный Хабаровск
    Хабаровск.УстановитьПометкуУдаления(
        Истина, // пометка удаления
        Ложь // включая подчиненные (если речь о группе справочника)
    );
    // метод Записать вызывать не нужно
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьКлиентаПоИмени(Имя)
    Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя);
КонецФункции
 
/// Как открыть форму существующего элемента справочника 
/// по ссылке в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда)
 
    СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей");
 
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаОбъекта", // имя формы
        ПараметрыФормы // параметры для формы
    );
 
КонецПроцедуры
 
/// Как открыть форму существующей группы справочника 
/// по ссылке в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда)
 
    СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip");
 
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаГруппы", // имя формы
        ПараметрыФормы // параметры для формы
    );
 
КонецПроцедуры
 
/// Как открыть форму выбора элемента справочника и
/// отследить её закрытие в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда)
 
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента",
        ЭтотОбъект);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии        
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт
 
    Если Результат <> Неопределено Тогда
        Сообщить("Был выбран элемент " + Результат);
    КонецЕсли;	
 
КонецПроцедуры
 
/// Как открыть форму выбора группы справочника и
/// отследить её закрытие в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда)
 
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы",
        ЭтотОбъект);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаВыбораГруппы",,,,,,ОповещениеОЗакрытии        
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт
 
    Если Результат <> Неопределено Тогда
        Сообщить("Была выбрана группа " + Результат);
    КонецЕсли;	
 
КонецПроцедуры
 
/// Как открыть форму списка справочника и
/// установить отбор по реквизиту в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда)
 
    // откроем список клиентов, оставив
    // только мужчин
 
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской());
 
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
 
    ОткрытьФорму(
        "Справочник.Клиенты.ФормаСписка",
        ПараметрыФормы
    );
 
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьПеречислениеМужской()
    Возврат Перечисления.Пол.Мужской;
КонецФункции
 
/// Как открыть форму списка справочника с нужным отображением
/// в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда)
 
    // откроем список клиентов с отображением "Список"
 
    ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка");    
    ФормаСписка.Открыть();
    ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
 
КонецПроцедуры
 
/// Как открыть форму только что созданного, но ещё
/// не записанного элемента справочника в 1с 8.3, 8.2
 
&НаКлиенте
Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда)
 
    // получаем форму нового справочника
    ФормаНовогоСправочника = ПолучитьФорму(
        "Справочник.Еда.ФормаОбъекта",,, Истина); 
 
    // делаем копию её данных (так как напрямую их менять
    // нельзя)
    КопияДанныхФормы = ФормаНовогоСправочника.Объект;
 
    // заполняем эти данные на сервере
    ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы);
 
    // копируем заполненные данные в исходную форму
    КопироватьДанныеФормы(КопияДанныхФормы,
        ФормаНовогоСправочника.Объект);
 
    // показываем форму нового заполненного
    // элемента справочника пользователю
    ФормаНовогоСправочника.Открыть();
 
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы)
 
    // преобразуем данные формы в документ
    Еда = ДанныеФормыВЗначение(ДанныеФормы,
        Тип("СправочникОбъект.Еда")); 
 
    Еда.Наименование = "Груша";
    Еда.Калорийность = 500;
 
    // преобразуем документа обратно в данные формы
    ЗначениеВДанныеФормы(Еда, ДанныеФормы);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере
В этой статье познакомимся с объектом конфигурации «Справочник»: поговорим о предназначении справочников и рассмотрим примеры использования.

Программный продукт «1С:Предприятие» применяется для решения учетных задач и автоматизации бизнес-процессов предприятия. Большое количество предприятий занимается торговой деятельностью, которая заключается в покупке определенных товаров по цене X (цена закупки) и последующей продаже этих товаров по цене Y = X + a (цена продажи), где «a» — какая-то наценка на товар.

Но за счет чего предприятие может продавать товары по ценам, которые выше цен закупки? Это возможно благодаря тому, что товары закупаются в большом количестве (оптом), а продаются небольшими порциями (мелкий опт или розница).

imageТакая организация процесса приводит нас к следующему выводу: информация об одном и том же товаре потребуется как минимум дважды: в первый раз когда мы этот товара покупаем, а во второй раз — когда этот мы этот товар продаем. А поскольку основная цель любого бизнеса — это прибыль, то продавать нужно много раз, то есть информация об одном и том же товаре потребуется при каждой продаже. И поэтому было бы удобно в системе сохранить список всех товаров, чтобы пользователи не печатали на клавиатуре каждый раз при продаже название товара, а выбирали товар из какого-то списка. Причем заранее пользователь не знает какие товары будет закупать организация, поэтому должна быть возможность добавлять в этот список произвольное количество товаров в любой момент времени.

Для создания таких списков и используется объект конфигурации «Справочник». Например, в справочниках можно хранить список сотрудников, список поставщиков и покупателей, список банков и т.д.

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

Для этого существует возможность включить для справочника иерархию:

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

Если для справочника включена иерархия, то появляется возможность создавать элементы двух видов: «Группа» (аналог папки в проводнике) и «Элемент» (аналог файла в проводнике).

Например, в справочнике «Номенклатура» могут быть созданы группы: «Детские игрушки», «Для дома», «Спортивный инвентарь» и т.д., в которых располагаются элементы, относящиеся к этим группам. Кроме того группы справочника могут включать в себя и другие группы, создавая тем самым многоуровневую иерархическую структуру:

image
В справочниках возможен и другой вид иерархии, при котором элементы справочника будут относиться не к группам, а к другим элементам этого же справочника. Такой вид иерархии может использоваться, например, при создании справочника Задачи, где одна задача может включать в себя несколько других задач.
image
Разные справочники могут находиться в состоянии подчинения, т.е. элементы одного справочника могут быть подчинены элементам или группам другого справочника. Например, справочник «Договоры» может быть подчинен справочнику «Контрагенты». Тогда при оформлении документов для некоторого контрагента можно будет выбрать договор не среди всех имеющихся в программе договоров, а среди договоров только выбранного в документе контрагента:
image
Справочники допускают также создание предопределенных элементов, которые существуют в справочнике всегда, вне зависимости от действий пользователя. Такие элементы справочника создаются разработчиком при разработке прикладного решения и не могут быть удалены или перемещены пользователем.

Например, в справочнике контрагенты уже на этапе создания справочника можно определить некоторые группы для удобства работы пользователей: «Покупатели», «Поставщики», «Прочее», а также создать элемент справочника «РозничныйПокупатель», который будет использоваться при продаже товаров в розницу:

image

Как справочники хранятся в базе данных

В простейшем случае справочник представляет собой в базе данных таблицу, с заранее определенными колонками «Код» и «Наименование». Каждый элемент справочника — это строка из этой таблицы. Для того, чтобы для строк в таблице хранить какие-то дополнительные сведения (например, для контрагентов хранить «УНП» и «Дату регистрации») , нужно добавить в таблицу новые колонки. Чтобы добавить новые колонки в таблицу используются как раз Реквизиты:

image

Иерархический справочник также представлен в базе в виде таблицы, где кроме колонок «Код» и «Наименование» есть ещё 2 колонки: «ЭтоГруппа» (да/нет — признак, указывающий на то, групповой это элемент или нет) и «Родитель» (вышестоящий элемент справочника по иерархии):

image
Таким образом, в данной статье мы познакомились с объектом конфигурации «Справочники», рассмотрели примеры использования и работы с ними, а также разобрали как справочники хранятся в базе данных.


2019-04-04 11:19

Песочница

Справочники в системе «1С:Предприятие» версии 7.7 являются агрегатным типом данных, средством для работы со списками однородных элементов данных. При помощи справочников организуется ввод стандартной информации в документы, а также её просмотр и, если необходимо, корректировка.

Рассмотрим основные моменты работы со справочниками:

  • Контекст работы со справочниками
  • Атрибуты справочников
  • Методы периодических реквизитов справочников
  • Методы справочников
  • Методы контекста Модуля формы элемента справочника
  • Методы контекста Модуля формы списка справочника
  • Предопределённые процедуры Модулей форм элемента и группы справочника
  • Предопределённые процедуры Модуля формы списка справочника
  • Предопределённые процедуры Глобального модуля

Контекст работы со справочниками

В синтаксисе языка 1C обращение к атрибутам, а также вызов методов справочников зависит от контекста выполнения конкретного программного модуля.

Если конкретный элемент или группа справочника согласно локальному контексту входит в набор непосредственно доступных модулю значений агрегатных типов данных, то обращение к атрибуту, вызов метода для этого элемента или группы справочника — просто имя этого атрибута или метода с указанием необходимых параметров. Например, в форме элемента справочника "Сотрудники" мы имеем непосредственный доступ к текущему элементу (сотруднику) справочника. Значит, чтобы изменить имя текущего сотрудника, просто укажем:

Наименование = "Сидоров Иван Иванович";

А если значение элемента или группы справочника получено из других источников, например как реквизит какого-либо документа? Тогда, чтобы получить доступ к атрибуту, вызвать метод такой переменной со значением типа "Справочник", имя этого атрибута, метода (с указанием необходимых параметров) необходимо записать через точку после имени реквизита. Например, если в документе значение реквизита «Сотрудник» имеет тип "Справочник.Сотрудники", имя сотрудника можно узнать следующим образом:

ИмяСотр = Док.Сотрудник.Наименование;

В других случаях доступ к атрибутам, вызов методов конкретного элемента или группы справочника происходит при помощи переменной со ссылкой на объект типа "Справочник", созданный с помощью функции СоздатьОбъект(). Чтобы вызвать атрибут или метод объекта, имя этого атрибута, метода (с указанием необходимых параметров) пишется через точку после имени этой переменной.

При создании переменной со ссылкой на объект типа "Справочник" в качестве параметра функции СоздатьОбъект() передаётся полное имя справочника, состоящее из идентификатора справочника, записанного через точку после ключевого слова «Справочник» (англоязычный синоним — «Reference»). Например:

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

Допускается также создавать объекты неопределённого вида справочника. В этом случае название конкретного вида справочника в параметре вызова функции СоздатьОбъект() опускается. Далее для работы с таким объектом ему надо установить вид справочника при помощи метода Вид():

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

Примечание: Объект, созданный при помощи функции СоздатьОбъект(), изначально не спозиционирован, то есть не указывает на конкретный элемент справочника. Для того чтобы обратиться к конкретному элементу справочника и к его атрибутам, необходимо предварительно выполнить позиционирование при помощи методов НайтиЭлемент(), НайтиПоКоду(), ПолучитьЭлемент() и т.п.

После того, как элемент найден, мы можем обращаться к его атрибутам, указывая имя атрибута через точку после имени переменной, хранящей ссылку на объект, созданный при помощи функции СоздатьОбъект(). Ссылку же на сам найденный элемент можно получить с помощью метода ТекущийЭлемент():

Сотр = СпрСотр.ТекущийЭлемент();

Позиционирование происходит также и при создании нового элемента справочника с помощью метода Новый():

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

Спр.Новый();

Спр.Наименование = "Плёнка ПВХ";
Спр.Код = 1032;
Спр.Размер = 10000;
Спр.Записать();  

Атрибуты справочников

Получить доступ к значению обязательного реквизита «Код» выбранного элемента справочника позволяет атрибут Код (англоязычный синоним — Code).

Пример использования:

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

Получить доступ к значению обязательного реквизита «Наименование» выбранного элемента справочника позволяет атрибут Наименование (англоязычный синоним — Description).

Пример использования:

Спр = СоздатьОбъект("Справочник.Подразделения");
Спр.НайтиПоКоду("29");
Подразделение = Спр.Наименование;

Получить доступ к значению любого другого реквизита выбранного элемента справочника позволяет атрибут <ИмяРеквизита>. В тексте программного модуля в качестве названия атрибута подставляется идентификатор конкретного реквизита справочника, созданного в Конфигураторе.

В нижеприведённом примере справочник «Сотрудники» имеет реквизит «Оклад»:

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


Спр.Оклад = ОкладСотр * 1.5;

Получить доступ к значению родительской группы выбранного элемента справочника позволяет атрибут Родитель (англоязычный синоним — Parent). Замечу, что данный атрибут может быть изменён только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

Функция ДатьРодителя(Элем)
   
   Спр = СоздатьОбъект("Справочник.Товары");
   Спр.НайтиЭлемент(Элем);
   Если Спр.Уровень() > 1 Тогда
      Спр.НайтиЭлемент(Спр.Родитель);
      Возврат "Этот товар принадлежит группе " + Спр.Наименование;
   Иначе
      Возврат "Это товар первого уровня - нет родителя!";
   КонецЕсли;
КонецФункции

Получить доступ к значению элемента сопряжённого справочника, которому подчинён выбранный элемент текущего справочника, позволяет атрибут Владелец (англоязычный синоним — Owner). Замечу, что данный атрибут может быть изменён только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

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

Методы периодических реквизитов

Получить значение периодического реквизита справочника на определённую дату или позицию документа позволяет метод Получить() (англоязычный синоним — GetValue()). Данный метод разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату().

Синтаксис:

Получить(<Дата>)

где <Дата> — выражение со значением требуемой даты или значение типа «Документ» (в этом случае возвращается значение на дату и время документа). Параметр является необязательным. Значение по умолчанию — ТА.

Пример:

ОкладСотр = Сотрудники.Оклад.Получить(ДатаДок);

Примечание: Если к объекту типа "Справочник" однажды применён метод ИспользоватьДату(), то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Получить(), так как в такой последовательности эти два метода несовместимы.

Установить значение периодического реквизита справочника на определённую дату позволяет метод Получить() (англоязычный синоним — SetValue()). Замечу, что метод Установить() может использоваться только для объектов, созданных с помощью функции СоздатьОбъект(). К тому же, его разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату().

Синтаксис:

Установить(<Дата>, <3начение>)

где

  • <Дата> — выражение со значением требуемой даты;
  • <3начение> — выражение, содержащее устанавливаемое значение периодического реквизита справочника.

Пример:

ОкладСотр = Сотрудники.Оклад.Установить(ДатаДок, МаксОклад);

Примечание: Если к объекту типа "Справочник" однажды применён метод ИспользоватьДату(), то в дальнейшем, чтобы записать новые значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Установить(), так как в такой последовательности эти два метода несовместимы.

Методы справочников

Общие методы

Получить текущее название вида справочника или установить вид для объектов типа "Справочник" неопределённого вида позволяет метод Вид() (англоязычный синоним — Kind()). В тексте программы данный метод можно использовать и как процедуру, и как функцию. Если при вызове метода задан параметр, то вид справочника устанавливается в соответствии с этим параметром. Возвращаемым значением метода является строка, содержащая текущий (на момент до исполнения метода) идентификатор справочника, как он задан в Конфигураторе.

Синтаксис:

Вид(<Название>)

где <Название> — строковое выражение с названием вида справочника. Параметр является необязательным.

Примечание: Устанавливать новое значение вида справочника допускается только для объектов типа "Справочник" неопределённого вида, созданных при помощи функции СоздатьОбъект().

Пример использования:

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

Состояние(Спр.Вид());

Получить представление вида справочника, как он задан в Конфигураторе, позволяет метод ПредставлениеВида() (англоязычный синоним — KindPresent()). Параметры у метода отсутствуют. Возвращаемым значением метода является строковое значение, содержащее пользовательское представление вида справочника (синоним справочника или, если он не указан, то идентификатор).

Пример использования:

Спр = СоздатьОбъект("Справочник.Товары");
Состояние(Спр.ПредставлениеВида());

Методы редактирования справочника

Инициализировать создание нового элемента справочника позволяет метод Новый() (англоязычный синоним — New()). Параметры у метода отсутствуют. После инициализации создания нового элемента справочника, как правило, следом производится заполнение его реквизитов с последующим вызовом метода Записать(). Метод Новый() может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект().

Пример использования:

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

Инициализировать создание пустой записи новой группы в справочнике позволяет метод НоваяГруппа() (англоязычный синоним — NewGroup()). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

Процедура ВводГруппыСотрудников()
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   
   Спр.НоваяГруппа();
   
   Спр.Наименование = "Расчетчик 3";
   Спр.Код = 3;
   
   Спр.Записать();
КонецПроцедуры

Записать элемент справочника позволяет метод Записать() (англоязычный синоним — Write()). Параметры у метода отсутствуют. Пример использования метода приведён выше.

Примечание: Если этот метод применяется в Модуле формы элемента справочника непосредственно к элементу справочника локального контекста, то данный метод отрабатывает те же действия, как и интерактивное нажатие пользователем кнопки с формулой «#Записать».

Удалить или пометить на удаление текущий элемент или группу справочника позволяет метод Удалить() (англоязычный синоним — Delete()). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис метода:

Удалить(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 – непосредственное удаление; 0 – пометка на удаление. Параметр является необязательным. Значение по умолчанию — 1.

Пример записи метода:

Спр.Удалить(0);

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

Снять пометку удаления с текущего элемента справочника позволяет метод СнятьПометкуУдаления() (англоязычный синоним — ClearDeleteMark()). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

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

Установить новый префикс для автоматического создания кодов элементов справочника позволяет метод ПрефиксКода() (англоязычный синоним — CodePrefix()). Возвращаемым значением метода является строковое значение текущего префикса кодов элементов справочника на момент до исполнения метода.

Синтаксис:

ПрефиксКода(<Префикс>)

где <Префикс> — строковое выражение, задающее новый префикс кодов элементов справочника. Параметр является необязательным.

Пример записи метода:

ПрефиксКода("01-");

Установить новый код элемента справочника с указанным префиксом позволяет метод УстановитьНовыйКод() (англоязычный синоним — SetNewCode()).

Синтаксис метода:

УстановитьНовыйКод(<Префикс>)

где <Префикс> — строковое выражение, задающее префикс кода элемента справочника.

Пример записи метода:

УстановитьНовыйКод("01-");

Методы для выбора конкретного элемента справочника

Выполнить поиск элемента справочника по значению, заданному параметром, и позиционировать объект "Справочник" на этом элементе позволяет метод НайтиЭлемент() (англоязычный синоним — FindItem()). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

НайтиЭлемент(<НаименованиеЭлемента>)

где <НаименованиеЭлемента> — выражение со значением элемента справочника.

Пример использования:

СпрБнк = СоздатьОбъект("Справочник.Банки");
СпрБнк.ИспользоватьДату(ДатаДок);
СпрБнк.НайтиЭлемент(Док.НашБанк);
Процент = СпрБнк.Процент;
НазваниеБанка = СпрБнк.Наименование;

Выполнить поиск элемента справочника по наименованию, указанному в параметре метода, и позиционировать объект "Справочник" на этом элементе позволяет метод НайтиПоНаименованию() (англоязычный синоним — FindByDescr()). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Использоваться данный метод можно только для объектов, созданных с помощью функции СоздатьОбъект().

Синтаксис:

НайтиПоНаименованию(<Наименование>, <Режим>, <ФлагПоиска>)

где

  • <Наименование> — строковое выражение, содержащее наименование искомого элемента справочника;
  • <Режим> — числовое выражение, задающее режим поиска: 1 — поиск внутри установленного подчинения (родителя); 0 — поиск во всём правочнике вне зависимости от родителя. Параметр является необязательным. Значение по умолчанию — 1;
  • <ФлагПоиска> — числовое выражение — флаг поиска: 1 — найти точное соответствие наименования; 0 — найти наименование по первым символам. Параметр является необязательным. Значение по умолчанию — 0.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
Спр.ИспользоватьДату(ДатаДок);

Если Спр.НайтиПоНаименованию("Иванов", 1) > 0 Тогда
   Оклад = Спр.Оклад;
   Подразделение = Спр.Подразделение;
Иначе
   Предупреждение("Нет у нас Ивановых!");
КонецЕсли;

Выполнить поиск элемента справочника по коду, указанному в параметре метода, и позиционировать объект "Справочник" на этом элементе позволяет метод НайтиПоКоду() (англоязычный синоним — FindByCode()). Если справочник многоуровневый и нумерация в пределах каждой группы своя, то полный код выбираемого элемента можно задавать, разделяя коды уровней символом «/» (косая черта). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

НайтиПоКоду(<КодЭлемента>, <Режим>)

где

  • <КодЭлемента> — выражение со значением искомого кода;
  • <Режим> — числовое выражение, устанавливающее режим поиска: 0 — поиск во всем справочнике вне зависимости от родителя; 1 — поиск внутри установленного подчинения (родителя); 2 — поиск по полному коду. Параметр является необязательным. Значение по умолчанию: 0 — для справочников, у которых код уникален во всем справочнике; 2 — для справочников, у которых код уникален в группе.

Пример использования:

Пдр = СоздатьОбъект("Справочник.Подразделения");
Если Пдр.НайтиПоКоду("125") > 0 Тогда
   Сообщить("Есть такое подразделение !")
Иначе
   Сообщить("Нет такого подразделения!")
КонецЕсли;

Выполнить поиск первого элемента с указанным значением заданного реквизита и позиционировать объект "Справочник" на этом элементе позволяет метод НайтиПоРеквизиту() (англоязычный синоним — FindByAttribute()). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

НайтиПоРеквизиту(<ИмяРеквизита>, <3начение>, <ФлагГлобальногоПоиска>)

где

  • <ИмяРеквизита> — строковое выражение с наименованием (идентификатором) реквизита;
  • <3начение> — значение реквизита для поиска;
  • <ФлагГлобальногоПоиска> — числовое выражение. Если 0, то поиск должен выполняться в пределах подчинения справочника, если 1, то поиск должен выполняться по всему справочнику.

Пример использования:

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

Если Спр.НайтиПоРеквизиту("СерияПаспорта", "XXVII-OP", 1) > 0 Тогда
   ФИО = Спр.Наименование;
Иначе
   Предупреждение("Не найден сотрудник с таким паспортом!");
КонецЕсли;

Примечание: Метод НайтиПоРеквизиту() может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

Вызвать диалоговое окно для выбора элемента (см. рис. ниже) и позиционировать объект "Справочник" на выбранном элементе позволяет метод Выбрать() (англоязычный синоним — Choose()). Возвращаемым значением метода является число: 1 — если элемент выбран, 0 — если действие не выполнено (элемент не выбран). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

Выбрать(<Подсказка>, <ФормаСписка>)

где

  • <Подсказка> — текст заголовка окна диалога выбора. Может использоваться в качестве подсказки конечному пользователю;
  • <ФормаСписка> — строковое выражение, содержащее идентификатор той формы списка справочника, которая должна использоваться для выбора. Если это значение пустое, то используется форма списка по умолчанию.

Пример использования:

Процедура УстФирмы()
   
   Фрм = СоздатьОбъект("Справочник.Фирмы");
   
   Фрм.ИспользоватьДату(ДатаДок);
   
   Если Фрм.Выбрать("Выберите фирму", "") > 0 Тогда
      Фирма = Фрм.ТекущийЭлемент();
   КонецЕсли;
КонецПроцедуры

В результате работы данного кода на экран будет выведено окно:

Окно выбора элемента

Проверить факт выбора элемента справочника позволяет метод Выбран() (англоязычный синоним — Selected()). Параметры у этого метода отсутствуют. Метод возвращает число со значением 1, если элемент справочника выбран, или 0, если элемент справочника не выбран.

Пример использования:

Если ВыбСклад.Выбран() = 0 Тогда
   
   Заг1 = "По всем складам.";
Иначе
   
   Заг1 = "Отчет по складу "+ ВыбСклад.Наименование;
КонецЕсли;

Методы для циклической обработки элементов справочника

Открыть выборку элементов справочника позволяет метод ВыбратьЭлементы() (англоязычный синоним — SelectItems()). Дальнейшая выборка элементов будет происходить при помощи метода ПолучитьЭлемент() среди элементов текущего справочника в порядке, установленном заранее при помощи соответствующих методов (ПорядокКодов(), ПорядокНаименований(), ВключатьПодчиненные() и др.) Использовать метод ВыбратьЭлементы() можно только для объектов, созданных функцией СоздатьОбъект(). Возвращаемым значением метода будет число 1, если действие выполнено и в выборке есть хотя бы один элемент, или 0, если действие не выполнено или в выборке нет ни одного элемента.

Синтаксис метода:

ВыбратьЭлементы(<Режим>)

где <Режим> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("ШапкаОтчета");

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

Акц.ВыбратьЭлементы();

Пока Акц.ПолучитьЭлемент() > 0 Цикл
   Если Акц.ЭтоГруппа() = 1 Тогда
      Таб.ВывестиСекцию("Группа");
   Иначе
      Таб.ВывестиСекцию("Акционер");
   КонецЕсли;
КонецЦикла;

Открыть выборку элементов справочника по реквизиту позволяет метод ВыбратьЭлементыПоРеквизиту() (англоязычный синоним — SelectItemsByAttribute()). Дальнейшая выборка элементов справочника будет происходить при помощи метода ПолучитьЭлемент() среди элементов текущего справочника, имеющих указанное значение реквизита, в порядке, установленном параметрами метода, а также согласно установкам, сделанным заранее при помощи методов ПорядокКодов(), ПорядокНаименований(), ВключатьПодчиненные(), ИспользоватьРодителя(), ИспользоватьВладельца() и ИспользоватьДату(). Возвращаемым значением метода ВыбратьЭлементыПоРеквизиту() будет число 1, если действие выполнено и в выборке есть хотя бы один элемент, или 0, если действие не выполнено или в выборке нет ни одного элемента.

Синтаксис метода:

ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>, <3начение>, <РежимИерархии>, <РежимГрупп>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита справочника, который задаёт порядок обхода элементов справочника;
  • <3начение> — значение реквизита для выборки;
  • <РежимИерархии> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1;
  • <РежимГрупп> — числовое выражение. Если равно 1, то выбор будет происходить среди групп справочника; если равно 0, то выбор будет происходить среди элементов справочника.

Пример использования:

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

Акц.ВыбратьЭлементыПоРеквизиту("Отдел", НомерОтдела, 1, 0);

Пока Акц.ПолучитьЭлемент() > 0 Цикл
   . . .
КонецЦикла;

Примечание: Метод ВыбратьЭлементыПоРеквизиту может использоваться только для объектов, созданных при помощи функции СоздатьОбъект(), и только для реквизитов, у которых в Конфигураторе установлен признак «Сортировка»
(посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

Выбрать следующий элемент справочника в выборке, открытой предварительно при помощи методов ВыбратьЭлементы() или ВыбратьЭлементыПоРеквизиту() позволяет метод ПолучитьЭлемент() (англоязычный синоним — GetItem()). Метод может применяться только для объектов, созданных при помощи функции СоздатьОбъект(), и используется для организации цикла поиска по справочнику. Возвращаемым значением метода будет число 1, если элемент выбран, или 0, если элемент не выбран (достигнут конец выборки).

Синтаксис метода:

ПолучитьЭлемент(<Режим>)

где <Режим> — числовое выражение. Если равно 1, то будут включаться в выборку все подчинённые элементы, если 0, то подчинённые элементы не будут включаться в выборку. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

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

Спр.ПорядокКодов();

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Сообщить("===" + Спр.Наименование);
КонецЦикла;

Получить значение текущего элемента справочника в целом (как объекта) позволяет метод ТекущийЭлемент() (англоязычный синоним — CurrentItem()). Параметры у этого метода отсутствуют. Данный метод применяется, например, если нужно элемент справочника передать как параметр в вызове какого-либо метода или присвоить какому-либо реквизиту.

Пример использования:

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

Ещё пример:

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

Методы управления выбором справочников и элементов справочников

Установить выбираемые виды для объекта-справочника неопределённого вида позволяет метод ВидыДляВыбора() (англоязычный синоним — KindsForChoise()). Данный метод обычно используется до начала интерактивного позиционирования элемента справочника, например, при помощи метода Выбрать(). Возвращаемым значением метода является строковое значение, содержащее текущий список видов выбираемых справочников, разделённых запятыми (на момент до исполнения метода).

Данный метод может использоваться только для объектов-справочников неопределённого вида, созданных функцией СоздатьОбъект() или определённых в Конфигураторе как реквизиты диалога или другого объекта. Если метод ВидыДляВыбора() применен к реквизиту диалога типа «справочник неопределённого вида», то интерактивный выбор элемента справочника будет производиться только среди установленных видов справочников.

Синтаксис метода:

ВидыДляВыбора(<СписокВидов>)

где <СписокВидов> — строковое выражение, содержащее список видов выбираемых справочников, разделённых запятыми. Параметр является необязательным и не используется в случае, когда метод требуется для получения текущего значения установленных видов.

Пример использования:

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

Установить режим выборки элементов справочника в порядке возрастания кодов позволяет метод ПорядокКодов() (англоязычный синоним — OrderByCode()). Параметры у метода отсутствуют.

Данный метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект(), и обычно используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить среди элементов текущего справочника в порядке возрастания кодов элементов.

Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — наименование, а надо получить элементы в порядке кодов.

Пример использования:

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

Спр.ПорядокКодов();

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование);
   . . .
КонецЦикла;

Установить режим выборки элементов справочника в порядке возрастания наименования элементов позволяет метод ПорядокНаименований() (англоязычный синоним — OrderByDescr()). Параметры у метода отсутствуют.

Данный метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект(), и обычно используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить среди элементов текущего справочника в порядке возрастания наименования элементов.

Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — код, а надо получить элементы в порядке наименований.

Пример использования:

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

Спр.ПорядокНаименований();

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование);
   . . .
КонецЦикла;

Установить режим выборки элементов справочника в порядке возрастания значения указанного реквизита позволяет метод ПорядокРеквизита() (англоязычный синоним — OrderByAttribute()). Метод может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект(), и обычно используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить среди элементов текущего справочника в порядке возрастания значения реквизита.

Синтаксис:

ПорядокРеквизита(<ИмяРеквизита>)

где <ИмяРеквизита> — строковое выражение с именем реквизита справочника, который задаёт порядок обхода элементов справочника.

Пример использования:

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

Спр.ПорядокРеквизита("Оклад");

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование + " - " + Спр.Оклад);
   . . .
КонецЦикла;

Примечание: Метод ПорядокРеквизита() может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

Установить режим выбора групп позволяет метод ВыборГруппы() (англоязычный синоним — SelectGroup()). Данный метод может применяться как для позиционируемых объектов, созданных функцией СоздатьОбъект(), так и для полей типа «Справочник» диалоговых форм. Возвращаемым значением метода является текущее числовое значение режима выбора групп на момент до исполнения метода.

Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.

Синтаксис метода:

ВыборГруппы(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным и не используется в случае, когда метод применяется для получения текущего значения режима выбора групп.

Пример использования:

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

Спр.ВыборГруппы(0);

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование);
   . . .
КонецЦикла;

Задать параметры выборки для подчинённого справочника позволяет метод ИспользоватьВладельца() (англоязычный синоним — UseOwner()). Возвращаемым значением метода является значение элемента справочника-владельца для текущего подчинённого справочника на момент до исполнения метода.

Данный метод может применяться к объектам типа "Справочник" в двух случаях:

  • для объектов, созданных функцией СоздатьОбъект(), метод ИспользоватьВладельца() устанавливает элемент справочника-владельца в качестве параметра выборки. Метод используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить только среди тех элементов текущего подчинённого справочника, для которых владельцем является заданное значение элемента справочника-владельца. При записи нового элемента текущего справочника данный метод также задаёт владельца для нового элемента.
  • для объектов типа "Справочник", которые являются реквизитами формы (например, в форме документа — реквизит документа типа «Справочник») или реквизитами диалога (например, в форме отчёта — реквизит диалога типа «Справочник») метод ИспользоватьВладельца() позволяет программно установить некоторое значение справочника-владельца в качестве владельца, который будет использован при интерактивном выборе значения данного реквизита.

Синтаксис метода:

ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )

где

  • <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения элемента справочника-владельца;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Параметр имеет смысл только в случае использования данного метода для объектов типа «Справочник», которые являются реквизитами формы или реквизитами диалога.

Пример использования:

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

Другой пример:

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

Установить группу текущего справочника в качестве параметра выборки позволяет метод ИспользоватьРодителя() (англоязычный синоним — UseParent()). Возвращаемым значением метода является значение текущей группы для справочника на момент до исполнения метода.

Данный метод может использоваться только для объектов, созданных при помощи системной функции СоздатьОбъект(), и используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить только среди элементов текущего справочника, принадлежащих указанной группе. При добавлении нового элемента текущего справочника данная установка также будет являться свойством нового элемента.

Синтаксис метода:

ИспользоватьРодителя(<Группа>)

где <Группа> — выражение со значением группы справочника. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения группы.

Пример использования:

Процедура ВыводСпискаСотрудников()
   Таб = СоздатьОбъект("Таблица");
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   Спр.ИспользоватьДату(ДатаОтчета);
   Если ВыбСотр.Выбран() = 0 Тогда
      
      Заг = "По всем сотрудникам";
   ИначеЕсли ВыбСотр.ЭтоГруппа() = 1 Тогда
      
      Спр.ИспользоватьРодителя(ВыбСотр);
      Заг = "По сотрудникам группы " + ВыбСотр.Наименование;
   Иначе
      
      Спр.НайтиЭлемент(ВыбСотр);
      Заг = "По сотруднику " + ВыбСотр.Наименование;
      Таб.ВывестиСекцию("Отчет");
      Таб.ВывестиСекцию("Сотрудник");
      Перейти ~MET;
   КонецЕсли;
   ЧислоСтрок = 0;
   Таб.ВывестиСекцию("Отчет");
   
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() > 0 Цикл
      ЧислоСтрок = ЧислоСтрок + 1;
      Если Спр.ЭтоГруппа() = 1 Тогда
         Таб.ВывестиСекцию("Группа");
      Иначе
         Таб.ВывестиСекцию("Сотрудник");
      КонецЕсли;
      Состояние("В отчет выведено " + ЧислоСтрок + " строк." );
   КонецЦикла;

~MET:
   
   Таб.ТолькоПросмотр(1);
   Таб.Опции(0, 0, 4, 0);
   Таб.Показать("Список сотрудников", "");
   ВыбСотр = 0;
КонецПроцедуры

Установить флаг выборки всех подчинённых элементов позволяет метод ВключатьПодчиненные() (англоязычный синоним — IncludeChildren()). Возвращаемым значением метода является текущее числовое значение режима выборки подчинённых элементов справочника на момент до исполнения метода.

Данный метод может использоваться только для объектов, созданных системной функцией СоздатьОбъект(), и используется до вызова метода ВыбратьЭлементы(), который фактически и открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить среди элементов текущего справочника в соответствии с установленным режимом выборки. По умолчанию в выборку всегда включаются подчинённые элементы, поэтому реально имеет смысл применять данный метод только в том случае, если надо отменить включение подчиненных.

Синтаксис метода:

ВключатьПодчиненные(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — надо включать в выборку все подчинённые элементы; 0 — не надо включать подчинённые элементы. Параметр является необязательным.

Пример использования:

Процедура ВыводСпискаТоваров(Режим)
   Таб = СоздатьОбъект("Таблица");
   Тов = СоздатьОбъект("Справочник.Товары");
   Тов.ИспользоватьДату(ДатаОтчета);
   Если ВыбТовар.Выбран() = 0 Тогда
      
      Заг = "По всем товарам.";
   ИначеЕсли ВыбТовар.ЭтоГруппа() = 1 Тогда
      
      Тов.ИспользоватьРодителя(ВыбТовар);
      Заг = "По товарам группы " + ВыбТовар.Наименование;
      
      Тов.ВключатьПодчиненные(Режим);
   Иначе
      
      Тов.НайтиЭлемент(ВыбТовар);
      Заг = "По товару " + ВыбТовар.Наименование;
      Таб.ВывестиСекцию("Отчет");
      Таб.ВывестиСекцию("Товар");
      Перейти ~MET;
   КонецЕсли;
   ЧислоСтрок = 0;
   Таб.ВывестиСекцию("Отчет");
   
   Тов.ВыбратьЭлементы();
   Пока Тов.ПолучитьЭлемент() > 0 Цикл
      ЧислоСтрок = ЧислоСтрок + 1;
      Если Тов.ЭтоГруппа() = 1 Тогда
         Таб.ВывестиСекцию("Группа");
      Иначе
         Таб.ВывестиСекцию("Товар");
      КонецЕсли;
      Состояние("В отчет выведено " + ЧислоСтрок + " строк." );
   КонецЦикла;
   
~MET:
   Таб.ТолькоПросмотр(1);
   Таб.Опции(0, 0, 4, 0);
   Таб.Показать("Список товаров по каталогу", "");
КонецПроцедуры

Установить порядок выборки элементов справочника позволяет метод ОбратныйПорядок() (англоязычный синоним — BackwardOrder()). Возвращаемым значением метода является текущее значение порядка выборки элементов справочника на момент до исполнения метода.

Данный метод может использоваться только для объектов, созданных системной функцией СоздатьОбъект(), и обычно используется до вызова методов ВыбратьЭлементыПоРеквизиту() или ВыбратьЭлементы(), которые фактически и открывают выборку. По умолчанию, выборка элементов справочника выполняется в прямом порядке. Поэтому реально имеет смысл применять метод ОбратныйПорядок() только в том случае, если надо получить обратный порядок выборки.

Синтаксис метода:

ОбратныйПорядок(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать элементы справочника в обратном порядке; 0 — выбирать элементы справочника в прямом порядке. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

Акц = СоздатьОбъект("Справочник.Акционеры");
Акц.ИспользоватьДату(РабочаяДата());
Акц.ПорядокКодов();
Акц.ОбратныйПорядок(1);
Акц.ВыбратьЭлементы();
Пока Акц.ПолучитьЭлемент() > 0 Цикл
   . . .
КонецЦикла;

Методы для получения информации об элементе справочника

Получить полный код выбранного элемента справочника (с кодами групп всех вышестоящих уровней, разделёнными символом «/») позволяет метод ПолныйКод() (англоязычный синоним — FullCode()). Параметры у метода отсутствуют. Возвращаемым значением метода является строка.

Пример использования:

ПолнКод = Спр.Подразделения.ПолныйКод();

Получить полное наименование выбранного элемента справочника (с наименованиями групп всех вышестоящих уровней, разделёнными символом «/») позволяет метод ПолноеНаименование() (англоязычный синоним — FullDescr()). Параметры у метода отсутствуют. Возвращаемым значением метода является строка.

Пример использования:

ПолнНаим = Спр.Подразделения.ПолноеНаименование();

Узнать, является ли выбранный элемент справочника группой позволяет метод ЭтоГруппа() (англоязычный синоним — IsGroup()). Метод возвращает числовое значение 1, если выбранный элемент справочника является группой, или 0, если он является обычным элементом. Параметры у метода отсутствуют.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Отчет");
Сотр = СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы();
Пока Сотр.ПолучитьЭлемент() > 0 Цикл
   Если Сотр.ЭтоГруппа() = 1 Тогда
      Таб.ВывестиСекцию("Группа");
   Иначе
      Таб.ВывестиСекцию("Сотрудник");
   КонецЕсли;
КонецЦикла;

Проверить, принадлежит ли указанной группе текущий элемент справочника (не важно, на каком нижестоящем уровне) позволяет метод ПринадлежитГруппе() (англоязычный синоним — BelongsToGroup()). Возвращаемым значением метода является число 1, если элемент принадлежит указанной группе, или 0, если нет.

Синтаксис метода:

ПринадлежитГруппе(<Группа>)

где <Группа> — выражение со значением группы справочника.

Пример использования:

Процедура ВывестиНаПечать()
   . . .
   Возврат;
КонецПроцедуры
. . .
Спр = СоздатьОбъект("Справочник.Подразделения");

Спр.ПорядокКодов();
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
   Если Спр.ПринадлежитГруппе(ВыбГруппа) = 1 Тогда
      ВывестиНаПечать();
   КонецЕсли;
КонецЦикла;

Получить номер уровня текущего элемента в структуре дерева многоуровневого справочника позволяет метод Уровень() (англоязычный синоним — Level()). Параметры у метода отсутствуют.

Пример использования:

Спр = СоздатьОбъект("Справочник.Подразделения");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Сообщить(Строка(Спр.Наименование + Спр.Код + Спр.Уровень()));
КонецЦикла;

Прочитать значение пометки удаления текущего элемента справочника позволяет метод ПометкаУдаления() (англоязычный синоним — DeleteMark()). Параметры у метода отсутствуют. Возвращаемым значением метода является числовое значение: 1 — если на элементе справочника стоит пометка удаления; 0 — если нет пометки удаления.

Пример использования:

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

Методы для работы с реквизитами справочников

Назначить тип для реквизита, которому в Конфигураторе назначен тип «Неопределенный» позволяет метод НазначитьТип() (англоязычный синоним — SetType()).

Синтаксис метода:

НазначитьТип(<ИмяРеквизита>, <ИмяТипа>, <Длина>, <Точность>)

где

  • <ИмяРеквизита> — строковое выражение – название реквизита неопределённого типа, как он назван в Конфигураторе;
  • <ИмяТипа> — строковое выражение – название типа данных (или вид субконто), который назначается реквизиту справочника, например, "Строка", "Дата", "Число", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — числовое выражение — длина поля представления данных. Параметр является необязательным и имеет смысл только при задании числового или строкового типа;
  • <Точность> — числовое выражение — число знаков после десятичной точки. Параметр является необязательным и имеет смысл только при задании числового типа.

Пример использования:

Номенклатура.НазначитьТип("ТМЦ", "Справочник.Товары");

Кстати, для установки конкретного вида значениям типа «Документ неопределённого вида», «Справочник неопределённого вида», «Счёт неопределённого вида» предназначена системная (встроенная) процедура НазначитьВид() (англ. синоним — SetKind()). Обычно эта процедура используется для реквизитов форм, причём, в сочетании с методом элемента формы НеИзменятьВид(). Это позволяет регулировать программно собственно вид, а само значение предоставить выбирать пользователю интерактивно.

Синтаксис данной процедуры:

НазначитьВид(<3начение>, <Вид>)

где

  • <3начение> — значение типа «документ/справочник/счёт неопределённого вида» — обычно реквизит документа, справочника или диалога формы;
  • <Вид> — строковое значение. Вид может быть задан строкой, содержащей идентификатор конкретного справочника, документа или плана счетов. Вид также может быть задан видом субконто, который имеет тип соответственно конкретного справочника, документа или счёта.

Пример использования процедуры:


Процедура ВводНаОсновании(ДокОсн)
   Если ДокОсн.Вид() = "Счет" Тогда
      НазначитьВид(Контрагент, "Организации");
   Иначе
      НазначитьВид(Контрагент, "Сотрудники");
   КонецЕсли;
   Форма.Контрагент.НеИзменятьВид(1);
КонецПроцедуры

Получить значение реквизита по его идентификатору позволяет метод ПолучитьАтрибут() (англоязычный синоним — GetAttrib()).

Синтаксис метода:

ПолучитьАтрибут(<ИмяРеквизита>)

где <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе.

Пример использования:

ЦенаТов = Тов.ПолучитьАтрибут("ЦенаРозничная");

Установить значение реквизита по его идентификатору позволяет метод УстановитьАтрибут() (англоязычный синоним — SetAttrib()).

Синтаксис метода:

УстановитьАтрибут(<ИмяРеквизита>, <3начение>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
  • <3начение> — выражение, содержащее устанавливаемое значение реквизита.

Пример использования:

Тов.УстановитьАтрибут("ЦенаРозничная", ЦенаТов);

Установить для объекта типа "Справочник" дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату() (англоязычный синоним — UseDate()). Возвращаемым значением метода является текущее значение используемой даты на момент до исполнения метода.

Синтаксис метода:

ИспользоватьДату(<Дата>, <УстСразу>)

где

  • <Дата> — выражение со значением типа "Дата". Параметр является необязательным;
  • <УстСразу> — число. Если значение равно 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 — то дата, переданная в качестве параметра будет установлена при следующей выборке. Параметр является необязательным. Значение по умолчанию — 0.

Понять работу второго параметра можно из следующего примера:


Спр.ИспользоватьДату(Д1, 1);
Спр.ВыбратьЭлементы();
. . .
А = Спр.Цена; 
Спр.ИспользоватьДату(Д2, 1);
Б = Спр.Цена; 

Спр.ИспользоватьДату(Д1);
Спр.ВыбратьЭлементы();
. . .
А = Спр.Цена; 
Спр.ИспользоватьДату(Д2);
Б = Спр.Цена; 
Спр.ВыбратьЭлементы();
. . .
В = Спр.Цена; 

Примечание 1: Если к объекту типа "Справочник" был применён метод ИспользоватьДату(), то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту методы Получить() и Установить(), так как в такой последовательности эти методы несовместимы.

Примечание 2: Данный метод нельзя использовать «через две точки». Например, если в документе с именем ДокНакл есть реквизит Фирма типа "Справочник", у которого есть периодический реквизит НДС, то для получения значения этого НДС следующий оператор использовать не следует:

ДокНакл.Фирма.ИспользоватьДату(РабочаяДата());

В этом случае необходимо просто использовать промежуточную (дополнительную) переменную, например:

ФирДок = ДокНакл.Фирма;
ФирДок.ИспользоватьДату(РабочаяДата());
НДСДок = ФирДок.НДС;

Методы контекста Модуля формы элемента справочника

Описанные в данном разделе методы доступны только в контексте Модуля формы элемента справочника.

Проверить форму элемента справочника на предмет изменения её реквизитов позволяет метод Модифицированность() (англоязычный синоним — Modify()). Метод возвращает 1, если реквизиты текущей формы элемента справочника были изменены, или 0, если реквизиты не изменялись. Параметры у данного метода отсутствуют.

Пример использования метода:

Процедура ПриЗакрытии()
   Если Модифицированность() > 0 Тогда
      . . .
   КонецЕсли;
КонецПроцедуры

Установить для элемента справочника дату, на которую будут записаны периодические реквизиты, позволяет метод ИспользоватьДату() (англоязычный синоним — UseDate()). Возвращаемым значением метода является значение используемой даты на момент до исполнения метода. Без использования данного метода значения выбранных периодических реквизитов справочника будут записываться на текущую рабочую дату.

Синтаксис:

ИспользоватьДату(<Дата>, <Обновить>)

где

  • <Дата> — выражение со значением типа "Дата";
  • <Обновить> — число. Возможные значения: 1 — обновить периодические реквизиты формы на заданную дату; 0 — не обновлять периодические реквизиты формы. Параметр является необязательным. Значение по умолчанию — 0.

Пример использования метода:

Если Число(ВыбДата) <> 0 Тогда
   
   ИспользоватьДату(ВыбДата);
КонецЕсли;

Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов() (англоязычный синоним — РеriodicAttributesSaving()).

Запись периодических реквизитов

Примечание: При отсутствии данного метода в Модуле формы элемента справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.

Синтаксис метода:

СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)

где

  • <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
    • 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
  • <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.

Пример использования метода:

СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");

Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории() (англоязычный синоним — ViewHistory()). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.

Синтаксис метода:

ПросмотрИстории(<СписокРеквизитов>)

где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.

Пример использования:

Процедура ПриОткрытии()
   ПросмотрИстории("Оклад, Тариф, Подразделение");
КонецПроцедуры

Методы контекста Модуля формы списка справочника

Описанные в данном разделе методы доступны только в контексте Модуля формы списка справочника.

Установить для формы списка справочника дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату() (англоязычный синоним — UseDate()). Возвращаемым значением метода является значение даты выборки периодических реквизитов формы списка справочника.

Синтаксис:

ИспользоватьДату(<Дата>)

где <Дата> — выражение со значением типа "Дата".

Пример использования метода:

ИспользоватьДату(ДатаДок);

Установить элемент связанного справочника в качестве владельца для формы списка подчинённого справочника позволяет метод ИспользоватьВладельца() (англоязычный синоним — UseOwner()). При добавлении нового элемента текущего справочника данный параметр будет являться свойством нового элемента. Возвращаемым значением метода является значение владельца (до применения метода) для формы списка подчиненного справочника.

Синтаксис метода:

ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )

где

  • <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным. Если параметр не задан, то значение владельца не меняется;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИспользоватьВладельца(Сотр, 0);

Установить группу справочника в качестве родителя для формы списка справочника позволяет метод ИспользоватьРодителя() (англоязычный синоним — UseParent()). При добавлении нового элемента текущего справочника данный параметр также будет являться свойством нового элемента. Возвращаемым значением метода является значение родителя для формы списка справочника до момента применения метода.

Синтаксис метода:

ИспользоватьРодителя(<Родитель>, <ФлагИзменения> )

где

  • <Родитель> — выражение со значением группы справочника — нового родителя. Параметр является необязательным. Если параметр не задан, то значение родителя не меняется;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения родителя. Возможные значения: 1 — пользователь может изменить родителя интерактивно; 0 — пользователь не может интерактивно изменить родителя. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИспользоватьРодителя(ВыбГруппаСотр, 1);

Установить режим иерархического списка справочника позволяет метод ИерархическийСписок() (англоязычный синоним — HierarchicalList()). Возвращаемым значением метода является значение флага иерархического списка для формы списка справочника до момента применения метода.

Синтаксис метода:

ИерархическийСписок(<ФлагИерархСписка> , <ФлагИзменения>)

где

  • <ФлагИерархСписка> — флаг иерархического списка. Возможные значения: 1 — иерархический список; 0 — неиерархический список;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения флага иерархического списка. Возможные значения: 1 — пользователь может изменить иерархичность интерактивно; 0 — пользователь не может интерактивно изменить иерархичность. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИерархическийСписок(1, 1);

Установить режим выбора групп для формы списка справочника, которая открыта в режиме выбора или подбора элемента, позволяет метод ВыборГруппы() (англоязычный синоним — SelectGroup()). Возвращаемым значением метода является текущее числовое значение режима выбора групп (на момент до исполнения метода).

Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.

Синтаксис метода:

ВыборГруппы(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным. Если параметр не задан, то значение флага не меняется.

Пример использования:

ВыборГруппы(0);

Установить способ редактирования элементов справочника позволяет метод РедактироватьВДиалоге() (англоязычный синоним — EditInForm()). Возвращаемым значением метода является значение установленного на данный момент (до применения метода) способа редактирования элементов справочника.

Синтаксис метода:

РедактироватьВДиалоге(<Способ>, <Разрешение>)

где

  • <Способ> — способ редактирования элемента справочника. Возможные значения: 1 — в диалоге; 0 — в строке. Параметр является необязательным;
  • <Разрешение> — флаг разрешения пользователю менять способ редактирования. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.

Пример использования:

ТекСп = РедактироватьВДиалоге(); 
РедактироватьВДиалоге(1);        
РедактироватьВДиалоге(1, 0);     

Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов() (англоязычный синоним — РеriodicAttributesSaving()).

Запись периодических реквизитов

Примечание: При отсутствии данного метода в Модуле формы списка справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.

Синтаксис метода:

СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)

где

  • <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
    • 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
  • <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.

Пример использования метода:

СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");

Принудительно установить отбор для списка справочника позволяет метод УстановитьОтбор() (англоязычный синоним — SetSelection()).

Синтаксис метода:

УстановитьОтбор(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — строковое выражение — строка с именем реквизита справочника, по которому установлен отбор (у реквизита в Конфигураторе должен быть установлен флажок «Отбор по реквизиту»). Если это значение пустое, то отбор отключается;
  • <3начение0тбора> — значение отбора. Параметр является необязательным.

Пример использования:

Процедура ПриОткрытии()
   Перем Тип;
   Перем Знач;
   БылОтбор = ПолучитьОтбор(Тип, Знач);
      Если .... Тогда  
         УстановаитьОтбор("Имя", "Коля");
      ИначеЕсли БылОтбор = 1 Тогда
         
         УстановитьОтбор(Тип, Знач);
      КонецЕсли;
КонецПроцедуры

Проверить, был ли ранее установлен отбор позволяет метод ПолучитьОтбор() (англоязычный синоним — GetSelection()). Метод возвращает число 1, если отбор есть, или 0, если отбора нет. В параметры же метода возвращается текущее значение установленного отбора.

Синтаксис метода:

ПолучитьОтбор(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — имя переменной, куда вернётся строковое значение имени отбора;
  • <3начение0тбора> — имя переменной, куда вернётся значение отбора.

Пример использования метода был приведён выше.

Установить доступные виды отборов списка справочника для вызова их в интерактивном режиме (см. рис. ниже) позволяет метод ВидыОтбора() (англоязычный синоним — KindsOfSelection()). Возвращаемым значением метода является строковое значение, содержащее текущий список имён отборов (на момент до исполнения метода), разделённых запятыми.

Синтаксис метода:

ВидыОтбора(<СписокИменОтборов>)

где <СписокИменОтборов> — строка со списком (через запятую) имён тех реквизитов, отбор по которым допускается, или символ «*» — для всех видов отборов.

Пример использования:

Процедура ПриОткрытии()
   ВидыОтбора("ТипСклада, ТипЦен");
КонецПроцедуры

Результат:

Отбор по реквизиту

Установить в форме списка справочника закладки для интерактивного осуществления отбора позволяет метод ЗакладкиОтбора() (англоязычный синоним — TabCtrlSelection()).

Синтаксис метода:

ЗакладкиОтбора(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — строковое выражение, содержащее имя отбора;
  • <3начение0тбора> — значение отбора, который будет установлен первоначально.

Пример использования:

ЗакладкиОтбора("Имя", "Коля");

Реализовать фильтрацию (установить нединамический фильтр) элементов справочника позволяет метод ИспользоватьСписокЭлементов() (англоязычный синоним — UseItemList()). Метод рекомендуется применять в предопределённых процедурах ПриСменеРодителя(), ПриОткрытии(), ПриСменеИерархии(). При этом формируется список «разрешённых» элементов, который передаётся форме списка справочника при помощи данного метода. Данный список должен являться подмножеством тех элементов, которые обычно отображаются в форме списка без применения фильтра.

Примечание: После вызова метода ИспользоватьСписокЭлементов() форма списка справочника не позволяет вводить новый элемент, копировать и т.п.

Синтаксис метода:

ИспользоватьСписокЭлементов(<СписокЗначений>)

где <СписокЗначений> — необязательный параметр. Значение типа "СписокЗначений". Должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается.

Пример использования:

Процедура УстановитьФильтр(ВыбПризнак)
   Список = СоздатьОбъект("СписокЗначений");
   Буфер = СоздатьОбъект("Справочник.Главный");
   
   Буфер.ИспользоватьРодителя(ИспользоватьРодителя());
   Буфер.ВключатьПодчиненные(0);
   Буфер.ВыбратьЭлементы();
   Пока Буфер.ПолучитьЭлемент() = 1 Цикл
      
      Если (Буфер.Признак = ВыбПризнак) Тогда
         Список.ДобавитьЗначение(Буфер.ТекущийЭлемент());
      КонецЕсли;
   КонецЦикла;
   ИспользоватьСписокЭлементов(Список);
КонецПроцедуры

Установить способ сортировки элементов справочника позволяет метод Сортировка() (англоязычный синоним — SortOrder()). Возвращаемым значением метода является текущее значение установленного на данный момент (до применения метода) способа сортировки элементов справочника.

Синтаксис метода:

Сортировка(<Способ>, <Разрешение>)

где

  • <Способ> — строка с именем устанавливаемой сортировки. Возможные значения: «Код» («Code»), «Наименование» («Description») или имя реквизита по которому устанавливается сортировка;
  • <Разрешение> — флаг разрешения пользователю менять способ сортировки. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.

Пример использования:

Сортировка("Наименование", 0);


СтСорт = Сортировка("Оклад");

Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории() (англоязычный синоним — ViewHistory()). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.

Синтаксис метода:

ПросмотрИстории(<СписокРеквизитов>)

где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.

Пример использования:

Процедура ПриОткрытии()
   ПросмотрИстории("Оклад, Тариф, Подразделение");
КонецПроцедуры

Предопределённые процедуры Модуля формы справочника

Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях форм справочника. К ним относятся программные модули: Модуль формы элемента справочника, Модуль формы группы справочника.

Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.

В основном данные процедуры предназначены для расширения возможности программного управления правами доступа к системе.

Предопределённая процедура ВводНового() (англоязычный синоним — InputNew()) вызывается в системе «1С:Предприятие» неявно в момент выбора пункта меню «Действия -> Новый» при работе со справочниками. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые элементы), ввода нового элемента и открытие его формы не будет выполнено.

Синтаксис процедуры:

Процедура ВводНового(<ПризнКопирования>, <ОбъектКопирования>)
   . . .
КонецПроцедуры

где

  • <ПризнКопирования> — признак того, что объект введён копированием. Число: 1 — объект введён копированием, 0 — просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта;
  • <ОбъектКопирования> — объект, который был скопирован.

Предопределённая процедура ПриЗаписи() (англоязычный синоним — OnWrite()) вызывается в системе «1С:Предприятие» при интерактивной записи элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись элемента справочника не будет выполнена.

Синтаксис процедуры:

Процедура ПриЗаписи(<СписокПериодРекв>)
   . . .
КонецПроцедуры

где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.

Пример использования:

Процедура ПриЗаписи(СписокРекв)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если ТекущийЭлемент() = Константа.НашаФирма Тогда
         Предупреждение("У вас нет права менять реквизиты!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённые процедуры Модуля формы списка справочника

Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях формы списка справочника.

Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.

В основном данные процедуры предназначены для расширения возможности программного управления правами доступа к системе.

Предопределённая процедура ПриВводеСтроки() (англоязычный синоним — OnNewLine()) вызывается в системе «1С:Предприятие» при интерактивном вводе новой строки (до начала ввода) в форме списка справочника. Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые строки списка справочника), то новая строка списка справочника не будет инициирована.

Пример использования:

Процедура ПриВводеСтроки()
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права добавлять строки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриРедактированииНовойСтроки() (англоязычный синоним — OnEditNewLine()) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования новой строки списка справочника (после того, как новая строка уже заведена). Параметры у процедуры отсутствуют. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. В данной предопределённой процедуре установка статуса возврата не имеет смысла, так как отказаться от ввода новой строки в этот момент уже невозможно.

Пример использования:

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

Предопределённая процедура ПриНачалеРедактированияСтроки() (англоязычный синоним — OnStartEditLine()) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования существующей строки списка справочника (кроме новой). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять значения реквизитов справочника), запись не будет изменена.

Пример использования:

Процедура ПриНачалеРедактированияСтроки()
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права изменять строки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриЗаписи() (англоязычный синоним — OnWrite()) вызывается в системе «1С:Предприятие» при интерактивной записи строки списка справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись строки списка справочника не будет выполнена.

Синтаксис процедуры:

Процедура ПриЗаписи(<СписокПериодРекв>)
   . . .
КонецПроцедуры

где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.

Пример использования:

Процедура ПриЗаписи(СписокРекв)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если ТекущийЭлемент() = Константа.НашаФирма Тогда
         Предупреждение("У вас нет права менять реквизиты!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриПереносеЭлементаВДругуюГруппу() (англоязычный синоним — OnMoveIntoOtherGroup()) вызывается в системе «1С:Предприятие» при интерактивном переносе элемента справочника в другую группу. Если в данной предопределённой процедуре установить статус возврата в 0, то перенос не будет произведён.

Синтаксис процедуры:

Процедура ПриПереносеЭлементаВДругуюГруппу(<Элемент>, <Группа>)
   . . .
КонецПроцедуры

где

  • <Элемент> — значение элемента справочника, который переносится;
  • <Группа> — значение группы справочника, в которую переносится элемент справочника.

Предопределённая процедура ПриВыбореРодителя() (англоязычный синоним — OnSetParent()) вызывается в системе «1С:Предприятие» при интерактивной смене родительской группы справочника (выбор следующего или предыдущего уровня). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор родительской группы не будет произведён.

Синтаксис процедуры:

Процедура ПриВыбореРодителя(<Элемент>)
   . . .
КонецПроцедуры

где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве родителя.

Пример использования:

Процедура ПриВыбореРодителя(Родитель)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если Родитель = ЗапрещеннаяГруппа Тогда
         Предупреждение("Вам запрещено просматривать эту группу!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриВыбореВладельца() (англоязычный синоним — OnSetOwner()) вызывается в системе «1С:Предприятие» при интерактивном выборе владельца подчинённого справочника (при интерактивной смене владельца, т.е. смене позиции в справочнике-владельце, которая приводит к смене отображаемых в подчинённом справочнике элементов). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор владельца подчинённого справочника не будет произведён.

Синтаксис процедуры:

Процедура ПриВыбореВладельца(<Элемент>)
   . . .
КонецПроцедуры

где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве владельца подчинённого справочника.

Пример использования:

Процедура ПриВыбореВладельца(Владелец)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если Владелец = ЗапрещенныйВладелец Тогда
         Предупреждение("Нельзя просматривать эти элементы!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриСменеИерархии() (англоязычный синоним — OnHierarchyChange()) вызывается в системе «1С:Предприятие» при интерактивной смене режима отображения иерархии справочника (пункт меню «Иерархический список»). Если в данной предопределённой процедуре установить статус возврата в 0, то смена режима отображения иерархии справочника не будет произведена.

Синтаксис процедуры:

Процедура ПриСменеИерархии(<Способ>)
   . . .
КонецПроцедуры

где <Способ> — значение устанавливаемого способа просмотра справочника: 1 — иерархических список; 0 — все элементы сразу.

Пример использования:

Процедура ПриСменеИерархии(ВыбСпособ)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("Нельзя менять режим просмотра!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриУстановкеОтбора() (англоязычный синоним — OnSetSelectInJournal()) вызывается в системе «1С:Предприятие» при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора. Если в данной предопределённой процедуре установить статус возврата в 0, то установка отбора справочника не будет произведена.

Синтаксис процедуры:

Процедура ПриУстановкеОтбора(<ТипОтбора>, <3начение0тбора>)
   . . .
КонецПроцедуры

где

  • <ТипОтбора> — строковое значение — тип устанавливаемого отбора (имя реквизита справочника, по которому устанавливается отбор);
  • <3начение0тбора> — устанавливаемое значение отбора.

Пример использования:

Процедура ПриУстановкеОтбора(ТипОтбора, 3начение)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("Вам нельзя устанавливать отбор!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённые процедуры Глобального модуля

Вызов предопределённой процедуры ПриУдаленииЭлемента() (англоязычный синоним — OnDeleteItem()) неявно производится системой «1С:Предприятие» при интерактивном удалении элемента справочника и в случае отмены пометки на удаление.

Синтаксис процедуры:

Процедура ПриУдаленииЭлемента(<Элемент>, <Режим>)
    . . .
КонецПроцедуры

где

  • <Элемент> — ссылка на удаляемый элемент;
  • <Режим> — выражение, значение которого соответствует флагу режима удаления: 1 — непосредственное удаление, 0 — пометка на удаление.

Обычно данная процедура используется для расширения возможности управления правами доступа пользователя к системе. Если в данной предопределённой процедуре статус возврата установить в 0, то установка пометки удаления элемента справочника или её снятие не будет выполнено. Определить же, что стало причиной вызова предопределённой процедуры — установка или снятие пометки удаления, — можно с помощью метода ПометкаУдаления():

Процедура ПриУдаленииЭлемента(Элем, Режим)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если (Элем.ПометкаУдаления() = 1 Тогда
         
         Предупреждение("У вас нет права отменять удаление!", 3);
      Иначе
         
         Предупреждение("У вас нет права удалять элементы справочника!", 3);
      КонецЕсли;

      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Другие статьи по схожей тематике

  • Работа с перечислениями
  • Работа с журналами документов
  • Объект «СписокЗначений»
  • Объект «ТаблицаЗначений»
  • Объект «Периодический»
  • Работа с константами

Занятие 3

Справочники

Продолжительность

Ориентировочная продолжительность занятия – 2 часа 10 минут.

Что такое справочник…………………………………………………………………………………………..

52

Формы справочника.……………………………………………………………………………………………

58

Простой справочник…………………………………………………………………………………………….

64

Представления объекта конфигурации………………………………………………………..

65

Принадлежность объекта к подсистемам.……………………………………………………

67

Код и  наименование справочника.……………………………………………………………..

68

Команда добавления нового элемента.……………………………………………………….

71

Панель команд текущего раздела……………………………………………………………….

74

Создание элементов справочника……………………………………………………………….

75

Справочник с  табличной частью………………………………………………………………………….

83

Табличная часть…………………………………………………………………………………………

86

Заполнение табличной части………………………………………………………………………

91

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

94

Создание элементов в  иерархическом справочнике .………………………………….

99

Перенос элементов в  другие группы…………………………………………………………

102

Справочник с  предопределенными элементами………………………………………………..

105

Свойство «Быстрый выбор»………………………………………………………………………

107

Предопределенные элементы…………………………………………………………………..

108

Теория………………………………………………………………………………………………………………

112

Предопределенные элементы………………………………………………………………………

112

Основная конфигурация и  конфигурация базы данных…………………………………

113

Контрольные вопросы……………………………………………………………………………………….

118

52 1С:Предприятие 8.3. Практическое пособие разработчика

На этом занятии мы познакомимся с  объектом конфигурации Справочник. Вы узнаете, для чего используется этот объект, какова его структура и  какими основными свойствами он обладает.

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

Кроме этого, вы узнаете еще об одном объекте конфигурации – Форма. Узнаете, какие виды форм существуют у  объекта конфигурации Справочник и  в каких ситуациях они используются.

В заключение в  конце занятия будет сделано теоретическое отступление, касающееся механизма внесения изменений в  конфигурацию.

Что такое справочник

Объект конфигурации Справочник предназначен для работы со спискамиданных.Какправило,в  работелюбойфирмыиспользуются списки сотрудников, списки товаров, списки клиентов, поставщиков и  т. д. Свойства и  структура этих списков описываются в  объектах конфигурации Справочник, на  основе которых платформа создает в  базе данных таблицы для хранения информации из этих справочников.

Справочниксостоитизэлементов.Например,длясправочникасотрудников элементом является сотрудник, для справочника товаров  – товар и  т. д. Пользователь в  процессе работы может самостоятельно добавлять новые элементы в  справочник: например, добавить новых сотрудников, создать новый товар или внести нового клиента.

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

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

Занятие 3 53

Рис. 3.1. Справочник «Товары» в  режиме «Конфигуратор», в  режиме «1С:Предприятие» и  в базе данных

Рис. 3.2. Стандартные реквизиты справочника и  реквизиты, созданные разработчиком

Поскольку эти объекты конфигурации логически связаны с  объектом Справочник, они называются подчиненными этому объекту.

54 1С:Предприятие 8.3. Практическое пособие разработчика

Большинство реквизитов разработчик создает самостоятельно, однако у  каждого объекта конфигурации Справочник по умолчанию существует набор стандартных реквизитов: Код и  Наименование и  пр. (см. рис. 3.2). Причем доступность стандартных реквизитов зависит от свойств справочника.

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

Таким образом, в  базе данных справочник хранится в  виде таблицы, в  строках которой расположены элементы списка, а каждому реквизиту (стандартному или созданному разработчиком) в  этой таблице соответствует отдельный столбец. Соответственно, в  ячейках этой таблицы хранится значение конкретного реквизита для конкретного элемента справочника (рис. 3.3).

Рис. 3.3. Справочник «Товары» в  режиме «Конфигуратор», в  режиме «1С:Предприятие» и  в базе данных

Занятие 3 55

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

Так, например, каждый элемент справочника Сотрудники может содержать информацию о составе семьи сотрудника. Для одного сотрудника это будет только супруга, а у  другого семья может состоять из супруги, сына и  дочери.

Для описания подобной информации могут быть использованы табличные части объекта конфигурации Справочник, являющиеся подчиненными ему объектами конфигурации. В  этом случае в  базе данных будут созданы дополнительные таблицы для хранения табличных частей, подчиненных конкретному элементу справочника

(рис. 3.4).

Рис. 3.4. Справочник «Сотрудники» в  режиме «Конфигуратор», в  режиме «1С:Предприятие» и  в базе данных

56 1С:Предприятие 8.3. Практическое пособие разработчика

Причем система скрывает от разработчика всю «техническую» часть, связанную с  хранением данных: в  базе данных для справочника создаются несколько таблиц, эти таблицы связываются по уникальному полю (Ссылка), поля таблиц имеют определенные типы и  т. д. Все это система делает сама. Нам лишь нужно добавить в  объект конфигурации Справочник подчиненный ему объект ТабличнаяЧасть.

Для удобства использования элементы справочника могут быть сгруппированы пользователем по какому-либо принципу.

Например, в  справочнике Бытовая техника могут быть созданы следующиегруппы:Холодильники,Телевизоры,Стиральные машины и  т. д.

Возможность создания таких групп в  справочнике задается свойством Иерархический объекта конфигурации Справочник. В  этом случае элемент справочника, представляющий собой группу, будет являться родителем для всех элементов и  групп, входящих в  эту группу. Такой вид иерархии называется иерархией групп иэлементов (рис. 3.5).

Рис. 3.5. Иерархический справочник с  иерархией групп и  элементов

Возможен и  другой вид иерархии – иерархия элементов. В  этом случае в  качестве родителя выступает не группа элементов справочника, а непосредственно один из его элементов. Например, такой вид иерархии можно использовать при создании справочника Подразделения, когда одно подразделение является родителем для нескольких других, входящих в  его состав (рис. 3.6).

Занятие 3 57

Рис. 3.6. Иерархический справочник с  иерархией элементов

Элементы одного справочника могут быть подчинены элементам или группам другого справочника. Например, справочник ЕдиницыИзмерения может быть подчинен справочнику Товары. Тогда для каждого элемента справочника Товары мы сможем указать единицы измерения, в  которых этот товар поступает на  склад.

В системе «1С:Предприятие» это достигается путем указания списка владельцев справочника для каждого объекта конфигурации Справочник. В  данном случае справочник Товары будет владельцем спра-

вочника ЕдиницыИзмерения (рис. 3.7).

Рис. 3.7. Справочник «Товары» – владелец справочника «Единицы измерения»

58 1С:Предприятие 8.3. Практическое пособие разработчика

Порой возникают ситуации, когда необходимо, чтобы в  справоч-

нике некоторые

элементы

существовали

всегда,

независимо

от действий

пользователя.

Допустим, логика бизнес-процессов

на  предприятии

такова, что все

товары

сначала

поступают

на  основной

склад,

а затем

по мере надобности

перемещаются

на  другие склады.

В  этом

случае

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

Склады всегда

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

(рис. 3.8).

Рис. 3.8. Справочник «Склады» с  предопределенным элементом «Основной»

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

Формы справочника

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

(рис. 3.9).

Занятие 3 59

Рис. 3.9. Форма списка и  форма редактирования элемента справочника «Сотрудники»

Система может самостоятельно сгенерировать все формы, которые нужны для представления данных, содержащихся в  справочнике. Причем система знает, какие именно формы нужно использовать в  каких ситуациях.

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

Обратите внимание, что в  различных местах конфигуратора одни и  те же формы называются немного по-разному (табл. 3.1). Следующая таблица представляет различные названия форм:

в контекстном меню справочника (Открыть основную форму…), в  дереве конфигурации и  в палитре свойств справочника;

в конструкторе форм;на закладке Формы окна редактирования справочника.

60 1С:Предприятие 8.3. Практическое пособие разработчика

Таблица 3.1. Формы справочника

В контекстном меню

В конструкторе форм

На закладке

и  в палитре свойств

(рис. 3.11)

«Формы» (рис. 3.10)

(рис. 3.12)

Основная форма объекта

Форма элемента справоч-

Элемента

ника

Основная форма группы

Форма группы справочника

Группы

Основная форма списка

Форма списка справочника

Списка

Основная форма выбора

Форма выбора справочника

Выбора

Основная форма выбора

Форма выбора группы спра-

Выбора группы

группы

вочника

Дело в  том, что в  контекстном меню и  палитре свойств отображаются свойства объектов конфигурации. Они одинаковые для всех объектов конфигурации. А в  конструкторе форм и  на закладке Формы отображаются представления этих свойств в  виде, более понятном разработчику. Они разные для разных объектов конфигурации. Различные наименования форм справочника представлены на  рис. 3.10, 3.11, 3.12.

Форма элемента используется для редактирования или создания элемента справочника.

Рис. 3.10. Названия форм справочника на  закладке «Формы»

Соседние файлы в папке Учебники

  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей нашего сайта:

  • Монгольские компании в москве
  • Мондиал бизнес консорциум ооо
  • Монетка реквизиты организации
  • Монополия на большую компанию
  • Монопольные компании в россии

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии