О том, что программа позволяет вести отдельно справочники уволенных сотрудников и сотрудников, находящихся в резерве (ожидающих вакансий на вашем предприятии), вы, несомненно, знаете. И готовы во всех подробностях рассмотреть таблицы базы данных комплекса СБиС++, в которых хранятся эти справочники.
Спешим вас разочаровать, или, наоборот, порадовать: никаких дополнительных таблиц для этой информации нет. Все данные хранятся в таблице «Сотрудники» и «Сотрудники (расширение)». «Как так?» – спросите вы, – «Как же программа не запутается, выбирая данные из одной таблицы в три разных справочника».
На самом деле данные этих справочников практически идентичны, любого сотрудника можно из основного справочника поместить в архив, а затем, при необходимости, извлечь обратно. Сотрудника из резерва также вполне можно перебросить в основной справочник. Вот и решили разработчики огород не городить, а хранить все данные в одной таблице, но не просто так, а с умом и хитростью! Решили они пометить записи справочника неким кодом, обрабатывая который программе легко будет рассортировать записи одной таблицы на три разных справочника. Используется для этих целей поле «Сотрудники».
Для справочника «Сотрудники» данное поле, как мы говорили, задаёт его структуру: значением записей, находящимся в корне справочника, будет «корень у». Для записей, отвечающим карточкам, находящимся внутри групп, значением поля будет адрес соответствующей записи-узла.
Для записей, отвечающим карточкам сотрудников, помещённым в архив, значение поля «Сотрудники» всегда будет «нет». Это сигнализирует программе, что эту запись не надо выводить в справочнике «Сотрудники», а надо выводить в справочнике «Архив сотрудников». Иерархии в этом справочнике нет, все карточки лежат в его корне.
С резервом сотрудников ситуация немного сложнее, здесь допускается иерархическая структура данных. Для того, чтобы не перепутать её с иерархией справочника «Сотрудники», в таблицу помещается специальная запись, поля которой инициализированы значением «нет», а поле «Сотрудники» имеет значение «нет у». Эта запись будет обозначать как бы корень справочника «Резерв сотрудников». Пусть адрес корневой записи будет «00000001». Остальная иерархия справочника «пляшет» именно от этой записи, то есть записи, находящиеся в корне справочника, будут в поле «Сотрудники» иметь адрес той самой специальной записи с пометкой «у», в нашем случае, «00000001у». Для остальных записей поле «Сотрудники» заполняется аналогично, как это происходит для записей справочника «Сотрудники».







