Правила жёлтого напильника. Часть 2

11.08.20

Разработка - Механизмы типовых конфигураций

Вторая часть правил внесения изменений в типовые конфигурации 1С

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

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

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

Добавление новых подписок на события

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

Первое, что стоит отметить – имя подписки. Оно должно отражать имя события и примерный состав объектов, включенных в ней. Если вы делаете универсальную подписку-шлюз для обработки события «ПриЗаписи» у документов, то нормально будет дать ей имя «ПриЗаписиДокумента». В этом случае человек, ищущий подписки на определенные события, без труда её найдёт. Равно как и человек, который хочет найти все подписки на документы.

Включать в имя подписки функциональное назначение стоит только в том случае, если вы делаете прям какой-то механизм, рассчитанный на множество типов объектов, и являющийся более или менее обособленным. Например, какое-то своё версионирование, проверку при записи или автозаполнение реквизитов. В этом случае будет нормально назвать подписку типа «ПриЗаписиДокументовВерсионированиеСережино» - тут и событие отражено, и тип объектов, и назначение механизма.

Типичная ошибка новичков – считать важным механизмом свою доработку конкретного объекта, вроде стирания комментария при копировании заказа покупателя. Новичок в таком случае создает подписку вроде «ПриКопированииЗаказаПокупателяСтираниеКомментарияСережаПридумал», которая обрабатывает объекты одного типа – просто стирает комментарий.

Для таких мелких доработок лучше использовать подписки-шлюзы, или подписки-кейсы (case, оператор выбора во многих языках программирования). Суть проста – делаете подписку вроде «ПередЗаписьюДокумента», а в обработчике пишете разветвление выполняемого кода в зависимости от типа объекта. Процедуры для обработки объектов конкретных типов лучше оформлять отдельно, не создавая дикий код в обработчике подписки – пусть он остаётся шлюзом, роль которого – перенаправление выполнения кода. Сначала там будет один объект и один кусок кода, потом придёт следующий разработчик (или вы, со следующей задачей), расширит тип объектов подписки, добавит свою процедуру.

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

Изменение типовых подписок

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

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

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

Как устроены типовые роли

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

В старых конфигурациях, вроде УПП или УТ 10.3, когда еще не было профилей полномочий, их функцию выполняли роли. Роль содержала в себе практически всё, что нужно для работы человека на определенной должности. Например, были роли МенеджерПоЗакупкам, ЗаведующийУчетом, Кладовщик, Расчетчик и т.д.

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

Прелесть такого подхода в том, что ролей очень мало – буквально пара десятков. Недостаток вытекает из преимущества – ролей слишком мало. На реальном внедрении типовые роли в 99% случаях не позволяют настроить права человека так, как это требуется. Поэтому, в 99% случаев роли приходится дорабатывать.

Когда придумали профили (справочник, содержащий перечень ролей, и назначаемый пользователю или группе), то всё стало совсем странно. У нас есть роли вроде МенеджерПоПродажам, и появляется профиль МенеджерПоПродажам, который содержит одну якорную роль, и несколько мелких вспомогательных, вроде права на использование ЭДО или электронной почты. Вроде как профиль в профиле.

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

Например, используются роли вроде ДобавлениеИзменениеЗонДоставки, ДобавлениеИзменениеОжидаемыхПоступленийДенежныхСредств, ДобавлениеИзменениеПриказовНаДоплату и даже ИспользованиеОбработкиФормированиеЗаказовНаПередачуВПроизводствоПоПлану. Как видите, каждая роль даёт право использования очень ограниченного перечня объектов, вплоть до одной обработки.

По сравнению со старым подходом, количество ролей увеличилось в десятки раз. Например, знаете, сколько ролей в ERP 2.4.8.82? 1316. Количество ролей как бы говорит: не лезь ко мне, развлекайся в другом месте.

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

Собственно, вот и вся разница. Раньше было мало ролей с мощным содержанием, сейчас делают сотни атомарных ролей.

Доработка старых ролей

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

В старые времена, когда УПП и УТ 10.3 еще обновлялись, подход был такой. Если хочешь кастомизировать роль менеджера по продажам под конкретное предприятие – копируй типовую и исправляй, а типовую не трожь. Потом, правда, уже никак нормально не разберешься, что изменилось в типовой роли при обновлении, но хоть замочки целы. Где что перестало работать – там и ищи разницу.

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

Поэтому, если вам нужно доработать права доступа в старой конфигурации, думать особо не надо.

Если вы добавили новую, отдельностояющую функциональность, вроде заявок на заправку картриджей – создавайте новые роли для обслуживания прав доступа на неё.

Если вам нужно расширить права типовой роли, то добавляйте новую роль, типа ДопПраваМенеджераПоПродажам, и расширяйте права там. Убедитесь только, что скопированной роли еще нет – наверняка кто-то до вас этим озаботился.

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

Доработка ролей в современных конфигурациях

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

Если же вам надо изменить права существующей типовой роли, используйте расширения.

Доработка ролей через расширения

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

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

Настоящие же чудеса начинаются, когда вам надо изменить значение конкретного права. Например, забрать право на добавление элементов справочника, оставив только изменение. Нет ничего проще – тащите роль в расширение вместе с объектом, и просто снимайте галку (добавление или интерактивное добавление, что правильнее под задачу).

Главная фишка – все остальные права останутся на месте. В расширении они будут помечены затененными флажками – это типа наследование. Только вдумайтесь: наследование в 1С. И не чего-то там, а прав в ролях.

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

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

См. также

Программная инженерия Управление проектом Архитектура Мероприятия Бизнес-аналитик Руководитель проекта Россия Платные (руб)

Практическая конференция для аналитиков и руководителей проектов 1С. 30 мая - 1 июня 2024 г. Санкт-Петербург, отель Cosmos Saint-Petersburg Pribaltiyskaya Hotel, ул. Кораблестроителей 14

50000 руб.

27.05.2023    22440    671    0    

310

Архитектура решений Программист Платформа 1С v8.3 Бесплатно (free)

В статье расскажу про относительно уникальное явление на рынке. EmplDos - полноценный сервис, который в качестве Backend использует платформу 1С. Речь пойдёт не только о технической и архитектурной стороне вопроса, а ещё и о всех трудностях и граблях, которые пришлось и до сих пор приходится преодолевать на пути к успеху.

14.10.2024    3953    0    comol    28    

28

Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    4885    Serg2000mr    32    

108

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

07.02.2024    4042    YA_418728146    11    

53

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

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

28.12.2023    6420    mrXoxot    11    

112

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

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

08.11.2023    12718    ids79    25    

81

Архитектура решений Программист Бесплатно (free)

Рассмотрим применение архитектурной проверки задач в процессе разработки.

30.10.2023    5593    0    ivanov660    10    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. genayo 11.08.20 13:59 Сейчас в теме
А как у вас используется сценарное/модульное тестирование расскажите?
YPermitin; +1 Ответить
2. 1c-intelligence 12849 11.08.20 14:01 Сейчас в теме
(1) у нас франч, отдел сопровождения.
YPermitin; +1 Ответить
3. muskul 12.08.20 04:02 Сейчас в теме
Все таки права в ЕРП, УТ придумывали какие то извращенцы.
Free1CforAll; ice-net; A1WEB; +3 Ответить
11. Free1CforAll 14.08.20 17:39 Сейчас в теме
4. A1WEB 59 12.08.20 09:16 Сейчас в теме
Вода, вода, а в конце необоснованное утверждение "в современных типовых конфигурациях доработка ролей – одно сплошное удовольствие, без особого риска". Занавес.
horsgroup; Дмитрий74Чел; CodeNull; al_zzz; YanTsys; +5 Ответить
5. Stim213 416 12.08.20 13:10 Сейчас в теме
"не трогайте типовые роли в современных конфигурациях, создавайте свои"

вот не согласился бы! В типовой БП видимость элементов на форме документов сделана через роли. т.е. в настройке видимости элемента формы выбраны галочками типовые роли типа "ДобавлениеИзменениеДанныхБухгалтерии". Когда добавляешь свою роль, то, чтобы этот элемент был по-прежнему виден бухгалтеру, нужно снимать формы документов с поддержки и править настройку их видимости, добавляя свою новую роль.
Поэтому изменения в роли проще сделать в типовой роли.
10. TimurD 6 13.08.20 10:56 Сейчас в теме
(5) Каждому свои тапки. Не надо все мерить одной линейкой. В Вашем случае лучше доработать роль типовую, в других создать свою. Здесь главное без фанатизма, найти золотую середину. Не всегда есть универсальные решения, я бы сказал почти ни когда их нет. Все индивидуально.
6. stepan_s 13.08.20 05:57 Сейчас в теме
про наследование ролей с использованием расширений это документировано или фича?
Если документально это не описано, есть вероятность потери такого функционала в одном из обновлений платформы.
Не находите?
Я бы опасался недокументированные вещи в букварь вносить. :) 1С не настолько стабильна в своих идеях разработки :)
7. пользователь 13.08.20 06:44
Сообщение было скрыто модератором.
...
8. 1c-intelligence 12849 13.08.20 06:45 Сейчас в теме
(6) есть на ИТС, ссылку ИС не пропускает.
9. stepan_s 13.08.20 10:13 Сейчас в теме
(8) Ок, просто я не встречал.
12. Дмитрий74Чел 239 24.08.20 11:05 Сейчас в теме
(8) с каких это пор ИС не пропускает ссылки на ИТС?! Бред.
14. 1c-intelligence 12849 10.09.20 06:02 Сейчас в теме
13. Aleksandr_prof 197 09.09.20 20:20 Сейчас в теме
Полезная статья. А где же новые статьи? Где-то у вас читал ваш прогноз о попытках выпускать статьи еженедельно =)
Оставьте свое сообщение