THE BELL

Есть те, кто прочитали эту новость раньше вас.
Подпишитесь, чтобы получать статьи свежими.
Email
Имя
Фамилия
Как вы хотите читать The Bell
Без спама

В предыдущих уроках мы рассмотрели с Вами, что конфигурация 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С, по закладкам:

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

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

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

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

Некоторые справочники подчинœены другим справочникам. К примеру, справочник Банковские счета подчинœен справочнику Фирмы , справочник Расчетные счета – справочнику Контрагенты , справочники Комплектация и Единицы измерения – справочнику Номенклатура .

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

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

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

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

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

4.2.1. Справочник «Фирмы»

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

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

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

Ввод и редактирование информации о фирме выполняется в окне диалога, содержащем три вкладки.


  • - Справочники

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


  • - Словари, энциклопедии, справочники

    Грамматики Учебники и учебные пособия Список сокращений Имена цитируемых писателей А. А. – А. Ахматова А. Б. – А. А. Блок А. В. – А. Вознесенский Арс. – Арсеньев А. Г. – А. Галич А. Гр. – А. С. Грибоедов А. К. – А. Куприн Акс. – С. Т. Аксаков А. С. – А. И.... [читать подробенее]


  • - Справочники исполнителей.

    Принципиальная технологическая схема возведения объекта. Тема №4. Состав и разработка документации исходного этапа моделирования. 4.1. Принципиальная технологическая схема возведения объекта. 4.2. Справочники исполнителей. 4.3. Локальные сетевые модели... [читать подробенее]


  • - Онлайновые энциклопедии и справочники

    Метапоисковые системы Интернет развивается стремительными темпами - каждый день появляются сотни тысяч новых Web-страниц. Рост количества документов происходит быстрее, чем поисковые системы успевают их проиндексировать. Отсюда следует неутешительный вывод, что,... [читать подробенее]


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

    1. Абрамов Н. Словарь русских синонимов и сходных по смыслу выражений. Любое издание. 2.Агеенко Ф.Л., Зарва М.В. Словарь ударений русского языка. М., 2000 3.Бельчиков Ю.А., Панюшева М.С. Словарь паронимов русского языка. М., 1994 4.Большой орфографический словарь русского языка. Ред.... [читать подробенее]


  • - Правовые базы данных и справочники

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

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

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

    Система 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С:Предприятие 8 позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: должностей, сотрудников, клиентов, товаров и т. д. Каждый такой объект называется элементом справочника.

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

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

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

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

    Типы данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    При установке связей между таблицами СПРАВОЧНИК и СПРАВОЧНИК Sub установим флажок «Каскадное удаление связанных записей» - это как раз тот случай, когда такая процедура будет полезной. Ведь при удалении записи из таблицы «СПРАВОЧНИК» связанные с ней данные становятся не нужными.

    Если Вы откроете схему данных, то увидите только две связанные между собой справочные таблицы. В предыдущем примере к основной таблице «Адресат» были привязаны все справочники, и я еще подробно рассказывал о связях, флажках… Дело в том, что при данной схеме организации справочной системы мы не сможем прицепить таблицу «СПРАВОЧНИК» к какому либо полю, ведь в ней теперь хранятся все справочные данные. Да в этом и нет надобности. Если учесть, что пользователь будет работать с базой исключительно через формы, то вероятность ввода в основную таблицу записей, которых нет в справочной, сводиться практически к нулю.

    Параметры справочников хранятся в служебной таблице tSystemFormPar. В поле Tabl указан идентификатор соответствующего справочника.
    Рассмотрим отличия от предыдущего варианта.

    Все глобальные переменные и константы я перенес в специальный модуль, который так и называется Constants. Хотя объявлять их можно в любом модуле, главное, чтобы они были в разделе General и начинались с ключевого слова Public, но лучше хранить их для наглядности в одном месте.

    В модуль SprawForm добавилась новая функция - fFilListBox. Она во многом похожа на fFilForm, но служит для фильтрации списка, поэтому в параметрах вместо frm As Form поставлено lst As ListBox. Кроме этого, в обеих функциях изменена строка формирования фильтра:

    strFiltr = " WHERE Left([" & strFieldName & "]," & Len(strFiltr) & ") = "" & strFiltr & """ & " and СПРАВОЧНИК.Type = " & strTableName

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

    RecordSource = strSql1 & strFiltr & " " & strSql2

    то для списка нужно использовать свойство RowSource

    RowSource = strSql & strFiltr & " " & strSql1

    В модуле формы «Справочник» добавилось условие отбора по полю Type таблицы СПРАВОЧНИК

    Me.Subfrm.Form.RecordSource = strSql2 & " WHERE СПРАВОЧНИК.Type = " & strTableName & strSql3

    и появилось новое - присвоение полю Type значения по умолчанию, равное текущему значению переменной strTableName

    Me.Subfrm.Form!Type.DefaultValue = " & strTableName

    Ведь если этого не сделать, то запись в таблице СПРАВОЧНИК окажется не привязанной к текущему типу справочника.

    В модуле формы двухуровневого справочника «СправочникМ» видим, что формируются две пары строк - источников данных: strSql, strSql1 - для списка и strSql2, strSql3 - для табличной формы. Строки разбиты на пары потому, что между ними нужно будет вставлять условие отбора (WHERE…) Чтобы новое введенное значение в поле формы тут же отображалось в списке, служит процедура

    Private Sub Fld_AfterUpdate()
    DoCmd.RunCommand acCmdSaveRecord
    Me.ListB.RowSource = strSql & " WHERE СПРАВОЧНИК.Type = " & strTableName & strSql1
    End Sub

    А для навигации по форме (поиску нужной записи) используем

    Private Sub ListB_AfterUpdate()
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst " = " & Str(Nz(Me!, 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
    End Sub

    Чтобы исключить возможность ввода в табличную форму (источник - СПРАВОЧНИК Sub) записей, не связанных с основной формой (источник - СПРАВОЧНИК) служит процедура, которая выводит соответствующее сообщение при подобной попытке и блокирует ее:

    Private Sub Subfrm_Enter()
    If flgDeleteRecord = False Then
    If IsNull() Then
    MsgBox "Сначала нужно завести основные данные!", vbCritical, NomWers
    Fld.SetFocus
    End If
    End If
    End Sub

    Раз на форме появилось второе поле фильтра, появилась соответствующая процедура фильтрации по этому полю

    Private Sub П2_Change()
    strFiltr = Me.П2.Text
    Set idField = Me.П2
    Call fFilForm(strFiltr, strSql2, strSql3, Me.Subfrm.Form, "Name")
    End Sub

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

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

    THE BELL

    Есть те, кто прочитали эту новость раньше вас.
    Подпишитесь, чтобы получать статьи свежими.
    Email
    Имя
    Фамилия
    Как вы хотите читать The Bell
    Без спама