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

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

1С: как писать конфигурации — от структуры метаданных до отладки

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

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

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

Что нужно знать перед началом разработки

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

Важно различать два режима работы: конфигуратор (где изменяется структура и код) и режим «Предприятие» (где пользователи работают с данными). Изменения конфигурации вступают в силу после обновления конфигурации базы данных — нажатие клавиши F7 в конфигураторе. Пока обновление не выполнено, пользователи видят старую структуру.

Ещё одно ключевое понятие — управляемые формы, которые стали стандартом для современных конфигураций. В отличие от старых обычных форм, управляемая форма описывается декларативно, а её код выполняется в разделённых контекстах: на клиенте и на сервере. Это накладывает ограничения: в клиентском контексте недоступны прямые запросы к базе и многие серверные объекты.

Создание пустой конфигурации и структура метаданных

Новая конфигурация создаётся через меню «Конфигурация — Открыть конфигурацию» в пустой базе. Далее дерево метаданных наполняется объектами. Типовой минимальный набор для учётной задачи выглядит так: справочники (номенклатура, контрагенты, сотрудники), документы (приход, расход, начисления), регистры накопления (остатки, продажи), регистры сведений (цены, курсы, настройки), отчёты.

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

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

Работа со справочниками и документами

Справочник описывает относительно постоянные сущности. При его создании задайте длину наименования, иерархию (если нужны группы), владельца (для подчинённых справочников, например «Единицы измерения» у «Номенклатуры») и дополнительные реквизиты. Код справочника формируется автоматически, но можно включить ручную нумерацию.

Документ — центральный объект учёта. У него есть номер, дата, реквизиты шапки и табличные части. Логика записи движений размещается в модуле объекта в обработчике ОбработкаПроведения. Самый быстрый способ получить корректный код проведения — конструктор движений: он генерирует заготовку запроса по табличной части и запись в регистр.

Пример простейшего проведения документа «ПриходТовара» по регистру «ОстаткиТоваров»:

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

Движения.ОстаткиТоваров.Записывать = Истина;

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

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

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

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

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

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

КонецЦикла;

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

Обратите внимание на параметр Отказ: установка Отказ = Истина прерывает проведение, например при отрицательном остатке. Проверку остатков корректнее выполнять запросом к регистру сразу для всей табличной части, а не в цикле — это быстрее и устойчивее к блокировкам.

Регистры: где хранить учётные данные

Регистры — основа учётной модели 1С. Регистр накопления с видом «Остатки» хранит приходы и расходы и позволяет мгновенно получать остаток на любую дату; с видом «Обороты» — только обороты за период. Регистр сведений хранит значения в разрезе измерений, например цену товара на дату (режим «подчинён регистратору» или независимый периодический).

Ключевое проектное решение — выбор измерений и ресурсов. Измерения — это разрезы учёта (номенклатура, склад, организация), ресурсы — накапливаемые величины (количество, сумма). Избыточные измерения раздувают таблицы и замедляют запросы, недостаток измерений делает невозможным нужные отчёты. Проектируйте измерения исходя из списка отчётов, которые должна давать система.

Какой регистр выбрать

Регистр накопления «Остатки»

Когда нужен остаток на дату: складские запасы, взаиморасчёты, деньги. Требует движений с видом Приход/Расход.

Регистр накопления «Обороты»

Когда важны только обороты за период: объёмы продаж, выпуск продукции. Остаток не вычисляется.

Регистр сведений периодический

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

Регистр сведений непериодический

Для настроек и соответствий без истории: соответствие контрагентов и договоров, параметры учёта.

Встроенный язык и язык запросов

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

Язык запросов 1С похож на SQL, но работает с именами метаданных, а не физических таблиц. Он поддерживает виртуальные таблицы регистров: Остатки, Обороты, СрезПоследних — именно через них получают учётные данные для отчётов и проверок. Пример получения остатков:

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

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

"ВЫБРАТЬ

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

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

|ИЗ

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

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

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

Несколько жёстких правил: не выполняйте запросы внутри цикла, если можно собрать данные одним запросом; всегда используйте параметры вместо подстановки строк в текст запроса — это защищает от ошибок и инъекций; для чтения больших выборок в цикле применяйте Выбрать() вместо выгрузки всей таблицы в память.

Формы, отчёты и права доступа

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

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

Права настраиваются через роли в конфигураторе: для каждой роли задаются права на чтение, добавление, изменение, удаление по каждому объекту. Не давайте всем пользователям роль «ПолныеПрава» в рабочей базе — это снимает контроль и мешает расследовать ошибки. Для тонкой настройки используйте ограничение доступа к данным (RLS) на уровне записей.

Отладка, тестирование и безопасное обновление

Отладчик конфигуратора запускается кнопкой «Начать отладку» (F5): ставьте точки останова, смотрите значения переменных в табло, вычисляйте выражения через Shift+F9. Для отладки серверного кода в клиент-серверном варианте убедитесь, что отладка на сервере разрешена. Ошибки проведения удобно локализовать через журнал регистрации и сообщения, выводимые методом Сообщить() или объектом СообщениеПользователю.

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

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

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

Можно ли писать конфигурацию 1С без навыков программирования?

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

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

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

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

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

Как проверить конфигурацию перед запуском в работу?

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

Нужен ли клиент-серверный вариант для обучения?

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

Где искать ошибку, если документ не проводится?

Сначала посмотрите сообщения в окне служебных сообщений — обычно там указана причина отказа. Затем запустите отладку с точкой останова в ОбработкаПроведения и пройдите код по шагам, проверяя значения переменных и результаты запросов контроля остатков.

Итог

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

Конфигурация 1С строится вокруг метаданных: справочники хранят сущности, документы фиксируют события, регистры накапливают учётные данные. Логика пишется на встроенном языке в модулях с учётом клиент-серверного разделения, данные читаются запросами через виртуальные таблицы. Разработку и отладку ведите на копии базы, рабочую обновляйте только после резервного копирования.