Как обновить конфигурацию из хранилища 1с

Обновлено: 08.07.2024

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

В итоге я поступил так, как привык в таких случаях. Открыл PowerShell ISE, посмотрел примеры кода в интернетах, которые реализован на VBS, либо CMD, либо PS и накарябал своего кодового "франкинштейна", который работает так как надо*, и при этом не требует тратить временные ресурсы на повторную разработку. Этот кусок кода и выкладываю, чтобы каждый желающий мог посмотреть и если подходит взять. При необходимости не сложно будет адаптировать под свои нужды и запустить в работу, не тратя время на долгие поиски и изучение мануалов, чтобы автоматизировать простую по своей сути операцию.

И так. Что делают эти вот буквы, что под спойлером ниже:
0. Если в первую функцию передать флаг "выкинуть конфигуратор" - ЛОЖЬ, то скрипт не будет выкидывать пользователей и блокировать базу, если запущен конфигуратор. Если истина, то прибьет сеанс с конфигуратором тоже.
1. Подключается к консоли управления серверами 1С через com, находит по имени нужную базу данных, устанавливает на нее блокировку сеансов и блокировку регламентных заданий, пароль UС;
2. Завершает сеансы всех пользователей, если требуется;
3. Через конфигуратор получает все данные из хранилища, для обновления;
4. Обновляет конфигурацию из хранилища;
5. Выключает блокировку регламентных заданий и блокировку сеансов;
6. Обо всем этом пишет в лог (что-то пишет))).

*-когда я пишу, что работает так как надо, то надо понимать, что это самое "надо" исходит из той задачи которую решал я. У вас может быть сходная задача но не по всем параметрам повторять мою, и это решение может на 100% не подойти, но поможет разобраться с вашей задачей, сэкономив время.

Код на PowerShell (в приложенном файле тоже самое, поэтому просто скопируйте листинг себе, если нужен): Код старался комментировать максимально подробно, чтобы все было понятно.

При создании, были пришиты части тел от статей: Параметры командной строки 1С, Управление сервером приложений 1С с помощью PowerShell и куча информации по самому PowerShell из интернетов.

В файле ровно то же самое, что под спойлером!

UPD: Не выдержала душа поэта. Написал скрипт на AutoIT. В архиве приложенном ниже лежит скрипт для 32 и 64 битных систем и пример файла параметров. Все протестировал. В целом выполнение с PS скриптом схожее, сам PS скрипт тоже в архиве.

UPD (21.12.2020): Доработал скрипт Autoit, теперь он ставит блокировку базы в периоде от начала работы скрипта, до завершения, которое вычисляется путем прибавления минут к дате начала, указывается в ini файле (по умолчанию 30 минут). После того, как скрипт отработает и снимет блокировки, время ставит от 1 января 2000 года, до 31 декабря 2999 года (пустую дату подкидывать не хочет, поэтому если кто-то упрется в дату, то напишите и я ее подвину дальше).

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

Хранилище конфигураций 1С по своей сути является системой контроля версий. Главным удобством хранилища для обновления баз является возможность пакетного запуска 1С и обновления конфигурации из этого хранилища. Как это выглядит на деле: для каждой поддерживаемой конфигурации создается хранилище. Эти хранилища обновляются штатными методами по факту выхода новых релизов от поставщиков. Чтобы обновить "боевую" базу 1С из этого хранилища требуется последовательно запустить 1С в режиме конфигуратора с ключами

1) ConfigurationRepositoryF(" Путь к хранилищу ") /ConfigurationRepositoryN(" Пользователь хранилища ") /ConfigurationRepositoryP(" Пароль пользователя хранилища ") /ConfigurationRepositoryUpdateCfg

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

эта команда выполняет обновление конфигурации базы данных. Тут нужно понимать, что системе наверняка потребуется изменять структуру таблиц БД, поэтому доступ должен быть монопольным. Как этого добиться? Все теми же ключами запуска

1) /CЗавершитьРаботуПользователей - для того, чтобы отключить всех пользователей (тут присутствуют известные проблемы с модальными окнами и запросами на выход из системы)

2) /CРазрешитьРаботуПользователей /UCКодРазрешения - для разрешения работы.

ВАЖНО! Если используется запрет на работу пользователей, то при обновлении базы необходимо добавлять ключ /UCКодРазрешения.

Итого, для обновления мы получаем всего 4 последовательных операции:

ENTERPISE /F"Путь" /N"Юзер" /P"Пароль" /CЗавершитьРаботуПользователей

DESIGNER /F"Путь" /N"Юзер" /P"Пароль" /ConfigurationRepositoryF" Путь к хранилищу " /ConfigurationRepositoryN" Пользователь хранилища " /ConfigurationRepositoryP" Пароль пользователя хранилища " /ConfigurationRepositoryUpdateCfg /UCКодРазрешения

DESIGNER /F"Путь" /N"Юзер" /P"Пароль" /UpdateDBCfg /UCКодРазрешения

ENTERPISE /F"Путь" /N"Юзер" /P"Пароль" /CРазрешитьРаботуПользователей /UCКодРазрешения

Загоняем в цикл по своим базам и радуемся жизни.

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

  1. Пытаемся завершить/разрешить работу пользователей в режиме конфигуратора
  2. Пытаемся обновить конфигурацию, к которой запрещен доступ, не используя /UCКодРазрешения
  3. Забываем, что лучший штатный механизм для получения монопольного режима - телефон

Конечно, статья не станет откровением для гуру, но новичкам вполне может пригодиться.

UPD: Типовая БП 2.0.12.2 обновляется до 2.0.42.6 за 6.5 минут (замер производился без данных в базе)

Рассмотрим настройки и работу с хранилищем конфигурации подробнее.

Внешний вид хранилища

Как работает хранилище 1С

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

Захватить можно как объект целиком (рекурсивно), так и отдельно объект или формы.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

Как создать хранилище 1С

Создание хранилища

Как подключиться к хранилищу 1С

Подключение к хранилищу 1С

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

Администрирование хранилища конфигурации 1С

Администрирование хранилища

Как просмотреть историю хранилища 1С

История изменения объектов

В истории хранилища 1С можно увидеть, когда, кем и что было изменено.

Разработка с хранилищем 1С 8.3

Работу с хранилищем условно можно разделить на основные действия:

    конфигурации из хранилища конфигурации 1С;
  • обновить статусы хранилища 1С;
  • захват в хранилище;
  • помещение в хранилище.

Остановимся подробнее на каждом действии:

Обновить статусы хранилища 1С

Производит получение последних статусов объектов (захвачен или нет).

Обновление конфигурации из хранилища конфигурации 1С

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

Захват в хранилище конфигурации 1С

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

Произвести захват можно, вызвав правой кнопкой контекстное меню у объекта метаданных:

Захват в хранилище 1С

В открывшемся окне можно установить некоторые настройки:

Объект в хранилище

Помещение в хранилище 1С

Поместить константу в хранилище

Как добавить новый объект в хранилище 1С

Хранилище настроек

Стандартное хранилище настроек платформы 1С

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

  • Записать настройки можно при помощи метода ХранилищеОбщихНастроек.Сохранить().
  • Потом для прочтения нужно использовать ХранилищеОбщихНастроек.Загрузить() с теми же параметрами.
  • Если настройка стала не актуальной, её можно удалить методом ХранилищеОбщихНастроек.Удалить().
  • Также в разрезе объекта можно получить список сохраненных настроек с помощью метода ХранилищеОбщихНастроек.ПолучитьСписок().

Сохраненные настройки хранятся в отдельной сводной таблице БД.

Хранилище настроек, создаваемое в конфигураторе

Хранилище настроек может создать и сам разработчик в конфигураторе 1С:

Основные настройки

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

Хранилища в свойствах конфигурации

Создание своих настроек может понадобиться в том случае, если:

  • необходима миграции настроек между базами данных;
  • необходим ссылочный контроль данных настроек.

Использование хранилищ настроек в отчетах и обработках 1С

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

Настройки для отчетов

Флаг Сохраняемые данные данные позволяет автоматически сохранить значение при закрытии обработки:

Флаг сохраняемые данные

Читайте также: