Windows. Железо. Браузеры. Безопасность. Операционные системы

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

Справочники. Многоуровневые и подчиненные. Периодические реквизиты справочников

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

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

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

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

Ø Просмотра и редактирования - форма справочника открывается при помощи главного меню, кнопки на панели инструментов, нажатием кнопки другой формы;

Ø Выбора - открывается только при вводе значения субконто, константы, реквизита документа или реквизита другого справочника, клавишей F4.

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

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

Одноуровневый справочник - это простой список элементов.

Многоуровневый справочник - это иерархический список, в котором записи объединяются в группы.

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

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

Ø организации и договора с ним,

У подчиненного справочника каждый элемент связан с конкретным элементом справочника - владельца.

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

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

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

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

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

Если для текущего справочника в меню «Действия» установлен показ в виде иерархического списка, то появляются следующие знаки:

Ø строка содержит название группы и открыта для просмотра;

Ø строка является элементом справочника;

Ø строка соответствует группе элементов, двойной щелчок открывает доступ к элементам справочника.

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

Рис. 5 – ветвь “cсправочники” дерева конфигурации.

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

«Иерархический справочник» - если свойство установлено, то справочник имеет иерархическую структуру и становится доступным свойство «Вид иерархии» и «Ограничение количества уровней иерархии».

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

Рис. 6 – Окно редактирования объекта, свойство «иерархический справочник».

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

Следует отметить, что установка или снятие свойства «Размещать группы сверху» не влияет на показ справочника в виде неиерархического списка.

«Количество уровней иерархии» - свойство становится доступным, если установлено свойство “Ограничение количества уровней иерархии”. Справочники в системе 1С: Предприятие могут иметь более одного уровня вложенности. Если свойство “Ограничение количества уровней иерархии” не установлено, то максимальное количество уровней вложенности справочника неограниченно.

«Владельцы» - это свойство требует подробного объяснения.

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

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

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

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

Рис. 7 – пример подчинённого справочника «подразделения организаций». Владельцем является справочник «Организации».

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

«Длина кода» - свойство устанавливает максимальную длину кода элемента справочника.

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

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

«Длина наименования» - в свойстве устанавливается максимально возможная длина наименования элемента справочника.

Конфигуратор позволяет установить длину наименования равной 0.

Рис. 8 – установка длины кода и длины наименования в справочнике.

«Серии кодов» - свойство позволяет установить диапазон проверки кода на уникальность и автоматическое присвоение кодов.

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

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

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

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

Рис. 9 – выбор серии кодов.

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

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

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

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

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

Основное назначение.

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

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

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

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

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

Типы данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Многоуровневые справочники

Заполнение справочников

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

Если константа периодическая, то в списке констант храниться не только последнее ее значение, но и все ранее существовавшие значения с датами их ввода.

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

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


Открыть нужный справочник можно через меню Справочники .

Для ввода в справочник нового элемента используется клавиша Insert или

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

Одноуровневый справочник – это простой список элементов.

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


Для создания новой группы в многоуровневом справочнике используется кнопка Новая группа на панели инструментов окна или на клавиатуре Ctrl+F9 .

Щелчком по знаку +(-) на дереве групп можно сворачивать и разворачивать структуру. Двойной щелчок по папке (на дереве папок или в списке) открывает группу. На клавиатуре Ctrl+↓ -- открыть группу, Ctrl+ -- закрыть группу.

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

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

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

Чтобы выбрать элемент, надо выделить его и нажать клавишу Enter или двойным щелчком.

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

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

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

При установке связей между таблицами СПРАВОЧНИК и СПРАВОЧНИК 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), но так же уменьшает размер базы за счет меньшего количества форм и таблиц.

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