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