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

· 11 мин

Содержание

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

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

1. С чего начать разработку: пустая база или готовая основа

Первое решение — писать всё с нуля или брать основу. От него зависит объём работы на месяцы вперёд.

ВариантКогда подходитЧто получите
Пустая конфигурацияУчебный проект, небольшая узкая задача: учёт заявок, склад инструмента, журнал работПолный контроль, но пользователей, права, обмены и печать пишете сами
Пустая конфигурация + БСПСерьёзный продукт для заказчика или тиражированияГотовые подсистемы: пользователи, печать, присоединённые файлы, обновление версий, дополнительные отчёты
Доработка типовойНужна бухгалтерия или зарплата плюс отраслевые функцииГотовый учёт, но обновления типовой придётся сопровождать

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

Создаём пустую информационную базу

  1. Запустите 1С:Предприятие, в списке баз нажмите Добавить.
  2. Выберите Создание новой информационной базы.
  3. Отметьте вариант Создание информационной базы без конфигурации для разработки новой конфигурации или загрузки выгруженной информационной базы.
  4. Задайте имя и каталог (файловый вариант) или сервер и имя базы (клиент-серверный).
  5. Откройте базу кнопкой Конфигуратор, затем Конфигурация → Открыть конфигурацию.

Свойства корня конфигурации

Дважды щёлкните по корневому элементу дерева. Заполните:

  • 🏷️ Имя — латиница или кириллица без пробелов, например УчетЗаявок;
  • 📝 Синоним — то, что увидит пользователь в заголовке окна;
  • 🔖 Версия и Поставщик — понадобятся при выпуске обновлений;
  • ⚙️ Режим совместимости — для новой разработки обычно ставят текущую версию платформы;
  • 🖥️ Основной режим запуска — Управляемое приложение.

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

2. Проектирование метаданных конфигурации

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

Начните с бумаги или таблицы. Выпишите сущности предметной области и разложите их по типам объектов.

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

Правила, которые сэкономят переделки

  • 🔤 Называйте объекты единообразно: справочник в единственном или множественном числе — но везде одинаково.
  • 📏 Задавайте длину кода и наименования справочника с запасом. Укоротить строку позже нельзя без потери данных.
  • 🔗 Ссылочные реквизиты делайте конкретного типа (СправочникСсылка.Склады), а не составного «на всякий случай»: составные типы замедляют запросы.
  • 📂 Табличные части используйте для строк документа, а не для хранения истории — история живёт в регистрах.
  • 🗂️ Для иерархии включайте её в свойствах справочника сразу: иерархия групп и элементов или иерархия элементов.

После добавления объектов нажмите F7. Платформа покажет список изменений структуры базы и попросит подтвердить реорганизацию.

3. Подсистемы, командный интерфейс и роли

Без подсистем пользователь в режиме «1С:Предприятие» увидит пустое окно: объекты существуют, но разделов нет.

Подсистемы

  1. В дереве откройте Общие → Подсистемы, добавьте подсистему, например Склад.
  2. Убедитесь, что у неё включено свойство Включать в командный интерфейс.
  3. На вкладке Состав отметьте справочники, документы и отчёты раздела.
  4. Картинку раздела задайте в свойстве Картинка — подойдут стандартные из библиотеки картинок.

Порядок разделов и видимость команд настраивают в редакторе командного интерфейса: правый щелчок по корню конфигурации → Открыть командный интерфейс конфигурации.

Роли и пользователи

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

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

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

Формы

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

4. Программирование конфигурации: модули и встроенный язык

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

МодульГде выполняетсяЧто туда писать
Модуль объектаСерверПроверки при записи, проведение документа
Модуль менеджераСерверФункции, общие для всех объектов вида: печать, служебные запросы
Модуль формыКлиент и сервер (по директивам)Реакции на действия пользователя
Общий модульЗадаётся флагами Сервер, Клиент, Вызов сервераПереиспользуемые процедуры
Модуль сеансаСерверИнициализация параметров сеанса

В модуле формы каждая процедура помечается директивой: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Обращения к базе данных — только на сервере.

Пример: заполнение цены при выборе товара

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	ТекущаяСтрока.Цена = ПолучитьЦену(ТекущаяСтрока.Номенклатура, Объект.Дата);
	ТекущаяСтрока.Сумма = ТекущаяСтрока.Цена * ТекущаяСтрока.Количество;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЦену(Номенклатура, Дата)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Цены.Цена КАК Цена
	|ИЗ
	|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК Цены";
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	Выборка = Запрос.Выполнить().Выбрать();
	Возврат ?(Выборка.Следующий(), Выборка.Цена, 0);
КонецФункции

Серверная функция без контекста не передаёт на сервер всю форму. На медленном канале или в веб-клиенте разница заметна сразу.

Текст запроса не пишите руками: правый щелчок в модуле → Конструктор запроса. Он проверит имена таблиц и полей и соберёт текст без опечаток.

Что упростит жизнь

  • 🧩 Повторяющиеся куски выносите в общие модули с понятными именами: РаботаСЦенами, СкладскиеОперации.
  • 🔍 Пользуйтесь синтакс-помощником: Справка → Синтакс-помощник, там описаны все методы и свойства.
  • 🚫 Не пишите запросы в цикле. Один запрос на все строки табличной части всегда быстрее сотни отдельных.

5. Регистры и проведение документов

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

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

  • 📦 Регистр накопления, вид Остатки — когда нужен остаток на дату: товары на складе, долг контрагента.
  • 📈 Регистр накопления, вид Обороты — когда остаток не нужен, только суммы за период: продажи, выручка.
  • 🗓️ Регистр сведений — значения, меняющиеся во времени: цены, курсы, адреса.
  • 📒 Регистр бухгалтерии — учёт по плану счетов с проводками Дт/Кт. Сначала создают план счетов .
  • 🧮 Регистр расчёта — сложные перерасчёты, например зарплата. Требует плана видов расчёта.

У регистра накопления задаются измерения (разрезы: Номенклатура, Склад) и ресурсы (числа: Количество, Сумма). Регистратором указывают документы, которые могут его двигать.

Проведение: приход товара

Включите у документа свойство Проведение = Разрешить, на вкладке Движения отметьте регистр. Каркас процедуры можно получить конструктором движений, затем доработать.

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

Расход с контролем остатков

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

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

	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Остатки.Номенклатура КАК Номенклатура,
	|	Остатки.КоличествоОстаток КАК Остаток
	|ИЗ
	|	РегистрНакопления.ОстаткиТоваров.Остатки(,
	|		Склад = &Склад И Номенклатура В (&Товары)) КАК Остатки
	|ГДЕ
	|	Остатки.КоличествоОстаток < 0";
	Запрос.УстановитьПараметр("Склад", Склад);
	Запрос.УстановитьПараметр("Товары", Товары.ВыгрузитьКолонку("Номенклатура"));
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = СтрШаблон("Не хватает товара %1, нехватка %2",
			Выборка.Номенклатура, -Выборка.Остаток);
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЦикла;
КонецПроцедуры

Флаг БлокироватьДляИзменения заставляет платформу заблокировать записи регистра при записи движений. Два кладовщика, одновременно списывающие последнюю единицу, не уведут остаток в минус: второй дождётся первого и получит отказ.

Такая проверка смотрит на текущий остаток. Для документов, проводимых задним числом, этой логики мало — нужны правила последовательности или запрет проведения прошлым периодом.

6. Тестирование и отладка конфигурации

Ошибку дешевле поймать в Конфигураторе, чем у пользователя в отчёте.

Проверка без запуска

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

Отладчик

  1. Поставьте точку останова: курсор на строку, клавиша F9.
  2. Запустите отладку: Отладка → Начать отладку (F5), выберите нужный клиент.
  3. Выполните действие в пользовательском режиме — например, проведите документ.
  4. На точке останова смотрите значения переменных: Отладка → Вычислить выражение (Shift+F9), шаг с заходом F11, шаг с обходом F10.

Для клиент-серверной базы отладку на сервере включают в настройках сервера. Без неё точки останова в серверном коде не срабатывают.

Производительность

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

Тестовые данные и сценарии

  • ✅ Держите отдельную базу с типовыми примерами: 3–5 складов, 50 товаров, документы за несколько месяцев.
  • ✅ Проверяйте граничные случаи: пустую табличную часть, нулевое количество, документ задним числом, одновременное проведение с двух машин.
  • ✅ Проверяйте работу под ограниченной ролью, а не только под «Полными правами». Частая жалоба после запуска — «не открывается справочник», и дело в правах, а не в коде.

Для автоматизированных сценариев используют открытые инструменты вроде Vanessa Automation: сценарии на языке Gherkin прогоняют действия пользователя в клиенте.

7. Командная работа, выпуск и публикация конфигурации

Когда конфигурация работает, её нужно передать пользователям и дальше сопровождать.

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

Если разработчиков больше одного, без версионирования не обойтись.

  • 🗄️ Хранилище конфигурации — встроенный механизм: Конфигурация → Хранилище конфигурации → Создать хранилище. Разработчик захватывает объект, правит, помещает обратно с комментарием. История изменений хранится по версиям.
  • 🌿 1C:Enterprise Development Tools (EDT) — среда разработки на базе Eclipse. Конфигурация хранится в виде файлов, что позволяет вести проект в Git: ветки, ревью, слияние.

Конфигурацию можно также выгрузить в файлы: Конфигурация → Выгрузить конфигурацию в файлы. Это пригодится для сравнения версий внешними утилитами.

Файл поставки

Для тиражируемого решения готовят поставку:

  1. Задайте в свойствах корня Версию в формате 1.0.0.1.
  2. Конфигурация → Поставка конфигурации → Настройка поставки — укажите, какие объекты можно изменять у клиента.
  3. Конфигурация → Поставка конфигурации → Создать файлы поставки — получите .cf для первой установки и, при необходимости, .cfu для обновления с прошлой версии.

Для одной базы заказчика достаточно Конфигурация → Сохранить конфигурацию в файл — получится .cf, который загружают в базу заказчика.

Загрузка .cf через «Загрузить конфигурацию из файла» полностью заменяет конфигурацию базы. Для рабочей базы с данными делайте перед этим выгрузку .dt (Администрирование → Выгрузить информационную базу) и выполняйте операцию, когда пользователи вышли: обновление структуры базы требует монопольного доступа.

Публикация на веб-сервере

Чтобы работать через браузер или подключаться по HTTP, конфигурацию публикуют:

  1. Установите веб-сервер: Apache или IIS. Модули расширения веб-сервера ставятся вместе с платформой, если выбрать соответствующий компонент.
  2. Запустите Конфигуратор от имени администратора Windows.
  3. Администрирование → Публикация на веб-сервере, укажите имя публикации и каталог.
  4. Отметьте, что публиковать: тонкий и веб-клиент, HTTP-сервисы, веб-сервисы.
  5. Нажмите Опубликовать и откройте адрес вида http://сервер/имя_публикации.

Сопровождение

После запуска работа не заканчивается. Ведите журнал версий с описанием изменений, повышайте номер версии с каждым выпуском, тестируйте обновление на копии рабочей базы. Для обновления данных при смене структуры (например, заполнения нового реквизита в старых документах) пишут обработчики обновления — в БСП для них есть готовый механизм.

Какую основу выбрать для своей конфигурации?

Частые ошибки начинающих разработчиков

  • ❌ Хранят остатки в реквизите справочника. Число в карточке товара перестаёт сходиться при первом же перепроведении задним числом. Остатки — только в регистре накопления.
  • ❌ Не нажимают F7. Конфигурация сохранена, но структура базы не обновлена — в пользовательском режиме изменений нет.
  • ❌ Пишут весь код в модуле формы. Проведение и проверки при записи должны быть в модуле объекта: иначе документ, записанный обработкой или обменом, пройдёт без проверок.
  • ❌ Разрабатывают на рабочей базе. Любая ошибка реструктуризации бьёт по живым данным. Разработка — на копии, в рабочую базу — только проверенный .cf или обновление из хранилища.
  • ❌ Откладывают роли до конца. Права, выданные в последний день, — источник ошибок «Нарушение прав доступа» сразу после запуска.

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

Сколько времени занимает разработка своей конфигурации в 1С?
Учебная конфигурация со справочниками, парой документов и отчётом собирается за несколько дней. Рабочая система под реальный учёт с правами, печатными формами и обменами — от нескольких месяцев.
Нужна ли отдельная лицензия для разработки?
Конфигуратор входит в платформу, отдельно не продаётся. Для запуска базы нужна клиентская лицензия; для изучения подойдёт учебная версия платформы с ограничениями.
Можно ли продавать свою конфигурацию?
Да, собственная разработка принадлежит автору. Покупателю для работы понадобится лицензия на платформу 1С:Предприятие. Если в конфигурацию встроена БСП, учитывайте условия её лицензии.
Чем отчёт на СКД лучше отчёта, написанного кодом?
Система компоновки данных даёт пользователю отборы, группировки и варианты отчёта без программирования. Отчёт описывается схемой и запросом, а код почти не нужен.
Что выбрать для новой разработки: Конфигуратор или EDT?
Для одного разработчика и небольшого проекта хватит Конфигуратора. Для команды с Git, ревью и автоматической проверкой кода удобнее EDT.