Разработка и Конфигурация · 11 мин
Как писать скрипты для 1С: с чего начать и как не сломать базу
Как писать скрипты для 1С: встроенный язык, внешние обработки, расширения, отладка и типичные ошибки. Пошаговые примеры кода для начинающих.
Скрипты в 1С — это фрагменты кода на встроенном языке платформы, которые автоматизируют операции: заполняют документы, пересчитывают данные, формируют отчёты и обмениваются информацией с другими системами. Писать их можно прямо в конфигураторе, во внешних обработках или через расширения — выбор зависит от того, нужно ли менять типовую конфигурацию.
Главный принцип безопасной разработки: никогда не тестируйте код на рабочей базе. Даже простой цикл записи справочника способен испортить тысячи записей за секунды, а откатить изменения без резервной копии будет невозможно. Всегда работайте на копии и только после проверки переносите результат в боевую базу.
Порог входа невысокий: синтаксис встроенного языка похож на упрощённый Pascal с русскими ключевыми словами, а большинство действий — это обращение к объектам метаданных (справочникам, документам, регистрам) через знакомые бухгалтеру названия. Ниже разберём, как именно устроена работа со скриптами и какой инструмент выбрать под конкретную задачу.
Какие способы написания скриптов существуют в 1С
Платформа предлагает три основных подхода, и у каждого своя область применения. Первый — доработка конфигурации в конфигураторе: вы меняете модули объектов, форм и общие модули. Это даёт максимальные возможности, но усложняет обновление типовой конфигурации, поэтому подходит для серьёзной кастомизации.
Второй способ — внешние обработки и отчёты (файлы .epf и .erf). Они открываются через меню «Файл → Открыть» прямо в режиме предприятия и не требуют изменения конфигурации. Это идеальный формат для разовых скриптов: массовой обработки данных, загрузки из Excel, сервисных операций.
Третий вариант — расширения конфигурации. Они позволяют добавить собственный код поверх типовой конфигурации, не снимая её с поддержки. Расширения подходят для постоянных доработок: новых печатных форм, дополнительных проверок при проведении документов, собственных ролей.
Сравнение вариантов
Подходит для разовых скриптов и тестирования. Ограничение: не может изменять поведение типовых объектов автоматически.
Подходит для постоянных доработок без снятия с поддержки. Ограничение: не все объекты и методы доступны для переопределения.
Максимальная гибкость для сложных задач. Ограничение: усложняет обновления, требует аккуратного ведения изменений.
Как создать первую внешнюю обработку
Откройте конфигуратор, выберите «Файл → Новый → Внешняя обработка». Задайте имя латиницей без пробелов — оно станет именем объекта в коде. Сохраните файл с расширением .epf в отдельную папку для разработки, чтобы не смешивать рабочие и тестовые версии.
Дальше создайте форму обработки: в дереве объектов нажмите «Добавить форму». На форму перетащите реквизиты (например, поле выбора документа) и кнопку «Выполнить». Для кнопки создайте команду, и платформа сгенерирует шаблон процедуры — в него вы и будете писать код.
Минимальный рабочий пример — скрипт, который выводит сообщение с текущей датой. Его достаточно, чтобы убедиться, что обработка открывается и код выполняется:
&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
Сообщить("Обработка запущена: " + ТекущаяДата());
КонецПроцедурыСохраните обработку, откройте тестовую базу в режиме предприятия и загрузите файл через «Файл → Открыть». Если появилось сообщение — каркас работает, можно переходить к логике.
- 1Сделайте копию рабочей базы или разверните тестовую
- 2Откройте конфигуратор и создайте внешнюю обработку
- 3Добавьте форму, реквизиты и кнопку с командой
- 4Напишите код в сгенерированной процедуре
- 5Сохраните файл .epf и откройте его в режиме предприятия
- 6Проверьте результат на тестовых данных
Основы встроенного языка: что нужно знать
Встроенный язык 1С регистронезависим, поддерживает русские и английские синонимы ключевых слов, а операторы завершаются точкой с запятой. Переменные объявляются неявно при первом присваивании, типизация динамическая — одна переменная может хранить и строку, и число.
Основные конструкции знакомы любому, кто видел код: условия Если ... Тогда ... КонецЕсли;, циклы Для ... Цикл ... КонецЦикла; и Пока ... Цикл, процедуры и функции. Важная особенность — директивы контекста &НаКлиенте и &НаСервере: в тонком клиенте большинство операций с данными доступно только на сервере, и попытка выполнить запрос на клиенте вызовет ошибку.
Работа с данными строится через объектную модель. Например, создание элемента справочника выглядит так:
&НаСервере
Процедура СоздатьКонтрагента()
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.Наименование = "ООО Пример";
НовыйЭлемент.Записать();
КонецПроцедурыДля выборки больших объёмов данных используйте язык запросов — он напоминает SQL и работает на порядки быстрее перебора объектов в цикле. Правило простое: читать данные — запросом, изменять — объектами, потому что объектная запись вызывает обработчики событий и контроль прав.
Типовые сценарии скриптов для учётных задач
Чаще всего скрипты пишут для массовой обработки данных: перенумерации документов, заполнения реквизитов, установки цен. Такой скрипт строится по одному шаблону: запрос выбирает ссылки, цикл обходит выборку, каждый объект получается методом ПолучитьОбъект(), изменяется и записывается.
Загрузка данных из табличного документа
Вторая частая задача — загрузка из Excel или CSV. Для Excel используйте объект ТабличныйДокумент с методом Прочитать() либо COM-соединение, для CSV — ЧтениеТекста с разбором строк по разделителю. Обязательно проверяйте данные перед записью: пустые обязательные поля и дубли — главная причина «мусора» в справочниках после загрузки.
Обмен с внешними системами
Для интеграций применяют HTTP-запросы (HTTPСоединение), работу с JSON (ЧтениеJSON/ЗаписьJSON) и веб-сервисы. Такие скрипты требуют обработки ошибок сети: оборачивайте вызовы в Попытка ... Исключение ... КонецПопытки; и логируйте ответы, иначе сбойный обмен оставит данные в несогласованном состоянии.
Как отлаживать и проверять скрипты
Отладка включается в конфигураторе: меню «Отладка → Начать отладку» или клавиша F5. Ставьте точки останова кликом по полю слева от строки, смотрите значения переменных в табло (Shift+F9) и проходите код по шагам. Для внешних обработок предварительно укажите в параметрах отладки, какое приложение запускать, и откройте обработку в уже запущенном сеансе.
Когда точки останова недоступны (фоновые задания, регламентные операции), используйте Сообщить() и запись в журнал регистрации через ЗаписьЖурналаРегистрации(). Журнал потом смотрят в конфигураторе или в разделе администрирования — это основной источник информации о сбоях на сервере.
Проверка результата — обязательный этап. После массовой обработки сформируйте контрольный отчёт: сколько объектов выбрано, сколько записано, сколько пропущено с ошибками. Расхождение чисел — признак того, что часть данных не обработана.
Как проверить результат
Совпадает с количеством в выборке запроса
Меньше выборки — есть пропущенные или ошибочные записи
Документы проводятся без сообщений об ошибках
Ошибки проведения — нарушены обязательные реквизиты или связи
Нет новых ошибок за время выполнения скрипта
Ошибки с именем вашей процедуры — код падает на части данных
Типичные ошибки начинающих и как их избежать
Самая частая ошибка — изменение данных без транзакции. Если скрипт обрабатывает тысячу объектов и падает на пятисотом, база остаётся в полуобработанном состоянии. Решение: оборачивайте логически целостные порции в НачатьТранзакцию() / ЗафиксироватьТранзакцию() с откатом в блоке исключения.
Вторая группа ошибок связана с контекстом выполнения: попытка вызвать серверные методы на клиенте, обращение к модальным диалогам в тонком клиенте, использование НайтиПоНаименованию() без учёта дублей. Ещё одна ловушка — запросы в цикле: платформа выполняет каждый запрос отдельным обращением к СУБД, и обработка на десять тысяч итераций может идти часами вместо секунд.
Когда скрипта недостаточно: ограничения и альтернативы
Не каждую задачу стоит решать кодом. Разовую корректировку данных часто быстрее выполнить типовой обработкой «Групповое изменение реквизитов», загрузку из Excel — типовой «Загрузкой данных из табличного документа», а регулярный обмен — настроить через стандартные планы обмена или конвертацию данных.
Для интеграций вне платформы существует OneScript — открытый интерпретатор языка 1С, который выполняет скрипты из командной строки без запуска конфигуратора. Он подходит для задач DevOps: выгрузки конфигурации, запуска тестов, пакетной обработки файлов, но не заменяет встроенные механизмы работы с данными конкретной базы.
Как выбрать действие
Итоговый критерий прост: если логика повторяется и влияет на работу пользователей — она должна жить в конфигурации или расширении с нормальным сопровождением. Разовые и сервисные операции оставляйте во внешних обработках с понятными инструкциями по запуску.
Что важно запомнить
Пишите скрипты на встроенном языке через внешние обработки для разовых задач и расширения для постоянных. Всегда работайте на копии базы, читайте данные запросами, изменяйте объектами в транзакциях и проверяйте результат контрольными отчётами.
Частые вопросы о написании скриптов для 1С
Нужно ли знать программирование, чтобы писать скрипты для 1С?
Глубокие знания не требуются: достаточно понимать переменные, условия и циклы. Сложнее другое — нужно разбираться в структуре метаданных конкретной конфигурации: какие реквизиты есть у документа, как связаны справочники и регистры. Эту информацию дают конфигуратор и синтакс-помощник (Ctrl+F1 на любом методе).
Чем внешняя обработка отличается от расширения?
Внешняя обработка — это файл, который пользователь открывает вручную; она не меняет поведение программы сама по себе. Расширение подключается к базе администратором и работает постоянно: перехватывает события документов, добавляет кнопки и печатные формы. Для разового скрипта берите обработку, для постоянной доработки — расширение.
Можно ли писать скрипты для 1С на Python или JavaScript?
Напрямую внутри платформы — нет, встроенный язык один. Внешний код на других языках может взаимодействовать с 1С через HTTP-сервисы, веб-сервисы, COM-соединение или файловый обмен. Также существует OneScript — интерпретатор с синтаксисом языка 1С для задач автоматизации вне сеанса платформы.
Как открыть внешнюю обработку, если кнопка недоступна?
Проверьте, что у пользователя есть право интерактивного открытия внешних обработок и отчётов — оно задаётся в ролях. В некоторых конфигурациях дополнительно нужно включить механизм «Дополнительные отчеты и обработки» в настройках администрирования и зарегистрировать файл там.
Что делать, если скрипт испортил данные в рабочей базе?
Немедленно остановите выполнение и не запускайте другие обработки. Восстановите базу из последней резервной копии или, если потеря данных с момента копии недопустима, привлеките специалиста для точечного восстановления по журналу транзакций СУБД. Чтобы ситуация не повторилась, добавьте в скрипт режим предварительного показа изменений без записи.
Где искать готовые примеры кода?
Основные источники — синтакс-помощник в конфигураторе, документация на портале ИТС (по подписке) и типовой код самой конфигурации: общие модули показывают, как разработчики решают типовые задачи. Разбирать готовый рабочий код полезнее, чем собирать решение из фрагментов форумов без проверки.