Разработка новой функциональности в 1С 8.3: как это устроено и с чего начать

· 9 мин

Содержание

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

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

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

Из чего собирается функция: объекты метаданных

Дерево конфигурации в Конфигураторе (Конфигурация → Открыть конфигурацию) — это и есть список того, что база умеет. Новая функция почти всегда начинается с нового объекта метаданных или доработки существующего.

Основные типы объектов и за что они отвечают:

  • 📁 Справочники — списки условно-постоянных данных: номенклатура, контрагенты, склады, физлица.
  • 📄 Документы — события хозяйственной жизни с датой и номером: поступление, реализация, начисление. Документ умеет проводиться и формировать движения.
  • 📊 Регистры (накопления, сведений, бухгалтерии, расчёта) — хранилище итогов и движений, на них строится учёт.
  • 📈 Отчёты — вывод и анализ накопленных данных, чаще всего на системе компоновки данных.
  • ⚙️ Обработки — сервисные инструменты без хранения данных: загрузка, пересчёт, групповое изменение.
  • 🔁 Планы обмена — описание узлов и правил синхронизации между базами.
  • 🔑 Роли — наборы прав доступа к объектам.
  • 🔢 Константы, перечисления, планы видов характеристик — вспомогательные объекты для настроек и типизации.

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

Расширение конфигурации или правка типовой

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

Как добавить функцию: расширением или правкой типовой?

Расширение подключают в режиме предприятия через Главное меню → Функции для технического специалиста → Расширения конфигурации или в Конфигураторе. После загрузки .cfe выполняется отдельный шаг — обновление конфигурации базы данных. Если расширение меняет структуру данных (добавляет реквизит, объект), для обновления базе нужен монопольный доступ.

Где писать код: модули и встроенный язык

Логику функции пишут на встроенном языке 1С в модулях. Каждый модуль привязан к своему объекту и исполняется в своём контексте.

Чаще всего вы работаете с такими модулями:

  • Модуль объекта (у справочника, документа) — обработчики ПередЗаписью, ОбработкаПроведения, ОбработкаЗаполнения. Здесь логика самого объекта.
  • Модуль формы — реакция на действия пользователя: нажатия, изменения полей, открытие формы.
  • Общие модули — повторно используемый код без привязки к объекту. У общего модуля в свойствах задаётся, где он выполняется: Сервер, Клиент (управляемое приложение), Внешнее соединение и флаг «Вызов сервера».
  • Модуль менеджера — процедуры уровня объекта в целом, а не конкретного экземпляра.

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

Простой пример — обработка проведения документа, которая списывает товар в регистр накопления остатков:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого СтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = СтрокаТовары.Номенклатура;
        Движение.Количество = СтрокаТовары.Количество;
    КонецЦикла;
КонецПроцедуры

Отлаживают код через Отладка → Начать отладку в Конфигураторе: ставят точку останова и смотрят значения переменных на реальных данных. Это быстрее, чем вставлять Сообщить() по тексту.

Управляемые формы: интерфейс функции

Интерфейс в 1С 8.3 строят на управляемых формах (интерфейс «Такси»). Форма — это не просто картинка: у неё есть собственные реквизиты, данные объекта и обработчики событий.

Как собрать форму новой функции:

  1. В объекте откройте вкладку Формы и добавьте форму нужного вида (формы элемента, списка, выбора).
  2. В конструкторе перетащите реквизиты объекта на форму — поля создадутся автоматически.
  3. Для действий добавьте команды формы и вынесите их на командную панель кнопками.
  4. В модуле формы опишите обработчики: ПриОткрытии, ПриИзменении поля, обработчик команды.

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

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

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

Регистры: где хранятся движения и итоги

Справочники и документы хранят исходные данные, а итоги учёта накапливают регистры. Без них отчёт «остаток товара на складе» пришлось бы каждый раз собирать перебором всех документов.

Какой регистр под какую задачу:

Тип регистраДля чегоПример
Накопления (остатки)что-то приходит и расходуетсяостатки товаров, денег
Накопления (обороты)только суммарный потокпродажи за период
Сведенийсрез значений на датукурсы валют, цены
Бухгалтериипроводки по плану счетоввзаиморасчёты, учёт ОС
Расчётавзаимозависимые начислениязарплата, удержания

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

Проведение документа не только записывает движения — оно выполняет контроль (например, запрет отрицательного остатка). Логику контроля держите в обработке проведения, а не в форме: иначе движения появятся и при записи документа через обмен, минуя форму.

Отчёты и анализ данных на СКД

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

Порядок создания отчёта:

  1. Добавьте объект Отчёт, откройте схему компоновки данных.
  2. На вкладке Наборы данных напишите запрос — чаще к виртуальной таблице регистра.
  3. На вкладке Настройки задайте поля, группировки и отборы по умолчанию.
  4. Укажите роли, которым отчёт доступен, и поместите его в подсистему, чтобы он появился в нужном разделе интерфейса.

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

СКД закрывает и типовую аналитику, и сложные отчёты с вычисляемыми полями, пользовательскими настройками и условным оформлением. Если задача — просто выгрузить данные в таблицу или файл, иногда проще сделать обработку с выводом в табличный документ или в ТаблицаЗначений.

Обмен данными и интеграция с внешними системами

Отдельный класс функций — обмен с другими базами и программами. Способ выбирают по тому, что на другой стороне.

  • Между базами 1С — планы обмена и типовой формат EnterpriseData. Правила сопоставления объектов настраивают в «Конвертации данных», выгрузка идёт в XML.
  • С внешними сервисами по сети — web-сервисы (SOAP) и HTTP-сервисы. HTTP-сервис отдаёт и принимает данные в JSON/XML, его публикуют на веб-сервере.
  • Файлами — выгрузка и загрузка через ЧтениеXML, ЧтениеJSON, работа с текстовыми и табличными файлами.
  • Локально с приложениями Windows — COM-соединение (например, обмен с другой программой на том же сервере).

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

Выбор между SOAP и HTTP-сервисом простой: SOAP строже типизирован и описывается WSDL, HTTP-сервис легче и удобнее для REST-подобного обмена JSON. И тот и другой публикуют на веб-сервере (Apache или IIS) вместе с базой.

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

Роли, права доступа и ограничение на уровне записей

Какие функции доступны конкретному пользователю, определяют роли. Роль — это объект метаданных со списком прав на каждый объект: чтение, добавление, изменение, проведение, просмотр.

Как настроить доступ:

  1. В ветке Общие → Роли создайте роль или откройте существующую.
  2. Отметьте права на нужные объекты и реквизиты.
  3. В режиме предприятия назначьте роль пользователю или группе доступа (в типовых конфигурациях — через настройку прав, а не напрямую в списке пользователей).

Когда доступ нужен не ко всему объекту, а к части записей (например, менеджер видит только своих контрагентов), применяют ограничение доступа на уровне записей — RLS. Условие доступа описывается в роли на языке запросов и фильтрует данные прозрачно для пользователя.

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

Частые ошибки при разработке функций

  • 🚫 Правка типовой вместо расширения. Конфигурация уходит с поддержки, каждое обновление превращается в ручное сравнение. Начинайте с расширения.
  • 🚫 Логика в форме, а не в модуле объекта. Код, который должен срабатывать всегда, в обработчике формы не выполнится при записи через обмен или программно.
  • 🚫 Чтение остатков перебором документов. Для итогов есть регистры и виртуальные таблицы — они и быстрее, и устойчивее к ошибкам.
  • 🚫 Запросы к базе в клиентском контексте. Работу с данными выносите на сервер директивой &НаСервере или в серверный общий модуль.
  • 🚫 Обновление структуры без монопольного доступа и копии. Любое изменение метаданных — повод сначала сделать резервную копию.
Перед внедрением новой функции проверьте
Выполнено: 0 / 6

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

Можно ли сделать новую функцию в 1С без программирования?
Часть задач закрывается штатными настройками: условным оформлением списков, пользовательскими отчётами на СКД, настройкой прав. Но новый объект или нестандартная логика без встроенного языка и Конфигуратора не появятся.
Чем расширение отличается от обычной доработки конфигурации?
Расширение накладывается поверх типовой и не снимает её с поддержки — обновления ставятся штатно. Правка самой конфигурации делает обновление ручным. Для большинства доработок выбирают расширение.
Где в 1С 8.3 вообще пишут код?
В Конфигураторе, в модулях: объекта, формы, общих модулях. Открыть модуль можно из дерева конфигурации или по клавише F12 на процедуре. В режиме предприятия код не редактируется.
Что такое движения документа и зачем они нужны?
Это записи, которые документ при проведении добавляет в регистры: приход или расход товара, проводку, начисление. На движениях строятся все итоги и отчёты, поэтому учёт живёт именно в регистрах, а не в самих документах.
Как ограничить доступ пользователя к части данных?
Через роли, а для отбора по записям — через ограничение доступа на уровне записей (RLS). Условие пишется на языке запросов прямо в роли и фильтрует данные незаметно для пользователя.