Обновление через копию 1С: ERP.УХ

18.02.25

База данных - Обновление 1С

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расширение Обновление через копию
.cfe 26,53Kb
0
0 Скачать (10 SM) Купить за 4 550 руб.

Выражаю искреннюю благодарность Каратаеву Олегу Александровичу за оказанную помощь и поддержку в работе!

Введение.

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

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

Файл "Расширение Обновление через копию" адаптирует типовую подсистему "ОбновлениеЧерезКопию". Отдельная установка расширения будет бесполезна. Расширение не гарантирует полную работоспособность, возможно придется дорабатывать под частные особенности базы данных.

Краткое описание. 

В чем суть? 

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

Для чего это нужно?

Функционал используется для сокращения времени недоступности прод базы при обновления релиза вендора. Например, когда долго происходит обновление релиза вендора (5-40... часов).

Стоит ли использовать?

  1. Стоит использовать только когда долгий простой прод базы недопустим, или критически опасен для бизнеса, либо несет большие издержки.
  2. Можно сократить простой прода до 1-2 часов
  3. Но подготовка к такому обновлению займет намного больше времени, от 1 недели до 2х месяцев.
  4. С помощью "Обновления через копию" можно обновить только 1 релиз (можно больше, но потребуется анализ метаданных, что не было критических изменений между релизами, и гарантировать целостность данных).

Используемая информация.

 
 Инструкция механизма "Обновление через копию" от вендора из справки 1С
  • Полезная инструкция настройки обмена из справки 1С. 
 
 Инструкция "Настройки транспорта обмена данными" из справки 1С

Детальное описание механизма и поэтапного выполнения обновления и обмена.

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

1. Подготовка баз данных.

Подготовить базы для обновления:

  1. "update1" - Текущая рабочая прод БД - если это прод стенд, то она уже есть. На тестовом тесте разворачиваем тестовую базу для имитации прода на самом первом этапе.
  2. "update2" - Копия рабочей базы "update1", которую нужно сделать после включения обновления через копию на проде. Делается уже почти в самом конце, когда все готово для обновления.
  3. "test_update" - Копия прода для предварительного обновления релиза и адаптации доработок, и для разработки правил обмена. На выходе должны получить подготовленные CF-конфигурации, которые потом будем загружать в "update2".
  4. КД 3.1 – для разработки правил обмена между релизами.

Аналогичные базы данных нужно развернуть на тестовом стенде для тестирования. Не забываем блокировать рег. задания в кластере 1С и указывать признак "Копия" БД.  

2. Предварительные настройки рабочей БД.

 
 Скрин. Подсистема "ОбновлениеЧерезКопию".

Добавить нужные метаданные в состав подсистемы "ОбновлениеЧерезКопию":

  1. ПланОбмена.ОбновлениеЧерезКопию - в плане обмена отключаем авторегистрацию.
  2. ПодпискаНаСобытие.ОбновлениеЧерезКопиюРегистрация
  3. ПодпискаНаСобытие.ОбновлениеЧерезКопиюРегистрацияКонстанты
  4. ПодпискаНаСобытие.ОбновлениеЧерезКопиюРегистрацияНабора

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

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

Загрузить расширение "ОбновлениеЧерезКопию", в котором исправлены ошибки типового механизма. Проверить расширение на возможность применения. Для расширения рекомендую сделать хранилище, т.к. скорее всего его придется дорабатывать, а применять его нужно как минимум на 3х базах.

3. Предварительное обновление релиза на тестовой базе. 

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

4. Правила обмена Конвертация данных, редакция 3.1 (3.1.5.33).

1. Выгружаем конфигурации текущего релиза (update1) и нового релиза (test_update), и их расширения, которые изменяют структуру метаданных, в файлы.

2. Загружаем файлы конфигураций в КД в две итерации: текущий релиз с его расширениями и новый релиз с его адаптированными расширениями:

 
 Скрин. Загрузка структуры конфигурации из файлов XML.

3. Делаем автогенерацию правил обмена из текущего релиза в новый релиз:

 
 Скрин. Автогенерация правил конвертации XML.

4. Делаем пустые правила обмена корреспондента (обратные), указать источник (новый релиз) и приемник (текущий релиз), и записать:

 
 Скрин. Создание пустых правил конвертации корреспондента. 

5. Делаем пустые правила регистрации, т.к. регистрация выполняется в коде через подписки, указываем конфигурацию, план обмена, наименование:

 
 Скрин. Создание правил регистрации.

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

  1. ExchangeRules.xml – автосгенерированные правил обмена из текущего релиза в новый релиз.
  2. CorrespondentExchangeRules.xml – пустые правила коррексподента.
  3. RegistrationRules.xml – пустые правила регистрации.

Создаем архив .zip с этими файлами (название архива не важно, просто можно называть "ПравилаОбновленияЧерезКопию"). 

5. Обновление через копию.

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

  1. Начало. В Прод БД запустить обновление через копию.
  2. Загрузить правила обмена.
  3. Включить регистрацию данных.
  4. Сделать Копию Прода (бэкап).
  5. Создать новую копию БД, загрузить бэкап прода. Установить запрет сеансов и рег. заданий.
  6. В копию загрузить ранее подготовленные CF и CFE (конфигурацию и расширения), провести обновление копии. 
  7. В обоих базах (рабочей и копии) настроить транспорт обмена через файл.
  8. Заблокировать обе БД рабочую и копию. 
  9. В Рабочей базе запустить РЗ "Обновление через копию (отправка/получение)". Накопленные данные будут выгружены в файл. 
  10. в копии прода запустить РЗ "Обновление через копию (отправка/получение)". Данные будут загружены в БД. 
  11. Проверить журнал регистрации на наличие ошибок. Проверить выгруженные\загруженные данные. 
  12. Сделать бэкап прода и сохранить его.
  13. Сделать бэкап копии и загрузить его в прод базу. 
  14. Разблокировать прод базу.
  15. Проверить отложенные обработчики обновления. Конец.
 
 Скрины. Обновление через копию в 1С: Предприятие. 

 

Перспективы развития. 

  1. Доработать обратный обмен из обновленной копии в прод, чтобы снимать данные с регистрации и производить несколько итераций обмена. Это позволит еще больше минимизировать простой прода за счет предварительных загрузок больших объемов данных, тогда последняя загрузка данных будет минимальная. Но придется сделать обратные правила обмена и доработать сам механизм "Обновления через копию".
  2. Полностью выделить подсистему 'ОбновлениеЧерезКопию' в расширение для отдельных внедрений в конфигурации, в которых её нет.

Дополнительная информация.

В статье //infostart.ru/1c/tools/1576756/ рекомендуют в правилах обмена в правилах конвертации объектов (ПКО) для документов устанавливать режим записи документа "Запись". Я не устанавливал, на мой взгляд данные итак загружаются в режиме ОбменДанными.Загрузка = Истина. Если потребуется, то это не проблема добавить режим записи в ПКО с помощью самописной обработки (она кстати есть в той статье), ну или сделать самому доработку хоть на базе ЕРП в расширении, хоть в базе КД... 

В конфигураторе удобно делать сортировку по подсистеме "ОбновлениеЧерезКопию".

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

Чтобы вернуться назад по этапу обновления через копию, нужно изменить константу "ОбновлениеЧерезКопиюСостояние"
или некоторые реквизиты на форме обработки "ОбновлениеЧерезКопию"
или значения реквизитов плана обмена "ОбновлениеЧерезКопию". 

 
 Скрины. Константа и реквизиты плана обмена.

 

Ошибки, которые возникали при обновлении 3.2.6.6 - 3.2.6.7.

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

 
 Скрины. Ошибка "Переполнение стека вызова"

 

2 - При COM-соединении (прямом соединении) настройки транспорта обмена могут возникать ошибки инициализации модуля и не определенной переменной (общего модуля). 
Связана с тем что у многих серверных модулей отсутствует свойство "ВнешнееСоединение". Решение: установить свойство общих модулей в соответствии стандарта 1С https://its.1c.ru/db/v8std/content/469/hdoc

 
 Скрины. Ошибка "инициализации модуля и не определенной переменной".

 

3 - Ошибка "Попытка передачи с клиента на сервер мутабельного значения". Возникает при КОМ-соединении (прямом соединении). При обмене через файл не возникает. Связана с тем что у общего модуля "ллл_API_out" отсутствует свойство "ВнешнееСоеднинение". По хорошему это архитектурная ошибка, нужно рефакторить общий модуль и разделять на два: один ВызовСервера, другой ВнешнеееСоединение, в соответствии с стандартом 1С https://its.1c.ru/db/v8std/content/469/hdoc
По плохому - можно установить свойство "ВнешнееСоединение" для этого модуля. 

 
 Скрин. Ошибка "Попытка передачи с клиента на сервер мутабельного значения".

 

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

 
Скрин. Ошибка подсистемы при загрузке файла выгруженных данных.

 

5 - Ошибка "Поле объекта не обнаружено" при загрузке\выгрузке данных. Связано с тем что реквизит переименовали. Решение: в расширении сделал проверку через попытку\исключение свойства источника и приемника. Частная ошибка между релизами. В других релизах может возникать аналогичная ошибка. 

 
 Скрин. Ошибка "Поле объекта не обнаружено".

 

6 - Доработан типовой функционал Обновления через копию. Получение настроек транспорта обмена из регистра и заполнение их в обработку выгрузки\загрузки данных. 

 
 Скрины. Доработки настроек транспорта обмена.

 

7 - Исправлены ошибки значений перечислений и общего реквизита 

 
 Скрин. Ошибки перечислений. 

 

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.20.101, 2.5.20.97

См. также

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

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

10 стартмани

18.02.2025    386    1    kalyaka    0    

5

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

17.02.2025    186    0    slavik27    0    

3

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    1522    8    XilDen    24    

34

Групповая разработка (Git, хранилище) Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

05.02.2025    1199    Nonik    10    

17

Обновление 1С Программист Бухгалтер Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Бухгалтерский учет НДС Абонемент ($m)

Обновление для конфигурации Управление торговлей 10.3.88.3 добавляет поддержку ставок НДС 5% и 7%, обеспечивает корректную печать этих ставок на актуальных моделях торгового оборудования (АТОЛ, ШТРИХ, ревизия 4004), содержит актуальные правила обмена с конфигурацией "Бухгалтерия предприятия 3.0" для передачи новых ставок. Новые ставки НДС поддерживается в печатных формах УПД, ТТН и т.д. В состав дистрибутива включены обработки для обслуживания торгового оборудования ККТ нового формата (Штрих-М и АТОЛ)

5 стартмани

31.01.2025    1841    29    karpik666    28    

21

Рефакторинг и качество кода Обновление 1С Программист Платформа 1С v8.3 Бесплатно (free)

В практике нашей специальной команды по проектам сложных обновлений 1С прошел один из самых объёмных проектов: необходимо было обновить «1С: Бухгалтерия предприятия КОРП 3.0 + БИТ.ФИНАНС». Конфигурация содержала доработки практически по всем типам объектов метаданных. Длительность проекта составила 1 год и 2 месяца и обеспечила полной загрузкой 4 разработчиков на 6 месяцев.

31.01.2025    966    1c-izh    3    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sevenor 18.02.25 18:05 Сейчас в теме
Эпический труд! Надеюсь у вендора этот механизм не забросят и ошибки поправят😇
PetrovAnton; +1 Ответить
2. PetrovAnton 5 20.02.25 12:22 Сейчас в теме
(1) да, тут непонятно, такое ощущение, что его хотят выпилить. Было бы неплохо сделать отдельную подсистему. Если появится задача в работе, то можно будет раскрутить я думаю.
Оставьте свое сообщение