Своя конфигурация на платформе 1С:Предприятие 8.3 — от пустой базы до файла поставки

· 10 мин

Содержание

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

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

С чего начать разработку: платформа, пустая база и свойства конфигурации

Для работы нужна установленная платформа 1С:Предприятие 8.3 с компонентом «Конфигуратор» и лицензия, либо учебная версия платформы для обучения. Для первых шагов хватит файловой базы. Клиент-серверный вариант понадобится позже, когда начнёте проверять работу под нагрузкой.

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

  1. В окне запуска нажмите «Добавить».
  2. Выберите «Создание новой информационной базы».
  3. Отметьте вариант «Создание информационной базы без конфигурации для разработки новой конфигурации или загрузки выгруженной ранее информационной базы».
  4. Укажите имя и каталог, например D:\Bases\MyConfig.
  5. Откройте базу кнопкой «Конфигуратор» и выполните Конфигурация → Открыть конфигурацию.

В дереве появится один корневой узел. Двойной щелчок по нему открывает палитру свойств всей конфигурации.

Что заполнить в свойствах корня сразу

СвойствоЧто указатьЗачем
Имя и СинонимМоеПредприятие / «Моё предприятие»Имя — для кода, синоним видит пользователь
Поставщик и ВерсияВаша организация, 1.0.0.1Без версии неудобно выпускать обновления
Режим совместимостиНе использовать или текущая версия платформыДоступны все новые возможности
Основной режим запускаУправляемое приложениеОбычные формы в новых решениях не нужны
Режим управления блокировкой данныхУправляемыйМеньше конфликтов при параллельной работе
Режим использования модальностиНе использоватьКод сразу пишется под веб-клиент

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

Какой путь разработки подходит вашему проекту?

Проектирование архитектуры: какие объекты метаданных создать

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

Соответствие задач и объектов

ЗадачаОбъект метаданныхПример
Хранить постоянный списокСправочникНоменклатура, Склады, Контрагенты
Фиксированный набор значенийПеречислениеСтатусы заявки, Виды оплаты
Зафиксировать событие с датойДокументПоступление товаров, Заявка
Хранить остатки и оборотыРегистр накопленияОстатки товаров на складах
Хранить значение на датуРегистр сведенийЦены номенклатуры, Курсы
Вести бухучёт с планом счетовПлан счетов + Регистр бухгалтерииХозрасчётный учёт
Одна настройка на всю базуКонстантаОсновная организация
Отчёт или сервисная операцияОтчёт / ОбработкаВедомость по складу
Разбивка интерфейса на разделыПодсистемаСклад, Продажи, Настройки

Главное правило: документы пишут движения, отчёты читают регистры

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

Правильная схема другая:

  • 📄 документ хранит первичные данные операции;
  • ⚙️ при проведении документ формирует движения в регистрах;
  • 📊 отчёты и проверки берут данные из регистров, в том числе из виртуальных таблиц остатков и оборотов.

Как спроектировать регистр накопления

Создайте регистр ОстаткиТоваров, вид — «Остатки». Добавьте:

  • Измерения: Номенклатура (СправочникСсылка.Номенклатура), Склад (СправочникСсылка.Склады);
  • Ресурс: Количество (Число 15.3).

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

Вид регистра «Остатки» или «Обороты» выбирайте осознанно. Для продаж, где остатка нет по смыслу, нужен оборотный регистр. Сменить вид, когда в регистре уже есть движения, без переделки кода не выйдет.

Подсистемы и командный интерфейс

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

Формы и интерфейс: как сделать удобный ввод данных

В управляемом приложении форму не рисуют по пикселям. Вы описываете состав и группировку элементов, а платформа сама раскладывает их на экране, в тонком клиенте и в браузере.

Создание формы объекта

  1. Откройте документ, перейдите на закладку «Формы».
  2. Рядом с полем «Документ» нажмите кнопку с лупой или «Добавить».
  3. В конструкторе выберите «Форма документа», отметьте нужные реквизиты.
  4. Нажмите «Готово». Платформа создаст форму с элементами, привязанными к реквизиту формы Объект.

Редактор формы состоит из трёх частей:

  • 🧱 Элементы — дерево полей, групп, таблиц и кнопок;
  • 🗂️ Реквизиты — данные формы, в том числе основной реквизит Объект;
  • 🔘 Команды — действия, которые можно вывести кнопками.

Приёмы, которые экономят время пользователям

  • Группируйте поля в группы «Обычная группа» с горизонтальной группировкой: шапка документа становится компактной.
  • Для ссылочных полей задайте «Параметры выбора», например показывать только склады нужной организации.
  • Поля, которые заполняются автоматически, ставьте ниже или делайте «Только просмотр».
  • В табличной части используйте событие «ПриИзменении» колонки количества, чтобы пересчитывать сумму сразу.

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

Код на встроенном языке: модули, проведение и запросы

Код в 1С живёт в модулях. Важно сразу понять, где какой модуль выполняется.

МодульГде выполняетсяЧто в нём писать
Модуль объектаНа сервереПроверки при записи, проведение
Модуль менеджераНа сервереМетоды, не привязанные к одному объекту
Модуль формыКлиент и сервер, по директивамРеакция на действия пользователя
Общий модульЗависит от флажков «Сервер», «Клиент»Повторно используемые функции
Модуль сеансаНа сервереУстановка параметров сеанса при входе

Директивы компиляции в модуле формы

  • &НаКлиенте — код работает на компьютере пользователя, доступа к базе нет;
  • &НаСервере — код работает на сервере, есть доступ к данным формы и базе;
  • &НаСервереБезКонтекста — серверный вызов без передачи данных формы, самый лёгкий.

Каждый переход с клиента на сервер — это сетевой вызов. Соберите серверную работу в один метод, вместо пяти вызовов подряд.

Пример: проведение приходного документа

Обработчик пишется в модуле объекта документа. Проще всего получить заготовку через «Конструктор движений» на закладке «Движения», а потом доработать.

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

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

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

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

Чтобы документ вообще проводился, в его свойствах на закладке «Движения» должен стоять режим проведения «Разрешить» и отмечен регистр ОстаткиТоваров.

Пример: запрос к остаткам

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ
	|	Остатки.Номенклатура КАК Номенклатура,
	|	Остатки.КоличествоОстаток КАК Количество
	|ИЗ
	|	РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Склад", Склад);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(Строка(Выборка.Номенклатура) + ": " + Формат(Выборка.Количество, "ЧДЦ=3"));
КонецЦикла;

Условие на склад стоит внутри параметров виртуальной таблицы, а не в секции ГДЕ. Так платформа отбирает данные до расчёта остатков, и запрос работает быстрее. Текст запроса удобно собирать «Конструктором запроса» из контекстного меню модуля.

Не пишите запросы внутри цикла по строкам. Сто строк табличной части дадут сто обращений к базе. Соберите данные одним запросом, а в цикле работайте с результатом.

Права доступа: роли, пользователи и ограничения по записям

Пока в базе нет ни одного пользователя, она открывается без пароля и со всеми правами. Как только вы добавите первого пользователя, вход станет по списку. Поэтому роли нужно сделать до того, как база попадёт к людям.

Как построить ролевую модель

  1. В ветке Общие → Роли создайте роль ПолныеПрава, отметьте все права, включая «Администрирование».
  2. Создайте рабочие роли по должностям или участкам: Кладовщик, Менеджер, Бухгалтер.
  3. В каждой роли выдайте права на нужные объекты: чтение, добавление, изменение, проведение, интерактивное удаление.
  4. В Администрирование → Пользователи Конфигуратора заведите сначала пользователя с ролью ПолныеПрава, затем остальных.

Чтобы не проставлять права вручную на сотни объектов, держите роли узкими. Одна роль — один участок работы. Пользователю можно назначить несколько ролей, права складываются.

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

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

Право «Интерактивное удаление» не выдавайте рабочим ролям. Пусть пользователи ставят пометку на удаление, а удалением помеченных объектов занимается администратор.

В конфигурациях на БСП пользователей и группы доступа удобнее вести в режиме Предприятия, через подсистему «Управление доступом». Роли в Конфигураторе там служат «кирпичиками» для профилей.

Отладка, тестирование и выпуск конфигурации

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

Отладчик и проверки

  • F5 — запуск Предприятия в режиме отладки;
  • F9 — поставить точку останова на строке;
  • Shift+F9 — вычислить выражение в точке останова;
  • Конфигурация → Проверка конфигурации — синтаксис, ссылки на несуществующие объекты, неиспользуемые методы;
  • Отладка → Замер производительности — показывает, какие строки кода съедают время.

Тестирование

Ручная проверка сводится к сценариям: ввели документ, провели, сформировали отчёт, сверили остаток. Запишите 10–20 таких сценариев и прогоняйте их перед каждым выпуском.

Для автоматизации используют режим автоматизированного тестирования платформы (тест-менеджер и тест-клиент) и открытые инструменты вроде Vanessa Automation, где сценарии пишутся на языке Gherkin. Проверку стандартов кода берёт на себя SonarQube с плагином для BSL или встроенные проверки в 1С:EDT.

Нагрузочную проверку делайте на копии рабочей базы, а не на ней самой. Тест с массовым проведением задвоит движения и может заблокировать работу пользователей.

Выпуск: какие файлы отдавать

ФайлКак получитьДля чего
.cfКонфигурация → Сохранить конфигурацию в файлПолная конфигурация, первая установка
.cf поставкиКонфигурация → Поставка конфигурации → Создать файлы поставкиУстановка с поддержкой поставщика
.cfuТам же, флажок файла обновленияОбновление с предыдущей версии
.dtАдминистрирование → Выгрузить информационную базуКопия базы вместе с данными

Перед созданием файлов поставки увеличьте номер в свойстве «Версия». По нему пользователь и сама платформа понимают, что обновление новее установленного.

Перед выпуском версии
Выполнено: 0 / 6

Командная разработка и доработка типовых: хранилище, EDT, расширения

Один разработчик может жить без системы версий месяц-другой. Потом кто-то спросит: «что поменяли в проведении в марте?», и ответить будет нечем.

Хранилище конфигурации

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

1С:EDT и Git

1С:Enterprise Development Tools хранит конфигурацию как набор файлов. Её кладут в Git, ведут ветки и code review, как в обычной разработке. Для новых командных проектов это удобнее хранилища, но EDT требует мощнее компьютер и привычки к Eclipse.

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

Если задача — доработать БП, ЗУП или УТ, не снимайте типовую с поддержки. Создайте расширение: Конфигурация → Расширения конфигурации. В расширении можно добавить свои объекты, заимствовать типовые и перехватить их методы аннотациями &Перед, &После, &Вместо.

  • ✅ типовая обновляется штатно;
  • ✅ ваши изменения лежат отдельно, видно, что именно доработано;
  • ⚠️ после обновления типовой проверьте, что заимствованные методы не изменили сигнатуру.

Объектам расширения дайте префикс, например мп_. Так их не спутать с типовыми и не получить конфликт имён в следующем релизе.

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

Можно ли разработать конфигурацию 1С бесплатно?
Для обучения есть учебная версия платформы 1С:Предприятие с ограничениями. Для коммерческой эксплуатации нужна лицензия платформы на каждое рабочее место или сеанс.
Сколько времени занимает разработка небольшой конфигурации?
Учёт заявок или простой склад из 5–10 объектов опытный разработчик собирает за 1–3 недели. Решение с бухучётом, правами и обменами — это уже месяцы.
Чем конфигурация отличается от расширения?
Конфигурация — самостоятельное прикладное решение. Расширение подключается поверх существующей конфигурации и меняет её поведение, не трогая исходный код.
Можно ли перенести свою конфигурацию в другую базу?
Да. Сохраните её в файл .cf и загрузите в пустую базу через Конфигурация → Загрузить конфигурацию из файла. Данные при этом не переносятся, для них нужна выгрузка .dt.
Нужно ли знать SQL для разработки в 1С?
Нет. Запросы пишутся на собственном языке запросов 1С, он похож на SQL, но работает с объектами метаданных. Знание SQL помогает понимать планы запросов в клиент-серверном варианте.