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