Разработка и Конфигурация · 12 мин
Код 1С: что это и как с ним работать
Что такое код 1С, на каком языке он пишется, где хранится и как его читать. Разбор встроенного языка, модулей, запросов и типичных ошибок новичков.
Код 1С — это текст программы, написанный на встроенном языке платформы «1С:Предприятие». Именно этот код определяет, как программа реагирует на действия пользователя: что происходит при нажатии кнопки, как рассчитывается итог документа, какие проверки выполняются перед записью. Без кода 1С была бы просто набором таблиц и форм — вся бизнес-логика описывается именно программным текстом.
Важно понимать: «код 1С» — не отдельный язык программирования вроде Python или C++, а встроенный язык, который работает только внутри платформы 1С. Он тесно связан с объектами конфигурации: справочниками, документами, регистрами, отчётами. Обратиться к базе данных, создать документ или получить остатки по складу можно прямо из кода, без внешних библиотек.
Писать и редактировать код можно в конфигураторе — специальном режиме запуска 1С, предназначенном для разработчиков и администраторов. Обычный пользователь, работающий в режиме «Предприятие», код не видит и не меняет. Поэтому вопрос «что такое код 1С» чаще всего возникает у тех, кто впервые открыл конфигуратор, увидел незнакомый текст в модулях или получил от программиста фрагмент кода для проверки.
Что представляет собой встроенный язык 1С
Встроенный язык 1С — это предметно-ориентированный язык, созданный специально для автоматизации учёта и бизнес-процессов. Его главная особенность — синтаксис на русском языке: ключевые слова выглядят как «Если», «Тогда», «КонецЕсли», «Процедура», «Функция». Для тех, кто привык к англоязычным языкам, существует полный английский аналог синтаксиса (If, Then, EndIf, Procedure, Function), и оба варианта можно смешивать в одной конфигурации.
Язык 1С относится к интерпретируемым: код не компилируется в отдельный исполняемый файл, а выполняется платформой во время работы. Это упрощает внесение изменений — поправил текст модуля, обновил конфигурацию базы данных, и логика сразу заработала. Обратная сторона — многие ошибки проявляются только в момент выполнения конкретной строки.
Типизация в языке мягкая: переменную не нужно заранее объявлять с указанием типа. Одной и той же переменной можно сначала присвоить число, а потом строку — платформа это разрешит, хотя с точки зрения качества кода так делать не стоит. Даты, числа, строки, булево и значение «Неопределено» — базовые типы, с которыми код работает чаще всего.
Где физически хранится и пишется код
Весь код конфигурации распределён по модулям. У каждого документа, справочника или отчёта есть модуль объекта, у формы — модуль формы, у приложения в целом — модуль приложения. Логику, которая нужна в разных местах, выносят в общие модули, чтобы не дублировать текст.
Чтобы увидеть код, нужно открыть конфигуратор, загрузить конфигурацию и в дереве объектов выбрать нужный элемент, затем через контекстное меню открыть соответствующий модуль. Для типовых конфигураций, находящихся на поддержке, код может быть закрыт от изменений — его можно просматривать, но редактирование потребует снятия объекта с полной поддержки.
- 1Запустите ярлык 1С и выберите режим «Конфигуратор» для нужной базы
- 2Откройте конфигурацию через меню «Конфигурация → Открыть конфигурацию»
- 3В дереве конфигурации найдите нужный объект, например документ «Реализация товаров»
- 4Щёлкните правой кнопкой и выберите «Открыть модуль объекта» или «Открыть модуль формы»
- 5Изучите текст: процедуры и функции идут друг за другом, обработчики событий имеют стандартные имена
Для внешних доработок код также хранится во внешних обработках и отчётах — файлах с расширением .epf и .erf. Их можно открыть в конфигураторе без изменения самой конфигурации, что удобно для разовых операций: загрузки данных, группового изменения реквизитов, тестирования алгоритмов.
Как выглядит типичный код: пример и разбор
Проще всего понять природу кода 1С на небольшом примере. Ниже — функция, которая проверяет заполненность контрагента в документе и возвращает результат проверки.
Функция КонтрагентЗаполнен(ДокументОбъект)
Если Не ЗначениеЗаполнено(ДокументОбъект.Контрагент) Тогда
Сообщить("Не указан контрагент в документе!");
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Здесь видно несколько характерных черт языка. Каждая функция начинается со слова «Функция» и заканчивается «КонецФункции». Условие строится через «Если … Тогда … КонецЕсли». Точка с запятой завершает каждый оператор — её пропуск является самой частой синтаксической ошибкой у новичков. Комментарии пишутся после двойного слэша «//».
// Пример выборки данных запросом
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура, Количество ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить(Результат.Номенклатура);
КонецЦикла;Отдельного внимания заслуживает язык запросов 1С. Он похож на SQL, но тоже допускает русские ключевые слова (ВЫБРАТЬ, ИЗ, ГДЕ) и работает не с физическими таблицами базы, а с объектами конфигурации. Запросы встраиваются прямо в код как текст, что видно в примере выше.
Обработчики событий: когда код выполняется сам
Значительная часть кода 1С не вызывается напрямую, а привязана к событиям. Когда пользователь записывает документ, платформа сама выполняет обработчик «ПередЗаписью», затем «ПриЗаписи». Когда открывается форма — срабатывает «ПриОткрытии». Программист размещает свою логику внутри этих стандартных процедур, и платформа вызывает их в нужный момент.
Это объясняет, почему в модулях типовых конфигураций встречаются процедуры, которые нигде явно не вызываются: их запускает платформа. Удалять или переименовывать такие обработчики нельзя — событие просто перестанет обрабатываться. Если нужно добавить свою логику, её дописывают в существующий обработчик или создают подписку на событие.
Клиентский и серверный код: в чём разница
В современных конфигурациях код делится на клиентский и серверный. Клиентский выполняется на компьютере пользователя и отвечает за интерфейс: реакцию на клики, открытие форм, диалоги. Серверный работает на сервере 1С и занимается данными: записями в базу, проведением документов, тяжёлыми расчётами.
В модулях форм это разделение обозначается директивами «&НаКлиенте» и «&НаСервере» перед процедурой. Из клиентской процедуры нельзя напрямую обратиться к базе данных — например, выполнить запрос. Для этого вызывают серверную процедуру, которая делает работу с данными и возвращает результат. Игнорирование этого правила — типичная причина ошибок вида «вызов сервера» или попыток выполнить недопустимую операцию на клиенте.
Где размещать логику
Подходит для работы с формой, диалогов, предупреждений пользователю. Ограничение: нет прямого доступа к данным базы.
Подходит для запросов, записи объектов, расчётов. Ограничение: нельзя показывать пользователю интерактивные окна.
Подходит для логики, нужной в нескольких местах. Флаги «Сервер» и «Клиент» в свойствах модуля определяют, где он исполняется.
Как читать чужой код и искать нужное место
Чтение чужого кода в типовой конфигурации — навык сам по себе: объёмы там большие, и листать модули целиком бессмысленно. Основной инструмент — глобальный поиск по конфигурации (Ctrl+Shift+F в конфигураторе), который находит все вхождения процедуры, реквизита или фрагмента текста по всем модулям сразу.
Полезно начинать не с кода, а с объекта: открыть форму или документ, найти кнопку или действие, которое вас интересует, и посмотреть, какой обработчик к нему привязан. От обработчика по цепочке вызовов (команда «Перейти к определению» по F12) можно пройти вглубь логики до нужного места.
- 1Определите объект: документ, справочник или отчёт, где происходит действие
- 2Откройте модуль формы этого объекта в конфигураторе
- 3Найдите обработчик команды или кнопки — обычно имя совпадает с названием кнопки
- 4Через F12 перейдите к вызываемым процедурам и функциям
- 5Используйте глобальный поиск, если логика ушла в общие модули
Типичные ошибки при работе с кодом 1С
Новички в 1С чаще всего спотыкаются не о сложные алгоритмы, а о специфику платформы. Понимание типовых ловушек экономит часы отладки и защищает данные от порчи.
Отдельная группа проблем — работа с типовыми конфигурациями на поддержке. Прямое изменение их модулей снимает объекты с полной поддержки и усложняет обновления. Современный подход — использовать расширения конфигурации: механизм, который позволяет добавлять и переопределять код, не трогая исходный текст типовой.
Как проверить, что код работает правильно
В конфигураторе встроен отладчик: точки останова (F9 на строке), пошаговое выполнение, просмотр значений переменных и табло выражений. Отладка запускается через меню «Отладка → Начать отладку» — конфигуратор подключается к сеансу и останавливает выполнение на отмеченных строках.
Для быстрой проверки отдельных выражений удобна команда «Вычислить выражение» (Shift+F9) в момент остановки. Перед переносом доработки в рабочую базу стоит пройти типовой сценарий целиком: создать документ, заполнить, провести, отменить проведение — и убедиться, что ни на одном шаге нет ошибок и данные в отчётах сходятся.
Как проверить результат
Проверка конфигурации (Ctrl+F7) не выдаёт ошибок
Сообщения о неизвестных именах, пропущенных операторах
В отладчике точка останова в процедуре срабатывает
Точка не срабатывает — событие не наступает или процедура названа неверно
Отчёты и движения документа соответствуют ожиданию
Движения отсутствуют, суммы не сходятся, появляются дубли
Если нужно разово выполнить фрагмент кода в рабочей базе, используйте внешнюю обработку типа «консоль кода», а не правку конфигурации. Такой запуск не меняет конфигурацию, легко повторяется на копии базы и не мешает последующим обновлениям.
Ответы на частые вопросы
Код 1С — это язык программирования или что-то другое?
Это полноценный встроенный язык платформы «1С:Предприятие» со своими конструкциями: условиями, циклами, процедурами, функциями, обработкой исключений. Отличие от универсальных языков в том, что он работает только внутри платформы и тесно интегрирован с объектами конфигурации и языком запросов.
Можно ли писать код 1С на английском?
Да. У встроенного языка есть полный английский синтаксис: If, Then, EndIf, Procedure, Function и так далее. Оба варианта равнозначны и могут соседствовать в одной конфигурации. В типовых российских конфигурациях используется русский синтаксис.
Где посмотреть код, если я обычный пользователь, а не программист?
Запустите базу в режиме «Конфигуратор», откройте конфигурацию и в дереве объектов найдите нужный элемент, затем откройте его модуль. Для просмотра прав на изменение не требуется, но нужны права на запуск конфигуратора. Если конфигурация типовая и закрыта, код будет доступен только для чтения.
Чем отличается код в модуле объекта от кода в модуле формы?
Модуль объекта отвечает за данные: проведение, запись, проверки заполнения — он работает на сервере независимо от интерфейса. Модуль формы отвечает за поведение экранной формы: реакцию на кнопки, видимость элементов, ввод данных. Одна и та же операция, например запись документа, может затрагивать оба модуля.
Безопасно ли самостоятельно менять код в типовой конфигурации?
Прямое изменение типового кода снимает объекты с полной поддержки и создаёт риски при обновлениях: доработки могут быть утеряны или заблокируют установку обновления. Безопасные варианты — расширения конфигурации и внешние обработки. Любые изменения сначала проверяйте на копии базы.
Что делать, если после изменения кода программа выдаёт ошибку?
Сначала запустите проверку конфигурации (Ctrl+F7) — она покажет синтаксические ошибки с указанием модуля и строки. Если синтаксис в порядке, воспользуйтесь отладчиком: поставьте точку останова перед проблемным местом и выполните действие пошагово, наблюдая значения переменных. При невозможности быстро найти причину откатитесь к резервной копии конфигурации.
Что важно запомнить
Код 1С — это текст на встроенном языке платформы, хранящийся в модулях объектов конфигурации и редактируемый в конфигураторе. Код делится на клиентский и серверный, значительная часть логики срабатывает через обработчики событий. Изменения вносите через расширения или после снятия копии, а результат проверяйте отладчиком и контролем данных.