Разработка новой функциональности в 1С 8.3: как это устроено и с чего начать
Содержание
Любая функция в 1С — справочник, документ, регистр, отчёт, обмен — делается в Конфигураторе (или в расширении конфигурации) из объектов метаданных, а поведение задаётся кодом на встроенном языке. База возможностей собирается из двух слоёв: что хранить и как это обрабатывать. Отдельной кнопки «сделать все функции сразу» в 1С нет — каждую возможность добавляют своим объектом и его кодом.
Чтобы добавить в 1С почти любую функцию, проходят один и тот же путь: спроектировать объект → описать его структуру → написать логику в модуле → собрать форму → при необходимости добавить движения по регистрам, отчёт и права доступа . Каждый слой этого пути разберём отдельно, с конкретными объектами и примерами.
Менять конфигурацию умеет только пользователь с правами разработчика, через Конфигуратор. Перед изменениями типовой базы снимите резервную копию — откатить структуру данных после обновления сложнее, чем код.
Из чего собирается функция: объекты метаданных
Дерево конфигурации в Конфигураторе (Конфигурация → Открыть конфигурацию) — это и есть список того, что база умеет. Новая функция почти всегда начинается с нового объекта метаданных или доработки существующего.
Основные типы объектов и за что они отвечают:
- 📁 Справочники — списки условно-постоянных данных: номенклатура, контрагенты, склады, физлица.
- 📄 Документы — события хозяйственной жизни с датой и номером: поступление, реализация, начисление. Документ умеет проводиться и формировать движения.
- 📊 Регистры (накопления, сведений, бухгалтерии, расчёта) — хранилище итогов и движений, на них строится учёт.
- 📈 Отчёты — вывод и анализ накопленных данных, чаще всего на системе компоновки данных.
- ⚙️ Обработки — сервисные инструменты без хранения данных: загрузка, пересчёт, групповое изменение.
- 🔁 Планы обмена — описание узлов и правил синхронизации между базами.
- 🔑 Роли — наборы прав доступа к объектам.
- 🔢 Константы, перечисления, планы видов характеристик — вспомогательные объекты для настроек и типизации.
Прежде чем создавать объект, решите, где именно его разместить: прямо в типовой конфигурации или в расширении.
Расширение конфигурации или правка типовой
Начиная с платформы 8.3.6 доработки можно оформить расширением — отдельным файлом, который накладывается поверх типовой конфигурации и не снимает её с поддержки. Это главный практический приём: типовая остаётся обновляемой, а ваши изменения живут отдельно.
.cfe.Расширение подключают в режиме предприятия через Главное меню → Функции для технического специалиста → Расширения конфигурации или в Конфигураторе. После загрузки .cfe выполняется отдельный шаг — обновление конфигурации
базы данных. Если расширение меняет структуру данных (добавляет реквизит, объект), для обновления базе нужен монопольный доступ.
Где писать код: модули и встроенный язык
Логику функции пишут на встроенном языке 1С в модулях. Каждый модуль привязан к своему объекту и исполняется в своём контексте.
Чаще всего вы работаете с такими модулями:
- Модуль объекта (у справочника, документа) — обработчики
ПередЗаписью,ОбработкаПроведения,ОбработкаЗаполнения. Здесь логика самого объекта. - Модуль формы — реакция на действия пользователя: нажатия, изменения полей, открытие формы.
- Общие модули — повторно используемый код без привязки к объекту. У общего модуля в свойствах задаётся, где он выполняется:
Сервер,Клиент (управляемое приложение),Внешнее соединениеи флаг «Вызов сервера». - Модуль менеджера — процедуры уровня объекта в целом, а не конкретного экземпляра.
Код делится на клиентский и серверный. Работа с базой (запросы, запись объектов) идёт только на сервере, а взаимодействие с пользователем — на клиенте. В управляемых формах контекст помечают директивами компиляции: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
Простой пример — обработка проведения документа, которая списывает товар в регистр накопления остатков:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = СтрокаТовары.Номенклатура;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
КонецПроцедуры
Отлаживают код через Отладка → Начать отладку в Конфигураторе: ставят точку останова и смотрят значения переменных на реальных данных. Это быстрее, чем вставлять Сообщить() по тексту.
Управляемые формы: интерфейс функции
Интерфейс в 1С 8.3 строят на управляемых формах (интерфейс «Такси»). Форма — это не просто картинка: у неё есть собственные реквизиты, данные объекта и обработчики событий.
Как собрать форму новой функции:
- В объекте откройте вкладку
Формыи добавьте форму нужного вида (формы элемента, списка, выбора). - В конструкторе перетащите реквизиты объекта на форму — поля создадутся автоматически.
- Для действий добавьте команды формы и вынесите их на командную панель кнопками.
- В модуле формы опишите обработчики:
ПриОткрытии,ПриИзмененииполя, обработчик команды.
Поведение полей — доступность, видимость, оформление — удобнее задавать условным оформлением формы, а не кодом: оно описывается декларативно и работает без лишних пересчётов на клиенте.
Форму не рисуют с нуля без причины: у каждого объекта есть автогенерируемая форма по умолчанию, и платформа создаёт её на лету, если своей формы нет. Собственную форму добавляют, когда нужны нестандартная раскладка, дополнительные команды или своя логика при открытии. Чтобы форма появилась в нужном разделе интерфейса, объект включают в подсистему — именно подсистемы формируют панель разделов режима предприятия.
Если типовая форма вас почти устраивает и нужно лишь добавить поле или кнопку, не создавайте форму заново — заимствуйте её в расширение и дорабатывайте точечно.
Регистры: где хранятся движения и итоги
Справочники и документы хранят исходные данные, а итоги учёта накапливают регистры. Без них отчёт «остаток товара на складе» пришлось бы каждый раз собирать перебором всех документов.
Какой регистр под какую задачу:
| Тип регистра | Для чего | Пример |
|---|---|---|
| Накопления (остатки) | что-то приходит и расходуется | остатки товаров, денег |
| Накопления (обороты) | только суммарный поток | продажи за период |
| Сведений | срез значений на дату | курсы валют, цены |
| Бухгалтерии | проводки по плану счетов | взаиморасчёты, учёт ОС |
| Расчёта | взаимозависимые начисления | зарплата, удержания |
Движения в регистр пишет документ при проведении — через набор записей Движения.ИмяРегистра в модуле объекта (см. пример кода выше). Данные из регистра читают запросом к виртуальным таблицам: ОстаткиТоваров.Остатки, ОстаткиТоваров.ОстаткиИОбороты. Виртуальные таблицы отдают уже свёрнутые итоги, их не нужно считать вручную.
Проведение документа не только записывает движения — оно выполняет контроль (например, запрет отрицательного остатка). Логику контроля держите в обработке проведения, а не в форме: иначе движения появятся и при записи документа через обмен, минуя форму.
Отчёты и анализ данных на СКД
Большинство отчётов в 1С 8.3 делают на системе компоновки данных (СКД) — это стандартный механизм, который сам рисует настройки, группировки, отборы и оформление. Писать вывод таблицы кодом почти никогда не нужно.
Порядок создания отчёта:
- Добавьте объект
Отчёт, откройте схему компоновки данных. - На вкладке
Наборы данныхнапишите запрос — чаще к виртуальной таблице регистра. - На вкладке
Настройкизадайте поля, группировки и отборы по умолчанию. - Укажите роли, которым отчёт доступен, и поместите его в подсистему, чтобы он появился в нужном разделе интерфейса.
Запрос — сердце отчёта. Его собирают конструктором запроса (правой кнопкой в поле текста запроса) и тестируют консолью запросов. Для показателей на дату берут остатки, для потоков за период — обороты.
СКД закрывает и типовую аналитику, и сложные отчёты с вычисляемыми полями, пользовательскими настройками и условным оформлением. Если задача — просто выгрузить данные в таблицу или файл, иногда проще сделать обработку с выводом в табличный документ или в ТаблицаЗначений.
Обмен данными и интеграция с внешними системами
Отдельный класс функций — обмен с другими базами и программами. Способ выбирают по тому, что на другой стороне.
- Между базами 1С — планы обмена и типовой формат
EnterpriseData. Правила сопоставления объектов настраивают в «Конвертации данных», выгрузка идёт в XML. - С внешними сервисами по сети — web-сервисы (SOAP) и HTTP-сервисы. HTTP-сервис отдаёт и принимает данные в JSON/XML, его публикуют на веб-сервере.
- Файлами — выгрузка и загрузка через
ЧтениеXML,ЧтениеJSON, работа с текстовыми и табличными файлами. - Локально с приложениями Windows — COM-соединение (например, обмен с другой программой на том же сервере).
Для регулярной синхронизации данные между базами связывают планом обмена: он помнит, какие изменения в какой узел ещё не отправлены, и выгружает только их. Это важное свойство — обмен передаёт не всю базу каждый раз, а только дельту с момента прошлой выгрузки. Разовую загрузку из файла обычно оформляют обработкой, которая читает источник и создаёт или обновляет объекты по ключевым реквизитам.
Выбор между SOAP и HTTP-сервисом простой: SOAP строже типизирован и описывается WSDL, HTTP-сервис легче и удобнее для REST-подобного обмена JSON. И тот и другой публикуют на веб-сервере (Apache или IIS) вместе с базой.
Перед интеграцией уточните на стороне партнёра формат полей и сопоставьте их с реквизитами 1С — расхождение в типе или в справочнике-источнике всплывает уже на боевых данных.
Роли, права доступа и ограничение на уровне записей
Какие функции доступны конкретному пользователю, определяют роли. Роль — это объект метаданных со списком прав на каждый объект: чтение, добавление, изменение, проведение, просмотр.
Как настроить доступ:
- В ветке
Общие → Ролисоздайте роль или откройте существующую. - Отметьте права на нужные объекты и реквизиты.
- В режиме предприятия назначьте роль пользователю или группе доступа (в типовых конфигурациях — через настройку прав, а не напрямую в списке пользователей).
Когда доступ нужен не ко всему объекту, а к части записей (например, менеджер видит только своих контрагентов), применяют ограничение доступа на уровне записей — RLS. Условие доступа описывается в роли на языке запросов и фильтрует данные прозрачно для пользователя.
Права складываются: пользователь получает сумму прав всех назначенных ролей. Поэтому доступ сужают не запретом в одной роли, а тем, что лишнюю роль просто не выдают.
Частые ошибки при разработке функций
- 🚫 Правка типовой вместо расширения. Конфигурация уходит с поддержки, каждое обновление превращается в ручное сравнение. Начинайте с расширения.
- 🚫 Логика в форме, а не в модуле объекта. Код, который должен срабатывать всегда, в обработчике формы не выполнится при записи через обмен или программно.
- 🚫 Чтение остатков перебором документов. Для итогов есть регистры и виртуальные таблицы — они и быстрее, и устойчивее к ошибкам.
- 🚫 Запросы к базе в клиентском контексте. Работу с данными выносите на сервер директивой
&НаСервереили в серверный общий модуль. - 🚫 Обновление структуры без монопольного доступа и копии. Любое изменение метаданных — повод сначала сделать резервную копию.