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