К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как писать скрипты для 1С: с чего начать и как не сломать базу

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

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

Главный принцип безопасной разработки: никогда не тестируйте код на рабочей базе. Даже простой цикл записи справочника способен испортить тысячи записей за секунды, а откатить изменения без резервной копии будет невозможно. Всегда работайте на копии и только после проверки переносите результат в боевую базу.

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

Какие способы написания скриптов существуют в 1С

Платформа предлагает три основных подхода, и у каждого своя область применения. Первый — доработка конфигурации в конфигураторе: вы меняете модули объектов, форм и общие модули. Это даёт максимальные возможности, но усложняет обновление типовой конфигурации, поэтому подходит для серьёзной кастомизации.

Второй способ — внешние обработки и отчёты (файлы .epf и .erf). Они открываются через меню «Файл → Открыть» прямо в режиме предприятия и не требуют изменения конфигурации. Это идеальный формат для разовых скриптов: массовой обработки данных, загрузки из Excel, сервисных операций.

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

Сравнение вариантов

Внешняя обработка

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

Расширение конфигурации

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

Доработка конфигурации

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

Как создать первую внешнюю обработку

Откройте конфигуратор, выберите «Файл → Новый → Внешняя обработка». Задайте имя латиницей без пробелов — оно станет именем объекта в коде. Сохраните файл с расширением .epf в отдельную папку для разработки, чтобы не смешивать рабочие и тестовые версии.

Дальше создайте форму обработки: в дереве объектов нажмите «Добавить форму». На форму перетащите реквизиты (например, поле выбора документа) и кнопку «Выполнить». Для кнопки создайте команду, и платформа сгенерирует шаблон процедуры — в него вы и будете писать код.

Минимальный рабочий пример — скрипт, который выводит сообщение с текущей датой. Его достаточно, чтобы убедиться, что обработка открывается и код выполняется:

bsl
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
    Сообщить("Обработка запущена: " + ТекущаяДата());
КонецПроцедуры

Сохраните обработку, откройте тестовую базу в режиме предприятия и загрузите файл через «Файл → Открыть». Если появилось сообщение — каркас работает, можно переходить к логике.

Порядок действий
  1. 1
    Сделайте копию рабочей базы или разверните тестовую
  2. 2
    Откройте конфигуратор и создайте внешнюю обработку
  3. 3
    Добавьте форму, реквизиты и кнопку с командой
  4. 4
    Напишите код в сгенерированной процедуре
  5. 5
    Сохраните файл .epf и откройте его в режиме предприятия
  6. 6
    Проверьте результат на тестовых данных

Основы встроенного языка: что нужно знать

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

Основные конструкции знакомы любому, кто видел код: условия Если ... Тогда ... КонецЕсли;, циклы Для ... Цикл ... КонецЦикла; и Пока ... Цикл, процедуры и функции. Важная особенность — директивы контекста &НаКлиенте и &НаСервере: в тонком клиенте большинство операций с данными доступно только на сервере, и попытка выполнить запрос на клиенте вызовет ошибку.

Работа с данными строится через объектную модель. Например, создание элемента справочника выглядит так:

bsl
&НаСервере
Процедура СоздатьКонтрагента()
    НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
    НовыйЭлемент.Наименование = "ООО Пример";
    НовыйЭлемент.Записать();
КонецПроцедуры

Для выборки больших объёмов данных используйте язык запросов — он напоминает SQL и работает на порядки быстрее перебора объектов в цикле. Правило простое: читать данные — запросом, изменять — объектами, потому что объектная запись вызывает обработчики событий и контроль прав.

Типовые сценарии скриптов для учётных задач

Чаще всего скрипты пишут для массовой обработки данных: перенумерации документов, заполнения реквизитов, установки цен. Такой скрипт строится по одному шаблону: запрос выбирает ссылки, цикл обходит выборку, каждый объект получается методом ПолучитьОбъект(), изменяется и записывается.

Загрузка данных из табличного документа

Вторая частая задача — загрузка из Excel или CSV. Для Excel используйте объект ТабличныйДокумент с методом Прочитать() либо COM-соединение, для CSV — ЧтениеТекста с разбором строк по разделителю. Обязательно проверяйте данные перед записью: пустые обязательные поля и дубли — главная причина «мусора» в справочниках после загрузки.

Обмен с внешними системами

Для интеграций применяют HTTP-запросы (HTTPСоединение), работу с JSON (ЧтениеJSON/ЗаписьJSON) и веб-сервисы. Такие скрипты требуют обработки ошибок сети: оборачивайте вызовы в Попытка ... Исключение ... КонецПопытки; и логируйте ответы, иначе сбойный обмен оставит данные в несогласованном состоянии.

Как отлаживать и проверять скрипты

Отладка включается в конфигураторе: меню «Отладка → Начать отладку» или клавиша F5. Ставьте точки останова кликом по полю слева от строки, смотрите значения переменных в табло (Shift+F9) и проходите код по шагам. Для внешних обработок предварительно укажите в параметрах отладки, какое приложение запускать, и откройте обработку в уже запущенном сеансе.

Когда точки останова недоступны (фоновые задания, регламентные операции), используйте Сообщить() и запись в журнал регистрации через ЗаписьЖурналаРегистрации(). Журнал потом смотрят в конфигураторе или в разделе администрирования — это основной источник информации о сбоях на сервере.

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

Контрольные точки

Как проверить результат

Количество обработанных записей
Норма

Совпадает с количеством в выборке запроса

Тревожный признак

Меньше выборки — есть пропущенные или ошибочные записи

Проведение документов после изменения
Норма

Документы проводятся без сообщений об ошибках

Тревожный признак

Ошибки проведения — нарушены обязательные реквизиты или связи

Журнал регистрации
Норма

Нет новых ошибок за время выполнения скрипта

Тревожный признак

Ошибки с именем вашей процедуры — код падает на части данных

Типичные ошибки начинающих и как их избежать

Самая частая ошибка — изменение данных без транзакции. Если скрипт обрабатывает тысячу объектов и падает на пятисотом, база остаётся в полуобработанном состоянии. Решение: оборачивайте логически целостные порции в НачатьТранзакцию() / ЗафиксироватьТранзакцию() с откатом в блоке исключения.

Вторая группа ошибок связана с контекстом выполнения: попытка вызвать серверные методы на клиенте, обращение к модальным диалогам в тонком клиенте, использование НайтиПоНаименованию() без учёта дублей. Ещё одна ловушка — запросы в цикле: платформа выполняет каждый запрос отдельным обращением к СУБД, и обработка на десять тысяч итераций может идти часами вместо секунд.

Типичные ошибки
01
Запрос внутри цикла — обработка замедляется в десятки раз; выносите выборку наружу и соединяйте данные в одном запросе
02
Запись объектов без транзакции — при сбое база остаётся в несогласованном состоянии
03
Поиск по наименованию вместо кода или уникального идентификатора — находится не тот элемент или дубль
04
Тестирование на рабочей базе — ошибка в цикле портит реальные учётные данные
05
Игнорирование директив &НаСервере — код падает с ошибкой о недоступности метода в тонком клиенте

Когда скрипта недостаточно: ограничения и альтернативы

Не каждую задачу стоит решать кодом. Разовую корректировку данных часто быстрее выполнить типовой обработкой «Групповое изменение реквизитов», загрузку из Excel — типовой «Загрузкой данных из табличного документа», а регулярный обмен — настроить через стандартные планы обмена или конвертацию данных.

Для интеграций вне платформы существует OneScript — открытый интерпретатор языка 1С, который выполняет скрипты из командной строки без запуска конфигуратора. Он подходит для задач DevOps: выгрузки конфигурации, запуска тестов, пакетной обработки файлов, но не заменяет встроенные механизмы работы с данными конкретной базы.

Маршрут решения

Как выбрать действие

Нужно разово поправить реквизит у десятка объектовИспользуйте типовую обработку «Групповое изменение реквизитов» — код не нужен
Нужен разовый скрипт с нестандартной логикойПишите внешнюю обработку и тестируйте на копии базы
Доработка должна работать постоянно у всех пользователейОформляйте расширение конфигурации, а не внешний файл
Нужно автоматизировать операции вне сеанса 1СРассмотрите OneScript или HTTP-сервисы конфигурации

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

Итог

Что важно запомнить

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

Частые вопросы о написании скриптов для 1С

Нужно ли знать программирование, чтобы писать скрипты для 1С?

Глубокие знания не требуются: достаточно понимать переменные, условия и циклы. Сложнее другое — нужно разбираться в структуре метаданных конкретной конфигурации: какие реквизиты есть у документа, как связаны справочники и регистры. Эту информацию дают конфигуратор и синтакс-помощник (Ctrl+F1 на любом методе).

Чем внешняя обработка отличается от расширения?

Внешняя обработка — это файл, который пользователь открывает вручную; она не меняет поведение программы сама по себе. Расширение подключается к базе администратором и работает постоянно: перехватывает события документов, добавляет кнопки и печатные формы. Для разового скрипта берите обработку, для постоянной доработки — расширение.

Можно ли писать скрипты для 1С на Python или JavaScript?

Напрямую внутри платформы — нет, встроенный язык один. Внешний код на других языках может взаимодействовать с 1С через HTTP-сервисы, веб-сервисы, COM-соединение или файловый обмен. Также существует OneScript — интерпретатор с синтаксисом языка 1С для задач автоматизации вне сеанса платформы.

Как открыть внешнюю обработку, если кнопка недоступна?

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

Что делать, если скрипт испортил данные в рабочей базе?

Немедленно остановите выполнение и не запускайте другие обработки. Восстановите базу из последней резервной копии или, если потеря данных с момента копии недопустима, привлеките специалиста для точечного восстановления по журналу транзакций СУБД. Чтобы ситуация не повторилась, добавьте в скрипт режим предварительного показа изменений без записи.

Где искать готовые примеры кода?

Основные источники — синтакс-помощник в конфигураторе, документация на портале ИТС (по подписке) и типовой код самой конфигурации: общие модули показывают, как разработчики решают типовые задачи. Разбирать готовый рабочий код полезнее, чем собирать решение из фрагментов форумов без проверки.