Разработка и Конфигурация · 10 мин
Как вносить изменения в код 1С
Как безопасно изменить код 1С: работа в конфигураторе, расширения конфигурации, поддержка, тестирование изменений и типичные ошибки разработчиков.
Изменение кода в 1С — задача, которая рано или поздно встаёт перед любым внедрением: нужно поправить печатную форму, добавить проверку при записи документа или изменить логику расчёта. При этом неправильно внесённое изменение способно остановить работу всей компании: документы перестанут проводиться, отчёты начнут показывать неверные данные, а обновление конфигурации станет невозможным без ручного разбора конфликтов.
Существует два принципиально разных подхода: доработка основной конфигурации через конфигуратор и использование механизма расширений. Первый способ даёт полный доступ ко всем объектам, но «снимает» конфигурацию с полной поддержки поставщика и усложняет обновления. Второй — безопаснее и сохраняет возможность автоматического обновления, но имеет ограничения: не все объекты и не весь код можно переопределить через расширение.
Прежде чем открывать конфигуратор, определите, действительно ли нужна доработка кода. Часть задач решается штатными средствами: настройкой прав доступа, дополнительными реквизитами и сведениями, подключаемыми внешними печатными формами и обработками без изменения самой конфигурации. Код стоит трогать только тогда, когда штатные механизмы задачу не закрывают.
Как выбрать способ внесения изменений
Расширение конфигурации — это отдельный объект, который «накладывается» на основную конфигурацию без её изменения. Через расширение можно добавлять собственные подсистемы, роли, отчёты, обработки, реквизиты форм, а также переопределять обработчики событий модулей с помощью аннотаций &ИзменениеИКонтроль, &Вместо, &Перед и &После. Для большинства типовых доработок — дополнительная проверка при проведении, новая кнопка на форме, изменение печатной формы — расширения достаточно.
Прямая доработка конфигурации нужна, когда расширение технически не справляется: требуется изменить состав типов у реквизита, добавить измерение в регистр, поменять структуру метаданных, которые расширения не поддерживают. Распознать такую ситуацию просто: если нужное изменение невозможно выполнить в дереве расширения, оно требует доработки основной конфигурации.
Сравнение подходов
Подходит для обработчиков событий, форм, отчётов, новых объектов. Конфигурация остаётся на поддержке, обновления ставятся автоматически. Ограничение: нельзя менять состав типов и часть метаданных.
Полный доступ ко всем объектам и структуре данных. Минус: усложняется обновление, при типовом обновлении доработки надо сопоставлять вручную.
Подходят для печатных форм и сервисных операций без изменения конфигурации вообще. Не подходят, если нужно менять поведение типовых документов.
Подготовка: копия базы и режим разработки
Первое правило любой доработки: изменения никогда не делают сразу в рабочей базе. Создайте копию информационной базы — через выгрузку в файл .dt из конфигуратора (Администрирование → Выгрузить информационную базу) или средствами СУБД для клиент-серверного варианта. Вся разработка и первичная проверка ведутся на копии, в рабочую базу изменения переносятся только после тестирования.
Для работы понадобится конфигуратор с правами, достаточными для изменения конфигурации. Если планируется доработка основной конфигурации, её нужно сначала открыть для изменений: Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения. В типовых конфигурациях часть объектов по умолчанию закрыта поставщиком — их придётся перевести в режим «Редактируется с сохранением поддержки».
Внесение изменений через расширение
Откройте конфигуратор и перейдите: Конфигурация → Расширения конфигурации. Создайте новое расширение, задайте имя, префикс (он добавится к новым объектам) и назначение — для доработок прикладной логики обычно выбирают «Дополнение». После создания расширение появится в отдельном дереве конфигурации.
Чтобы доработать типовой объект, добавьте его в расширение: в основной конфигурации вызовите контекстное меню объекта и выберите «Добавить в расширение». Для переопределения кода откройте модуль объекта или формы, найдите нужную процедуру и через контекстное меню добавьте её в расширение с нужной аннотацией. Аннотация &ИзменениеИКонтроль предпочтительнее: она копирует текст типовой процедуры и при обновлении конфигурации сообщит, если оригинал изменился.
Пример переопределения обработчика проведения документа:
&ИзменениеИКонтроль("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
// Наша проверка до типовой логики
Если СуммаДокумента > 1000000 Тогда
ОбщегоНазначения.СообщитьПользователю("Требуется согласование", , , , Отказ);
КонецЕсли;
#Вставка
// Здесь будет типовой код
#КонецВставки
КонецПроцедурыПосле сохранения расширения проверьте его применимость: в списке расширений есть команда проверки, которая покажет конфликты с основной конфигурацией. Затем запустите базу в режиме предприятия и убедитесь, что доработанное поведение работает.
Доработка основной конфигурации
Если расширение не подходит, изменения вносятся напрямую. Откройте конфигурацию (Конфигурация → Открыть конфигурацию), найдите нужный объект в дереве метаданных и редактируйте: добавляйте реквизиты, меняйте модули, формы, макеты. Для поиска нужного места в коде удобно использовать глобальный поиск по конфигурации (Ctrl+Shift+F) — например, по тексту сообщения об ошибке, которое выдаёт программа.
После правок выполните проверку конфигурации: Конфигурация → Проверка конфигурации. Она выявит синтаксические ошибки, битые ссылки и проблемы прав. Затем обновите конфигурацию базы данных (F7). Если изменялась структура данных, запустится реструктуризация — внимательно изучите её список изменений перед подтверждением: удаление реквизита означает безвозвратную потерю данных в нём.
Тестирование и перенос в рабочую базу
Тестирование на копии должно повторять реальные сценарии пользователей: создайте и проведите документы, сформируйте отчёты, выполните обмены, если они настроены. Проверьте не только новую функциональность, но и то, что работало раньше, — доработка одного обработчика может сломать смежный процесс.
Перенос зависит от способа доработки. Расширение выгружается в файл и загружается в рабочую базу через раздел «Печатные формы, отчёты и обработки» / «Расширения» в режиме предприятия или через конфигуратор. Доработанную конфигурацию переносят через «Загрузить конфигурацию из файла» или через сравнение и объединение конфигураций, если в рабочей базе есть собственные отличия.
- 1Сделайте свежую резервную копию рабочей базы
- 2Перенесите доработку в нерабочее время
- 3Обновите конфигурацию базы данных, проверьте список реструктуризации
- 4Запустите базу и выполните ключевую операцию, затронутую доработкой
- 5Убедитесь, что пользователи могут войти и работать
- 6Сохраните копию базы до изменений до подтверждения стабильной работы
Типичные ошибки при доработке
Как проверить результат
Контрольные точки после доработки
Ошибок нет, только допустимые предупреждения
Синтаксические ошибки, неразрешённые ссылки на объекты
База открывается, доработанные формы и документы работают
Ошибки при открытии форм, падение при проведении документов
Расширение подключено, статус без ошибок
Конфликты с основной конфигурацией, расширение отключено
Отчёты, обмены и печать работают как раньше
Регрессия в функциях, которые не дорабатывались
FAQ
Можно ли изменить код типовой конфигурации без снятия с поддержки?
Да, частично. В настройке поддержки объекты можно перевести в режим «Редактируется с сохранением поддержки» — конфигурация останется поддерживаемой, но обновления таких объектов перестанут ставиться автоматически. Предпочтительный вариант — расширение конфигурации: оно вообще не затрагивает режим поддержки.
Что произойдёт с моими доработками при обновлении конфигурации?
Расширения при обновлении не затрагиваются, но могут потерять применимость, если поставщик изменил переопределённые процедуры — тогда расширение отключится и потребует доработки. Изменения в основной конфигурации при обновлении сопоставляются с новой версией: типовые изменения поставщика и ваши правки придётся объединять вручную в окне сравнения.
Как найти, в каком модуле выполняется нужное действие?
Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по характерному тексту: сообщению об ошибке, заголовку, имени команды. Также помогает отладчик: поставьте точку останова в обработчике события формы или документа и пройдите по шагам, чтобы увидеть цепочку вызовов.
Нужны ли отдельные права для изменения кода?
Да. Для работы в конфигураторе пользователю нужны административные права и право на изменение конфигурации. Для загрузки расширений в режиме предприятия требуется роль с правом администрирования расширений. Учётную запись разработчика лучше держать отдельной от учётных записей пользователей.
Что делать, если после доработки база перестала открываться?
Если проблема вызвана расширением, запустите конфигуратор и отключите расширение в его списке либо запустите предприятие с параметром отключения расширений. Если повреждена конфигурация базы данных, восстановите базу из резервной копии, сделанной перед обновлением. Именно поэтому копия перед любыми изменениями обязательна.
Можно ли дорабатывать 1С без конфигуратора?
Ограниченно. Внешние печатные формы, отчёты и обработки разрабатываются в конфигураторе, но подключаются в режиме предприятия без изменения конфигурации. Также в файловом формате существует среда разработки EDT, но она тоже работает с конфигурацией как проектом и не заменяет конфигуратор для обновления рабочей базы.
Что важно запомнить
Предпочитайте расширения прямой доработке конфигурации, всегда работайте на копии базы, перед переносом в рабочую среду делайте резервную копию и тестируйте не только новую функцию, но и смежные процессы. Комментируйте свои изменения — это сэкономит часы при обновлении.