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

Здравствуйте, дорогие наши коллеги и партнеры. За последний месяц к нам поступило несколько вопросов от пользователей программы 1С Бухгалтерия 8.3 с просьбой помочь настроить в программе список номенклатуры так как было в 8.2. То есть в старой программе они могли видеть в списке номенклатуры артикул или код номенклатурной позиции. Это было очень удобно. А вот в 8.3 ничего не видно и непонятно. На самом деле все очень несложно настроить. Поэтому мы решили написать небольшую инструкцию по настройке справочников в программе 1С Бухгалтерия 8.3, но этот алгоритм применим в любой конфигурации 1С.

Итак, в разделе «Справочники» откроем справочник «Номенклатура».

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

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

Установив соответствующий флажок, например «Код» и «Артикул» мы получим список номенклатуры, в котором отображены и код и артикул.

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

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

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

В крайнем случае, вас всегда спасет возможность «Установить стандартные настройки», которая находится в настройке формы в разделе «Еще»

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

Изменить направление сортировки можно просто кликнув по этой стрелке и тогда список будет отсортирован, например, от Я до А. Если же мы хотим, чтобы сортировка товаров была по коду, то для этого надо кликнуть мышкой на названии соответствующего столбца «Код» и «волшебная стрелочка» переместится в другой столбец.

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

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

Сегодня мы рассмотрим особенности одного из видов объектов 1С Предприятие – справочников.

Справочники 1С 8.2 предназначены для хранения информации, которая будет использована в других объектах 1С – документах, отчетах. Таким образом учет в 1С ведется в разрезе (по) справочников.

Информация, которая хранится в справочниках называют Нормативно-справочной информацией.

Справочники 1С 8.2 делятся на собственно Справочники и Классификаторы. Под Классификаторами (в разговорах программистов 1С) понимаются справочники, состав которых утвержден государством (а таких куча, например Классификатор стран мира или Классификатор единиц измерения).

Тем не менее это не мешает во множестве компаний такие классификаторы исправлять и дополнять как хочется.

Зачем нужны Справочники 1С

Яркий пример можно сделать на примере товара. Есть некий товар, например «Лопата». Движения этого товара (покупка, поступление на склад, продажа) оформляются определенными документами.

В «жизни» — это бумажные документы, т.к. некие бланки, при заполнении которых каждый просто пишет от руки — Лопата, 20 штук.

В электронной системе, 1С – это электронные документы, где также есть поле товара. Но если каждый оператор будет писать наименование товара от руки, то могут быть опечатки. И тогда купили мы «Лопату», а продали «Лапату». Дополнительно – минус в том, что нам придется это писать множество раз.

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

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

Где расположены Справочники 1С 8.2

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

В толстом клиенте, у пользователя с административными правами (Администратор) есть стандартное меню Операции. В этом меню есть пункт «Справочники», через который можно открыть любой справочник.

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

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

Как выглядят Справочники 1С

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

Нажав на группу мы проваливаемся в нее. Нажав на элемент – открывается форма элемента справочника. Она состоит из группы полей этого справочника, который предполагается заполнять.

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

Поле Код, которое заполняется обычно автоматически (номера по порядку) обычно по-умолчанию закрыты от редактирования пользователем. Изменить можно вот таким способом (конечно если это разрешено правами).

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

Настройка и разработка Справочников 1С

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

Основные особенности Справочников 1С, по закладкам:

Назначение справочников

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

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

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

Реквизиты справочника (поля)

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

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

Типы данных

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

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

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

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

Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник Договора. Тогда его можно сделать подчиненным справочнику Клиенты. Это означает, что клиент владеет договорами и у одного клиента может быть несколько договоров.

Табличные части

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

Где используется программный код для работы со справочниками?

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

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

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

СпрСотрудники = Справочники . Сотрудники ; // или 2 вариант
СпрДолжности = Справочники [ "Должности"];

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

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

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

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

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

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

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

НайденныйСотр = СпрСотр . НайтиПоКоду (123); //ищем по коду
НайденныйСотр = СпрСотр . НайтиПоНаименованию ("Иванов Иван Иванович"); //по наименованию
НайденныйСотр = СпрСотр . НайтиПоРеквизиту ("Оклад", 5000); //по реквизиту

Если НайденныйСотр = Неопределено Тогда
//элемент не найден
КонецЕсли;

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

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

СпрСотр . Удалить (); //непосредственное удаление текущего элемента справочника

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

//можно проверить, помечен ли элемент на удаление
//свойство ПометкаУдаления имеет тип Булево (Истина или Ложь)

Пометка = СпрСотр . ПометкаУдаления ; //обратите внимание: это свойство
Если Пометка = Истина Тогда
//элемент помечен на удаление
КонецЕсли;

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

Выборка = Справочники . Сотрудники.Выбрать ();
// начало перебора элементов справочника в цикле
//действия с очередным элементом...

КонецЦикла;

7. Родитель. Перебор элементов внутри группы.

Группа в терминах 1С - это "родитель".

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

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

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

Один справочник подчинен другому справочнику, например справочник НалоговыеЛьготы подчинен справочнику Сотрудники.

Выборка = Справочники . НалоговыеЛьготы . Выбрать (, Сотрудник ); //тут сотрудник - ссылка на элемент справочника сотрудники
Пока Выборка . Следующий () = 1 Цикл
//действия с очередным элементом
Сообщить ("льгота " + Выборка . Наименование );
КонецЦикла;


9. Транзакция

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

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

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

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

Психушка. Один придурок другому:
-Тебе понравился мой рассказ, который я тебе вчера дал почитать?
-Да, но как-то всё размыто и много действующих лиц.
Входит врач:
-Так, придурки, кто спёр мою телефонную книгу?...

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

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

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

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

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

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

Типы данных

Для каждого атрибута справочника нужно указать его тип данных, например, "число ", "строка ", "дата " (в версии 8.0 есть еще тип Булево - Истина или Ложь). Это базовые типы, но можно указать и сложные типы данных. Например атрибут Должность имеет тип данных Должности . В этом случае, значения этого атрибута будут выбираться из справочника Должности . Так реализуется простейшая связь между справочниками, когда значения атрибутов одного справочника выбираются из другого справочника.

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

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

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

Между справочниками может быть установлено отношение подчиненности . В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что "Сотрудник владеет налоговыми льготами" .

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

Справочник НалоговыеЛьготы

  • Иванов Иванов Иванов
  • Петров Петр Петрович
  • Светлов Михаил Петрович
  • Цветков Антон Васильевич

( владелец Петров Петр Петрович)

  • Льгота ветеранам
  • Льгота на детей
  • Иванов Иванов Иванов
  • Петров Петр Петрович
  • Светлов Михаил Петрович
  • Цветков Антон Васильевич

( владелец Светлов Михаил Петрович)

  • Льгота афганцам

Табличные части (только версия 8.0)

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

Сравнение справочников с другими объектами

Объект

Сходства

Различия

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

Основы программирования

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

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


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

СпрСотр.НайтиПоКоду (123);
СпрСотр.НайтиПоНаименованию ("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту ("Оклад", 5000);

//если элемент найден, он становится текущим и его можно прочитать так:

Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент ();
КонецЕсли;


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

НайденныйСотр = СпрСотр.НайтиПоКоду (123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию ("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту ("Оклад", 5000);

НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;

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

СпрСотр.Удалить (1); //непосредственное удаление

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


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


СпрСотр.Удалить (); //непосредственное удаление

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

//можно проверить, помечен ли элемент на удаление
//есть свойство ПометкаУдаления, оно имеет тип Булево - Истина или Ложь

Пометка = СпрСотр.ПометкаУдаления ; //обратите внимание: это свойство
Если Пометка = Истина Тогда
.....//элемент помечен на удаление
КонецЕсли;

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


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


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


Родитель
Перебор элементов внутри группы. Группа в терминах 1С -- это "родитель".


СпрСотр.НайтиПоНаименованию("Работающие");
Работающие = СпрСотр.ТекущийЭлемент();
СпрСотр.ИспользоватьРодителя (Работающие);
//дальше, например, цикл по сотрудникам (см. выше)
...



ГруппаРаботающие = СпрСотр.НайтиПоНаименованию("Работающие");
выборка = СпрСотр.Выбрать (ГруппаРаботающие);
Пока выборка.Следующий () = 1 Цикл
... //действия с очередным элементом
...Сообщить("Сотрудник " + выборка.Наименование);
КонецЦикла;

Владелец
Перебор элементов справочника принадлежащих элементу другого справочника.
Один справочник подчинен другому справочнику, например спр. НалоговыеЛьготы подчинен спр. Сотрудники.

Периодические реквизиты
Чтение и запись периодических реквизитов.
Установка даты выборки периодических реквизитов для всего справочника.


//так мы узнаем, какая была у сотрудника
//категория на определенную дату

Катег = СпрСотр.Категория.Получить (НекаяДата);

//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить (НекаяДата, НоваяКатегория);

//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату (НекаяДата);

//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;

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

Экранные формы справочников

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

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

Лучше один раз увидеть, чем сто раз услышать, поэтому ниже для примера приведена форма списка справочника Сотрудники:




Модуль формы списка содержит процедуры и функции, которые действуют в контексте данной формы (в контексте объекта Справочник).

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

Событие

Описание

ПриОткрытии Вызывается при открытии формы списка справочника. Можно задать начальные значения для переменных, проверить права пользователя на открытие данного справочника и т.д.
ПриЗакрытии Вызывается при закрытии формы списка справочника.
ПриЗаписи

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

Пример, справочник Должности

ПриВыбореРодителя(НовРодитель) Вызывается при выборе родителя (группы). В этой процедуре можно проверить права пользователя на просмотр элементов данной группы.
ПриВыбореВладельца(НовВладелец) Вызывается при выборе владельца справочника-хозяина. Имеет смысл, если данный справочник подчинен другому.
ПриУстановкеОтбора(Реквизит,Значение) Предопределенная процедура при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора.
ПриВыбореСтроки() Режим обработки выбора строки (двойной щелчок мыши или клавиша Enter) включается в форме списка справочника, журнала документов, счетов, журнала операций, журнала проводок при помощи метода Форма.ОбработкаВыбораСтроки(1). Тогда при выборе строки будет вызываться эта предопределенная процедура.


Сортировка

В форме списка справочника элементы могут быть отсортированы в различном порядке: по коду, по наименованию или по любому реквизиту, у которого в Конфигураторе установлен флажок Сортировка. Задать тип сортировки можно программно методом Сортировка (Способ, ФлагРазрешенияИзменения)


Процедура ПриОткрытии()
...... Сортировка ("Код",0); //сортировка по коду, пользователь изменить не может
КонецПроцедуры

Процедура ПриОткрытии()
......СправочникСписок.Порядок.Установить("Наименование Asc, Карточка Asc");
......//вопрос читателям: как запретить пользователю изменять порядок сортировки?
КонецПроцедуры

Отбор

В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок "Отбор по реквизиту" в Конфигураторе .

Статический фильтр (только версия 7.7)

В 1С 7.7 нельзя установить отбор по периодическому реквизиту или по нескольким реквизитам одновременно (сложный фильтр). В этом случае выходом из положения может быть метод ИспользоватьСписокЭлементов. Этому методу нужно передать список элементов, которые должны быть показаны. Предварительно этот список нужно сформировать.

Процедура ПоказатьРаботающихПлотников()

СписокЭлементов = создатьОбъект("СписокЗначений");

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

.....Если (СпрСотр.Родитель = группаРаботающие) И (СпрСотр.Должность=длжПлотник) Тогда
...........СписокЭлементов.ДобавитьЗначение(СпрСотр.ТекущийЭлемент());
.....КонецЕсли;
КонецЦикла;

ИспользоватьСписокЭлементов (СписокЭлементов);

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

Форма элемента и форма группы

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


В форме элемента справочника также есть предопределенные процедуры (события):

События

Описание

ПриОткрытии() Вызывается при открытии формы элемента справочника. Можно задать начальные значения для переменных, проверить права пользователя на открытие данного элемента справочника и т.д.
ПриЗакрытии() Вызывается при закрытии формы элемента справочника.
ПриЗаписи()

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

Пример, справочник Сотрудники

Процедура ПриЗаписи
....Если Категория.Выбран()=0 Тогда
.........Предупреждение("Не указана категория сотрудника!");
.........СтатусВозврата(0);
.....КонецЕсли;
КонецПроцедуры

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

Следует заметить, что вверсии 8.0 список событий всех объектов значительно расширен.

Создание и запись элемента

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

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



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


СпрСотр.Записать ();
//установка периодических реквизитов возможна только после записи элемента
СпрСотр.Категория.Установить (СпрСотр.ДатаПриема, ктгСовместители);
СпрСотр.Должность.Установить (СпрСотр.ДатаПриема, длжПлотник);

а можно сделать красивее:

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

Нов = Справочники.Сотрудники.СоздатьЭлемент();
Нов.Родитель = грпРаботающие;
Нов.Наименование = "Иванов Иван Иванович";
Нов.ДатаПриема = "01.01.2002";
Нов.Записать();

//в версии 8.0 нет периодических реквизитов

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

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

СпрСотр.НоваяГруппа ();

СпрСотр.Записать ();

СпрСотр.НоваяГруппа();

СпрСотр.Записать();

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

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

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

Внимание!

Транзакции

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

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

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

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


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

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

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

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

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

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Режим = 0; //выбирать без учета иерархии, 1 - с учетом (по умолч.)
СпрСотр.ВыбратьЭлементы (Режим);
Пока СпрСотр.ПолучитьЭлемент ()=1 Цикл
.....<действия с очередным элементом/группой>
КонецЦикла;

Фильтрация (отбор)

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
РежимИерархии = 1; //1- выбирать с учетом иерархии, 0 - без учета
РежимГрупп = 0; //0 - не включать в выборку группы, 1 - включать
ИмяРеквизита = "Год"; //в Конфигураторе у реквизита должен быть установлен флажок Отбор
Значение = 1980;
СпрСотр.ВыбратьЭлементыПоРеквизиту (ИмяРеквизита,Значение,РежимИерархии, РежимГрупп);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.....<действия с очередным элементом>
КонецЦикла;

Фильтрация в цикле

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

Если СпрСотр.Должность <> длжПлотник Тогда
....Продолжить; //этого сотрудника пропускаем, перейти в начало цикла
КонецЕсли;

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

КонецЦикла;

Порядок сортировки

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

ПорядокКодов()
ПорядокНаименований()
ПорядокРеквизита(ИмяРекв) //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ОбратныйПорядок()

Например, ниже открывается выборка сотрудников, отсортированных по номерам по убыванию:

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

Запрос к справочнику

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

Поиск элемента

Поиск элемента

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
Если СпрСотр.НайтиЭлемент (ВыбрСотр)=1 Тогда
....//элемент становится текущим
....СпрСотр.Родитель = грпРаботающие;
....СпрСотр.Записать();
КонецЕсли;

Поиск по коду

Если СпрСотр.НайтиПоКоду (1) = 1 Тогда
....ЭлементИлиГруппа = СпрСотр.ТекущийЭлемент();
КонецЕсли;

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

Если СпрСотр.НайтиПоНаименованию ("Работающие")=1 Тогда
....грпРаботающие = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Режим = 1; // 1 - поиск внутри установленного подчинения (родителя) (по умолч.); 0 - поиск во всем справочнике
ФлагПоиска = 0; //1 - найти точное соответствие; 0 - найти наименование по первым символам (по умолч)
СпрСотр.ИспользоватьРодителя(грпРаботающие);
Если СпрСотр.НайтиПоНаименованию("Ив",Режим,ФлагПоиска)=1 Тогда
....ПервыйРаботающийИв = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Поиск по реквизиту

ИмяРекв = "Год"; //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ФлагГлобПоиска = 1; // 1- искать во всем справочнике, 0 - искать в пределах подчинения
Если СпрСотр.НайтиПоРеквизиту (ИмяРекв,1980,ФлагГлобПоиска)=1 Тогда
.....НайденныйЭлемент = СпрСотр.ТекущийЭлемент();
КонецЕсли;

Поиск элемента в цикле

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

Если СпрСотр.Должность = длжПлотник Тогда
....Прервать; //нашли работающего плотника! выйти из цикла
КонецЕсли;

КонецЦикла;
<действия с найденным элементом>

Запрос к справочнику

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

Удаление элементов

Непосредственное удаление

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

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

Можно программно получить список объектов, содержащих ссылку на удаляемый объект методом НайтиСсылки(объект).

Пометка на удаление

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

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

//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 - если помечен, 0 - если нет
Пометка = СпрСотр.ПометкаУдаления ();

//можно снять пометку на удаление
СпрСотр.НайтиЭлемент (ВыбрСотрудник);
СпрСотр.СнятьПометкуУдаления ();

Транзакции

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

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

СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
......СпрСотр.Удалить(0); //пометка на удаление
КонецЦикла;

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

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

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

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

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

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

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

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

СпрСотр.НоваяГруппа();
СпрСотр.Наименование = "Уволенные";
СпрСотр.Записать();

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

Установка текущей группы


СпрСотр.ИспользоватьРодителя (грпРаботающие); //теперь мы внутри группы Работающие
СпрСотр.ВыбратьЭлементы(); //открыть выборку элементов группы Работающие

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

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

Метод / атрибут

Описание

Уровень()

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

Пример, вывод иерархического справочника в виде дерева:

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

//вывести отступ в соответствии с глубиной вложенности элемента
Для Ном=1 По СпрСотр.Уровень() Цикл
.....Сообщить(".....");
КонецЦикла;

КонецЦикла;

ЭтоГруппа() Этот метод возвращает 1, если текущий элемент справочника является группой, или 0 если группой не является.

Пример, вывод сотрудников (группы не выводятся):

СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлементы()=1 Цикл

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

КонецЦикла;

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

Пример, вывод товаров, принадлежащих к группе Спиртное, независимо от того входят ли они в подгруппы Шампанское, Пиво, Водка, Вино и т.д.:




.....Сообщить(СпрТовары.Наименование);
КонецЕсли;

КонецЦикла;

атрибут Родитель

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

Пример, перенос всех товаров из группы Спиртное в группу Распродажа:

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

Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда
.....СпрСотр.Родитель = грпРаспродажа;
.....СпрСотр.Записать();
КонецЕсли;

КонецЦикла;

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

СпрТовары = СоздатьОбъект("Справочник.Товары");
СпрТовары.НайтиЭлемент(грпСпиртное);
СпрТовары.Родитель = грпРаспродажа;
СпрТовары.Записать();

ПолныйКод()

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

Например, "2/7/123"

ПолноеНаименование()

Возвращает строку, содержащую полное наименование выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом "/".

Например, "Спиртное/Шампанское/Советское"

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

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

Форма.ВыбрСотрудник.ВыборГруппы (0); //отключить возможность выбора группы

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

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

Назначение подчиненных справочников

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

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

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

Внешне работа с подчиненным справочником в системе 1С:Предприятие будет выглядеть следующим образом.

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

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

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

Установка текущего владельца


СпрДоговоры.ИспользоватьВладельца(ВыбрКонтрагент);
СпрДоговоры.ВыбратьЭлементы(); //открываем выборку по договорам выбранного контрагента
<...>

Информация о текущем элементе

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

Атрибут

Описание

атрибут Владелец

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

Пример, перенос всех договоров от одного котрагента к другому (справочник Договоры подчинен справочнику Контрагенты):

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

СпрДоговоры.Владелец = Контрагент2;
СпрДоговоры.Записать();

КонецЦикла;


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

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

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

К периодическому реквизиту можно обращаться при помощи встроенного языка системы 1С:Предприятие - получать и записывать значение реквизита на указываемую дату. Однако, следует иметь в виду, что при получении значения реквизита на какую-то дату извлекается его значение на указанную или (если значение на указанную дату отсутствует) на ближайшую предыдущую дату, а запись значения периодического реквизита выполняется всегда на указанную дату.

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

Методы периодических реквизитов
//так мы узнаем, какая была у сотрудника категория на определенную дату
Катег = СпрСотр.Категория.Получить (НекаяДата);

//так мы установим сотруднику категорию на определенную дату
СпрСотр.Категория.Установить (НекаяДата, НоваяКатегория);

Внимание! Эти методы можно применять, если ранее не применялся метод ИспользоватьДату

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

//можно установить дату выборки периодических реквизитов для всего справочника
СпрСотр.ИспользоватьДату (НекаяДата);

//тогда ниже уже нельзя использовать методы Установить и Получить
//доступ к периодическим реквизитам становится такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;

Объект "Периодический"

Для работы с историей периодического реквизита очень удобно использовать объект "Периодический".

Пример, вывести историю карьеры сотрудника за текущий год:

ИсторияКарьеры = СоздатьОбъект("Периодический");
ИсторияКарьеры.ИспользоватьОбъект("Должность",ВыбрСотрудник);
ИсторияКарьеры.ВыбратьЗначения(НачГода(РабочаяДата(),КонГода(РабочаяДата()));
Пока ИсторияКарьеры.ПолучитьЗначение()=1 Цикл
....Сообщить(Строка(ИсторияКарьеры.ДатаЗнач) + " " + Строка(ИсторияКарьеры.Значение));
КонецЦикла;

С помощью объекта Периодический можно также редактировать и удалять значения. Полный список методов см. в Синтакс-помощнике.

Проведение документов

При проведении документа часто требуется установить новое значение периодического реквизита на определенную дату. Это называется движение документа. В этом случае следует применять метод УстановитьРеквизитСправочника:

УстановитьРеквизитСправочника (Сотрудник, "Должность", НоваяДолжность, ДатаПеремещения);

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

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

Процедура ОбработкаПроведения()

ВыбратьСтроки();
Пока ПолучитьСтроку()=1 Цикл

ПривязыватьСтроку (НомерСтроки);
УстановитьРеквизитСправочника(Сотрудник, "Должность", НоваяДолжность, ДатаПеремещения);

КонецЦикла;

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

Подбор из справочника

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

Организация подбора

Синтаксик: ОткрытьПодбор(<Объект>,<ИмяФормы>,<КонтекстФормы>,<ФлагМножВыбора>,<ТекЗнач>)

ОткрытьПодбор("Справочник.Номенклатура","ФормаДляПодбора",Конт,1);


...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры

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

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

Процедура ОбработкаПодбора(Элемент,КонтФормы)
...НоваяСтрока();
...Товар = Элемент;
КонецПроцедуры

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

КонтФормыПодбора.УстановитьЗначениеВПодборе (<ИмяРеквизита>,<Значение>)

<ИмяРеквизита> - строка с именем реквизита формы подбора значения;
<Значение> - значение реквизита.

КонтФормыПодбора.ПолучитьЗначениеИзПодбора (<Выражение>)

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

Другие полезные методы

Метод

Описание

Вид() Установить или считать текущее название вида справочника. Возвращает текущее название вида справочника, как оно задано в Конфигураторе, например "Сотрудники". Установка вида справочника возможна для реквизитов типа "Справочник", т.е. справочник неопределенного вида.
ПредставлениеВида() Получить пользовательское представление вида справочника, как он задан в конфигураторе.
Возвращает строковое значение, содержащее пользовательское представление вида справочника (синоним).
УстановитьАтрибут(ИмяРеквизита, Значение) Установить значение реквизита по его имени.
<ИмяРеквизита> - строковое выражение, содержащее имя реквизита, как оно задано в конфигураторе. <Значение> - выражение, содержащее устанавливаемое значение реквизита.
ПолучитьАтрибут(ИмяРеквизита) Получить значение реквизита по его имени. Возвращает значение реквизита.
Выбран()

Возвращает 1 - если элемент справочника выбран, 0 - если не выбран. Часто применяется для проверки на ошибки, чтобы все необходимые данные были указаны.

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

Чтение структуры справочников

Цикл по справочникам

КолвоСправочниковВКонфигурации = Метаданные.Справочник();
Для Ном=1 to КолвоСправочниковВКонфигурации Цикл

кфгСпр = Метаданные.Справочник(Ном);
Идентификатор = кфгСпр.Идентификатор();
ПолныйИдентификатор = кфгСпр.ПолныйИдентификатор();
Синоним = кфгСпр.Синоним();

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

Структура и функции справочников в 1С 8.3

Основная функция справочников заключается в хранении и предоставлении нормативно–справочной информации. Учет в системах 1С ведется в разрезе справочников: Номенклатура, Клиенты и другие.

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

  • Единицы измерения;
  • Валюты;
  • Страны мира;
  • Профессии.

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

Каждый из справочников обладает своими свойствами, установленными разработчиками. Рассмотрим основные свойства на примере справочника «Валюты».

Вкладка «Основные» содержит информацию о наименовании справочника и его описании. Следующий раздел «Подсистемы» отвечает за включение справочника в конкретную подсистему.


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


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

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


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


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


Грамотная настройка параметров на вкладке «Поле ввода» создаст пользователям максимально удобные условия в работе. Параметры «Быстрый выбор/Ввод по строке/Полнотекстовый поиск» помогут найти нужный элемент. «История выбора при вводе» сохранит ранее используемые позиции.


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


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


Не все свойства являются обязательными к заполнению. Некоторые вкладки так и остаются нетронутыми на протяжении всей жизни ПО на платформе 1С.

Чтобы создание справочников в 1С не вызывало затруднений, создадим новый объект конфигурации этого типа.

Создание и перенос справочника в 1С 8.3

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

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


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


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


Помимо стандартного набора нам потребуется еще несколько реквизитов и табличная часть для перечня сотрудников. Для этого нужно добавить их на вкладке «Данные» в соответствующих разделах.


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


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


Многие компании работают с несколькими базами 1С, поэтому разработчик может столкнуться с переносом созданного справочника в другую базу. Для этого вместе с большинством конфигураций поставляется внешняя обработка – «Выгрузка и загрузка данных XML». Но перед тем как осуществить перенос справочников 1С 8.3, необходимо подготовить конфигурацию-приемник. В ней должен быть создан аналогичный объект конфигурации с идентичными полями и табличными частями.

При открытии данной обработки, нам необходимо указать, какие объекты мы хотим перенести и выбрать файл. Затем запущенная выгрузка справочника создает XML-файл, куда записывает все данные.


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

В заключение хотелось бы напомнить, что создание справочников в 1С 8.3 после запуска системы в эксплуатацию вызовет проблемы из-за необходимости монопольного доступа к базе. Обновление же конфигурации безопаснее всего проводить на сервере.