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