Своя конфигурация на платформе 1С 8.3: от пустой базы до публикации
Содержание
Чтобы разработать свою конфигурацию в 1С, создайте пустую информационную базу («без конфигурации, для разработки новой конфигурации»), откройте её в Конфигураторе через Конфигурация → Открыть конфигурацию и добавляйте объекты метаданных: справочники, документы, регистры. Логику пишете на встроенном языке в модулях, изменения применяете клавишей F7 (Обновить конфигурацию базы данных), проверяете в режиме отладки F5.
Дальше порядок такой: сначала модель данных, потом интерфейс и права, потом проведение документов по регистрам, затем тестирование и выпуск. Всё описанное относится к платформе 1С:Предприятие 8.3 и управляемому приложению.
1. С чего начать разработку: пустая база или готовая основа
Первое решение — писать всё с нуля или брать основу. От него зависит объём работы на месяцы вперёд.
| Вариант | Когда подходит | Что получите |
|---|---|---|
| Пустая конфигурация | Учебный проект, небольшая узкая задача: учёт заявок, склад инструмента, журнал работ | Полный контроль, но пользователей, права, обмены и печать пишете сами |
| Пустая конфигурация + БСП | Серьёзный продукт для заказчика или тиражирования | Готовые подсистемы: пользователи, печать, присоединённые файлы, обновление версий, дополнительные отчёты |
| Доработка типовой | Нужна бухгалтерия или зарплата плюс отраслевые функции | Готовый учёт, но обновления типовой придётся сопровождать |
Для доработки типовой конфигурации лучше использовать расширение, а не снимать конфигурацию с поддержки: расширение переживает обновления, а снятая с поддержки типовая обновляется вручную через сравнение и объединение.
Создаём пустую информационную базу
- Запустите 1С:Предприятие, в списке баз нажмите
Добавить. - Выберите
Создание новой информационной базы. - Отметьте вариант
Создание информационной базы без конфигурации для разработки новой конфигурации или загрузки выгруженной информационной базы. - Задайте имя и каталог (файловый вариант) или сервер и имя базы (клиент-серверный).
- Откройте базу кнопкой
Конфигуратор, затемКонфигурация → Открыть конфигурацию.
Свойства корня конфигурации
Дважды щёлкните по корневому элементу дерева. Заполните:
- 🏷️ Имя — латиница или кириллица без пробелов, например
УчетЗаявок; - 📝 Синоним — то, что увидит пользователь в заголовке окна;
- 🔖 Версия и Поставщик — понадобятся при выпуске обновлений;
- ⚙️ Режим совместимости — для новой разработки обычно ставят текущую версию платформы;
- 🖥️ Основной режим запуска —
Управляемое приложение.
Если используете БСП, её внедряют сразу, в пустую конфигурацию. Встраивать библиотеку в разросшийся проект гораздо больнее: придётся переделывать уже написанные механизмы пользователей и печати.
2. Проектирование метаданных конфигурации
Метаданные — это скелет конфигурации. Ошибка на этом этапе обходится дороже всего: переименовать реквизит легко, а переделать документ в справочник с накопленными данными — уже миграция.
Начните с бумаги или таблицы. Выпишите сущности предметной области и разложите их по типам объектов.
| Что описываете | Объект метаданных | Пример |
|---|---|---|
| Постоянные списки | Справочник | Номенклатура, Склады, Контрагенты |
| Фиксированные варианты | Перечисление | Статусы заявки, Виды оплаты |
| Хозяйственные события с датой | Документ | Поступление товаров, Заявка |
| Остатки и обороты | Регистр накопления | Остатки товаров на складах |
| Значения во времени | Регистр сведений | Цены номенклатуры, Курсы |
| Одно значение на всю базу | Константа | Основная организация |
| Отчёты и обработки | Отчёт, Обработка | Ведомость по складу |
Правила, которые сэкономят переделки
- 🔤 Называйте объекты единообразно: справочник в единственном или множественном числе — но везде одинаково.
- 📏 Задавайте длину кода и наименования справочника с запасом. Укоротить строку позже нельзя без потери данных.
- 🔗 Ссылочные реквизиты делайте конкретного типа (
СправочникСсылка.Склады), а не составного «на всякий случай»: составные типы замедляют запросы. - 📂 Табличные части используйте для строк документа, а не для хранения истории — история живёт в регистрах.
- 🗂️ Для иерархии включайте её в свойствах справочника сразу: иерархия групп и элементов или иерархия элементов.
После добавления объектов нажмите F7. Платформа покажет список изменений структуры базы и попросит подтвердить реорганизацию.
3. Подсистемы, командный интерфейс и роли
Без подсистем пользователь в режиме «1С:Предприятие» увидит пустое окно: объекты существуют, но разделов нет.
Подсистемы
- В дереве откройте
Общие → Подсистемы, добавьте подсистему, напримерСклад. - Убедитесь, что у неё включено свойство
Включать в командный интерфейс. - На вкладке
Составотметьте справочники, документы и отчёты раздела. - Картинку раздела задайте в свойстве
Картинка— подойдут стандартные из библиотеки картинок.
Порядок разделов и видимость команд настраивают в редакторе командного интерфейса: правый щелчок по корню конфигурации → Открыть командный интерфейс конфигурации.
Роли и пользователи
Пока в базе нет ни одного пользователя, любой вход идёт без авторизации с полным доступом. Как только вы создадите первого пользователя, права начнут проверяться.
- Создайте роль
ПолныеПрававОбщие → Роли, в её свойствах отметьте все права на все объекты. - Включите в ней право
Администрирование. - Создайте роли для рядовых пользователей: например,
Кладовщик— чтение справочников, добавление и проведение складских документов. - Заведите пользователей в
Администрирование → Пользователив Конфигураторе.
Первому пользователю обязательно назначьте роль с правом «Администрирование». Без такого пользователя управлять доступом и списком пользователей будет некому.
Формы
Управляемые формы платформа генерирует автоматически. Свою форму создают конструктором: откройте объект, вкладка Формы, кнопка добавления. Конструктор предложит выбрать реквизиты, которые попадут на форму. Дальше элементы перетаскивают мышью в дереве элементов формы.
4. Программирование конфигурации: модули и встроенный язык
Код в 1С живёт в модулях. Важно знать, какой модуль где выполняется.
| Модуль | Где выполняется | Что туда писать |
|---|---|---|
| Модуль объекта | Сервер | Проверки при записи, проведение документа |
| Модуль менеджера | Сервер | Функции, общие для всех объектов вида: печать, служебные запросы |
| Модуль формы | Клиент и сервер (по директивам) | Реакции на действия пользователя |
| Общий модуль | Задаётся флагами Сервер, Клиент, Вызов сервера | Переиспользуемые процедуры |
| Модуль сеанса | Сервер | Инициализация параметров сеанса |
В модуле формы каждая процедура помечается директивой: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Обращения к базе данных — только на сервере.
Пример: заполнение цены при выборе товара
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущаяСтрока.Цена = ПолучитьЦену(ТекущаяСтрока.Номенклатура, Объект.Дата);
ТекущаяСтрока.Сумма = ТекущаяСтрока.Цена * ТекущаяСтрока.Количество;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЦену(Номенклатура, Дата)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура) КАК Цены";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Возврат ?(Выборка.Следующий(), Выборка.Цена, 0);
КонецФункции
Серверная функция без контекста не передаёт на сервер всю форму. На медленном канале или в веб-клиенте разница заметна сразу.
Текст запроса не пишите руками: правый щелчок в модуле → Конструктор запроса. Он проверит имена таблиц и полей и соберёт текст без опечаток.
Что упростит жизнь
- 🧩 Повторяющиеся куски выносите в общие модули с понятными именами:
РаботаСЦенами,СкладскиеОперации. - 🔍 Пользуйтесь синтакс-помощником:
Справка → Синтакс-помощник, там описаны все методы и свойства. - 🚫 Не пишите запросы в цикле. Один запрос на все строки табличной части всегда быстрее сотни отдельных.
5. Регистры и проведение документов
Документ — это событие, регистр — его последствия для учёта. Остатки, обороты, взаиморасчёты, расчёт зарплаты хранятся в регистрах, а не в документах.
Какой регистр выбрать
- 📦 Регистр накопления, вид
Остатки— когда нужен остаток на дату: товары на складе, долг контрагента. - 📈 Регистр накопления, вид
Обороты— когда остаток не нужен, только суммы за период: продажи, выручка. - 🗓️ Регистр сведений — значения, меняющиеся во времени: цены, курсы, адреса.
- 📒 Регистр бухгалтерии — учёт по плану счетов с проводками Дт/Кт. Сначала создают план счетов .
- 🧮 Регистр расчёта — сложные перерасчёты, например зарплата. Требует плана видов расчёта.
У регистра накопления задаются измерения (разрезы: Номенклатура, Склад) и ресурсы (числа: Количество, Сумма). Регистратором указывают документы, которые могут его двигать.
Проведение: приход товара
Включите у документа свойство Проведение = Разрешить, на вкладке Движения отметьте регистр. Каркас процедуры можно получить конструктором движений, затем доработать.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
КонецПроцедуры
Расход с контролем остатков
При списании нужен контроль, чтобы остаток не ушёл в минус. Надёжный приём: записать движения, затем запросом проверить остатки по затронутым товарам и отменить проведение, если где-то минус.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
Движения.Записать();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(,
| Склад = &Склад И Номенклатура В (&Товары)) КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Товары", Товары.ВыгрузитьКолонку("Номенклатура"));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Не хватает товара %1, нехватка %2",
Выборка.Номенклатура, -Выборка.Остаток);
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
КонецПроцедуры
Флаг БлокироватьДляИзменения заставляет платформу заблокировать записи регистра при записи движений. Два кладовщика, одновременно списывающие последнюю единицу, не уведут остаток в минус: второй дождётся первого и получит отказ.
Такая проверка смотрит на текущий остаток. Для документов, проводимых задним числом, этой логики мало — нужны правила последовательности или запрет проведения прошлым периодом.
6. Тестирование и отладка конфигурации
Ошибку дешевле поймать в Конфигураторе, чем у пользователя в отчёте.
Проверка без запуска
Конфигурация → Проверка конфигурации в Конфигураторе находит синтаксические ошибки во всех модулях, ссылки на несуществующие объекты и неиспользуемые процедуры. Запускайте её перед каждым выпуском, отметив режимы клиентов, в которых будет работать программа: тонкий клиент, веб-клиент.
Отладчик
- Поставьте точку останова: курсор на строку, клавиша F9.
- Запустите отладку:
Отладка → Начать отладку(F5), выберите нужный клиент. - Выполните действие в пользовательском режиме — например, проведите документ.
- На точке останова смотрите значения переменных:
Отладка → Вычислить выражение(Shift+F9), шаг с заходом F11, шаг с обходом F10.
Для клиент-серверной базы отладку на сервере включают в настройках сервера. Без неё точки останова в серверном коде не срабатывают.
Производительность
Отладка → Замер производительности показывает, сколько времени заняла каждая строка кода. Узкие места почти всегда в запросах внутри циклов и в обращении к реквизитам через точку (Документ.Контрагент.ИНН) — каждое такое обращение платформа превращает в отдельное чтение.
Тестовые данные и сценарии
- ✅ Держите отдельную базу с типовыми примерами: 3–5 складов, 50 товаров, документы за несколько месяцев.
- ✅ Проверяйте граничные случаи: пустую табличную часть, нулевое количество, документ задним числом, одновременное проведение с двух машин.
- ✅ Проверяйте работу под ограниченной ролью, а не только под «Полными правами». Частая жалоба после запуска — «не открывается справочник», и дело в правах, а не в коде.
Для автоматизированных сценариев используют открытые инструменты вроде Vanessa Automation: сценарии на языке Gherkin прогоняют действия пользователя в клиенте.
7. Командная работа, выпуск и публикация конфигурации
Когда конфигурация работает, её нужно передать пользователям и дальше сопровождать.
Хранилище конфигурации и Git
Если разработчиков больше одного, без версионирования не обойтись.
- 🗄️ Хранилище конфигурации — встроенный механизм:
Конфигурация → Хранилище конфигурации → Создать хранилище. Разработчик захватывает объект, правит, помещает обратно с комментарием. История изменений хранится по версиям. - 🌿 1C:Enterprise Development Tools (EDT) — среда разработки на базе Eclipse. Конфигурация хранится в виде файлов, что позволяет вести проект в Git: ветки, ревью, слияние.
Конфигурацию можно также выгрузить в файлы: Конфигурация → Выгрузить конфигурацию в файлы. Это пригодится для сравнения версий внешними утилитами.
Файл поставки
Для тиражируемого решения готовят поставку:
- Задайте в свойствах корня
Версиюв формате1.0.0.1. Конфигурация → Поставка конфигурации → Настройка поставки— укажите, какие объекты можно изменять у клиента.Конфигурация → Поставка конфигурации → Создать файлы поставки— получите.cfдля первой установки и, при необходимости,.cfuдля обновления с прошлой версии.
Для одной базы заказчика достаточно Конфигурация → Сохранить конфигурацию в файл — получится .cf, который загружают в базу заказчика.
Загрузка .cf через «Загрузить конфигурацию из файла» полностью заменяет конфигурацию базы. Для рабочей базы с данными делайте перед этим выгрузку .dt (Администрирование → Выгрузить информационную базу) и выполняйте операцию, когда пользователи вышли: обновление структуры базы требует монопольного доступа.
Публикация на веб-сервере
Чтобы работать через браузер или подключаться по HTTP, конфигурацию публикуют:
- Установите веб-сервер: Apache или IIS. Модули расширения веб-сервера ставятся вместе с платформой, если выбрать соответствующий компонент.
- Запустите Конфигуратор от имени администратора Windows.
Администрирование → Публикация на веб-сервере, укажите имя публикации и каталог.- Отметьте, что публиковать: тонкий и веб-клиент, HTTP-сервисы, веб-сервисы.
- Нажмите
Опубликоватьи откройте адрес видаhttp://сервер/имя_публикации.
Сопровождение
После запуска работа не заканчивается. Ведите журнал версий с описанием изменений, повышайте номер версии с каждым выпуском, тестируйте обновление на копии рабочей базы. Для обновления данных при смене структуры (например, заполнения нового реквизита в старых документах) пишут обработчики обновления — в БСП для них есть готовый механизм.
Частые ошибки начинающих разработчиков
- ❌ Хранят остатки в реквизите справочника. Число в карточке товара перестаёт сходиться при первом же перепроведении задним числом. Остатки — только в регистре накопления.
- ❌ Не нажимают F7. Конфигурация сохранена, но структура базы не обновлена — в пользовательском режиме изменений нет.
- ❌ Пишут весь код в модуле формы. Проведение и проверки при записи должны быть в модуле объекта: иначе документ, записанный обработкой или обменом, пройдёт без проверок.
- ❌ Разрабатывают на рабочей базе. Любая ошибка реструктуризации бьёт по живым данным. Разработка — на копии, в рабочую базу — только проверенный
.cfили обновление из хранилища. - ❌ Откладывают роли до конца. Права, выданные в последний день, — источник ошибок «Нарушение прав доступа» сразу после запуска.