Доработанная база и новый релиз: как не потерять свои изменения
Содержание
Нетиповую конфигурацию 1С 8.3 обновляют в Конфигураторе через Конфигурация → Поддержка → Обновить конфигурацию… с ручным разбором объектов, которые изменили и вы, и фирма-разработчик. Если конфигурация снята с поддержки, сначала её снова ставят на поддержку сравнением с типовой того же релиза, а уже потом накатывают новый. Автоматическое обновление
через интернет
-поддержку для измененных баз не годится: оно либо откажет, либо затрёт доработки.
Типичная история: программист доработал базу три года назад, ушёл, а теперь Бухгалтерия отстала на десяток релизов, отчётность не принимают, и никто не знает, что именно в ней поменяно. Порядок действий одинаков и для свежих доработок, и для такого «наследства»: диагностика, выбор метода, объединение на копии, проверка.
Насколько изменена база и чем рискуете при обновлении
Начните с диагностики. Откройте Конфигуратор и посмотрите Конфигурация → Поддержка → Настройка поддержки. В окне видно, в каком режиме стоит конфигурация.
| Состояние | Что значит | Как обновлять |
|---|---|---|
| На поддержке, изменения не разрешены | Типовая, правок в основной конфигурации нет | Обычное обновление, в том числе автоматическое |
| На поддержке с возможностью изменения | Правки есть, связь с поставщиком сохранена | Обновить конфигурацию… с разбором конфликтов |
| Снята с поддержки | Связь с поставщиком разорвана | Сначала постановка на поддержку, потом обновление |
Дальше оцените объём правок. Удобнее всего сравнить текущую конфигурацию с типовой того же релиза: Конфигурация → Сравнить конфигурации…, слева основная, справа конфигурация поставщика. Отчёт о сравнении можно вывести и сохранить. По нему вы увидите, сколько объектов и модулей затронуто.
Что реально грозит при неаккуратном обновлении:
- 🔥 Потеря доработок: объект взяли из новой поставки целиком, и ваш код исчез.
- 🧩 Сломанные ссылки: разработчик переименовал или удалил процедуру, которую вызывает ваш код.
- 📉 Ошибки в данных: обработчики обновления типового релиза не знают о ваших реквизитах и регистрах.
- ⏳ Простой: обновление структуры большой базы занимает от десятков минут до нескольких часов, а пользователи в это время не работают.
Подготовка перед обновлением
- Сделайте выгрузку
Администрирование → Выгрузить информационную базу…в файл.dt. Для серверной базы дополнительно — штатную резервную копию средствами СУБД. - Сохраните текущую конфигурацию в файл:
Конфигурация → Сохранить конфигурацию в файл…. Это ваша «основная» версия на случай отката. - Разверните копию базы и обновляйте сначала её. Первое обновление нетиповой конфигурации в рабочей базе — плохая идея.
- Узнайте текущий релиз (
Справка → О программев режиме Предприятия) и цепочку релизов до нужного. Файл обновления.cfuподходит только для перечисленных в нём версий, через промежуточные релизы перепрыгнуть нельзя. - Скачайте дистрибутивы нужных релизов и установите их в каталог шаблонов. По умолчанию это
%APPDATA%\1C\1cv8\tmplts\1c\, там лежат1cv8.cf(полная поставка) и1cv8.cfu(обновление).
Для снятой с поддержки базы понадобится полный 1cv8.cf текущего релиза, а не только нового. Без него трёхстороннего сравнения не получится.
Способы обновить измененную конфигурацию
Выбор метода зависит от состояния базы и объёма правок.
| Метод | Когда подходит | Риски и трудоёмкость |
|---|---|---|
| Перенос доработок в расширения, потом обычное обновление | Правок немного, они точечные | Разовая работа, дальше обновления почти без ручного труда |
Обновление с поддержкой (Обновить конфигурацию…) | База на поддержке с возможностью изменения | Разбор только дважды измененных объектов |
| Постановка на поддержку + обновление | Конфигурация снята с поддержки | Самый трудоёмкий первый раз, далее как предыдущий |
| Перенос доработок в новую типовую вручную | Документации нет, правки старые и хаотичные | Долго, зато на выходе чистая база |
Главное правило: не снимайте конфигурацию с поддержки ради «удобства». Режим «с возможностью изменения» даёт править любые объекты и при этом сохраняет историю поставщика. Именно она позволяет платформе отличить вашу правку от правки разработчика.
Расширения вместо правки основной конфигурации
Расширения появились в платформе 8.3.6. Это отдельный слой поверх типовой: вы добавляете свои объекты, реквизиты, формы и меняете поведение типовых процедур, не трогая основную конфигурацию. Основная остаётся на поддержке без изменений и обновляется как обычная типовая, хоть автоматически.
Что можно вынести в расширение:
- ✅ новые отчёты, обработки, печатные формы;
- ✅ новые реквизиты и табличные части у типовых документов и справочников;
- ✅ изменения форм: поля, кнопки, команды;
- ✅ правку поведения типовых процедур через аннотации
&Перед,&После,&Вместо; - ✅ точечную правку кода внутри типовой процедуры через
&ИзменениеИКонтроль(платформа 8.3.16 и новее).
Как переносить правки из нетиповой базы:
- Создайте расширение:
Конфигурация → Расширения конфигурации, кнопка добавления. - Заимствуйте в него тот типовой объект, который был изменён: правой кнопкой по объекту в основной конфигурации →
Добавить в расширение. - Перенесите в заимствованный модуль только свою логику с нужной аннотацией.
- Верните объект основной конфигурации к типовому виду, взяв его из конфигурации поставщика при сравнении.
- Обновите конфигурацию базы данных и проверьте работу.
Пример перехвата: после записи документа нужно заполнить свой реквизит.
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если Не Отказ И Не ЗначениеЗаполнено(Расш1_Ответственный) Тогда
Расш1_Ответственный = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры
Аннотация &ИзменениеИКонтроль хороша тем, что после обновления платформа проверяет: если разработчик поменял исходную процедуру, расширение перестаёт применяться и сообщает об этом. Ошибку видно сразу, а не через месяц в отчётности.
После каждого обновления типовой части проверьте, что расширения применяются: в списке расширений Конфигуратора есть команда проверки применимости, а в режиме Предприятия список расширений открывается в разделе Администрирование.
Как объединить свои правки с новым релизом вручную
Это центральная процедура. Шаги для базы на поддержке с возможностью изменения.
Обновление базы на поддержке
- Откройте копию базы в Конфигураторе, затем
Конфигурация → Открыть конфигурацию. - Выберите
Конфигурация → Поддержка → Обновить конфигурацию…. - Укажите поиск в каталоге шаблонов или конкретный файл
.cfuлибо.cfследующего релиза. - Откроется окно сравнения и объединения. Платформа сравнивает три версии: основную (вашу), старую конфигурацию поставщика и новую.
- Включите отбор дважды измененных свойств. Это объекты, которые поменяли и вы, и разработчик. Остальное платформа объединит сама.
- По каждому дважды измененному объекту выберите режим объединения.
- Нажмите
Выполнить, затемF7(Обновить конфигурацию базы данных) и примите изменения структуры.
Режимы объединения для конфликтного объекта:
| Режим | Что произойдёт |
|---|---|
| Взять из новой конфигурации поставщика | Ваши правки объекта исчезнут |
| Объединить с приоритетом основной конфигурации | Слияние; при конфликте остаётся ваша версия |
| Объединить с приоритетом новой конфигурации поставщика | Слияние; при конфликте побеждает поставщик |
| Не объединять | Объект останется как у вас, обновления поставщика не придут |
Для модулей откройте сравнение двойным щелчком и смотрите построчно. Процедуры, которые вы не трогали, берите от поставщика. Свои процедуры оставляйте. В процедурах, где правили обе стороны, переносите ваш фрагмент в новый текст поставщика руками.
«Не объединять» для модуля целиком — частая причина, почему через пару релизов база падает: типовой код вызывает новые процедуры, которых в вашем старом модуле нет.
Постановка снятой с поддержки конфигурации
Если поддержка снята, Обновить конфигурацию… не поможет. Порядок такой:
- Найдите полный
1cv8.cfровно того релиза, на котором база сейчас (номер версии в свойствах корня конфигурации). - Выберите
Конфигурация → Сравнить, объединить с конфигурацией из файла…и укажите этот файл. - На вопрос о постановке на поддержку ответьте утвердительно.
- В окне сравнения снимите все флажки объединения: вы не берёте ничего из файла, а только восстанавливаете связь с поставщиком. Ваши объекты должны остаться как есть.
- Выполните объединение. Конфигурация встанет на поддержку с возможностью изменения, и платформа увидит, что именно в ней отличается от типовой.
- Дальше обновляйте по шагам предыдущего подраздела, релиз за релизом.
Если .cf текущего релиза найти не удалось, возьмите ближайший более ранний релиз, поставьте базу на поддержку от него и пройдите обновления оттуда. Разбирать конфликтов придётся больше, но цепочка восстановится.
Пакетное обновление и скрипты
Когда баз несколько или релизов в цепочке много, ручные клики в Конфигураторе отнимают дни. Часть работы переносят в пакетный режим запуска 1cv8.exe.
Выгрузка и обновление типовой базы (или базы, где все доработки в расширениях):
set V8="C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe"
set IB=/F"D:\Bases\Buh"
set USR=/N"Администратор" /P""
%V8% DESIGNER %IB% %USR% /DumpIB "D:\Backup\buh_before.dt" /Out "D:\Logs\dump.log"
%V8% DESIGNER %IB% %USR% /UpdateCfg "D:\Tmplts\1cv8.cfu" /UpdateDBCfg /Out "D:\Logs\update.log"
Для серверной базы вместо /F укажите /S"сервер\имя_базы". Путь к платформе подставьте свой.
Что полезно автоматизировать в нетиповых базах:
- 📦 резервную копию
/DumpIBи сохранение конфигурации/DumpCfgперед каждым шагом; - 🔁 прогон цепочки промежуточных релизов в тестовой копии, если доработки вынесены в расширения;
- 🧪 запуск проверки конфигурации после объединения;
- 📝 сбор логов
/Outв одну папку, чтобы видеть, на каком релизе остановилось.
Пакетное /UpdateCfg не разбирает конфликты за вас. Для базы с правками в основной конфигурации объединение всё равно проходит руками в окне сравнения. Перед запуском в рабочей базе выгоните пользователей и предупредите, что их сеансы оборвутся: обновление структуры требует монопольного доступа.
Команды, которых нет в примере, смотрите в справке Конфигуратора по параметрам командной строки, не подбирайте наугад. Для команд, где программистов несколько, удобнее хранить конфигурацию в хранилище или в Git через выгрузку в файлы, тогда история правок видна без отчётов сравнения.
Проверка базы после обновления
Обновили копию — ещё не значит, что всё работает. Порядок проверки:
- Синтаксис.
Конфигурация → Проверка конфигурации…, включите проверку логической целостности и синтаксиса модулей. Ошибки вида «процедура или функция не обнаружена» почти всегда указывают на место, где ваш код ссылается на изменённую типовую процедуру. - Обработчики обновления. Запустите базу в режиме Предприятия. Типовая конфигурация выполнит обработчики обновления данных. Дождитесь завершения, включая отложенную обработку, её ход виден в разделе
Администрированиев блоке обслуживания. - Свои функции. Пройдите по списку доработок: каждая печатная форма, каждый свой отчёт, каждый реквизит. Если списка нет, отчёт сравнения с типовой из первого раздела и есть этот список.
- Цифры. Сформируйте оборотно-сальдовую ведомость за закрытый период до обновления и после. Суммы должны совпасть. Перепроведите тестовый документ каждого ключевого вида в копии.
- Обмены и интеграции. Запустите обмен с сайтом, банком, складом. Доработки обменов ломаются чаще всего.
- Пользователи. Дайте копию на день двум-трём ключевым пользователям.
Только после этого повторяйте те же шаги в рабочей базе в нерабочее время. Сохранённые настройки объединения и протокол действий из копии ускорят повтор.
Где обычно ломается и как это исправить
Если ручное объединение превратилось в хаос и после пятого релиза база всё ещё не собирается, остановитесь. Иногда быстрее взять чистую типовую нового релиза, перенести в неё только нужные доработки через расширения, а данные загрузить штатными средствами перехода. Это дольше на старте, но последующие обновления станут почти типовыми.
Частые вопросы
Можно ли обновлять нетиповую конфигурацию через интернет-поддержку в режиме Предприятия?
Сколько стоит обновление измененной конфигурации у франчайзи?
Можно ли пропустить промежуточные релизы?
.cfu — нет, он подходит только к перечисленным в нём версиям. Через полный .cf нового релиза объединение возможно, но конфликтов будет больше и обработчики промежуточных версий придётся проверять внимательнее.