Обновления
После обновления 1С слетели доработки: почему это происходит
Бухгалтер приходит утром, открывает базу — а привычной кнопки нет. Или отчёт, который сделали полгода назад, выдаёт ошибку. Накануне базу обновили. Разбираем, что именно ломается, что из этого чинится за час, а что означает, что доработку придётся делать заново.
Почему типовая конфигурация вообще может сломаться
Типовая конфигурация — «Бухгалтерия предприятия 3.0», «Управление торговлей 11.5», «Управление нашей фирмой 3.0» — стоит на поддержке поставщика. У каждого объекта в ней висит замок: менять его нельзя, пока вы явно этого не разрешите. Пока замки на месте, обновление проходит без вашего участия: платформа берёт новый релиз и накатывает его поверх старого.
Картина меняется в тот день, когда в базе появляется первая доработка. На платформе 8.3 способов сделать её ровно 3, и именно от выбора зависит, переживёт ли она следующий релиз.
- Правка типовой конфигурации. Объект снимают с поддержки и меняют прямо в нём. Работает всегда и делается быстрее всего — и ровно поэтому так делают чаще всего.
- Расширение конфигурации. Отдельная сущность, которая живёт рядом с типовой и подключается к ней при запуске. Типовая при этом остаётся нетронутой, замки не снимаются.
- Внешняя обработка или отчёт. Отдельный файл, который вообще не входит в конфигурацию и подключается как дополнительная обработка.
Дальше — четыре сценария, в которых всё это перестаёт работать после обновления. Они выглядят для пользователя одинаково («вчера было, сегодня нет»), но причины у них разные, и чинятся они по-разному.
Четыре сценария, в которых доработка отваливается
Первый: правку типовой затёрло обновлением
Объект сняли с поддержки, дописали в него нужное. Приходит релиз, в котором поставщик изменил тот же самый объект. Автоматически такое обновление уже не проходит: конфигуратор показывает список изменённых объектов и просит решить по каждому, чью версию оставить — вашу или поставщика.
Дальше возможны два исхода, и оба плохие. Если выбрать версию поставщика, ваша доработка исчезает. Если оставить свою, база не получает изменений релиза в этом объекте: например, новую форму отчётности или исправленный расчёт. В типовой «Бухгалтерии» это приводит к тому, что регламентированная отчётность за квартал считается по-старому, а узнают об этом в момент сдачи.
Правильный путь тут один — сравнить и объединить вручную, разобрав каждое расхождение построчно. Это работа человека, который понимает, что делает и ваша доработка, и изменение поставщика. Когда таких объектов в базе 30–40, обновление превращается в проект на несколько дней.
Второй: расширение не применилось, потому что объекта больше нет
Расширение работает на заимствованных объектах: чтобы доработать справочник или документ, его сначала копируют особым образом из конфигурации в расширение, а потом меняют уже там. Заимствование нужно не только для удобства — оно же служит проверкой. Если при подключении расширения нужного объекта в конфигурации не нашлось, расширение не применится, и вы узнаете об этом сразу при запуске.
Именно это и происходит, когда поставщик в очередном релизе удалил или переименовал реквизит, на который опиралась доработка. Пользователь видит сообщение «Ошибка применения расширения конфигурации», и вся доработка выключается целиком — не частично, а полностью.
Выглядит как поломка, но это защита, и работает она в вашу пользу. Разработчики платформы описывают такое поведение как методологически правильное, и вот почему: без проверки расширение подключилось бы молча и упало бы позже, в середине работы пользователя — например, на проведении документа после 40 минут ввода данных.
Третий: перехват метода, который у поставщика изменился
Расширение умеет вмешиваться в существующие процедуры типовой конфигурации через аннотации: &Перед — выполнить свой код до оригинала, &После — после него, &Вместо — заменить оригинал собой. У платформы есть жёсткое правило: если на метод уже стоит «Вместо», то «Перед» и «После» к нему добавить нельзя, и наоборот.
Самый опасный из трёх — «Вместо». Ваш код подменяет процедуру целиком, и если поставщик в релизе дописал в неё новую проверку или новый блок расчёта, до вашей базы это изменение просто не доедет. Ошибки не будет: программа продолжит работать, просто по старой логике. Такие вещи всплывают через месяцы — обычно на расхождении цифр, которое никто не может объяснить.
Четвёртый: внешняя обработка и изменившийся интерфейс
Внешняя обработка не входит в конфигурацию, и обновление её физически не трогает. Ломается она иначе: обработка обращается к реквизитам и процедурам базы, и когда те меняются, файл начинает падать с ошибкой вида «поле объекта не обнаружено». Отдельная разновидность — обработки, подключённые через механизм дополнительных отчётов и обработок: при смене версии библиотеки у них может перестать совпадать описание команд.
Почему «расширение неактивно» — это сработавшая защита
Кроме проверки на наличие объекта в расширении есть и более тонкий контроль. Для конкретного свойства можно включить флажок «Проверять значение при подключении расширения» — и тогда платформа при старте сверит не только то, что справочник на месте, но и то, что у него, например, код по-прежнему строкового типа. Свойство становится контролируемым, и любое расхождение с ожиданием выключает расширение до того, как оно успеет навредить.
Что это значит на практике. Сообщение об ошибке применения расширения — это не «программа сломалась». Это «ваша доработка рассчитывала на одно, а в базе теперь другое, и я не стала гадать». Разница принципиальная: в первом случае чинят программу, во втором — приводят доработку в соответствие с новым релизом.
Есть и третья причина, по которой расширение может вести себя не так, как вчера: порядок применения. Когда расширений несколько, они подключаются в порядке, который задаётся свойством «Назначение расширения» — «Исправление», «Адаптация» или «Дополнение». Расширения с назначением «Дополнение» применяются последними. И новый порядок вступает в силу только после обновления конфигурации базы данных, а не сразу после смены настройки.
Что делать, если обновление уже сломало работу
Порядок действий, когда люди уже не могут работать, а причина ещё неизвестна.
- Остановиться и не чинить на боевой базе. Первый рефлекс — «сейчас быстро поправлю» — и есть главный источник вторых поломок. Пока непонятна причина, любая правка вслепую добавляет ещё одну переменную.
- Снять точную формулировку ошибки. Не «не работает», а скриншот с полным текстом. «Ошибка применения расширения конфигурации» и «поле объекта не обнаружено» — это разные диагнозы и разное лечение.
- Проверить список расширений. В режиме предприятия видно, какие подключены и какие из них отключились. Если доработка жила в расширении, вопрос решается здесь и часто за час.
- Понять, есть ли откат. Если перед обновлением сделали выгрузку базы, возврат к вчерашнему состоянию занимает время восстановления, а не время разработки. Если выгрузки нет — откатываться некуда, и это отдельный разговор про регламент.
- Развернуть копию и разбираться на ней. Все проверки и правки — на копии, в боевую переносится уже проверенный результат. Как это устроено у нас, мы описали в разделе «Как работаем».
Как сделать, чтобы обновление перестало быть событием
Ни один из четырёх сценариев выше не является неизбежным. Всё это управляется тем, как доработку делают изначально.
- Делать расширениями, а не правкой типовой. Типовая остаётся на поддержке, обновления продолжают проходить штатно, а при несовместимости вы получаете честное сообщение при старте вместо тихого расхождения в цифрах.
- Обновлять сначала на копии. Копия базы, обновление на ней, проверка доработок и ключевых операций — и только потом боевая. Это тот же принцип, по которому мы работаем с копией базы клиента и не трогаем боевую без отдельного разрешения.
- Вести список доработок. Компания без штатного программиста через 2–3 года обычно не может ответить, что у неё вообще доработано. Список из 10 строк — что изменено, зачем, кем и где — экономит дни при каждом обновлении.
- Проверять по одному и тому же сценарию. После обновления прогонять один и тот же короткий список операций: провести типовой документ, сформировать 3 ключевых отчёта, открыть доработанные формы. 5 минут проверки против дня простоя.
Какие именно доработки переживают обновления, а какие требуют переделки под каждый релиз, мы разбираем в разделе «Что делаем» — там по каждому типу работ написано, во что он выливается на длинной дистанции.
Вопросы, которые задают
Можно ли обновлять 1С, если конфигурация снята с поддержки
Можно, но автоматически такое обновление уже не пройдёт. Конфигуратор покажет объекты, которые менялись и у вас, и у поставщика, и по каждому нужно будет принять решение вручную. Чем больше правок в типовой, тем дольше и дороже каждое обновление — это накопительный долг, который платится при каждом релизе.
Почему расширение стало неактивным после обновления
Чаще всего потому, что объект или реквизит, который расширение заимствовало из конфигурации, в новом релизе изменился или исчез. Платформа обнаруживает расхождение при подключении и выключает расширение целиком, чтобы оно не упало посреди работы пользователя. Лечится приведением расширения в соответствие с новой версией конфигурации.
Сколько времени занимает обновление базы с доработками
Если все доработки сделаны расширениями и они совместимы с релизом — столько же, сколько обычное обновление, то есть от 30 минут. Если типовая правлена, время зависит от числа изменённых объектов: 10 расхождений разбираются за несколько часов, 30–40 — это уже работа на 2–3 дня с обязательной проверкой на копии.
Можно ли откатиться, если после обновления всё сломалось
Только если перед обновлением сделали выгрузку информационной базы. Тогда откат — это восстановление из файла, и данные вернутся на момент выгрузки. Всё, что ввели после обновления, при откате потеряется, поэтому решение об откате принимается быстро, в первые часы, а не на третий день.
Кто отвечает, если доработка отвалилась после обновления
Это зависит от того, что написано в договоре, и почти всегда выясняется в худший момент. Мы отвечаем за совместимость своих доработок с обновлениями на протяжении подписки, и обновление с проверкой доработок на копии входит в работу, а не идёт отдельным счётом. Условия и границы — на странице тарифов.
Если это уже случилось
Напишите, что сломалось — посмотрим и скажем, что с этим делать
Разбираться будем на копии вашей базы, боевую не трогаем. Оценку по срокам и стоимости дадим до начала работы и зафиксируем. Если задача не по нашему профилю — скажем сразу.