1C-CodeОсновы 1С → Поддержка, обновление и расширения

Поддержка, обновление и расширения

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

Глава 31 из 36 · чтение примерно 24 минут

Задача звучит безобидно: «добавьте в накладную колонку Скидка». В своей конфигурации это десять минут. В типовой — решение, которое будет аукаться годами.

Причина в том, что типовую конфигурацию обновляют. Фирма «1С» выпускает новую версию, и ваши правки должны пережить это обновление.

Что такое «на поддержке»

Типовая конфигурация поставляется на поддержке: платформа помнит, как выглядит эталон от поставщика, и умеет сравнить его с вашим.

У каждого объекта есть правило поддержки:

Не редактируется — менять нельзя, обновление заменит его целиком и молча.

Редактируется с сохранением поддержки — менять можно, при обновлении платформа покажет, что разошлось, и предложит объединить.

Снят с поддержки — объект больше не сравнивается с эталоном. Обновление его не тронет — и новое от поставщика в него тоже не попадёт.

Цена «снять с поддержки»

Снять с поддержки легко — одна галочка. Дальше начинается долг, который платят при каждом обновлении.

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

Поэтому снятие с поддержки — последний способ, а не первый.

Три замка, а не один

«На поддержке» — это не одно состояние, а настройка у КАЖДОГО объекта конфигурации по отдельности. И вариантов у неё три, а не два.

Объект поставщика не редактируется. Обычное состояние: поставщик обновляет его сам, вы не трогаете. Замок закрыт.

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

Объект снят с поддержки. Связь разорвана. Поставщик может переписать эту процедуру целиком — вы об этом не узнаете никогда, потому что при обновлении объект даже не покажут.

Разница между вторым и третьим — самая дорогая в этой главе. Второе означает «обновление будет спрашивать», третье — «обновление молчит». Молчание тут не экономия времени, а потеря исправлений поставщика.

Три способа доработать типовую

1. Расширение конфигурации. Отдельный «слой» поверх основной конфигурации: свои объекты, свои формы, перехват процедур. Основная конфигурация не меняется вовсе и остаётся на поддержке целиком.

Это правильный способ по умолчанию. Ограничения есть — не всё можно перехватить, — но начинать надо с него.

2. Внешняя обработка или отчёт. Отдельный файл, подключаемый через механизм дополнительных обработок БСП. Конфигурацию не трогает вообще. Годится, когда нужна отдельная операция, а не изменение поведения.

3. Правка в конфигурации. Последний вариант. Если без него нельзя — стараются остаться «с сохранением поддержки» и писать так, чтобы объединение при обновлении было простым.

Как устроено расширение

Расширение подключается к конфигурации и умеет:

Добавлять своё — справочники, обработки, реквизиты к существующим объектам, элементы на существующие формы.

Перехватывать процедуры — директивами &Перед, &После, &Вместо. Первые две добавляют своё до или после чужого кода, третья заменяет его целиком.

&Вместо — самая опасная: заменённая процедура больше не получает обновлений от поставщика, и вы об этом не узнаете. Её берут, когда &Перед и &После не годятся.

Как проходит обновление на самом деле

Слово «обновить» скрывает пять шагов, и пропуск любого из них — это ночь на работе.

1. Копия базы. Не «на всякий случай», а обязательный шаг: откатиться иначе будет некуда.

2. Обновление на КОПИИ. Все сюрпризы — здесь, а не на рабочей базе с людьми.

3. Сравнение и объединение. Конфигуратор показывает, что изменилось у поставщика и что менялось у вас. Правки, сделанные в типовых объектах, придётся решать вручную: взять поставщика, оставить своё или соединить.

4. Проверка. Провести документы, построить отчёты, запустить обмен. Тем же способом, которым пользуются люди.

5. Обновление рабочей базы — в монопольном режиме, и лучше не в конце месяца.

Замок и галочка «Объект не редактируется»

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

Разрешить изменение объекта — объект остаётся на поддержке, и при обновлении конфигуратор предложит объединение. Это нормальный, обратимый шаг.

Снять с поддержки объект — обновления этого объекта больше не приходят. Иногда оправдано, но каждый такой объект придётся вести самому.

Снять с поддержки конфигурацию целиком — дорога в один конец: типовые обновления больше не применятся никак. Это делают, когда конфигурация уже не типовая.

Чего расширение не умеет

Расширение выглядит решением всех бед: код отдельно, типовая цела, обновление не мешает. Границы у него всё-таки есть, и знать их надо ДО того, как начали.

Удалить чужое нельзя. Расширение добавляет и заменяет, но не убирает: реквизит типового документа из него не выкинуть.

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

&Вместо отключает типовой код целиком. И вместе с ним — все исправления, которые поставщик внесёт в эту процедуру потом. Это тот же риск, что и снятие с поддержки, только спрятанный внутри расширения.

Расширений может быть несколько. И тогда встаёт вопрос, в каком порядке они накладываются. Два расширения, обработавшие одно и то же событие через &Вместо, — это ссора, в которой побеждает кто-то один.

Чем дорабатывать: короткая таблица решений

Что нужноЧем делатьПочему
Разовая выгрузка или проверкавнешняя обработкаконфигурацию трогать незачем вовсе
Своя печатная формавнешняя печатная форма через БСПподключается в базе, переживает обновление
Добавить проверку при проведениирасширение, &Послетиповой код остаётся и продолжает обновляться
Добавить свой реквизит в типовой документрасширениеобъект заимствуется, конфигурация цела
Переписать типовой алгоритм целикомрасширение &Вместо — и с осторожностьюисправления поставщика в эту процедуру до вас не дойдут
Свои справочники и документырасширение или конфигурациясвоё новое поставщику не мешает и с поддержки не снимает

Расширение или доработка конфигурации

Вопрос, который решают в начале каждой задачи на типовой базе.

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

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

Правило, по которому выбирают: расширение по умолчанию, доработка — по необходимости. Не наоборот.

Расширение тоже ломается при обновлении

Распространённое заблуждение: «положили в расширение — и обновления не страшны».

Расширение цепляется к типовым процедурам по имени и сигнатуре. Переименовали процедуру в новой версии типовой — аннотация больше ни к чему не цепляется, и расширение отваливается. Иногда молча, иногда с ошибкой при запуске.

Поэтому после каждого обновления расширения проверяют: открываются ли формы, работают ли кнопки, срабатывают ли проверки. Список того, что делает расширение, полезно держать записанным — иначе проверять будет некого.

Хранилище конфигурации и работа вдвоём

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

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

Хранилище — не система контроля версий: оно хранит историю, но сливать параллельные ветки не умеет. Поэтому в больших командах поверх него ставят выгрузку в файлы и git.

Захваченный объект — чужая работа, а не препятствие

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

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

Правильный порядок скучный и работающий: спросить, подождать, поместить своё. Захват — это не замок на двери, а табличка «здесь работают».

Порядок обновления, который не ломает работу

Обновление типовой на боевой базе — это не «нажать кнопку», а последовательность, в которой каждый шаг существует потому, что кто-то однажды его пропустил.

Шаги обновления по порядку

ШагЗачем именно он
Прочитать, что в новой версиибывают изменения, требующие ваших правок ДО обновления
Сделать копию базыединственный способ вернуться, если не пошло
Обновить на КОПИИвсе конфликты вылезут здесь, а не на боевой в понедельник
Разобрать конфликтыпо каждому решить: чья версия остаётся и почему
Проверить свои доработкиобновление их не проверяет — это делаете вы
Запланировать окнообновление боевой базы — это простой, и о нём предупреждают
Обновить боевую и дать отработать обработчикампервый запуск после обновления выполняет обработчики обновления данных
Остаться рядом на деньошибки обновления вылезают на живых данных, а не на запуске

На чём спотыкаются

Снимают с поддержки всю конфигурацию «чтобы не мешала». После этого обновляться можно только вручную и целиком — то есть практически никогда.

Пишут в расширении &Вместо, не разобравшись. Поставщик поправил процедуру — у вас работает старая, и ошибка возвращается после каждого обновления.

Забывают, что расширение может отвалиться. Если поставщик переименует процедуру, перехват перестанет применяться. Молча: расширение просто отключится.

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

Упражнение 1. Чем дорабатывать

Функция ЧемДорабатывать(Что) возвращает способ: "ВнешняяОбработка", если в описании есть "разов" или "отчёт"; "Расширение", если есть "поведени" или "форм"; иначе "Расширение" — потому что начинать всегда стоит с него.

Решается в тренажёре: код запускается и проверяется сразу.

Упражнение 2. Дойдут ли исправления поставщика

Функция ИсправленияДойдут(Состояние) получает состояние объекта: "не редактируется", "редактируется с сохранением поддержки" или "снят с поддержки". Вернуть Истина, если при обновлении платформа покажет правку поставщика по этому объекту, и Ложь, если она пройдёт мимо молча.

Решается в тренажёре: код запускается и проверяется сразу.

Короткий свод

Типовая стоит на поддержке, и это не помеха, а способ получать исправления. Снятие с поддержки — долг, который платят при каждом обновлении. Дорабатывают по порядку: расширение, внешняя обработка, и только потом правка в конфигурации. В расширении &Перед и &После безопаснее &Вместо. Каждую доработку описывают — через год это единственный способ понять, нужна ли она ещё.

Как закрепить

Читать про код и писать код — разные умения. В тренажёре к этой главе идут упражнения: вы пишете решение, оно запускается на настоящем интерпретаторе 1С и проверяется сразу, без установки платформы.

Открыть эту главу в тренажёре

БСП: зачем она и что в ней искать
Обработки и отчёты: внешние и встроенные