Разработка и Конфигурация · 13 мин
Как писать программы в 1С: пошаговое руководство для разработчика
Как писать программы в 1С: устройство конфигуратора, встроенный язык, обработчики событий, запросы, отладка и типовые ошибки начинающих разработчиков.
Программирование в 1С отличается от классической разработки: вы не создаёте приложение «с нуля», а расширяете готовую платформу, в которой уже есть объектная модель предметной области — справочники, документы, регистры, отчёты. Встроенный язык 1С по синтаксису напоминает смесь Pascal и BASIC, поддерживает русские и английские идентификаторы и тесно интегрирован с метаданными конфигурации. Поэтому первый навык — не синтаксис, а понимание того, как устроены объекты конфигурации и где именно размещается код.
Большая часть прикладной логики в 1С пишется в обработчиках событий: платформа сама вызывает ваш код при записи документа, проведении, открытии формы или нажатии кнопки. Это снимает необходимость строить каркас приложения, но требует дисциплины: код, размещённый не в том модуле или не в том контексте (клиент/сервер), просто не сработает или будет работать с ошибками.
Ниже разобран практический путь: от настройки конфигуратора и первой процедуры до запросов, отладки и типовых ошибок. Материал ориентирован на тех, кто начинает писать программы в 1С с нуля или переходит с другого языка.
Установка платформы и первый запуск конфигуратора
Для разработки нужны два компонента: платформа 1С:Предприятие и информационная база. Платформа устанавливается из дистрибутива, после чего в списке информационных баз создаётся новая база — для обучения достаточно файлового варианта без сервера. При создании выберите вариант «создание информационной базы без конфигурации», если хотите строить всё самостоятельно, или установите демонстрационную конфигурацию, чтобы изучать готовые примеры кода.
Конфигуратор — это среда разработки 1С. Открывается он выбором базы в стартовом окне и нажатием кнопки «Конфигуратор». Дерево конфигурации (меню «Конфигурация → Открыть конфигурацию») показывает все объекты: справочники, документы, регистры, отчёты, обработки. Двойной щелчок по объекту открывает его свойства, а правой кнопкой через «Открыть модуль» вы попадаете в редактор кода.
Перед началом работы включите полезные настройки: в параметрах конфигуратора (Сервис → Параметры) настройте автозамену и подсказку по синтаксису. Контекстная подсказка (Ctrl+Пробел) и синтакс-помощник (Ctrl+F1 на любом операторе) — основные инструменты самообучения в процессе написания кода.
Устройство встроенного языка: переменные, типы, коллекции
Встроенный язык 1С — нечувствительный к регистру, с нестрогой типизацией. Переменные объявляются ключевым словом «Перем», но внутри процедур можно обойтись и без явного объявления. Основные примитивные типы: Число, Строка, Дата, Булево, Неопределено. Операторы завершаются точкой с запятой, ветвления и циклы закрываются словами «КонецЕсли», «КонецЦикла».
Практически вся работа строится вокруг коллекций и объектов метаданных. Из коллекций чаще всего используются Массив, Структура (пары «ключ-значение» с доступом через точку), Соответствие (произвольные ключи) и ТаблицаЗначений. Объекты метаданных — СправочникОбъект, ДокументОбъект — представляют записи базы и позволяют читать, изменять и записывать данные.
Функция ПолучитьСкидкуКлиента(Клиент) Экспорт
Результат = Новый Структура("Процент, Комментарий", 0, "");
Если Не ЗначениеЗаполнено(Клиент) Тогда
Результат.Комментарий = "Клиент не указан";
Возврат Результат;
КонецЕсли;
Если Клиент.ВипКлиент Тогда
Результат.Процент = 10;
КонецЕсли;
Возврат Результат;
КонецФункции
Обратите внимание на типовой приём: функция возвращает структуру с результатом и пояснением, а не одиночное значение. Это упрощает обработку ошибок на стороне вызова. Также проверка «ЗначениеЗаполнено» перед обращением к реквизитам ссылочного значения — обязательная защита от ошибок на пустых ссылках.
Где размещать код: модули и обработчики событий
Код в 1С живёт в модулях нескольких видов, и выбор правильного модуля — половина правильного решения. Модуль объекта (например, документа) содержит логику самой записи: обработчики «ОбработкаПроведения», «ПередЗаписью», «ПриЗаписи». Модуль формы отвечает за интерфейс: реакции на кнопки, изменение полей. Общие модули — библиотеки переиспользуемых процедур и функций, доступных из любого места конфигурации.
Ключевое понятие — контекст исполнения. Код формы делится на клиентский и серверный: директивы &НаКлиенте и &НаСервере определяют, где выполняется процедура. Обращение к базе данных (запросы, записи объектов) возможно только на сервере. Типичная схема: клиентская процедура-обработчик кнопки вызывает серверную процедуру, которая выполняет работу с данными и возвращает результат.
&НаКлиенте
Процедура РассчитатьСкидку(Команда)
Результат = РассчитатьСкидкуНаСервере(Объект.Клиент);
Если Результат.Процент > 0 Тогда
ПоказатьОповещениеПользователя("Скидка: " + Результат.Процент + "%");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция РассчитатьСкидкуНаСервере(Клиент)
Возврат ОбщегоНазначения.ПолучитьСкидкуКлиента(Клиент);
КонецФункции
Создание первой программы: внешняя обработка
Оптимальный первый проект — внешняя обработка (файл .epf). Она не требует изменения конфигурации, открывается в режиме предприятия через «Файл → Открыть» и безопасна для рабочей базы. В конфигураторе: «Файл → Новый → Внешняя обработка», затем добавьте форму, разместите на ней поле ввода и кнопку, назначьте кнопке команду и обработчик.
- 1Создайте внешнюю обработку через Файл → Новый и сохраните файл
- 2Добавьте форму обработки и разместите на ней поле ввода и кнопку
- 3Создайте команду формы, перетащите её на кнопку и сгенерируйте обработчик
- 4В клиентском обработчике вызовите серверную функцию с логикой
- 5Откройте обработку в режиме предприятия и проверьте результат на тестовых данных
Проверка результата — обязательный этап. Откройте обработку в режиме «1С:Предприятие», запустите и убедитесь, что она ведёт себя корректно на граничных случаях: пустое поле, несуществующий клиент, очень длинная строка. Если обработка изменяет данные, сначала протестируйте её на копии базы и добавьте режим «только показать, что будет сделано» без записи.
Работа с данными: запросы вместо циклов
Язык запросов 1С похож на SQL и является основным способом чтения данных. Начинающие часто пишут обходы в цикле через «Выборка = Справочники.Товары.Выбрать()» — это работает, но медленно и не масштабируется. Запрос с соединениями, группировками и отборами выполняется на стороне СУБД и возвращает готовую выборку.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажи.Номенклатура КАК Номенклатура,
| СУММА(Продажи.Количество) КАК Количество
|ИЗ
| РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК Продажи
|СГРУППИРОВАТЬ ПО
| Продажи.Номенклатура";
Запрос.УстановитьПараметр("Начало", НачалоМесяца(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Конец", КонецМесяца(ТекущаяДатаСеанса()));
Выборка = Запрос.Выполнить().Выбрать();
Два правила безопасной работы с запросами. Первое: всегда передавайте значения через параметры («УстановитьПараметр»), а не подстановкой в текст — это защищает от ошибок форматирования дат и строк. Второе: используйте конструктор запроса (правой кнопкой в модуле → «Конструктор запроса»), пока не выучите синтаксис — он генерирует корректный текст по выбранным таблицам и полям.
Для виртуальных таблиц регистров (Обороты, Остатки, СрезПоследних) избегайте фильтрации в секции «ГДЕ» по полям виртуальной таблицы — передавайте отбор в параметры самой виртуальной таблицы. Иначе платформа сначала построит всю таблицу, а потом отфильтрует, что на больших базах приводит к заметным задержкам.
Отладка и поиск ошибок
Встроенный отладчик конфигуратора позволяет ставить точки останова (F9), выполнять код по шагам (F10/F11) и смотреть значения переменных через табло (Shift+F9) и окно вычисления выражений. Для отладки кода, выполняемого в режиме предприятия, включите в конфигураторе «Отладка → Подключение» и разрешите отладку в свойствах базы; в клиент-серверном варианте отладка настраивается на сервере.
Когда отладчик недоступен (например, фоновое задание или код на сервере без настроенной отладки), используйте «Сообщить» для вывода промежуточных значений и запись в журнал регистрации через «ЗаписьЖурналаРегистрации». Журнал регистрации — первое место, куда стоит смотреть при жалобах «документ не проводится»: там фиксируются ошибки с текстом и местом возникновения.
Как проверить результат
Конфигурация → Проверка конфигурации проходит без ошибок по вашему модулю
Сообщения о необъявленных переменных или несуществующих методах
Код срабатывает, результат соответствует ожиданию на тестовых данных
Обработчик не вызывается — проверьте привязку команды или события
Записанные объекты корректны, проведение проходит, движения по регистрам верны
Ошибки при записи, дубли движений, отмена транзакции
Частые ошибки начинающих и как их избежать
Самая распространённая ошибка — обращение к реквизиту через точку от переменной, в которой лежит «Неопределено» или пустая ссылка. Всегда проверяйте «ЗначениеЗаполнено» и результат функций поиска («НайтиПоКоду», «НайтиПоНаименованию») на пустую ссылку перед использованием. Вторая типовая проблема — модальные вызовы («Вопрос», «ОткрытьЗначение») в тонком и веб-клиенте: используйте немодальные аналоги с описанием оповещения — «ПоказатьВопрос», «ПоказатьВводЗначения».
Третья группа ошибок — производительность: запросы в цикле, обращение к данным через точку от результата запроса (скрытые запросы), отсутствие индексирования полей отбора. Правило простое: один запрос вне цикла всегда лучше тысячи запросов внутри него. Если нужны данные связанных объектов — получайте их соединением в том же запросе.
Наконец, не пренебрегайте транзакциями при групповых изменениях: «НачатьТранзакцию» / «ЗафиксироватьТранзакцию» с обработкой исключений через «Попытка...Исключение...ОтменитьТранзакцию» гарантирует, что при сбое база не останется в полуизменённом состоянии.
Чтение чужого кода типовых конфигураций — самый быстрый способ вырасти как разработчику 1С. Откройте общие модули демонстрационной конфигурации и посмотрите, как оформлены функции: области (#Область), комментарии, проверки входных параметров. Перенимайте эти приёмы с первых дней.
Как развиваться дальше
После освоения обработок и запросов логичный следующий шаг — расширения конфигурации. Они позволяют добавлять код и объекты поверх типовой конфигурации без снятия её с поддержки, что критично для обновляемых рабочих баз. Механика та же: модули, обработчики, формы — но в отдельном слое, который легко отключить.
Далее осваивайте схему компоновки данных (СКД) для отчётов, механизм обмена данными, фоновые задания и работу с HTTP-сервисами для интеграций. Каждая из этих тем опирается на базу, описанную выше: модули, контекст исполнения, запросы и отладка.
Что важно запомнить
Программа в 1С — это код в модулях, вызываемый платформой через обработчики событий. Освойте конфигуратор, различайте клиентский и серверный контекст, читайте данные запросами, проверяйте результат на копии базы и используйте отладчик. Начните с внешней обработки — это безопасный полигон для первых программ.
Частые вопросы
Нужно ли знать другой язык программирования, чтобы начать писать в 1С?
Нет, встроенный язык 1С вполне подходит как первый. Базовые концепции — переменные, условия, циклы, функции — осваиваются на практике за несколько недель. Знание SQL заметно ускорит изучение языка запросов, но не является обязательным: конструктор запросов позволяет собирать их визуально.
Можно ли писать код на русском языке и не будет ли это проблемой?
Да, встроенный язык полностью поддерживает русский синтаксис, и в типовых российских конфигурациях код написан именно на нём. Проблем не будет, если вы работаете в русскоязычной среде разработки. Английский вариант синтаксиса имеет смысл при работе в международных командах или с зарубежными конфигурациями.
Чем внешняя обработка отличается от изменения конфигурации?
Внешняя обработка — отдельный файл, который открывается в режиме предприятия и не меняет конфигурацию базы. Изменение конфигурации встраивает объекты и код в саму базу и требует обновления конфигурации базы данных. Для обучения и разовых задач используйте обработки; для постоянной функциональности — расширения или доработку конфигурации.
Почему мой обработчик кнопки не срабатывает?
Чаще всего команда не привязана к кнопке или обработчик создан для другой команды. Проверьте свойство «ИмяКоманды» у кнопки и наличие процедуры с соответствующим именем в модуле формы. Также убедитесь, что процедура объявлена с директивой &НаКлиенте — серверная процедура не может быть обработчиком команды формы напрямую.
Как безопасно тестировать код, который изменяет данные?
Работайте только на копии базы: для файлового варианта достаточно скопировать каталог базы или выгрузить её через конфигуратор. Добавьте в обработку режим предварительного просмотра без записи, ограничьте первые запуски малым количеством объектов и оборачивайте изменения в транзакцию с откатом при ошибке.
Что делать, если конфигурация закрыта паролем или поставляется без исходного кода?
Модули, защищённые паролем или поставляемые без исходных текстов, посмотреть и изменить нельзя — это осознанное ограничение поставщика. Обходить такую защиту не следует. Вместо этого используйте расширения конфигурации: они позволяют добавлять собственные обработчики и подменять вызовы типовых процедур легальным способом.