Разработка и Конфигурация · 11 мин
Как работает программирование в 1С
Как устроено программирование в 1С: встроенный язык, объекты конфигурации, модули, запросы и типовой цикл разработки. Практические советы и частые ошибки.
Программирование в 1С — это разработка и доработка прикладных решений на платформе «1С:Предприятие» с помощью встроенного языка, визуального конфигуратора и системы объектов метаданных. В отличие от классических языков вроде Python или Java, здесь разработчик не создаёт программу «с нуля», а описывает структуру учёта: документы, справочники, регистры, отчёты, — а платформа сама строит интерфейс, таблицы базы данных и механизмы проведения.
Ключевая особенность подхода — предметная ориентация. Язык 1С содержит готовые конструкции для работы с учётными сущностями: проведение документа, движения по регистрам, периодические реквизиты, итоги. Поэтому типовая задача «начислить зарплату и отразить в учёте» решается настройкой объектов и написанием обработчиков, а не проектированием архитектуры с нуля.
Разработка ведётся в конфигураторе — отдельном режиме запуска платформы. Результатом работы является конфигурация: набор метаданных и кода, который можно выгрузить в файл, обновить у клиента или расширить через механизм расширений без изменения типового решения.
Из чего состоит платформа и конфигурация
Платформа «1С:Предприятие» — это технологическая основа: она включает конфигуратор, встроенный язык, систему компоновки данных, механизм запросов и средства администрирования. Поверх платформы работает конфигурация — прикладное решение, например «Управление торговлей» или самописная учётная система.
Конфигурация состоит из объектов метаданных. Основные группы объектов:
- Справочники — списки условно постоянных данных: контрагенты, номенклатура, сотрудники.
- Документы — факты хозяйственной деятельности: реализация, поступление, приказ о приёме на работу.
- Регистры — накопители данных: регистры накопления хранят остатки и обороты, регистры сведений — произвольные данные в разрезе измерений.
- Отчёты и обработки — средства анализа данных и пакетных операций.
- Планы счетов, планы видов характеристик, планы обмена — объекты для бухгалтерского учёта, гибкой классификации и интеграции.
Когда разработчик добавляет в конфигураторе новый документ с табличной частью, платформа автоматически создаёт таблицы в базе данных, форму ввода и механизм проведения. Это главное отличие от «классической» разработки, где всё это пришлось бы проектировать вручную.
Как устроен встроенный язык 1С
Встроенный язык 1С — интерпретируемый язык с синтаксисом, допускающим как русские, так и английские ключевые слова. На практике в коммерческой разработке почти всегда используется русский синтаксис. Язык слабо типизирован: одна переменная может последовательно хранить число, строку и ссылку на объект.
Код пишется не в отдельных файлах, а в модулях — контейнерах, привязанных к объектам или к конфигурации в целом. Основные виды модулей:
- Модуль объекта — обработчики событий конкретного объекта: проведение документа, запись элемента справочника.
- Модуль формы — логика интерфейса: реакция на нажатия кнопок, заполнение полей.
- Общие модули — библиотеки процедур и функций, доступные из любого места конфигурации.
- Модуль менеджера — операции над объектом в целом, например печать всех документов вида.
Пример простого обработчика проведения документа, который списывает товар в регистр остатков:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Для Каждого Строка Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Количество = Строка.Количество;
КонецЦикла;
КонецПроцедуры
Обратите внимание: никакого SQL и работы с соединениями здесь нет. Разработчик заполняет набор записей движений, а платформа сама сохраняет их в базу и обновляет итоги.
Клиент-серверная модель и директивы компиляции
В современных конфигурациях код делится на клиентскую и серверную части. Интерфейс и работа с формой выполняются на клиенте, а обращения к базе данных — только на сервере. Граница задаётся директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
Типичная ошибка начинающих — попытка выполнить запрос к базе прямо в клиентской процедуре формы. Платформа этого не позволит: данные нужно получать в серверной процедуре и передавать на клиент. При этом данные объекта в форме существуют в виде «данных формы», и для серверной обработки их преобразуют в объект методами РеквизитФормыВЗначение и обратно.
Язык запросов и работа с данными
Для выборки данных в 1С используется собственный язык запросов, похожий на SQL, но работающий с объектами конфигурации, а не с физическими таблицами. Запрос к виртуальным таблицам регистров позволяет получать остатки и обороты на любую дату без ручного суммирования движений.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&Период, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();
Параметры запроса всегда передаются через УстановитьПараметр, а не подстановкой в текст. Это защищает от ошибок форматирования дат и строк и делает код безопаснее. Для чтения больших объёмов данных запрос почти всегда предпочтительнее перебора объектов методом ПолучитьОбъект(), так как выбирает данные одним обращением к СУБД.
Типовой цикл разработки и отладки
Работа над задачей обычно выглядит так: разработчик открывает конфигуратор, добавляет или изменяет объекты метаданных, пишет код в модулях, обновляет конфигурацию базы данных (клавиша F7) и запускает отладку (F5) в режиме предприятия. Платформа перехватывает выполнение на точках останова, позволяет смотреть значения переменных и вычислять выражения.
- 1Сделайте резервную копию базы или выгрузку конфигурации перед изменениями
- 2Внесите изменения в конфигураторе: объекты, формы, модули
- 3Обновите конфигурацию базы данных (F7), проверьте отсутствие ошибок реструктуризации
- 4Запустите отладку (F5) и пройдите сценарий на тестовых данных
- 5Проверьте результат в отчётах и движениях документов
- 6Перенесите изменения в рабочую базу через сравнение и объединение конфигураций или расширение
Для доработки типовых конфигураций, находящихся на поддержке, правильный путь — расширения. Расширение накладывается поверх типовой конфигурации, не снимая её с поддержки, и сохраняет возможность штатного обновления. Прямое изменение типового кода оправдано только когда задача не решается расширением.
Типичные ошибки начинающих разработчиков
Большинство проблем в коде 1С связано не с синтаксисом, а с непониманием модели платформы. Разработчик привыкает к классическому программированию и пытается решать задачи «в лоб», игнорируя встроенные механизмы.
Ещё одна частая проблема — работа с датами и итогами регистров. Начинающие разработчики суммируют движения вручную вместо обращения к виртуальным таблицам остатков, что даёт неверные результаты при перепроведении документов задним числом. Правило простое: остатки и обороты берите только из виртуальных таблиц регистров.
Как выстроить обучение и что проверять в результате
Освоение 1С-разработки эффективнее строить от предметной задачи, а не от синтаксиса. Рабочая последовательность: сначала понять устройство справочников, документов и регистров, затем научиться писать запросы, потом освоить проведение и движения, и только после этого — управляемые формы, СКД и интеграции.
Как проверить результат доработки
Документ проводится, движения в регистрах соответствуют табличной части
Движения отсутствуют, дублируются или документ проводится при ошибках
Остатки совпадают с суммой движений и данными до доработки
Расхождения в итогах, отрицательные или «зависшие» остатки
Операция выполняется за приемлемое время на реальном объёме данных
Заметные паузы, длительные вызовы сервера в замере производительности
Типовое обновление устанавливается без конфликтов
Изменённые типовые объекты блокируют обновление
Полезная практика — вести разработку на копии рабочей базы с реальными данными: на пустой базе многие проблемы (блокировки, медленные запросы, некорректные итоги) просто не проявляются. Замер производительности в конфигураторе покажет, какие строки кода и запросы занимают основное время.
Что важно запомнить
Программирование в 1С — это описание объектов учёта и бизнес-логики поверх готовых механизмов платформы. Ключевые навыки: понимание метаданных, язык запросов, проведение документов и разделение кода на клиент и сервер. Доработки делайте через расширения, тестируйте на копии базы и всегда сохраняйте резервную копию перед обновлением.
Частые вопросы
Нужно ли знать другой язык программирования, чтобы начать работать с 1С?
Нет, встроенный язык 1С можно освоить первым. Базовое понимание алгоритмов (циклы, условия, работа с коллекциями) ускорит обучение, но не является обязательным. Полезнее сразу разбираться в предметной области: основах учёта, документооборота и складских операций.
Чем расширение конфигурации отличается от изменения типового кода?
Расширение хранится отдельно от типовой конфигурации и подключается поверх неё: типовое решение остаётся на поддержке, обновления устанавливаются штатно, а ваши доработки сохраняются. Прямое изменение типового кода снимает объекты с поддержки и приводит к конфликтам при каждом обновлении.
Можно ли писать код 1С на английском синтаксисе?
Да, платформа поддерживает английский вариант встроенного языка, и конфигурации могут разрабатываться с его использованием. Однако в практике российских внедрений стандартом де-факто является русский синтаксис: по нему написана документация, типовые конфигурации и большинство примеров.
Как отладить код, который выполняется на сервере?
В конфигураторе включите отладку серверных вызовов: отладчик платформы умеет подключаться к серверному контексту, если сервер запущен с флагом отладки. В файловом режиме серверный код отлаживается автоматически. Для фоновых заданий используйте подключение отладчика к конкретному сеансу через консоль кластера или настройку предметов отладки.
Почему запрос возвращает пустой результат, хотя данные в базе есть?
Чаще всего дело в параметрах виртуальной таблицы: период остатков задан неверно, отбор по измерению не совпадает по типу с переданным значением, или документы не проведены и движений нет. Проверьте параметры через консоль запросов на копии базы и убедитесь, что даты передаются именно как даты, а не как строки.
Что такое СКД и когда её использовать вместо ручного запроса?
СКД — система компоновки данных, механизм построения отчётов, где разработчик описывает запрос и настройки, а пользователь сам меняет отборы, группировки и порядок без изменения кода. СКД предпочтительна для аналитических отчётов с вариантами настроек; ручной запрос с выводом в табличный документ оправдан для жёстко фиксированных печатных форм.