В системе 1С:Предприятие значительная часть данных хранится в виде ссылок. Например, склад, выбранный в документе Накладная, обычно хранится как ссылка на элемент справочника Склады. Если удалить некоторый склад из справочника, то в соответствующих документах останется неразрешенная ссылка, то есть ссылка на несуществующий объект. Для исключения таких ситуаций в системе 1С:Предприятие существует механизм контроля ссылочной целостности, о котором пойдет речь в этой главе. Данный механизм един для всех компонент системы 1С:Предприятие.
Механизм контроля ссылочной целостности разделяет процесс удаления объектов данных, на которые могут существовать ссылки (справочники и документы), на два этапа.
На первом этапе пользователи выполняют пометку объектов на удаление. При этом помеченный на удаление объект практически ничем не отличается в использовании от обычного объекта.
На втором этапе администратор системы, или иное лицо, для которого определены соответствующие права, выполняет специальную процедуру — удаление помеченных объектов. В ходе выполнения этой процедуры происходит полный анализ всех ссылок на помеченные объекты, и удаляются только те объекты, на которые ссылки либо отсутствуют, либо располагаются в объектах, которые также помечены для удаления.
Фактически процедура удаления помеченных объектов является регламентной. Ее рекомендуется выполнять периодически по мере накопления помеченных объектов. Данная процедура выполняется только в монопольном режиме.
Практически при любой конфигурации системы 1С:Предприятие работа в режиме контроля ссылочной целостности является целесообразной, так как обеспечивает более надежное функционирование системы и функциональную устойчивость к некорректным действиям пользователей.
Однако система 1С:Предприятие имеет возможность работы и без задействования данного механизма. В этом случае дополнительная ответственность ложится и на пользователей, выполняющих удаление объектов, и на администратора системы, определяющего права пользователей и действия системы при неразрешенных ссылках. Работа системы без контроля ссылочной целостности может, например, быть использована специалистами в процессе отладки конфигурации. Если контроль ссылочной целостности не используется, то удаление объектов происходит непосредственно (без пометки на удаление) и появляется возможность образования неразрешенных ссылок.
Самым радикальным способом установки режима контроля ссылочной целостности является отключение в конфигурации в целом возможности непосредственного удаления объектов. Таким способом полностью исключается возможность в пределах данной конфигурации непосредственно удалять объекты. Пользователи будут иметь возможность только помечать объекты на удаление.
Если признак Разрешить непосредственное удаление объектов в конфигурации включен, то возможность непосредственного удаления объектов может быть ограничена определенным категориям пользователей с помощью настройки прав доступа к конкрMтным видам объектов.
Кроме того, если признак Разрешить непосредственное удаление объектов в конфигурации включен, и у пользователя установлены права на непосредственное удаление объектов, то он может выбрать режим удаления при настройке параметров системы 1С:Предприятие.
Для отключения механизма контроля ссылочной целостности переключатель Режим удаления объектов должен быть установлен в состояние Непосредственное удаление. Если переключатель установлен в состояние Пометка на удаление, то будет использован контроль ссылочной целостности.
Разумеется, только отключение в конфигурации признака Разрешить непосредственное удаление объектов обеспечивает согласованное использование механизма ссылочной целостности всеми пользователями.
Внимание! Заметим, что средствами встроенного языка существует возможность непосредственного удаления объектов при любых установках в конфигурации. Поэтому элементы конкретной конфигурации могут выполнять непосредственное удаление в обход механизма контроля ссылочной целостности. В этом случае ответственность за целостность данных лежит на специалисте, выполняющем конфигурирование системы.
Если не используется режим контроля ссылочной целостности (включен признак Разрешить непосредственное удаление объектов в конфигурации, в параметрах выбран режим Непосредственное удаление и существуют права на удаление у конкретного пользователя), в списках справочников и в журналах документов пользователь имеет возможность использовать пункт меню Удалить (клавишу Del или соответствующую кнопку панели инструментов) для удаления объектов. При этом данный объект будет удален без проверки ссылок на него в других объектах.
При использовании механизма контроля ссылочной целостности (выключен признак Разрешить непосредственное удаление объектов в конфигурации или в параметрах системы выбран режим Пометка на удаление) в списках справочников и журналах документов в меню присутствует пункт Пометка на удаление. При выборе данного пункта меню (или соответствующей клавиши или кнопки панели инструментов) выполняется пометка объекта на удаление. Помеченный на удаление объект отмечается значком в левой колонке списка, изображающим перечеркнутый образ объекта.
Внимание! При пометке на удаление документа он также делается непроведенным.
Если курсор в списке установлен на помеченный объект, то в меню Действия появляется пункт меню Отменить пометку на удаление. Выбор данного пункта меню снимает у объекта пометку на удаление.
Внимание! При снятии пометки на удаление у документа он не делается проведенным. Для того чтобы он стал проведенным документ, следует открыть его и провести обычным порядком.
Возможность пометки на удаление и снятия пометки на удаление конкретным пользователем также регламентируется правами доступа (отдельно пометка и снятие пометки).
В основном помеченные на удаление объекты используются так же, как и обычные. Они так же показываются в списках, по ним может выполняться поиск и т.д. Помеченные на удаление объекты могут быть открыты и изменены.
Помеченный на удаление документ не может быть проведен. При попытке выполнить проведение помеченного на удаление документа выдается соответствующее сообщение, и проведение документа не выполняется.
При выборе помеченного на удаление объекта из списка при редактировании другого объекта или формировании отчета выдается предупреждение, информирующее пользователя о том, что он выбирает помеченный на удаление объект. При этом пользователь может подтвердить выбор помеченного объекта или отказаться от выбора данного объекта.
Режим удаление помеченных объектов вызывается из меню операции или из соответствующего меню (панели инструментов) пользовательского интерфейса.
Вызов данного режима может быть выполнен, только если система запущена в монопольном режиме и у пользователя имеются соответствующие права.
Процесс удаления помеченных объектов имеет несколько стадий. Стадии следуют строго последовательно. Перед каждой очередной стадией можно прервать процесс, закрыв окно режима. Ниже подробно описаны действия системы и пользователя на каждой стадии.
Так как уже первая стадия (подготовка списка помеченных объектов) может занять продолжительное время, при вызове пункта меню Удаление помеченных объектов выдается предупреждение. Пользователь может отказаться, и вход в режим удаления помеченных объектов выполняться не будет.
Если пользователь подтвердил начало процесса удаления помеченных объектов, система выполняет формирование списка объектов, помеченных на удаление. В конце этой стадии пользователю выдается окно, содержащее список обнаруженных в информационной базе объектов, помеченных на удаление.
На этой стадии пользователь может в списке объектов, помеченных на удаление, выбрать те объекты, которые он действительно будет удалять.
Признаком того, что объект будет удаляться, является символ в левой части списка объектов.
В начале все объекты имеют такой признак. Двойным щелчком мыши или клавишей Пробел можно убрать или установить признак конкретного объекта. В правой части диалога находятся кнопки, позволяющие убрать или установить признак для всех объектов.
Установка признака в данном диалоге имеет смысл только в пределах режима удаления помеченных объектов и не влияет на пометки объектов в самой системе. Если данный признак был в диалоге снят, то после выхода из режима удаления помеченных объектов объект все равно останется помеченным на удаление.
На этой стадии пользователь может, не закрывая окно режима удаления помеченных объектов, переходить в другие окна и режимы. Двойным щелчком мыши на текущем объекте можно открыть форму этого объекта. Это позволяет просмотреть объекты и принять решение о правомерности их удаления.
Для перехода к этой стадии нужно нажать кнопку Контроль в диалоге режима удаления помеченных объектов. Перед этим необходимо закрыть все окна системы (разумеется, кроме окна режима удаления помеченных объектов).
На этой стадии система выполняет контроль наличия в информационной базе ссылок на выбранные объекты. Данная стадия также может занять значительное время при большом объеме информационной базы. Если во время процесса контроля были обнаружены ссылки на какие-либо из выбранных для удаления объектов, выдается предупреждение.
После выполнения контроля система обновляет список объектов, выбранных для удаления. Признак удаления снимается для тех объектов, на которые обнаружены ссылки. Данные объекты удаляться не будут. Ниже списка выбранных для удаления объектов выводится список обнаруженных ссылок. Ссылки выводятся по объекту, на котором в данный момент установлен курсор.
В правой части окна выводится количество помеченных для удаления объектов и выбранных для удаления, а также количество объектов, которые можно удалить и которые невозможно удалить. Используя переключатели диалога, можно отобрать для показа в списке объекты, которые можно удалить и объекты, которые невозможно удалить.
На этой стадии переход в другие режимы системы невозможен. Это позволяет гарантировать неизменность данных после выполнения контроля.
На основании просмотра результатов контроля пользователь принимает решение: удалять выбранные объекты или нет.
Для отказа от удаления объектов следует нажать кнопку "Отмена. В этом случае никаких изменений в информационной базе режим удаления помеченных объектов делать не будет. Система, минуя стадию удаления объектов, сразу переходит к заключительной стадии режима.
Для удаления объектов следует нажать кнопку Удалить. В этом случае система переходит к стадии удаления.
Данная стадия запускается только, если нажата кнопка Удалить на стадии просмотра результатов контроля.
Перед началом удаления выдается предупреждение. Пользователь может отказаться от выполнения удаления объектов. В этом случае данная стадия не выполняется.
Система выполняет удаление выбранных объектов из информационной базы. В процессе удаления в окно сообщений выводится информация о том, какие объекты удалены.
Данная стадия предназначена для просмотра результата процесса, как в случае если удаление было выполнено, так в случае, если удаление не выполнялось.
На этой стадии пользователю также доступны списки выбранных для удаления объектов и найденных ссылок. Если выполнялось собственно удаление объектов, то удаленные объекты будут удалены из списка выбранных для удаления объектов.
На этой стадии пользователь может, не закрывая окно режима удаления помеченных объектов, переходить в другие окна и режимы. Двойным щелчком мыши на текущем объекте можно открыть форму этого объекта. Также двойным щелчком (в списке j ссылок) можно открыть объекты, содержащие ссылки на выбранные для удаления объекты. Для выхода из режима следует нажать кнопку Закрыть.
Данный режим предоставляет администратору системы дополнительный сервис при работе с информационной базой. В отличие от режима удаления помеченных объектов, режим поиска ссылок позволяет найти ссылки на любой заданный объект.
В данном режиме пользователь может ввести список объектов (документов, справочников) и по каждому из них получить список ссылок на него, содержащихся в других объектах информационной базы.
Работа в режиме поиска ссылок похожа на режим удаления помеченных объектов. Поиск ссылок может выполняться несколько раз. Для выхода из режима поиска ссылок следует нажать кнопку диалога Закрыть.
В начале пользователь заполняет список объектов, для которых будет выполняться поиск ссылок.
Для внесения в список объекта нужно нажать в диалоге кнопку Добавить. При этом выдается диалог выбора объекта.
В диалоге выбора объекта сначала нужно выбрать вид объекта (вид документа или вид справочника). Выбор вида осуществляется в верхнем элементе диалога. Затем в нижнем элементе диалога следует выбрать конкретный объект указанного вида. После этого для внесения объекта в список следует нажать кнопку ОК. Для отказа от внесения следует нажать кнопку Отмена.
Для исключения объекта из списка следует нажать в диалоге режима поиска ссылок на объекты кнопку Удалить.
После того, как все объекты, по которым будет производиться поиск ссылок, занесены в список, можно переходить к поиску. Для этого следует нажать в диалоге кнопку Найти. Система производит поиск ссылок на указанные объекты во всех объектах информационной базы, в которых они могут встречаться согласно конкретной конфигурации.
Поиск ссылок может занять продолжительное время при большом размере информационной базы.
После выполнения поиска пользователь может просмотреть найденные ссылки на выбранные объекты. Список найденных ссылок по текущему объекту (из списка выбранных) располагается в нижней части окна Поиск ссылок.
Пользователь может, не закрывая окно режима поиска ссылок, переходить в другие окна и режимы. Двойным щелчком мыши на текущем объекте можно открыть форму этого объекта. Также двойным щелчком (в списке ссылок) можно открыть объекты, содержащие ссылки на выбранные объекты.