Что такое справочник в 1с
Перейти к содержимому

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

  • автор:

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

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

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

image

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

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

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

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

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

image

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

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

image

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

image

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

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

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

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

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

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

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

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

Типы данных.

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

Виды справочников.

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

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

Табличная часть.

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

Примеры работы со справочниками в 1С.

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

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

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

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

//Создание и запись новой группы справочника

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

// Как получить пустую ссылку типа справочник

ПустаяСсылка = Справочники . Валюты . ПустаяСсылка ();
Если ПустаяСсылка . Пустая () Тогда
Сообщить ( «Ссылка пустая.» );
КонецЕсли;

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

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

//далее нужно проверить найденное значение

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

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

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

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

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

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

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

//перебор внутри группы (при иерархической структуре), группа в 1С является родителем для элементов внутри

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

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

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

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

ОбъектСправочника = СсылкаНаЭлемент . ПолучитьОбъект ();
ОбъектСправочника . Комментарий = «Контрагент изменен.» ;
ОбъектСправочника . Записать ();

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

Если СсылкаНаЭлемент . ПринадлежитЭлементу ( СсылкаНаГруппу ) Тогда
Сообщить ( СсылкаНаЭлемент . Наименование + » принадлежит « + СсылкаНаГруппу . Наименование );
КонецЕсли;

// Как скопировать существующий элемент справочника

Копия = СсылкаНаЭлемент . Скопировать ();
Копия . Наименование = Копия . Наименование + » КОПИЯ» ;
Копия . УстановитьНовыйКод ();
Копия . Записать ();

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

Сообщить ( СсылкаНаЭлемент . Уровень ());

// Примеры работы со справочниками в 1С с помощью языка запросов
// Как обойти все элементы справочника

Запрос = Новый Запрос;
Запрос . Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты» ;

РезультатЗапроса = Запрос . Выполнить ();

ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();

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

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

// Как отобрать элементы справочника по родителю (перечислим все элементы группы)

Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ГДЕ
| Контрагенты.Родитель = &Родитель» ;

Запрос . УстановитьПараметр ( «Родитель» , СсылкаНаГруппу );

РезультатЗапроса = Запрос . Выполнить ();

ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Сообщить ( СсылкаНаГруппу . Наименование + «:» );
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( » « + ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;

// Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)

Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка
| ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец» ;

Запрос . УстановитьПараметр ( «Владелец» , СсылкаНаЭлемент );

РезультатЗапроса = Запрос . Выполнить ();

ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Сообщить ( СсылкаНаЭлемент . Наименование + «:» );
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( » « + ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;

// Как отобрать элементы справочника по коду, наименованию, реквизиту

Запрос . УстановитьПараметр ( «Наименование» , «руб.» );
Запрос . УстановитьПараметр ( «Код» , «643» );
Запрос . УстановитьПараметр ( «НаименованиеПолное» , «Российский рубль» );

РезультатЗапроса = Запрос . Выполнить ();

ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();

Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;

Справочники и документы. В чем сила 1С

Много узкоспециализированных объектов или небольшое количество универсальных? Истина, как обычно, посередине. Справочники и документы в 1С — это пример удачного попадания в эту середину. Разумеется, речь не о том, что видит пользователь, а о том, чем оперирует разработчик. Идея » а давайте у нас будут не таблицы базы данных, а справочники и документы», при всей своей внешней неброскости, не столь проста. О чем и поговорим далее

Вступление

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

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

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

Справочники

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

  • Код
  • Наименование
  • Владелец
  • Родитель
  • ЭтоГруппа
  • ПометкаУдаления
  • Предопределенный
  • ИмяПредопределенныхДанных

Некоторые из них заслуживают более подробного рассказа.

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

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

Но тут «особо умных» ждет подвох

Мы-то удалили код из справочника, а платформа не совсем.

Этому багу уже лет двадцать. Поначалу я на него сердился, а теперь кажется, что мне будет его не хватать, если его когда-нибудь исправят.

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

Одна «галочка» и пользователь получает у себя перед глазами красивое «дерево», а разработчик такие методы как ПринадлежитЭлементу() и ВыбратьИерархически().

Отдельно стоит рассказать про так называемые табличные части. Табличная часть — это таблица, связанная с основной таблицей справочника или документа отношением много-к-одному. В предыдущей, седьмой версии табличная часть могла быть только у документа. Причем в количестве строго одна штука. В восьмой версии ограничение на количество табличных частей сняли, а заодно и разрешили создавать табличные части и для справочников. Жаль только, что нельзя создавать табличные части у табличных частей. Такого рода задачи, хоть и нечасто, но все же приходится решать. И в этот момент приходит понимание, что при всей своей простоте, концепция табличных частей реально экономит разработчику очень много времени.

Документы

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

  • Номер
  • Проведен
  • ПометкаУдаления

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

Три (если у вас «+», «приход») или четыре клика (если у вас «-«, «расход») и платформа создаст вам код

Процедура ОбработкаПроведения(Отказ, РежимПроведения) //>__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры 

Быстрая разработка

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

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

Заключение

В бурно развивающихся и постоянно меняющихся ИТ иногда встречаются «долгоиграющие» темы. Хороший пример тому язык запросов SQL. Вывод разработчика на уровень абстракции справочники/документы появился в 1С четверть века назад. И это прекрасно работает до сих пор. Что и служит доказательством удачной находки.

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

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

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Полный синтаксис (нажмите, чтобы раскрыть)

Справочники

Описание:

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

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

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

Оглавление (нажмите, чтобы раскрыть)

  • Как обойти все элементы справочника
  • Как обойти все группы справочника
  • Как обойти группы вместе с элементами справочника (иерархически)
  • Как отобрать элементы справочника по родителю (перечислим все элементы группы)
  • Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)
  • Как отобрать элементы справочника по коду, наименованию, и другим реквизитам
  • Как создать новый элемент справочника
  • Как создать новую группу справочника
  • Как перенести элемент справочника в другую группу
  • Как внести изменения в элемент справочника по ссылке
  • Как получить и проверить пустую ссылку типа справочник
  • Как узнать принадлежность элемента справочника группе с учетом уровней иерархии
  • Как скопировать существующий элемент справочника
  • Как выяснить уровень вложенности элемента справочника
  • Как заблокировать элемент справочника перед изменениями
  • Как заполнить новый элемент справочника на основании
  • Как пометить на удаление элемент справочника
  • Как открыть форму существующего элемента справочника по ссылке
  • Как открыть форму существующей группы справочника по ссылке
  • Как открыть форму выбора элемента справочника и отследить её закрытие
  • Как открыть форму выбора группы справочника и отследить её закрытие
  • Как открыть форму списка справочника и установить отбор по реквизиту
  • Как открыть форму списка справочника с нужным отображением
  • Как открыть форму только что созданного, но ещё не записанного элемента справочника
  • Скачать и выполнить эти примеры на компьютере
/// Как обойти все элементы справочника в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиЭлементыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | ЭтоГруппа = ЛОЖЬ |УПОРЯДОЧИТЬ ПО | Наименование"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

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

Результат обхода элементов справочника 1с 8

/// Как обойти все группы справочника в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиГруппыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | ЭтоГруппа = ИСТИНА |УПОРЯДОЧИТЬ ПО | Наименование"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

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

Результат обхода групп справочника 1с 8

/// Как обойти группы вместе с элементами /// справочника (иерархически) в 1с 8.3, 8.2 &НаСервере Процедура КакОбойтиГруппыИЭлементыСправочникаНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |УПОРЯДОЧИТЬ ПО | Наименование Иерархия"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Отступ = ""; Для Шаг = 0 По ВыборкаВкусов.Уровень() Цикл Отступ = Отступ + " "; КонецЦикла; Сообщить(Отступ + ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат обхода групп и элементов (иерархически) справочника

Результат обхода групп и элементов (иерархически) справочника 1с 8

/// Как отобрать элементы справочника по родителю в 1с 8.3, 8.2 /// (перечислим все элементы группы) &НаСервере Процедура КакОтобратьЭлементыСправочникаПоРодителюНаСервере() // для тестов найдём группу "Любимые" по её имени СсылкаНаРодителя = Справочники.Вкусы.НайтиПоНаименованию("Любимые"); // перечислим только те элементы справочника, что // входят в группу "Любимые" Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Вкусы КАК Вкусы |ГДЕ | Вкусы.Родитель = &Родитель"; Запрос.УстановитьПараметр("Родитель", СсылкаНаРодителя); РезультатЗапроса = Запрос.Выполнить(); ВыборкаВкусов = РезультатЗапроса.Выбрать(); Пока ВыборкаВкусов.Следующий() Цикл Сообщить(ВыборкаВкусов.Наименование); КонецЦикла; КонецПроцедуры

Результат отбора элементов по родителю (группе) справочника

Результат отбора элементов справочника по родителю (группе)

/// Как отобрать элементы справочника по владельцу в 1с 8.3, 8.2 /// (перечислим все договоры контрагента) &НаСервере Процедура КакОтобратьЭлементыСправочникаПоВладельцуНаСервере() // для тестов найдём клиента по коду 1 (это Андрей, у него 2 договора) СсылкаНаКлиента = Справочники.Клиенты.НайтиПоКоду("000000001"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование |ИЗ | Справочник.Договоры КАК Договоры |ГДЕ | Договоры.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", СсылкаНаКлиента); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДоговоров = РезультатЗапроса.Выбрать(); Пока ВыборкаДоговоров.Следующий() Цикл Сообщить(ВыборкаДоговоров.Наименование); КонецЦикла; КонецПроцедуры

Результат отбора элементов справочника по владельцу

Результат отбора элементов справочника 1с 8 по владельцу

/// Как отобрать элементы справочника по коду, наименованию, /// и другим реквизитам в 1с 8.3, 8.2 &НаСервере Процедура КакОтобратьЭлементыСправочникаПоРеквизитамНаСервере() // сделаем отбор элементов справочника Клиенты // у которых реквизит Пол = Мужской и ЛюбимыйЦвет = Красный // вместо этих реквизитов для отбора можно использовать // Код, Наименование или любой другой реквизит справочника Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Наименование, | Пол, | ЛюбимыйЦвет |ИЗ | Справочник.Клиенты КАК Клиенты |ГДЕ | Клиенты.ЭтоГруппа = ЛОЖЬ И | Клиенты.Пол = &Пол И | Клиенты.ЛюбимыйЦвет = &Цвет"; Запрос.УстановитьПараметр("Пол", Перечисления.Пол.Мужской); Запрос.УстановитьПараметр( "Цвет", Справочники.Цвета.НайтиПоНаименованию("Красный") ); РезультатЗапроса = Запрос.Выполнить(); ВыборкаКлиентов = РезультатЗапроса.Выбрать(); Пока ВыборкаКлиентов.Следующий() Цикл Сообщить( ВыборкаКлиентов.Наименование + " " + ВыборкаКлиентов.Пол + " " + ВыборкаКлиентов.ЛюбимыйЦвет ); КонецЦикла; КонецПроцедуры

Результат отбора элементов справочника по реквизитам

Результат отбора элементов справочника 1с 8 по реквизитам

&НаСервере Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере() /// Как создать новый элемент справочника в 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С 8.3, 8.2 (в примерах)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *