18c0693f

Глава 8 Контроль ссылочной целостности

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

Основные принципы

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

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

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

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

Включение режима контроля ссылочной целостности

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

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

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

Если признак Разрешить непосредственное удаление объек­тов в конфигурации включен, то возможность непосредственно­го удаления объектов может быть ограничена определенным ка­тегориям пользователей с помощью настройки прав доступа к конкрMтным видам объектов.

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

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

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

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

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

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

Установка и снятие пометки на удаление

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

Внимание! При пометке на удаление документа он также делается непроведенным.

Если курсор в списке установлен на помеченный объект, то в меню Действия появляется пункт меню Отменить пометку на удаление. Выбор данного пункта меню снимает у объекта по­метку на удаление.

Внимание! При снятии пометки на удаление у документа он не делается проведенным. Для того чтобы он стал проведенным документ, следует открыть его и провести обычным порядком.

Возможность пометки на удаление и снятия пометки на уда­ление конкретным пользователем также регламентируется права­ми доступа (отдельно пометка и снятие пометки).

Особенности использования объектов, помеченных на удаление

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

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

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

Удаление помеченных объектов

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

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

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

Так как уже первая стадия (подготовка списка помеченных объектов) может занять продолжительное время, при вызове пункта меню Удаление помеченных объектов выдается преду­преждение. Пользователь может отказаться, и вход в режим уда­ления помеченных объектов выполняться не будет.

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

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

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

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

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

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

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

На этой стадии система выполняет контроль наличия в ин­формационной базе ссылок на выбранные объекты. Данная ста­дия также может занять значительное время при большом объеме информационной базы. Если во время процесса контроля были обнаружены ссылки на какие-либо из выбранных для удаления объектов, выдается предупреждение.

После выполнения контроля система обновляет список объек­тов, выбранных для удаления. Признак удаления снимается для тех объектов, на которые обнаружены ссылки. Данные объекты удаляться не будут. Ниже списка выбранных для удаления объ­ектов выводится список обнаруженных ссылок. Ссылки выводят­ся по объекту, на котором в данный момент установлен курсор.

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

На этой стадии переход в другие режимы системы невозмо­жен. Это позволяет гарантировать неизменность данных после выполнения контроля.

На основании просмотра результатов контроля пользователь принимает решение: удалять выбранные объекты или нет.

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

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

Данная стадия запускается только, если нажата кнопка Удалить на стадии просмотра результатов контроля.

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

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

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

На этой стадии пользователю также доступны списки выбран­ных для удаления объектов и найденных ссылок. Если выполнялось собственно удаление объектов, то удаленные объекты будут удалены из списка выбранных для удаления объектов.

На этой стадии пользователь может, не закрывая окно режима удаления помеченных объектов, переходить в другие окна и режимы. Двойным щелчком мыши на текущем объекте можно от­крыть форму этого объекта. Также двойным щелчком (в списке j ссылок) можно открыть объекты, содержащие ссылки на выбранные для удаления объекты. Для выхода из режима следует нажать кнопку Закрыть.

Поиск ссылок на объекты

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

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

Работа в режиме поиска ссылок похожа на режим удаления помеченных объектов. Поиск ссылок может выполняться не­сколько раз. Для выхода из режима поиска ссылок следует на­жать кнопку диалога Закрыть.

В начале пользователь заполняет список объектов, для кото­рых будет выполняться поиск ссылок.

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

В диалоге выбора объекта сначала нужно выбрать вид объекта (вид документа или вид справочника). Выбор вида осуществля­ется в верхнем элементе диалога. Затем в нижнем элементе диа­лога следует выбрать конкретный объект указанного вида. После этого для внесения объекта в список следует нажать кнопку ОК. Для отказа от внесения следует нажать кнопку Отмена.

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

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

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

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

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