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

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

Как работает программирование в 1С

Как устроено программирование в 1С: встроенный язык, объекты конфигурации, модули, запросы и типовой цикл разработки. Практические советы и частые ошибки.

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

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

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

Из чего состоит платформа и конфигурация

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

Конфигурация состоит из объектов метаданных. Основные группы объектов:

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

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

Как устроен встроенный язык 1С

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

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

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

Пример простого обработчика проведения документа, который списывает товар в регистр остатков:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Для Каждого Строка Из Товары Цикл

Движение = Движения.ОстаткиТоваров.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Номенклатура = Строка.Номенклатура;

Движение.Количество = Строка.Количество;

КонецЦикла;

КонецПроцедуры

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

Клиент-серверная модель и директивы компиляции

В современных конфигурациях код делится на клиентскую и серверную части. Интерфейс и работа с формой выполняются на клиенте, а обращения к базе данных — только на сервере. Граница задаётся директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.

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

Язык запросов и работа с данными

Для выборки данных в 1С используется собственный язык запросов, похожий на SQL, но работающий с объектами конфигурации, а не с физическими таблицами. Запрос к виртуальным таблицам регистров позволяет получать остатки и обороты на любую дату без ручного суммирования движений.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Номенклатура КАК Номенклатура,

| Остатки.КоличествоОстаток КАК Остаток

|ИЗ

| РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Склад = &Склад) КАК Остатки";

Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());

Запрос.УстановитьПараметр("Склад", Склад);

Результат = Запрос.Выполнить().Выгрузить();

Параметры запроса всегда передаются через УстановитьПараметр, а не подстановкой в текст. Это защищает от ошибок форматирования дат и строк и делает код безопаснее. Для чтения больших объёмов данных запрос почти всегда предпочтительнее перебора объектов методом ПолучитьОбъект(), так как выбирает данные одним обращением к СУБД.

Типовой цикл разработки и отладки

Работа над задачей обычно выглядит так: разработчик открывает конфигуратор, добавляет или изменяет объекты метаданных, пишет код в модулях, обновляет конфигурацию базы данных (клавиша F7) и запускает отладку (F5) в режиме предприятия. Платформа перехватывает выполнение на точках останова, позволяет смотреть значения переменных и вычислять выражения.

Порядок действий при доработке
  1. 1
    Сделайте резервную копию базы или выгрузку конфигурации перед изменениями
  2. 2
    Внесите изменения в конфигураторе: объекты, формы, модули
  3. 3
    Обновите конфигурацию базы данных (F7), проверьте отсутствие ошибок реструктуризации
  4. 4
    Запустите отладку (F5) и пройдите сценарий на тестовых данных
  5. 5
    Проверьте результат в отчётах и движениях документов
  6. 6
    Перенесите изменения в рабочую базу через сравнение и объединение конфигураций или расширение

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

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

Большинство проблем в коде 1С связано не с синтаксисом, а с непониманием модели платформы. Разработчик привыкает к классическому программированию и пытается решать задачи «в лоб», игнорируя встроенные механизмы.

Типичные ошибки
01
Чтение данных через ПолучитьОбъект() в цикле вместо одного запроса — резкое падение производительности на больших объёмах
02
Изменение типовой конфигурации вместо расширения — потеря поддержки и конфликты при обновлении
03
Подстановка значений прямо в текст запроса вместо параметров — ошибки форматирования дат и уязвимости
04
Игнорирование параметра Отказ в обработчиках проведения — документ проводится даже при обнаруженных ошибках
05
Обращение к серверу в клиентском цикле — заметные задержки интерфейса у пользователей

Ещё одна частая проблема — работа с датами и итогами регистров. Начинающие разработчики суммируют движения вручную вместо обращения к виртуальным таблицам остатков, что даёт неверные результаты при перепроведении документов задним числом. Правило простое: остатки и обороты берите только из виртуальных таблиц регистров.

Как выстроить обучение и что проверять в результате

Освоение 1С-разработки эффективнее строить от предметной задачи, а не от синтаксиса. Рабочая последовательность: сначала понять устройство справочников, документов и регистров, затем научиться писать запросы, потом освоить проведение и движения, и только после этого — управляемые формы, СКД и интеграции.

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

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

Проведение документа
Норма

Документ проводится, движения в регистрах соответствуют табличной части

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

Движения отсутствуют, дублируются или документ проводится при ошибках

Отчёт по остаткам
Норма

Остатки совпадают с суммой движений и данными до доработки

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

Расхождения в итогах, отрицательные или «зависшие» остатки

Производительность
Норма

Операция выполняется за приемлемое время на реальном объёме данных

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

Заметные паузы, длительные вызовы сервера в замере производительности

Обновление конфигурации
Норма

Типовое обновление устанавливается без конфликтов

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

Изменённые типовые объекты блокируют обновление

Полезная практика — вести разработку на копии рабочей базы с реальными данными: на пустой базе многие проблемы (блокировки, медленные запросы, некорректные итоги) просто не проявляются. Замер производительности в конфигураторе покажет, какие строки кода и запросы занимают основное время.

Итог

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

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

Частые вопросы

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

Нет, встроенный язык 1С можно освоить первым. Базовое понимание алгоритмов (циклы, условия, работа с коллекциями) ускорит обучение, но не является обязательным. Полезнее сразу разбираться в предметной области: основах учёта, документооборота и складских операций.

Чем расширение конфигурации отличается от изменения типового кода?

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

Можно ли писать код 1С на английском синтаксисе?

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

Как отладить код, который выполняется на сервере?

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

Почему запрос возвращает пустой результат, хотя данные в базе есть?

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

Что такое СКД и когда её использовать вместо ручного запроса?

СКД — система компоновки данных, механизм построения отчётов, где разработчик описывает запрос и настройки, а пользователь сам меняет отборы, группировки и порядок без изменения кода. СКД предпочтительна для аналитических отчётов с вариантами настроек; ручной запрос с выводом в табличный документ оправдан для жёстко фиксированных печатных форм.