Содержание:
1. Основное представление Справочников и Регистров в дереве метаданных
2. Свойства и состав стандартных реквизитов
5. Какую информацию хранят преимущественно в Регистрах, а какую – в Справочниках
Почти каждый программист 1С на собеседованиях отвечал на вопрос, чем справочник отличается от регистра. И, судя по дополнительным вопросам, разные проверяющие ждут совершенно разных ответов. Такое впечатление, что одни проверяющие бы точно засыпались с этим вопросом у других.
Это не удивительно, на разных курсах 1С преподаватели, в зависимости от направленности курсов, делают акцент на различных деталях, ну а самый радикальный ответ на вопрос, чем же всё-таки справочник отличается от регистра, который я слышал (от преподавателей сертифицированных курсов), было «да по сути, ничем».
Давайте попробуем подробно рассмотреть различия и сходства этих двух мета-объектов.
1. Основное представление Справочников и Регистров в дереве метаданных
В дереве объектов конфигуратора это 2 разные ветки, причем Регистры делятся на 4 вида. А Справочники бывают только одного типа.
Уже это должно натолкнуть на самый общий ответ –
Регистры – это более специализированные, узконаправленные объекты для записи и обработки информации.
Справочники и регистры
Но справочники имеют развитые возможности по структурированию и объединению информации через иерархию, отношения подчинения и группировку, используя стандартные реквизиты «Родитель», «Группа», «Владелец», которые отсутствуют у Регистров системы 1С.
2. Свойства и состав стандартных реквизитов
Если зайти в свойства объектов 1С, то мы увидим, что Справочники имеют Реквизиты и Табличные части, а Регистры не имеют Табличных частей, зато тоже имеют Реквизиты (а также Измерения и Ресурсы).
Если посмотреть состав стандартных реквизитов, то есть реквизитов, которые обязательно присутствуют у объектов, то там различий еще больше, но главное, что если для Справочника стандартные реквизиты очень важны, и Ссылка есть всегда, а Код и Наименование почти всегда, то у Регистра системы 1С все реквизиты, включая стандартные, могут быть пусты – и Период, и Регистратор, и Активность, и Номер Строки (в Регистраторе).
Свойства объектов 1С
Состав стандартных реквизитов
Регистра системы 1С все реквизиты пусты
Из этого можно дать уточняющий, но по-прежнему очень широкий ответ - Справочники и Регистры системы 1С имеют разные способы, по которым можно обращаться к хранимой в них информации.
Можно сразу уточнить – в справочниках это обращение через стандартные реквизиты «Ссылка» или «Код», а вот у Регистров – реквизиты носят вспомогательный характер и могут вообще отсутствовать, и обращаться к записи регистра следует через другие его свойства.
Тут можно уточнить, что Наименование у Справочников или какие-то стандартные реквизиты у Регистров (если заполнены), тоже могут служить для поиска информации, но это именно поиск, то есть перебор элементов, для которых нет точных идентификаторов.
3. Какие свойства Регистра служат для однозначной идентификации информации в нём и играют роль, близкую к роли Ссылки в Справочниках
Раскроем все типы регистров 1С и увидим, что у всех них есть Измерения и Ресурсы.
Справка 1С даёт такие определения:
«Измерения – это разрезы, в которых хранится информация».
Определение, на мой взгляд, очень плохое и неоднозначное. Ничем не лучше, чем было бы «Разрезы – это измерения, в которых хранится информация».
Измерения и Ресурсы
Справка 1С
Один элемент, порцию или, если так будет понятнее, «папку с информацией» в Регистрах принято называть «Запись».
В Справочниках обычно говорят Элемент, хотя по сути они отличаются довольно мало. Но принято называть именно «Элемент справочника» и «Запись Регистра», хотя «Запись Справочника 1С» и «Элемент Регистра» ничем не хуже, но так не принято. Иногда также говорят – «Строка», но это не совсем правильно и может вносить путаницу. Дело в том, что слово «Строка» подразумевает простую горизонтальную форму из таблицы или списка, в то время как у регистров может быть и более сложное устройство.
Для Справочника табличная форма относительно проста и естественна (хотя и не учитывает данные в Табличных частях), именно поэтому данные (без табличной части) Справочнике можно идентифицировать одним единственным параметром – Кодом или Ссылкой, которые фактически означают номер строки в таблице.
Существует термин «строка набора записей регистра 1С», но он подразумевает, что Записи уже отобраны по некоторым критериям и упорядочены в таблицу. Есть ещё термин «строка регистратора», но это уже совсем другое.
Итак, Измерения – это то, что позволяет найти конкретную Запись в регистре. Можно назвать их «координатами», «определителями», «указателями». Нежелательно использовать термины «параметры» или «характеристики» или «свойства», потому что они имеют свои узкие применения в 1С, но в широком смысле подойдут и они.
Представьте себе, например, координаты точки на плоскости, широту и долготу, или, как в Экселе, A5 или R1 С5. По этим данным можно найти определенное место или ячейку. (Уточню на будущее, что это касается неподвижной точки! Для движущегося объекта определение данных следует организовать совсем иначе!).
Если же мы ищем точку в пространстве, то понадобятся уже три координаты, например, широта, долгота и высота. В Экселе в качестве третьей координаты может быть имя листа, на котором находится ячейка с данными.
В данном случае три оси системы координат и являются Измерениями.
То есть для точки в пространстве нужны три независимых Измерения – Широта, Долгота и Высота, а для ячейки в Экселе – Лист, Строка, Столбец.
А если мы усложним, то можем добавить еще любые другие Измерения, например, Планета, в пространстве которой мы ищем точку, а если нужен пример с 5 и более Измерениями, то можно представить Звезду, Галактику…
Измерений может быть сколько угодно, и все они будут важны, и их нельзя будет пропустить, чтобы определить точное, однозначное положение объекта, то есть нашей Записи.
Для Экселя дополнительными измерениями могут быть Файл, Диск, Сервер.
Понимаете, почему тут не очень хорошо использовать слово «строка», а также почему не совсем подходит понятие «Ссылка», которое было у Справочника?
Имеется понятие «ключ записи» - это уникальный указатель, который создается на основании значений измерений. Хотя он чем-то похож на «ссылку», но не является внутренним идентификатором и не служит для обращения к записи, а только для контроля уникальности записей. Иногда к «ключу записи», кроме Измерений, добавляют время, или Период.
Еще раз подчеркну, что хотя Ссылка и Ключ – очень похожи, но стоит их различать, хотя бы на собеседовании.
Пример Регистра сведений с множеством Измерений.
Пример Регистра сведений с множеством Измерений
Поэтому нужно помнить классическое определение Измерений, но для понимания можно запомнить про координаты, которые нужны для поиска и однозначной идентификации Записи.
Возвращаясь к практическому использованию регистров в 1С, например, для данных о стаже сотрудника, то Измерениями, или идентификаторами в данном случае будут – Организация, ФИО, Дата, на которую нужен стаж…
Идентификаторами в данном случае будут:
Но зная все Измерения, мы получили только координаты Записи, то есть мы ещё не добрались до содержимого самой нашей Записи.
Если вернуться к Экселю, то мы получили только адрес ячейки, а вовсе не её значение.
Строго говоря, если нас интересует только сам факт наличия таких данных, то в регистре можно ограничиться только Измерениями. Например, у Регистра сведений «Административная иерархия» нет Ресурсов, и это не исключение.
Административная иерархия
Если же нужны детализированные данные, то для их хранения используют Ресурсы. Надеюсь, после длинного вступления будет понятно классическое определение, которое даёт 1С:
Ресурсы — это значения, которые непосредственно содержат хранимую информацию. Это опять плохое определение, потому что непонятно, что имеют в виду под «это значения». По идее, это имя непосредственных данных. На самом деле, информация, которая хранится в ресурсах, сильно зависит от типа Регистров 1С.
Если Измерения у разных типов регистров 1С очень похожи, то с ресурсами всё иначе.
Например, в Регистре Сведений «Воинский учет» хранятся числовые, строчные данные, даты, ссылки на справочники и т.д.
Регистре Сведений «Воинский учет»
А в регистрах накопления, как подсказывает название, хранится только такая информация, которая может накапливаться, то есть суммироваться, то есть числовая.
Поэтому как правило Ресурсы в Регистрах Накопления называются однотипно – «Сумма», хотя есть и исключения.
Ресурсы в Регистрах Накопления называются однотипно – «Сумма»
Регистры Расчета 1С и Бухгалтерии – еще более узкоспециализированные объекты, Ресурсами в которых тоже являются числовые данные.
Назначение этих регистров состоит в том, что данные в Ресурсах обрабатываются по специальным, заранее прописанным алгоритмам, что позволяет упростить и запись, и поиск информации.
У справочников такие заранее подготовленные возможности отсутствуют.
4. Реквизиты регистров в 1С
Возникает вопрос, а зачем тогда нужны Реквизиты, если для идентификации данных служат Измерения, для хранения и обработки – Ресурсы?
Рассмотрим еще раз состав Стандартных реквизитов у Регистров, и вспомним пример с координатами точки.
Стандартных реквизитов у Регистров
Если у нас стоит задача следить за движением или изменениями какого-то объекта, то проще сделать фиксацию данных о нём автоматической, с записью данных с определенной частотой, периодичностью.
В обычном мире «Регистраторы» - это либо приборы, самописцы и прочие авто-фиксаторы, либо специально уполномоченные люди, на которых возложено право заносить данные в специальные реестры.
В 1С похоже, хотя «регистратор» это не само устройство, а документ, или точнее, тип документов, созданные по особым правилам, которые при своем проведении записывают данные в Регистр системы 1С.
Понятно, что данные попадают в ресурсы.
Но почему данные о времени записи, а также номер или данные об регистраторе не заносить в Измерения?
Ответ самой 1С и на этот раз не слишком понятен:
Реквизиты в регистрах 1С — это дополняющая информация, которая не так важна и не влияет на записи регистра, но может быть полезна в качестве справочной.
На самом деле ничего не мешает сделать время или дату Измерением, и даже есть такие примеры
Сделать время или дату Измерением
Но сама концепция Измерений в Регистрах предусматривает, что, как правило, это мало и редко изменяемые данные, которые уникальны для каждого объекта (Наименование, код, адрес, ФИО), а те, которые меняются и могут быть одинаковы у двух совершенно различных объектов, записывают в Реквизиты.
То есть назвать данные в Реквизитах «дополняющими» можно только условно, а вот переменными и неуникальными они будут наверняка.
Это относится не только к стандартному реквизиту «Регистратор», так как один Документ может относиться к разным регистрам, не только к стандартному реквизиту «Периоду» – то есть времени, в которое переданы данные, но и к тем Реквизитам, которые созданы самостоятельно.
Например, вот регистр сведений «Замеры времени 1С».
Здесь очень показательно, что к Измерениям относится Дата. Но раз речь идёт о Замере, то дата замера будет одним из уникальных идентификаторов этого замера, а вот ДатаЗаписи в базу или Пользователь, который делает замер, могут быть одинаковы у разных Замеров, поэтому их нежелательно делать Измерениями, хотя и возможно.
Замеры времени 1С
Вообще, определение, какие характеристики Записи следует отнести к Измерениям, а какие к Реквизитам, не очень просто. Но основные принципы приведены выше.
5. Какую информацию хранят преимущественно в Регистрах, а какую – в Справочниках
В классическом учебнике М.Г.Радченко по 1С даётся очень большое определение, которое по размеру больше всей этой статьи, но однозначного ответа не даёт.
Предположу, потому что однозначного ответа и нет. Если не брать регистры бухгалтерии и расчета, которые уж совсем специализированы, то любые данные можно хранить как в справочниках, так и в регистрах.
Вопрос лишь в удобстве пользования. Как уже обсуждалось, у обоих объектов есть свои плюсы и минусы.
На основе всего изложенного стоит определить некоторые правила:
1) как правило, в Справочники заносится независящая от времени информация.
В регистры удобно заносить информацию, одной из характеристик которой является Периодичность (то есть записи делаются в разное Время, причем с заданным интервалом), используя стандартный реквизит «Период».
2) информацию, которая меняется только опосредованно через Документы – лучше помещать в Регистры, используя стандартный реквизит «Регистратор» и свойство «Движения», а информацию, которую планируется добавлять, удалять и корректировать вручную, можно хранить и в Регистрах, и в Справочниках, но лучше именно в Справочниках.
Тут дело не только в стандартном реквизите Справочников – «Пометка удаления», его легко добавить и в Регистр, или использовать «Активность», но это потребует отключить или игнорировать такие важные связки, как «Регистратор» и связанные движения. Иногда, например, при перепроводке документов-регистраторов, ручные изменения просто исчезнут.
3) как правило, в Справочники заносят информацию, которая легко поддается нормализации. Это свойство реляционных баз данных, которое сводится к минимальной избыточности данных, и в предельно упрощенном виде сводится к тому, что в каждой таблице всего две колонки – ключ и данные.
Данных может быть и больше, особенно если они сильно взаимосвязаны и не используются в других сочетаниях, но ключ – точно один. Лучшее визуальное представление такой информации – список, в крайнем случае плоская таблица с пронумерованными строками, в которой все колонки – однотипные и заполненные. В регистры заносят информацию, которая плохо поддается нормализации, имеет несколько ключей и с трудом может быть представлена в виде списка. Например, как приводилось выше, координаты, или прайсы в сложной разбивке по типам ценам, номенклатуре и клиентам.
4) в Регистрах сложно организовать иерархическое разделение, поэтому, например Структура Предприятия (Подразделения) может быть только Справочником.
В Регистрах подобная разбивка хоть и возможна, потому что ничего не мешает создать Измерения типа – Родитель, Владелец и т.д., но поскольку все Измерения в регистрах равноправны, то визуальное представление данных и их обработка потребуют дополнительных трудозатрат.
Регистры – это более специализированные, узконаправленные объекты для записи и обработки информации, имеющие прописанные на уровне платформы возможности обработки информации.
Особенно это касается Регистров бухгалтерии и Регистров Расчетов, чуть в меньшей степени Регистров Накопления. Регистры Сведений – наиболее похожи на Справочники, особенно если не использовать в них Периодичность и Подчинение Регистратору, Но Справочники имеют развитые возможности по структурированию и объединению информации через иерархию, отношения подчинения и группировку, используя стандартные реквизиты «Родитель», «Группа» и «Владелец», которые отсутствуют у Регистров.
Справочники и Регистры имеют разные способы, по которым можно обращаться к хранимой в них информации. В справочниках это обращение через стандартные реквизиты «Ссылка» или «Код», а в регистрах – через Измерения.
Измерения регистров – это разрезы, в которых хранится информация, или, говоря иначе, это та система координат, по которым располагается требуемая Запись.
«Ключ записи в регистрах» – это уникальный указатель, который создается на основании значений измерений и иногда Периода. Хотя он похож на «ссылку» у Справочников, но не является внутренним идентификатором и не служит для обращения к записи, а только для контроля уникальности записей.
Основное достоинство регистров – это созданная на уровне платформы возможность задания в них Подчинения Регистратору и Периодичность, что позволяет удобно организовать автоматическую запись данных в разрезе времени, а также ввести дополнительный контроль целостности информации.
При создании собственных Справочников или Регистров следует заранее продумать, какая информация будет там храниться, при этом следует учитывать, что как правило, выборка данных из Регистров осуществляется быстрее.
Однако это касается в основном выборки по заданным Измерениям, если же поиск информации в Регистрах ведется по значениям Ресурсов или по нестандартным Реквизитам, то скорость выборки может быть ниже.
Таким образом, можно сделать общий вывод, различия между регистрами и справочниками заключаются в их специализации.
Если же не пользоваться стандартными реквизитами и возможностями платформы, которые завязаны на эти стандартные реквизиты, то разница между Справочниками и Регистрами Сведений (потому что в других регистрах невозможно отключить возможности платформы) становится минимальной.
Специалист компании ООО "Кодерлайн"
Дмитрий Сарычев