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