Можно ли в 1с предприятии создать общий реквизит
Работая с программами 1С, пользователь должен заполнить определённые поля при вводе объекта в базу. Это и есть реквизиты.
Общие реквизиты документа
Заполняя поля в программах 1С, требуется указать автора документа, наименование организации и другие данные. На это требуется определённое время. Чтобы не заполнять один и тот же реквизит для каждого объекта метаданных, следует использовать общий для всех реквизит. В документах 1С он представляет собой отдельный объект метаданных.
К нему можно перейти, используя встроенный язык из модуля документа. Он доступен при редактировании формы документа.
Найти «Общие реквизиты» в программе 1С довольно просто. Следует зайти в неё, используя режим Конфигуратор. В дереве метаданных есть раздел «Общие». Там и находятся «Общие реквизиты», представляя отдельную ветвь раздела.
Остановимся подробней на свойствах таких объектов метаданных. Для этого нужно найти окно «Свойства». Перейти к ним можно двойным щелчком мышки.
Чтобы посмотреть список объектов, где используется данный реквизит, следует нажать на гиперссылку «Открыть». Кроме того, здесь можно посмотреть, где этот объект используется «Автоматически».
В свойствах общих реквизитов имеются следующие настройки.
- Если объект помечен как «Автоматический», он применяется в режиме «Автоиспользование».
- Чтобы реквизит использовался как входящий в состав нескольких объектов конфигурации, в поле «Разделение данных» нужно установить значение «Не использовать». Если установлено «Разделять», реквизит будет использоваться в качестве разделителя данных.
Если установить значение «Разделять», система в автоматическом режиме создаст параметры по умолчанию.
Для пояснения используем следующий пример. Предположим, в каждом объекте есть реквизит «Организация». Если пометить его как разделитель, система сформирует несколько областей, где будут находиться данные в разрезе этого разделителя. Это создаёт определённые удобства для пользователя. Он может получать как общие данные, так и сведения, касающиеся только своей организации.
Получая доступ к своим данным, пользователь также может работать с общими областями сведений, которые доступны для всех. Например, «Контрагенты», «Валюты», «Банки», другие неразделённые данные.
Создание общего реквизита
Следует навести мышку на общий реквизит и нажать на команду «Добавить». На клавиатуре можно воспользоваться клавишей «Ins».
В качестве примера назовём его «Организация». В полях, где нужно указать тип, укажем СправочникСсылка.Организации.
Затем установим разделение данных, указав значение «Разделять».
В документах, где он будет стоять, установим «Использовать». Например, в счёте на оплату покупателю.
Затем откроем форму документа. Это дерево метаданных «Документы» - «СчетНаОплатуПокупателю», раздел «ФормаДокумента». В списке и среди элементов будет добавленное поле. Кроме того, данные будут автоматически указываться на форме документа.
Теперь к нему можно обращаться из модуля документа, редактировать его, добавлять всевозможные объекты программы 1С. Например, поместим его в справочник «Номенклатура». Он окажется в списке реквизитов данного справочника.
Общие реквизиты могут быть указаны сразу для нескольких разделов метаданных. В остальном они ничем не отличаются от обычных реквизитов. Можно настроить разделение данных и область их хранения.
Вводя в программу общие реквизиты, надо делать это правильно. Любые ошибки могут привести к некорректной работе программы. Поэтому, мы рекомендуем перед любыми изменениями делать бэкап самостоятельно или доверить это специалистам.
Работая с программами 1С, пользователь должен заполнить определённые поля при вводе объекта в базу. Это и есть реквизиты.
Общие реквизиты документа
Заполняя поля в программах 1С, требуется указать автора документа, наименование организации и другие данные. На это требуется определённое время. Чтобы не заполнять один и тот же реквизит для каждого объекта метаданных, следует использовать общий для всех реквизит. В документах 1С он представляет собой отдельный объект метаданных.
К нему можно перейти, используя встроенный язык из модуля документа. Он доступен при редактировании формы документа.
Найти «Общие реквизиты» в программе 1С довольно просто. Следует зайти в неё, используя режим Конфигуратор. В дереве метаданных есть раздел «Общие». Там и находятся «Общие реквизиты», представляя отдельную ветвь раздела.
Остановимся подробней на свойствах таких объектов метаданных. Для этого нужно найти окно «Свойства». Перейти к ним можно двойным щелчком мышки.
Чтобы посмотреть список объектов, где используется данный реквизит, следует нажать на гиперссылку «Открыть». Кроме того, здесь можно посмотреть, где этот объект используется «Автоматически».
В свойствах общих реквизитов имеются следующие настройки.
- Если объект помечен как «Автоматический», он применяется в режиме «Автоиспользование».
- Чтобы реквизит использовался как входящий в состав нескольких объектов конфигурации, в поле «Разделение данных» нужно установить значение «Не использовать». Если установлено «Разделять», реквизит будет использоваться в качестве разделителя данных.
Если установить значение «Разделять», система в автоматическом режиме создаст параметры по умолчанию.
Для пояснения используем следующий пример. Предположим, в каждом объекте есть реквизит «Организация». Если пометить его как разделитель, система сформирует несколько областей, где будут находиться данные в разрезе этого разделителя. Это создаёт определённые удобства для пользователя. Он может получать как общие данные, так и сведения, касающиеся только своей организации.
Получая доступ к своим данным, пользователь также может работать с общими областями сведений, которые доступны для всех. Например, «Контрагенты», «Валюты», «Банки», другие неразделённые данные.
Создание общего реквизита
Следует навести мышку на общий реквизит и нажать на команду «Добавить». На клавиатуре можно воспользоваться клавишей «Ins».
В качестве примера назовём его «Организация». В полях, где нужно указать тип, укажем СправочникСсылка.Организации.
Затем установим разделение данных, указав значение «Разделять».
В документах, где он будет стоять, установим «Использовать». Например, в счёте на оплату покупателю.
Затем откроем форму документа. Это дерево метаданных «Документы» - «СчетНаОплатуПокупателю», раздел «ФормаДокумента». В списке и среди элементов будет добавленное поле. Кроме того, данные будут автоматически указываться на форме документа.
Теперь к нему можно обращаться из модуля документа, редактировать его, добавлять всевозможные объекты программы 1С. Например, поместим его в справочник «Номенклатура». Он окажется в списке реквизитов данного справочника.
Общие реквизиты могут быть указаны сразу для нескольких разделов метаданных. В остальном они ничем не отличаются от обычных реквизитов. Можно настроить разделение данных и область их хранения.
Вводя в программу общие реквизиты, надо делать это правильно. Любые ошибки могут привести к некорректной работе программы. Поэтому, мы рекомендуем перед любыми изменениями делать бэкап самостоятельно или доверить это специалистам.
К примеру, необходимо при каждой записи документа сохранять пользователя, который выполнил изменения в документе. В типовых конфигурациях у большинства объектов есть реквизит «ответственный», но в данный реквизит записывается только создатель документа. Чтобы сохранить также и пользователя, вносившего изменения в объект, можно добавить новый реквизит – «Редактор». Можно пойти долгим путем добавления в каждый требуемый объект нового реквизита, последующего вынесения на форму и т.д., а можно добавить в конфигурацию один общий реквизит документов, и указать, где он будет использоваться (Рисунок 1).
Взаимодействие с общими реквизитами 1С, по сути, ничем не отличается от взаимодействия с обычными, за исключением того, что общие реквизиты не отображаются у выбранных объектов в свойствах в дереве метаданных.
Соответственно, обращение к общему реквизиту 1С также ничем не отличается от обращения к реквизитам других типов (Рисунок 2).
При работе с формой объекта 1С 8.3, обращение к реквизитам также не отличается, и, чтобы вынести данный реквизит на форму объекта, достаточно его просто перетащить на форму (Рисунок 3).
Разделение данных 1С
Второй вариант использования общих реквизитов – Разделение данных 1С.
Разделение данных 1С – это аналогичный ограничению доступа на уровне записей механизм, однако работающий по другому принципу. Если ограничение доступа на уровне записей – это дополнительные условия в запросе 1С 8.3, ограничивающие список, то разделитель данных 1С – это дополнительный столбец в таблицах на уровне СУБД. Соответственно, благодаря разделению данных 1С система будет работать несколько быстрее.
1. Создается общий реквизит документов и определяется состав справочников, регистров и документов, которые будут разделяться;
2. При разделении данных конфигуратор предложит создать два параметра сеанса 1С: значение реквизита объекта и признак использования.
После включения настройки «Разделение данных» 1С покажет в свойствах общего реквизита дополнительные поля (Рисунок 4):
· Свойство «Использовать разделение данных» имеет два значения — «Независимо», позволяющее полностью разделить базу на независимые участки, и «Независимо и совместно», позволяющее работать как в независимом режиме, так и в обычном.
· Свойства «Разделение пользователей» и «Разделение аутентификации» позволяет создавать отдельные списки пользователей для каждой области базы.
· Свойство «Условное разделение» позволяет использовать какие-либо условия для включения или отключения общего реквизита-разделителя.
Предисловие
Начиная с версии платформы 8.2.14.x и до последних актуальных релизов, в дереве метаданных конфигурации имеется такой объект как "Общие реквизиты". Подобный функционал предоставляла еще платформа 7.7, но в восьмой ветке эти возможности стали доступны далеко не сразу.
Сегодня мы рассмотрим нюансы использования данного объекта при разработке конфигураций, а также проанализируем структуру его хранения на стороне базы данных.
Возможности
В типовых конфигурациях можно заметить, что для многих документов создан реквизит "Комментарий". Конечно, разработчику не составило труда вручную добавить его в каждый документ в конфигураторе, но теперь у нас есть более быстрый вариант проделать эту операцию.
Рассмотрим пример. В некоторой тестовой конфигурации, которой на самом деле не существует :), создадим четыре документа с именами "Doc1", "Doc2", "Doc3" и "Doc4". В каждый из документов нам необходимо добавить комментарий, причем он должен отображаться в форме списка каждого из документов.
Для этого создадим новый объект конфигурации в ветке "Общие -> Общие реквизиты" и назовем его "Комментарий". Тип значения укажем "Строка" длинной 255 символов. Также включим многострочный режим. Результат описанных действий Вы можете видеть на скриншоте "Настройки общего реквизита" ниже.
Все настройки аналогичны настройкам любого реквизита документа, за исключением раздела "Использование". Здесь нас интересует опция "Состав", в которой определяется состав объектов конфигурации. Именно здесь и будет определяться список тех объектов, для которых будет использоваться этот общий реквизит. Включим использование для первых трех документов.
Отметим, что режим использования "Автоматически" ориентируется на настройку "Автоиспользование" общего реквизита. В нашем примере свойство "Автоиспользование" для реквизита установлено в "Не использовать". Значит для документа "Doc4" общий реквизит не будет задействован, пока не включить использование явно.
В режиме конфигуратора сделаны все необходимые настройки. Запустим режим предприятия и откроем форму списка "Doc1". Мы увидим, что реквизит доступен как в списке, так и в форме документа.
То есть появился новый реквизит "Комментарий", имеющий строковой тип и многострочный режим редактирования. Такую же картину мы будем наблюдать для документов "Doc2" и "Doc3".
Для общих реквизитов доступны стандартные возможности отбора, а в режиме конфигуратора работа с ними в форме документа никак не отличается от работы с обычными реквизитами.
Например, если создать запрос к документу "Doc3", то в доступных полях будет общий реквизит "Комментарий".
Единственное, чем функционал общего реквизита отличается от обычного, так это отсутствием возможности добавить его в графу журнала документов. В остальном же с ними можно работать стандартным образом.
Что там внутри
Для ответа на этот вопрос проанализируем как платформа 1С работает с общими реквизитами на стороне базы данных, а также каким образом к ним строятся запросы на выборку данных.
Сразу скажу, что для хранения значений общих реквизитов не используется отдельная таблица в базе данных. Если бы это было так, то использование данного объекта конфигураций отрицательно сказалось на общей производительности системы, так как запросы к реквизитам документа усложнились за счет использования дополнительного соединений. Общие реквизиты сохраняются в дополнительной колонке, добавляемой для таблиц документов, включенных в их состав. То есть также, как если бы реквизит был добавлен непосредственно в самом объекте.
Обратимся к документу "Doc4", который не был включен в общий реквизит "Комментарий". Чтобы показать, как изменяется таблица документа в SQL-базе при добавлении его в состав общего реквизита, обратимся к следующему скриншоту.
Был добавлен общий реквизит с типом "Булево", в состав которого мы включили документ "Doc4". В итоге, при обновлении структуры информационной базы, в исходную таблицу "_Document10" было добавлено поле "_Fld17" булевого типа. Отсюда следует, что общие реквизиты добавляют к таблицам БД как дополнительные поля, аналогично тому, если бы мы создали вручную реквизиты для каждого документа.
Соответственно, запросы к таблицам SQL-базы будут в точности повторять запросы к полям, если бы они были созданы обычным способом. Делаем вывод, что явное отрицательное влияние на производительность отсутствует.
Но все ли так
Как обычно, не все так идеально. У общих реквизитов есть один существенный минус, как и у любого универсального подхода - это отсутствие возможности гибкой настройки этого реквизита для отдельных таблиц. На то он и общий, не так ли?
Например, в той же конфигурации, включив индексирование для общего реквизита "Комментарий", этот индекс будет создан в таблице каждого документа. Даже если индекс для конкретного документа будет не нужен, то отключить его средствами платформы 1С не будет возможности. Вот так индекс был добавлен в 3 документа, в которые мы добавляли общий реквизит "Комментарий".
Платформа 1С добавила индексы по общему реквизиту во все таблицы, которые входят в его состав.
Вроде бы все хорошо, но иногда отсутствие возможности управлять гибкой настройкой индексов создает проблемы.
Зачем отключать этот индекс? Обычно индексы добавляются для конкретных ситуаций. Добавляя их заранее для всех объектов, скорее всего некоторые из них будут избыточными (не всегда конечно же). С использованием общего реквизита Вы просто не сможете отключать индекс там, где он не используется.
Если сильно захотеть, то индекс удалить все же можно, воспользовавшись этим подходом, ведь где индекс можно добавить своими скриптами, такими же скриптами его можно и удалить. Там же в статье описаны все плюсы и минусы такого способа.
Кроме настройки индексирования Вы также лишаетесь возможности делать другие точечные настройки общего реквизита для объектов:
- Использование в полнотекстовом поиске
- Историю данных
- Заполнение из данных заполнения
- Проверку заполнения
- И др.
Таким образом, использование общего реквизита обосновано, если все перечисленные проблемы не относятся к поставленной задаче разработки.
А как обстоят дела с использованием этого механизма в типовых конфигурациях?
В типовых конфигурациях
В типовых решениях Вы не часто встретите использование общих реквизитов, за одним большим исключением - это разделение данных из подсистемы "Работа в модели сервиса" из БСП. Подсистема позволяет разделить все хранимые данные в базе на изолированные части, чтобы в одной базе данных могли работать несколько компаний. Все это было сделано для облачной работы решений на платформе 1С.
По моему мнению, общие реквизиты как раз и были изначально созданы разработчиками платформы, чтобы реализовать разделение данных в конфигурациях. Но это, конечно, не точно :)
При работе в модели сервиса в конфигурации должен быть включен механизм разделения данных, который позволяет разделить все хранимые данные, а также работу прикладного решения на отдельные части.
Разделение данных можно найти во всех популярных решениях. На стороне базы данных они также отражены дополнительным полем, но за важным отличием - это поле добавляется во все индексы объекта с разделением на первую позицию. Не важно, используйте Вы разделение данных или нет - разделитель у Вас есть в базе и платформа использует его для построения запросов. В 100% случаев это числовое поле. Если разделение данных не включено, то оно заполняется значением "0" и по этому же значению устанавливается фильтр во всех запросах.
Есть интересный момент в анализе планов запросов при наличии разделителя в индекса. Как известно, операция "Table scan" или "Index scan" (сканирование, просмотр таблицы / индекса) обычно не очень хороший признак выполняемых запросов на больших таблицах. Взгляните на такой случай.
Уже из текста можно понять, что запрос скорее всего написан с ошибкой, т.к. выбирать всю таблицу реализаций - это последнее дело на больших базах. Если в базе разделителей нет (например, если у Вас старая и добрая УТ 10.3), то план запроса будет с операцией сканирования индекса.
Запрос платформой 1С будет сгенерирован примерно такой:
- Логическая операция: Table scan
- Количество прочитанных строк: 6076 (всего в таблице 6076, то есть она была прочитана полностью)
- Очень неоптимально. Но какой запрос - такой и план.
Теперь выполним примерно такой же запрос на "Бухгалтерии предприятия 3.0", где разделитель данных уже присутствует. И вот результат.
SQL-запрос уже получил дополнительный фильтр по разделителю.
План тоже претерпел изменения.
От предыдущего примера план отличается тем, что операция теперь "Index Seek", вместо "Table Scan". Хотя прочитанных строк и затраченных ресурсов на выполнение запроса практически не изменилось.
Что все это значит? А то, что не нужно смотреть в плане запроса на выполняемые операции и ожидать, что если выполняется "Index Seek" (Поиск в индексе), то значит с запросом все хорошо. Поиск в индексе бывает разный, и не всегда оптимальный. Рекомендую отличную статью по работе с планами запросов "Планы запросов - это просто!" от Андрея Овсянкина.
Еще одним моментом, связанным с разделением данных, является падение производительности для тех пользователей, которые могут работать со всеми областями данных. В этом случае платформа 1С не ставит явный отбор по разделителю и практически все запросы превращаются в сканирование таблиц и индексов. Подробнее об этом Вы можете прочитать в статье "Управление доступом: роли, права, профили, группы доступа, функциональные опции, RLS" от Евгении Карук.
А Вы использовали когда-либо разделение данных? Есть чем дополнить материал?
Жизнь обычного разработчика
В самом начале статьи Вы видели пример добавления общего реквизита, но он не имеет ничего общего с практическими задачами. За весь опыт работы с платформой и различными конфигурациями мне известны лишь несколько кейсов, когда разработчики их применяли:
- Добавление реквизита для объекта в типовой конфигурации, чтобы не затрагивать основной объект. Вроде как сделано, чтобы обновлять конфигурацию было проще.
- Создание общих атрибутов для объектов в виде общих реквизитов (даты создания и изменения, ответственный и другие произвольные атрибуты).
- Просто бездумное добавление полей, чтобы меньше "кликать" в конфигурации.
В отраслевых решениях можно встретить различного рода общие реквизиты, в отличии от решений фирмы "1С".
Использовать?
Все зависит от конкретной ситуации. Если в один прекрасный момент Вам понадобиться создать для всех документов конфигурации один и тот же реквизит с одинаковыми свойствами, то использования общего реквизита поможет сэкономить Вам время. Есть моменты, которые могут помешать использовать его возможности - это невозможность его использования в графе журнала документов и отсутствие гибкой настройки для каждого документа отдельно в дереве метаданных. Думаю, что в следующих версиях платформы станет возможным использовать общие реквизиты в журналах документов, но кто знает.
В завершении скажу, что за все время работы с платформой 1С:Предприятие 8.x, мне не приходилось использовать общие реквизиты для решения практических задач. В типовых конфигурациях, с которыми имел дело, также не находил их применения, за исключением редких отраслевых конфигураций. Поэтому 100 раз подумайте, прежде чем добавлять их в конфигурацию.
Читайте также: