Функциональные опции, механизм (Functional Option, Mechanism). Функциональные опции (1Cv82) Параметры функциональных опций 1с 8.3

1. Права доступа.

На самом деле все очень просто. В 1С по умолчанию запрещено всё, что не разрешено . Есть только одна сущность, отвечающая за доступ пользователя к какой-либо функциональности или данным. Эта сущность называется "Право доступа" . Она является единственным элементом, отвечающим за доступ к конкретному режиму работы, справочнику, реквизиту....

Количество видов прав доступа предопределено платформой. Всего платформе есть две основные группы прав доступа. Общие для всей системы права доступа к механизмам платформы , отвечающие за доступ к определенным режимам работы платформы (Администрирование, Монопольный режим, Тонкий клиент,Интерактивное открытие внешних отчетов....). И объектные права доступа , позволяющие работать с различными объектами конфигурации. Их количество зависит от типа объекта конфигурации. Например, у справочника есть 16 различных видов доступа (Чтение, Добавление, Изменение, Удаление....). Для регистра сведений видов доступа всего пять. Все эти права можно установить только на уровне справочника целиком. Также можно ограничить доступ на уровне реквизитов. Но в этом случае доступна лишь часть видов прав (для справочников это права Просмотр и Редактирование).

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

Рассмотрим права доступа к справочнику. На данной схеме видно, что большинство прав является уточнением более общих прав. Если Право1 полностью расположено на схеме внутри прямоугольника другого Права2, то Право1 не может быть выдано без выдачи Права2. Самым общим правом является право "Чтение". Если право "Чтение" отсутствует, то недоступны и все остальные права. Если недоступно право "Добавление", то нельзя установить право "Интерактивное добавление". Однако, систему прав нельзя назвать полноценной иерархией. Например, право "Редактирование" можно дать лишь при наличии прав "Просмотр" и "Изменение". Но можно дать "Просмотр" без "Изменение" или "Изменение" без "Просмотр".

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

2. Роли - механизм предоставления прав доступа

Рассмотрим, как именно выполняется предоставление пользователю прав доступа. Для удобства выдачи прав доступа в платформе 1С используется специальный механизм "Роли" . Он является прослойкой между пользователями информационной базы и правами доступа. В каждой роли объединен набор прав доступа, назначение которых имеет смысл выполнять только одновременно. Например, в роли "Чтение контактной информации" логично объединить наборы прав, отвечающих за связанные справочники с контактной информацией. Наиболее простым способом установки роли пользователю является открытие карточки пользователя ИБ в конфигураторе и установка галочек напротив нужных пользователю ролей . Это универсальный способ и он работает в любых конфигурациях. Однако, с усложнением конфигураций и увеличением количества ролей он стал довольно трудоемкий. Поэтому в актуальных типовых решениях есть дополнительная прослойка между пользователем ИБ и ролями. Эта прослойка реализована в виде подсистемы "Управления доступом" . Она позволяет объединять роли в более крупные сущности - "Профили" и назначать пользователю уже не отдельные роли, а профили, содержащие наборы из нескольких ролей.

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

С технической точки зрения данная система выдачи прав реализовывается с участием двух стандартных подсистем. Подсистема "Управление доступом" используется для настройки связи групп доступа с предопределенными в конфигурации ролями. Подсистема "Пользователи" используется для настройки связей пользователей ИБ с группами доступа конфигурации.

3. "Логика разрешений" как правило пересечения ролей.

Важно понимать, что в 1С общая логика управления доступом это логика разрешений . В платформе 1С вообще нет никаких механизмов запрета доступа . Есть только механизмы выдачи доступа . По умолчанию доступ ко всем данным запрещен, и настройка доступа заключается в выдаче каждому пользователю нужных ему прав . Это означает, что если какой-то ролью пользователю дано право на просмотр документов "Реализация товаров", то никакими способами нельзя это право отнять другими ролями или любыми другими механизмами платформы и конфигурации. Можно изначально выдать не полный доступ к справочнику, а отфильтровать с помощью RLS данные, на которые мы даем доступ. Но если доступ уже выдан, то забрать его другими ролями уже нельзя.

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

В платформе есть возможность дать пользователю дополнительные права на время выполнения отдельной операции. Эта возможность называется "Привилегированный режим". Он позволяет пользователю выполнять действия над данными, которые ему не доступны. Однако, в платформе нет возможности даже временно уменьшить имеющиеся у пользователя права.

4. Косвенное управление доступом.

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

4.1. Функциональные опции.

К системе управления доступом иногда относят механизм функциональных опций . Это не совсем верно, так как функциональные опции никак не влияют на доступ к данным. Это исключительно интерфейсный механизм, предназначенный для упрощения интерфейса для пользователя. Он появился в платформе 8.2 как результат усложнения функционала конфигураций. Функциональные опции предназначены для скрытия из интерфейса функционала, не используемого в данной конкретной компании или данным конкретным пользователем. Механизм влияет только на отображение данных. Из интерфейса исчезают команды, а на формах скрываются реквизиты, отключенные функциональными опциями. При этом у пользователя остается доступ ко всем этим командам и реквизитам . Он может без каких-либо проблем работать со скрытыми данными программно при помощи обработок.

Подробнее о работе с функциональными опциями можно почитать на ИТС

4.2. RLS (Record Level Security)

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

Для настройки такого разрешения есть дополнительный механизм RLS (Record Level Security) . Как и следует из названия, этот механизм контроля доступа на уровне конкретных записей таблиц. Если права доступа дают доступ к таблицам вцелом (справочникам) или колонкам таблиц (реквизитам), то RLS определяет конкретные строки таблиц (записи), с которыми разрешено работать пользователю. Он позволяет определить данные, которые пользователю доступны.

При разборе данного механизма стоит всегда помнить, что RLS не является механизмом запрета доступа . Он является механизмом фильтрации выдачи доступа . Т.е. RLS не влияет на имеющиеся у пользователя права, он является фильтром, ограничивающим выдачу прав. RLS влияет только на ту конкретную связь "Роль" - "Право доступа", в которой он прописан. И не влияет на права доступа, выданные с помощью других ролей. Например, если одной ролью будет разрешен доступ к документам только по Организации1, а другой ролью доступ к документам по Складу1, то в итоге пользователь получит доступ ко всем документам, в которых указана Организация1 ИЛИ Склад1. Поэтому если пользователю выдается несколько ролей, то фильтр с помощью RLS нужно ставить в каждой роли по обоим полям (по организации и складу). В типовых решениях эта задача обычна решается созданием одной роли, в которой прописываются все возможные фильтры RLS. Данная роль потом назначается всем пользователям, работающим с данными справочниками. Также контролируется, чтобы у пользователя не были доступны другие роли, содержащие право доступа к ограниченным документам.

Так же стоит обратить внимание что фильтры RLS можно наложить не на все возможные виды доступа к данным, а лишь на виды доступа верхнего уровня . Например, для справочников из имеющихся шестнадцати видов доступа фильтры RLS можно наложить лишь на четыре основных: Чтение, Изменение, Добавление и Удаление. Это означает, что мы не можем, например, дать пользователю одновременно право "Изменение" без фильтра для возможности работать программно с любыми документами и право "Редактирование" с фильтром RLS по организации для интерактивной работы. Если нам нужно, чтобы пользователь мог редактировать документы с фильтром RLS , мы обязаны наложить общий фильтр на верхнем уровне "Изменение" или "Чтение".

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

4.3. Разделение данных.

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

В каком-то общем смысле этот механизм можно считать тоже фильтром на данные и частным случаем реализации RLS. В отличии от RLS разделение гораздо более жесткий механизм. И благодаря этой жесткости у разработчиков есть техническая возможности дополнительными индексами сделать такую фильтрацию без свойственных RLS замедлений работы.

Фактически RLS это просто дополнительные отборы , добавляемые автоматически к каждому запросу к базе данных. Разделение данных это добавление разделителя во все разделенные таблицы и их индексы, в том числе в кластерный. Данные группируются в разрезе разделителя, т.е. физически перераспределяются по диску в отдельные группы по каждому значению разделителя. Благодаря этому каждый пользователь работает только со своими данными, и серверу не нужно при каждом запросе физически просматривать всю таблицу. Достаточно просмотреть только область данных текущего раздела.

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

4.4. Программный код.

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

Однако, программным кодом нет возможности ограничить права вцелом по конфигурации . Максимум, который разработчик может сделать, это встроить ограничения в конкретные отдельные механизмы получения данных. Благодаря тому, что в 1С используется объектная модель работы с данными, программный код может гарантированно защитить данные от изменения , добавив нужные проверки в модуль объекта. Но разработчик никак не может полностью гарантировать, что пользователь точно не сможет получить информацию о чужих документах реализации другими отчетами или обработками.

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

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

4.5. Сравнение вариантов.

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

Как включить

Что при этом произойдет

Функциональные опции - интерфейсный механизм скрытия функционала

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

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

RLS (Record Level Security) - дополнительные фильтры на разрешаемые роле права

1. Прописать фильтры RLS в каждой роле пользователя для каждого из прав, которые нужно ограничить.

Примечание: В режиме предприятия никаких действий выполнять не нужно. Фильтры применятся автоматически.

1. Настроенный фильтр будет добавляться к каждому запросу к ИБ.
2. Данные, не подходящие под фильтр RLS нельзя будет получить никакими средствами: они не будут отображаться в формах, отчетах; не будут отбираться никакими запросами.

Разделение данных - ведение в одной физической базе нескольких независимых

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

2. Добавит два параметра сеанса: для признака использования и текущего значения разделения данных.

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

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

  • Добавится поле "Разделитель", в котором будет храниться значение разделителя.
  • Перестроятся все индексы по таблицам. В них перевым полем добавится поле разделителя.

2. После включения разделения.

  • В абсолютно все запросы к ИБ будет добавляться фильтр по значению разделителя.
  • При записи любых данных будет автоматически заполняться значение разделителя по значению параметра сеанса.
Программный код - любые дополнительные точечные ограничения
1. Добавить код наложения нужных ограничений в конфигурацию.

1. Сделает именно то, что написано.

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

5. Итоги.

У каждого способа настройки ограничений свои плюсы и минуса. С точки зрения технологии наиболее правильный способ это грамотное разбиение на роли. Для фильтрации доступных данных надежнее всего использование RLS. Именно для этой задачи механизм предназначен. Точечные ограничения проще всего выполнять с помощью программного кода. Функциональные опции и разделение данных достаточно специфичные механизмы, не предназначенные для ограничения доступа. Хоть в некоторых случаях и могут для этого использоваться.

.
«1С:ERP Управление предприятием» - инновационное решение для построения комплексных информационных систем управления деятельностью многопрофильных предприятий, в том числе с технически сложным многопередельным производством, с учетом лучших мировых и отечественных практик автоматизации крупного и среднего бизнеса.
Немного инфографики:


Пользователями 1С:ERP на сегодня (март 2016 г.) стали более 900 предприятий, и их число растет. При этом несколько десятков проектов, с точки зрения разработчиков, получили статус «пилотного», т.е. данные предприятия и организации в первую очередь принимают активное участие в развитии новой функциональности, оперативно предоставляя обратную связь.
Вот логотипы некоторых пользователей 1С:ERP:


Интересной особенностью решения 1С:ERP является то, что разрабатываем мы одно решение - 1С:ERP – а из его исходников автоматически получаем четыре решения (путем «вырезания» функциональности и переключения функциональных опций):


При расширении бизнеса или увеличении потребностей компании в автоматизации наращивание функциональности системы можно производить поэтапно, переходя от конфигурации «Управление торговлей» к конфигурации «Комплексная автоматизация» и далее к «ERP Управление предприятием 2». За счет высокой степени унификации решений такой переход выполняется быстро, накопленные в информационной базе данные сохраняются, а переучивание пользователей не требуется – они продолжают работать в привычной программной и информационной среде.

Как пишется 1С:ERP

Как мы из одного решения делаем четыре

Разработка ведется только в одной ветке (ERP). Процесс формирования из флагманского решения ERP более «легких», функционально ограниченных Комплексной Автоматизации (далее – КА для краткости) и двух разновидностей Управления Торговлей (далее – УТ и УТ Базовая) автоматизирован.
Изменения из ERP в «производные» конфигурации (КА, УТ, УТ Базовая) переносятся автоматически, с использованием механизма сравнения и объединения конфигураций . Этот механизм изначально предназначен для автоматизации процесса перехода на новые версии прикладных решений тех пользователей, которые изменяют/расширяют функциональность прикладного решения на своей стороне. Механизм сравнения и объединения конфигураций выполняет трехстороннее семантическое слияние на основании анализа трех конфигураций:
  • старая конфигурация от поставщика
  • новая конфигурация от поставщика
  • текущая конфигурация пользователя (старая конфигурация от поставщика плюс изменения, сделанные в ней пользователем)
На выходе мы получаем новую текущую конфигурацию, которая объединяет в себе новую функциональность (привнесенную разработчиком) и сохраняет доработки (кастомизации), сделанные пользователем.
В нашем случае в роли текущей конфигурации выступают поочередно КА, УТ, УТ Базовая, в роли старой и новой конфигураций от поставщика – ERP старой и новой версии соответственно. Т.е. мы считаем, что функционально ограниченные конфигурации - КА, УТ, УТ Базовая – это кастомизированные (в основном путем удаления незадействованных объектов) версии ERP.


Одни из немногих объектов, которые пишутся для каждого из решений вручную – это планы обмена , определяющие правила интеграции данного решения с другими решениями 1С (например, с 1С:Документооборотом) или, например, с внешним оборудованием. Но, благодаря постепенному переходу в обмене данными на единый стандарт EnterpriseData , мы уменьшаем количество уникальных для конкретного решения планов обмена и стараемся использовать единый код обмена данными.
В таком подходе есть одна интересная особенность. Всё решение пишется один раз, в ветке ERP; но бОльшая часть кода, форм, сценариев, отчетов и т.д. используется в четырех решениях, причем весьма разных – ERP внедряется на предприятиях с тысячами пользователей, а УТ Базовая призвана обслуживать индивидуальных предпринимателей. Мы стараемся уделять много внимания юзабилити нашего продукта.
Международный стандарт ISO 9241-11 определяет юзабилити как:
степень, с которой продукт может быть использован определёнными пользователями при определённом контексте использования для достижения определённых целей с должной эффективностью, продуктивностью и удовлетворённостью

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

Особенности разработки

При разработке ERP мы должны всегда помнить, что разрабатываемая функциональность может быть задействована в одном или нескольких производных от ERP решениях (КА, УТ, УТ Базовая). Для легкого включения/выключения функциональности мы широко используем механизм функциональных опций , изначально созданный для таких задач. Функциональные опции позволяют выделить в прикладном решении функциональность, которую можно включать/выключать при внедрении, не изменяя само прикладное решение. Функциональные опции – это параметры настройки решения, флажки, при выключении которых вся связанная с ними функциональность становится недоступной. В первую очередь функциональные опции используются для тонкой настройки программы под нужды конкретного внедрения. В ERP мы задействуем этот механизм (помимо основного его назначения) для «вырезания» из ERP производных конфигураций. Например, в решении ERP есть функциональная опция «Управление предприятием», с ней связана вся функциональность, отвечающая за управление производством - формирование графика производства, учет производственных затрат, соответствующие отчеты и многое другое. Эта опция включена только в решении 1С:ERP и выключена в «производных» решениях КА, УТ, УТ Базовая. А всего в 1С:ERP используется около 600 функциональных опций.
Еще один механизм платформы, облегчающий труд разработчика 1С:ERP – подсистемы . Подсистемы – это способ разбить функциональность решения на блоки; каждый объект в решении (справочник, документ, отчет и т.п.) должен входить хотя бы в одну подсистему. В частности, в решении ERP заведены три подсистемы, облегчающие построение производных от ERP решений:
  1. «Объекты УП, УТ, КА» - объекты, входящие во все прикладные решения: Управление Торговлей, Комплексная Автоматизация, Управление Предприятием (русскоязычное название ERP).
  2. «Объекты УП, КА» - объекты, относящиеся только к конфигурациям Комплексная Автоматизация и ERP.
  3. «Объекты УП» - объекты, относящиеся только к решению ERP
Любой прикладной объект в решении ERP должен относиться ТОЛЬКО К ОДНОЙ из этих трех подсистем. Это условие проверяется при статическом анализе кода решения ERP (см. ниже).

Цифры после запятой

Версия продукта ERP состоит из четырех чисел, разделенных точками. Например - 2.1.3.117.
  • Первое число (редакция) в версии меняется крайне редко (например КА 1.х.х.х и КА 2.х.х.х разделяет почти 8 лет).
  • Второе число (подредакция) меняется примерно раз в год. В версии с новой подредакцией выпускается новая функциональность. Выпуск таких версий часто приурочивается к началу календарного года, чтобы у пользователей было достаточно времени на «переезд» на новую версию.
  • В версиях с новым третьим числом (релиз) развивается существующая функциональность; новый релиз выходит примерно раз в два-три месяца.
  • Версии с обновленным четвертым числом (исправительные сборки) содержат в себе только исправления ошибок и обновления для соответствия текущему законодательству. Выходят каждые две недели.
Единовременно у нас в разработке могут находиться до 3 версий продукта, например:
  1. 2.1.3.X – Поддерживаемый релиз предыдущей подредакции. Будет выпускаться до конца 2016 года. В этой версии идет только исправление ошибок и правки для соответствия текущему законодательству.
  2. 2.2.1.X – Текущий релиз текущей подредакции. В нем новая функциональность подредакции. Для него до выпуска релиза 2.2.2.X, будут выпускаться исправительные сборки.
  3. 2.2.2.X – Развитие функциональности текущей подредакции. Именно этот релиз активно разрабатывается.

Учитывая, что из каждой ветки ERP получаются, помимо ERP, еще 3 решения – КА, УТ и УТ Базовая – получаем 12 версий продуктов, находящихся в 12-ти разных хранилищах.
В ходе разработки мы имеем до 4 горизонтов планирования, например:

  1. 2.1.3 (поддерживается), решаем, какие ошибки правятся, какие проекты, связанные с изменением законодательства, будем реализовывать. Будут реализованы только те изменения, которые вступят в силу в 2016 году. Горизонт – до конца 2016 г.
  2. 2.2.1 (поддерживается) – исправляются «внешние» ошибки + изменения законодательства, вступающие в силу до выхода 2.2.2. Горизонт – до выхода 2.2.2.
  3. 2.2.2 (активно разрабатывается) - исправляются «внешние» ошибки + найденные нами ошибки + реализуется новая функциональность. Горизонт – до выхода 2.2.3
  4. 2.2.3 (планируется). Если проект большой, то он может сразу разрабатываться на эту версию (и не войдёт в предыдущую). Горизонт – до выхода 2.2.4 или до конца 2017 года.

Использование продукта «1С:Система проектирования прикладных решений» в разработке ERP

Как уже рассказывалось, мы в 1С стараемся следовать принципу Eat your own dogfood , используя наши собственные продукты в наших внутренних процедурах. В частности, в разработке ERP мы широко используем продукт «1С:Система проектирования прикладных решений» (сокращенно СППР). СППР, как следует из названия, помогает проектировать прикладные решения на платформе «1С:Предприятие», и позволяет обслуживать задачи полного цикл разработки ПО - сбор требований, контроль изменений, документирование, баг-трекинг и т.д.
СППР позволяет создавать элементы двух типов – ошибки (которые должны быть исправлены) и требования (запросы на новую функциональность). С ошибками все более-менее ясно, рассмотрим создание нового требования.
Поводом для создания требования может быть:
  1. Запрос от партнера или клиента. Такие запросы мы собираем, в частности, на партнерских семинарах; путем голосования среди партнеров мы выделяем наиболее приоритетные из них.
  2. Запрос может возникнуть в ходе пилотного проекта по внедрению новой версии в том случае, если у клиента возникло важное для него пожелание.
  3. Запрос от нашей службы техподдержки (точнее, запрос от партнера или клиента, прошедший через нашу техподдержку), запрос с нашего партнерского форума или от нашего аккаунт-менеджера (который сопровождает важного для нас клиента/клиентов).
  4. Запрос от команды разработки платформы 1С:Предприятие. Платформенная команда просит команду разработки ERP (и других типовых конфигураций) использовать новую платформенную функциональность – например, интерфейс Такси , отказ от модальных окон , отказ синхронных вызовов и т.д.
  5. Рефакторинг, оптимизация архитектуры, улучшение юзабилити.

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

Продукт СППР поставляется в составе ERP (но его можно купить и отдельно). Решение ERP может быть запущено в режиме интеграции с СППР; в этом случае на каждой форме будет кнопка «Открыть функциональную модель», при ее нажатии откроется описание функциональности формы в СППР.


Вот, что открывается – это модель рабочего места в IDEF0 :


Можно и наоборот – изучать функциональную модель и из нее открывать формы рабочих мест. Такой режим можно использовать при изучении работы программы.
Важный момент – открывается не СППР, открывается форма внутри ERP, куда подгружаются данные из СППР. Т.е. интеграция «бесшовная» (пользователь ее не видит). Этот прием применяется при интеграции и с другими продуктами. Например, с 1С:Документооборот (можно работать не выходя из ERP с почтой, задачами, бизнес-процессами, которые работают в другой базе).

Как мы разрабатываем ERP: 6 контрольных точек проекта

Итак, решено реализовать новое требование на изменение функциональности. Однотипные требования объединяются в технические проекты. В рамках нового релиза ERP обычно реализуются от 100 до 150 технических проектов, каждом проекте – от одного до нескольких десятков требований. Технический проект заводится в СППР; проект в ходе реализации проходит через 6 контрольных точек, каждая из них фиксируется в СППР.
Немного о делении на команды внутри подразделения ERP. Руководитель команды (тим-лид) участвует в проектировании и, как правило, участвует в разработке. В состав команды также входят обычно тестировщики. Команды разработки статичны, за ними закреплены по нескольку предметных областей. Если проект затрагивает смежные области, на время реализации проекта привлекаются участники соответствующей команды. В проект может быть вовлечена не вся команда.
Ответственный за проект – ведущий разработчик или тим-лид. На его ответственности – контроль процессов:
  • Качественное проектирование, учет всевозможных сценариев, сопряжение со смежными блоками
  • Сроки
  • Качество архитектуры, пользовательского интерфейса
  • Написание справки, оформление проекта, в т.ч. разработку функциональной модели
Точка 1. Открытие проекта
Тим-лид заводит технические проекты в СППР списком на релиз. В каждом проекте расписываются цели, указываются реализуемые требования. Список перед началом работы над релизом обсуждается с руководителем разработки. Собственно при открытии проекта совещаний не проводят – просто проект в СППР посылают на открытие.
Команда проекта приступает к разработке концепции.
Точка 2. Согласование концепции
Для согласования концепции проводится онлайн или офлайн встреча, в которой участвуют ответственный за проект, тим-лид, руководитель разработки, вовлеченные в проект специалисты. Обычно к этому этапу у ответственного за проект готов «крупноблочный» концепт, который дошлифовывается в ходе встречи. Также обсуждаются (и прописываются в СППР) сценарии, описание пользовательского интерфейса. Если требование родилось из запроса партнеров или клиентов, то материалы проекта (концепции, сценарии, UI) могут быть отправлены партнеру/клиенту для оценки решения.
В процессе встречи согласуется трудоемкость создания прототипа (обычно создание прототипа занимает до 5 рабочих дней). Команда приступает к созданию прототипа.
Точка 3. Согласование прототипов
Проводится встреча, в ходе которой рассматриваются готовые прототипы, обсуждаются детали реализации (в частности, какие объекты будут добавляться и изменяться), проверяются гипотезы, утверждаются прототипы форм и т.д. С целью максимально серьезной проверки на юзабилити прототипы запускаются в самом «жестком» режиме – в веб-клиенте, в интерфейсе «Такси», на мониторах с маленьким разрешением.
Функциональная модель проекта в нотации IDEF0 разрабатывается и хранится в СППР.
На этом этапе проектная команда должна как можно точнее оценить трудозатраты на реализацию проекта, поэтому обсуждаются (и документируются в СППР) все аспекты проекта:
  • Согласование правильности описания проекта в СППР (в частности, отслеживается, что все задачи на предыдущих контрольных точках проекта выполнены).
  • Какие новые объекты метаданных (справочники, документы и т.д.) будут добавляться в решение
  • Какие изменения будут делаться в уже существующих объектах метаданных
  • Согласование планов обменов данными с другими решениями(будут ли новые/измененные данные участвовать в обмене данными с другими приложениями, и если да – то как именно)
Если трудозатраты всех устраивают – проводится презентация (на основе материалов по проекту из СППР) всего, что сделано по проекту, с целью выявить как можно больше нюансов перед началом разработки.
И начинается разработка!
Точка 4. Согласование разработанного решения
Решение разработано, подготовлена презентация (в формате PowerPoint). Часто проводится очное совещание с «живым» показом разработанного решения.
Если проект публичный (опубликован в доступном партнерам списке планов на сайте 1С), то презентация выкладывается на партнерском форуме в разделе ERP, чтобы все заинтересованные партнеры могли ознакомиться и высказать свои замечания.
Точка 5. Тестирование и аудит проекта
По окончании основной разработки проводится прогон ручных функциональных тестов. Тестеры как полноценные члены команды участвует во всех контрольных точках проекта и имеет понимание функциональности проекта и сценариев работы. Тестеры также оценивают новую функциональность на соответствие нашим стандартам юзабилити. Эти стандарты (включают в себя стандарты кодирования и стандарты разработки интерфейса) публикуются в доступном партнерам и зарегистрированным пользователям ресурсе на сайте 1С.
Код проекта проходит процедуру code review . Code review в ERP проводят участники другой проектной группы; code review – обязанность, которую все разработчики команды ERP несут по очереди. В случае если в коде найдены проблемы, в СППР регистрируются ошибки, которые должны быть исправлены до прохождения точки 5.
Проводится проверка обновления на новую версию с предыдущей (последней выпущенной на данный момент сборкой).
Итак, проект готов, тесты пройдены, время заливать код в основное хранилище (до этого вся разработка ведется в отдельном хранилище технического проекта). На этом этапе также заканчивается написание справочных материалов по новой функциональности (справка хранится в СППР).
По окончании этапа (тесты пройдены и готовы справочные материалы) проект заливается в основное хранилище; после этого проводится выборочное регрессионное тестирование в смежных областях – мы должны убедиться, что не сломали ничего из существующей функциональности.
Точка 6. Окончание проекта
Закрываем проект в СППР – присваиваем ему статус «Выполнено».

Выпуск версии

Примерно за месяц до выпуска нового релиза накладывается мораторий на заливку новых проектов в основное хранилище (разработка в хранилищах тех. проектов продолжается); те проекты, которые не успели закончиться к этому времени, переносятся на другую версию.
В течение этого месяца проводится регрессионное тестирование; вносить изменения в код разрешено только для исправления привнесенных в этом релизе ошибок. Непривнесенные ошибки (те, которые воспроизводились и на предыдущих релизах), к началу регрессионного тестирования обычно почти все исправлены; те же ошибки, что остались, переносятся на следующий релиз. Основная задача регрессионного тестирования – гарантировать неухудшение качества продукта.
В качестве баг-трекера, как уже говорилось, используется все тот же СППР.

Исправительные сборки

Каждые две недели мы выпускаем исправительные сборки к версиям; на сегодня это 2.1.3.x, после выхода релиза 2.2.1 будут выпускаться 2 исправительные сборки - 2.1.3.x и 2.2.1.х. От регистрации ошибки до появления ее в исправительном релизе у нас проходит менее двух недель; наша статистика показывает, что среднее время от обращения клиента с ошибкой в ERP в поддержку до выхода ее исправления в исправительной сборке на сегодня – 9 дней.

Разветвленная разработка



В групповой работе над ERP мы стараемся использовать средства, предоставляемые нам платформой 1С:Предприятие. Конфигурации хранятся в хранилище конфигураций , при чекине новой функциональности в ветки используется стандартный механизм поставки и поддержки . Все операции автоматизируются по максимуму; в случае, если объекты менялись только на стороне разработчика – объединение кода происходит без участия программиста. Если для объединения исходников нужно вмешательство разработчика, обычно мы используем встроенные возможности платформы. Но есть также возможность вызова сторонних инструментов сравнения/объединения из инструментов платформы (например, или Araxis). Кстати, эта фича – вызова сторонних инструментов сравнения/объединения - была добавлена в платформу по запросу именно команды разработки ERP.

Разное

При разработке новой функциональности мы используем ту версию платформы, которая будет доступна на момент выхода новой версии ERP (на сегодня это платформа 8.3.8).
Это возможно благодаря тому, что в платформе очень активно используется режим поддержки совместимости с предыдущими версиями. Как только появляется новая платформа – мы на нее переходим, а вот отключение режима совместимости происходит далеко не сразу. Это связано с тремя причинами:
  1. Мы хотим меньше «шокировать» пользователей, поэтому отключение режима совместимости мы стараемся делать в «тихие» периоды, а не тогда, когда все пользователи, например, сдают отчетность.
  2. Обычно отключение совместимости связано с разного объема переделками конфигурации. Их нужно планировать, для их реализации нужно время.
  3. ERP – это конфигурация, в состав которой входит на настоящий момент 10 библиотек. Отключать совместимость можно только тогда, когда все библиотеки тоже это сделают.
О библиотеках можно написать отдельно. Библиотека – это специальным образом написанная конфигурация, которая включает в себя функциональность, которая должна одинаковым образом работать в различных конечных наших прикладных решениях. Интеграция библиотек осуществляется с помощью уже упомянутого механизма платформы «Поставка конфигураций». Библиотеки разделяются на публикуемые (те, которые мы публикуем, и которые могут использовать сторонние разработчики в своих прикладных решениях) и внутренние (которые мы отдельно не публикуем – только в составе прикладных решений). Подавляющее количество библиотек являются публикуемыми.
В состав ERP входят 10 библиотек, разрабатываемых другими командами. Их код не меняется разработчиками команды ERP.

Список библиотек

  1. Библиотека стандартных подсистем .
    Базовая функциональность – права доступа, печать, почта и т.д. Входит в состав большинства прикладных решений.
  2. в ERP
  3. Библиотека интернет-поддержки пользователей.
    Информирование о выходе обновлений, обращение в тех. поддержку, скачивание и установка обновлений
  4. Библиотека электронного документооборота .
    Обмен электронными документами с контрагентами (в т.ч. юридически значимый ЭДО), DirectBank (прямой обмен с банками), обмен с сайтами (CMS).
  5. Библиотека интеграции с ЕГАИС.
    Обмен с Единой Государственной Автоматизированной Информационной Системой для учета операций по розничному обороту алкоголя.
  6. Библиотека регламентированного учета.
    «Кусочек» 1С:Бухгалтерии в ERP. Вообще регламентированный учет в ERP в методической части (за некоторыми небольшим исключениями) сходен с 1С:Бухгалтерией, но его реализация отличается и делается независимо. Из 1С:Бухгалтерии мы берем бухгалтерские отчеты и отчетность по некоторым налогам.

Как мы тестируем 1С:ERP

После создания из ERP трех решений - КА, УТ, УТ Базовая - для проверки корректности всех четырех решений мы проводим статический и динамический анализ полученных конфигураций.
Частичный статический анализ проводится каждый раз после того, как из хранилища ERP создаются конфигурации КА, УТ, УТ базовая и заливаются в собственные хранилища (этот процесс проходит два раза в день).
Более развернутый статический анализ делается с помощью конфигурации 1С:Автоматическая Проверка Конфигураций (1С:АПК). В частности, 1С:АПК проверяет:

  • Состав ролей. Например, проверяется, что права на чтение всех констант включены в роль «Базовые права».
  • Соответствие кода принятым стандартам. Для большого количества стандартов прикладной разработки (которых у нас несколько сотен) написаны процедуры анализа кода на предмет их соблюдения. Например, что не используются полные соединения в запросах, или, что правильно локализованы строки, которые отображаются в интерфейсе.
  • Специфические проверки, связанные с особенностями разработки ERP
    Например, проверка, что каждый прикладной объект входит только в одну из подсистем «Объекты УТ, КА, УП», «Объекты КА, УП» или «Объекты УП»
Динамический анализ кода включает в себя, в частности, регрессионное тестирование , в рамках которого прогоняются следующие операции (а результаты операций сверяются с последним предыдущим успешным тестированием):
  • Открытие всех форм
  • Обмен данными с другими прикладными решениями (например, с 1С:Бухгалтерия Предприятия)
  • Отражение проведенных документов в учете. Проверяется, что после проведения документа в эталонной базе результат отражения его в учете не поменялся.
  • И др.
Для регрессионного тестирования мы используем от 10 до 20 баз данных, различного размера (от 15 Гб до 70 Гб) и разной специфики наполнения.
На этих же базах тестируем обновление на новую версию с предыдущей, с целью убедиться, что обновление проходит а) корректно и б) за разумное время.
При обновлении базы 1С есть два существенных этапа:
  1. Основное время - обновление данных в многопользовательском режиме. Прикладное решение готовит данные к обновлению в фоне, пользователи могут продолжать работать с системой, но быстродействие системы может быть снижено и часть функций могут работать ограниченно. Обычно обновление на новую версию проводят в выходные (когда активность пользователей минимальна).
  2. Минимальное время - обновление в монопольном режиме. Когда все данные подготовлены в фоновом режиме, наступает время изменения структуры БД. Для этого база данных переводится в монопольный режим, когда работа пользователей с системой невозможна. Скорость обновления крайне важна для наших пользователей.
В ближайших планах – расширение зоны автотестирования с целью покрыть ими максимальное количество сценариев.

Заключение

ERP – один из самых масштабных наших продуктов. Мы стараемся использовать в его разработке современные и передовые методики, а также создавать новые методики и инструменты, чтобы, с одной стороны, быстро его развивать, а с другой стороны - обеспечивать высокое качество разработанного решения.

Теги:

Добавить метки

Объект 1с "Функциональные опции" - предназначены для выделения в прикладном решении функциональности, которую можно включать (выключать) при внедрении, не изменяя само (совместно с Подсистемами формируют интерфейс тонкого клиента 1С). Являются частью механизма функциональных опций.

Механизм функциональных опций включает в себя два объектов метаданных:

  1. Функциональная опция;
  2. Параметры функциональных опций.

Подробнее

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

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

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

Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.

[свернуть]

Функциональные опции могут оказывать влияние:

  1. на пользовательский интерфейс:
    • глобальный ;
    • реквизиты (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений );
    • команды формы;
  2. на отчеты, реализованные с помощью системы компоновки данных;
  3. на алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений (см., например, ).

ВНИМАНИЕ! Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).

Свойства Функциональных опций 1С

  • Хранение - поле, в котором необходимо выбирать объект с типом булево. Как правило, используются константы.
  • при получении - флаг отвечает за возможность получения значения функциональной опции в привилегированном режиме.
  • Состав - список объектов и реквизитов объектов, видимость которых включается/выключается при выключении/выключении функциональной опции (будет управляться с помощью управляемой формы).

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

Особенности использования Функциональных опций 1С:

  1. Функциональные опции могут иметь значения произвольного типа (не обязательно Булево ).
  2. Добавляя новую константу для использования функциональной опции, не забудьте включить ее в соответствующую подсистему и назначить на нее права.
  3. Работа с функциональными опциями доступна из встроенного языка, благодаря чему разработчик может создавать собственные алгоритмы значений функциональных опций.
  4. Команда командного интерфейса будет исключена из командного интерфейса в случае, если функциональной опцией отключен:
    • реквизит, являющийся параметром команды;
    • тип параметра команды (если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра).

ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных: все таблицы и поля присутствуют в БД независимо от состояния функциональных опций.

Влияние функциональных опций на реквизиты и команды формы:

  1. управляемой формы типа <Вид>Объект (СправочникОбъект , ДокументОбъект и т. д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект . Анализируются только те функциональные опции, которые не имеют параметров.
  2. Основной реквизит управляемой формы типа ДинамическийСписок будет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров.
  3. Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
  4. Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
  5. В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс() .

ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.

Создание параметра функциональных опций

Параметр функциональной опции создается с помощью объекта конфигурации 1С "Параметры функциональных опций".

[свернуть]

Это можно сделать в окне конфигурации, добавив новый объект.

Свойства параметра функциональных опций:

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

ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.

С выходом платформы «1С:Предприятие 8.2» в дереве конфигурациипоявился новый объект – "Функциональные опции" . Он активно применяется во всех типовых конфигурациях, основанных на управляемых формах, и служит для упрощения процесса отображения отдельных реквизитов, объектов в интерфейсе. Например, в вашей конфигурации есть модуль для обмена с внешним веб-сервисов. Это модуль задействует ряд реквизитов в документах, регистрах и отдельные компоненты в подсистемах. Модуль является опциональным и необходим не каждой компании. Логично, раз модуль нужен не всем, то и отображать вся связанные с ним элементы/поля тоже нужно не всегда.

В старых версиях платформы, решение подобных задач требовало написание дополнительного кода, который приходилось вызывать во всех зависимых участках. Например, если нам требовались скрыть определенные реквизиты формы (в зависимости от значения настройки), то требовалось вызывать соответствующий код при открытии формы. Это было не очень удобно и в большинстве случаев разработчики на подобные вещи забивали.

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

Функциональные опции призваны решить эту и многие другие сложности, связанные с отображением элементов интерфейса/состава доступных объектов в пользовательском интерфейсе. В этой заметке я не буду рассматривать примеры использования основного назначения функциональных опций, а обращу внимание на применение их не совсем стандартным образом. Возможно, он знаком многим продвинутым разработчикам, но я к такому способу пришел совершенно случайно. Точней он был навеян практикой программирования на JavaScript.

Кейс №1: функциональная опция как обертка над другими объектами

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

Функциональная опция может решить эту проблему более элегантно. Идея в следующем: создаем константу (например, ). Права на нее не назначаем. Создаем одноименную функциональную опцию и указываем в свойстве «Хранение» указываем константу «ВозможностьСохраненияДанных» . Также устанавливаем флаг «Привилегированный режим при получении» .

Все, теперь в любом месте кода, где требуется обратиться к константе пишем так:

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

Кейс №2. Дополнительный уровень абстракции

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

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

Константы.ВозможностьСохраненияДанных.Получить();

Находим все вызовы и заменяем на путь к новому объекту хранения. Согласитесь, это довольно неудобно. Если мы воспользовались предыдущем кейсом (применение функциональной опции в качестве обертки), то для «переезда» нам потребуется только зайти в свойства функциональной опции и изменить свойство «Хранение» . Например, указать там «Справочник» или «Регистр сведений» . Никаких игр с глобальным поиском не потребуется. Код обращения к значению константы через функциональную опцию останется прежним:

ПолучитьФункциональнуюОпцию("ВозможностьСохраненияДанных");

Практически все типовые решения на платформе 1С:Предприятие 8.x используют механизм функциональных опций. Он позволяет управлять функциональностью конфигурации блочно.

Так, например, опция "Использование внутренних заказов" (см. скриншот справа) позволяет сделать доступным этот документ для использования в режиме "1С:Предприятие" пользователю, а также включает отдельные ветки алгоритмов, связанных с данным функционалом.

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

Принцип работы

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

В ветке конфигурации "Общие->Функциональные опции" мы можем создать новый объект или посмотреть свойства уже созданных опций. В тестовой конфигурации создадим функциональную опцию "ВключитьВажность". В самом начале, когда еще не была произведена настройка объекта, окно списка его свойств будет выглядеть следующим образом:

Свойства "Имя" и "Синоним" имеют стандартное назначение. Особый интерес вызывают настройки "Хранение" и "Состав".

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

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

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

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

Пример использования

В нашей тестовой конфигурации создадим перечисление "Важность", а также константу

"ВключитьВажность". Созданные объекты представлены на следующем скриншоте.

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


В тестовом документе будут два реквизита:
  • "Комментарий" с типом "Строка".
  • "Важность" с типом "ПеречислениеСсылка.Важность".

В состав функциональной опции добавим реквизит документа "Важность" и далее рассмотрим поведение платформы в пользовательском режиме.

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

Чтобы включить использование реквизита "Важность" необходимо установить значение константы "ВключитьВажность" в ИСТИНА. Тогда форма изменится следующим образом:

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

Рассмотрим несколько интересных моментов работы данного объекта конфигурации:

1. Настройка функциональных опций практически никак не влияет на SQL-запросы, формируемых платформой.

Например, при открытии документа с отключенной функциональной опцией, платформа в любом случае в запросе получает значение этого реквизита. На следующем скриншоте приведены SQL-запросы, формируемых с включенной и отключенной опцией.

2. Элемент формы "Важность" на форме, вне зависимости от значения функциональной опции, всегда имеет значения для свойств "Видимость" и "Доступность" равными ИСТИНА.

Действительно, как при создании формы на сервере, так и при открытии формы, а также при дальнейшей работе с ней, свойства "Видимость" и "Доступность" не устанавливаются в ЛОЖЬ платформой автоматически. Вероятно, 1С:Предприятие 8.x делает это "за кулисами".

3. Платформа для получения значения функциональной опции формирует SQL-запрос к СУБД в соответствии с объектом хранения, т.е. к константе. В одной из предыдущих статей мы уже говорили о построении SQL-запросов к константам и способе их хранения в базе данных.


В нашем примере платформа формирует следующий SQL-запрос:

Что касается момента получения значения функциональной опции, то платформа руководствуется следующим принципом: первое получение значения функциональной опции происходит при обращению к объекту/реквизиту, входящим в ее состав. В дальнейшем платформа использует кэшируемое значение до тех пор, пока не будет изменено значение объекта, который хранит это значение (в нашем примере - константы "ВключитьВажность") или перезапущен сеанс пользователя. Значение функциональной опции кэшируется в рамках отдельного сеанса.


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

Вывод

Функциональные опции неотъемлемая часть практически любого тиражного решения на платформе 1С:Предприятие 8.x. Именно благодаря этому механизму можно создавать конфигурации с блочным построением функционала, который с легкостью включается/отключается при настройке программы. При этом возможности механизма можно расширить за счет использования параметров функциональных опций , но это уже тема для другой статьи.

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

Файлы для загрузки:

Публикации по теме