Каталог решений - Хранилище конфигурации: не очевидные особенности групповой разработки

Хранилище конфигурации: не очевидные особенности групповой разработки

Хранилище конфигурации: не очевидные особенности групповой разработки

В наличии

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

Категория:

Описание

Введение

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

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

Базовый порядок работы

Итак, сначала вкратце опишу базовый порядок работы с хранилищем, который используем мы:

  • Рабочая база подключена к хранилищу;
  • Для каждого разработчика создается отдельная копия;
  • Пользователей хранилища мы называем по имени базы на 1с сервере. Пароль всегда стандартный и одинаковый. Это очень удобно. Совершенно не нужно помнить никаких логинов/паролей. Если ты заходишь в конфигуратор рабочей базы, то вводишь в логин имя рабочей, в копии — имена копий;
  • Рабочая база (желательно ежедневно) в ручном или автоматическом режиме обновляется из хранилища;
  • Если в течение дня пришлось что-то аврально исправлять, то можно внести исправление и в рабочей базе, но сразу поместить изменения в хранилище.


Особенности

Теперь перейдем к вещам, которые обязательно нужно помнить при работе с хранилищем. Многие из них достаточно очевидны. Однако есть и такие, которые мы “словили”.

Хочу обратить внимание, что основное “словили” заключается в особенностях ведения наших проектов, однако полагаю что для многих это также актуально. У нас есть несколько самописных систем, которые уже эксплуатируются, но также активно дорабатываются. В рабочие конфигурации внедряются новые подсистемы, затрагивающие достаточно большой функционал. При этом, как всегда, всем надо всё и быстро, и мы не можем себе позволить по полгода разрабатывать/тестировать функционал где-то в сторонке, а уже потом внедрять его в рабочие системы. Чаще всего проекты  разбиваются на маленькие и средние задания на разработку. Такое задание попадает к разработчику, он в своей копии пишет то, что надо.  Потом, на его же копии всё тестируется, и если все хорошо, через хранилище обновляется рабочая БД. Не будем останавливаться на том, что так разработку вести не очень хорошо, но что, то есть, и уверен у многих похожие ситуации.

Теперь подробнее о таких особенностях:


Правила работы с корнем конфигурации

Правило номер 1: не держите захваченным корень конфигурации!

Тут вроде все достаточно очевидно. Если при разработке необходимо добавить новые объекты, то работаем по следующему алгоритму:

  • Захватываем корень;

  • Добавляем новый объект;

  • Помещаем корень и новый объект;

  • Захватываем объект обратно.

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



Составные поля — зло

Составные поля содержат в себе несколько неожиданностей при работе с хранилищем при нашей схеме разработки. Приведу несколько примеров.

  • Добавление нового документа. Допустим необходимо добавить новый документ, но он, в свою очередь, является регистратором уже существующего регистра. Если мы пойдем по стандартному пути работы с корнем, вот что нас ждет. Мы добавим документ и поместим его в хранилище, т.е. этот документ появится в рабочей базе. В итоге у поля регистратор существующего регистра добавится новый тип документа, на который, я напоминаю, у пользователей нет прав. Таким образом, в рабочей базе пользователи могут словить “Нарушение прав доступа” при чтении таблицы регистра.

  • Приведу другой похожий пример связанный с нумераторами. Добавляем новый документ и устанавливаем ему существующий нумератор, который уже используется в других документах. Затем также бездумно помещаем этот документ в хранилище. Всё, при записи любого документа, которому установлен данный нумератор ловим нарушение прав доступа на все тоже чтение нового документа.

Правило номер 2: думайте о составных полях и правах. Не помещайте объекты в хранилище бездумно!


Правила работы с ролями

С ролями всегда нужно работать аккуратно. Ни в коем случае нельзя надолго захватывать существующую роль. Захватил роль—>добавил права—>поместил обратно. К сожалению, так случается, что работа над какой-либо задачей затягивается и у разработчика в его копии остается много захваченных объектов. Это в принципе не критично, но не в случае с ролями. С большой вероятностью, случится ситуация, при которой другому разработчику понадобится срочно роль.

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

Особо хочу отметить очень не очевидную проблему при работе с ролями вроде ПолныеПрава или Администратор. В общем с любыми ролями, у которых установлен флаг “Устанавливать права для новых объектов”:


Сначала сформулирую правило номер 3: старайтесь никогда не захватывать в хранилище роль ПолныеПрава!

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

Так почему же не надо захватывать такие роли?

Ну, во-первых, в большинстве случаев это просто не нужно.

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


Дополнительные полезные советы:

  • Старайтесь помещать объекты в хранилище не по одному, а “пакетом”: все объекты, измененные в рамках одной задачи.

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

Во-вторых, позволяет проще ориентироваться в версиях конфигурации. Тут я советую также пользоваться метками для версии в хранилище.

  • Пользуйтесь окном “Хранилище конфигурации”. К сожалению, почему-то не все знают о его существовании. А тем не менее, оно очень полезное. Например, в нем можно пакетно захватывать, помещать объекты в хранилище (через ctrl), ставить отборы (Все захваченные и Все захваченные пользователем).

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


  • При какой-либо не удачной попытке подключения к хранилищу (например, Вы случайно нажали отмена при подключении), 1с выдаст Вам вот такой диалог:

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

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


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


has been added to your cart:
Оформление заказа