Разработка своей конфигурации в 1С:Предприятие 8.3: с чего начать
Содержание
Программа в 1С — это не отдельный exe-файл, а собственная конфигурация, которая работает поверх платформы 1С:Предприятие 8.3. Создают её в двух средах: классическом Конфигураторе или в 1C:EDT (среда на базе Eclipse). Начинают с пустой информационной базы «без конфигурации», добавляют объекты метаданных (справочники, документы, регистры), пишут логику на встроенном языке и собирают формы.
Ниже — рабочий порядок от установки платформы до момента, когда приложением пользуются живые люди. Пути и кнопки даны для интерфейса «Такси» на платформе версии не ниже 8.3.2x. Разработка в Конфигураторе и в EDT отличается деталями интерфейса, но набор объектов и язык одинаковы.
Платформа без лицензии не запускает базу в обычном режиме. Для учёбы подойдёт бесплатная учебная версия 1С — она ставит те же объекты и тот же язык, но с ограничениями на объём данных и число соединений.
Что ставим перед первым запуском
Для разработки нужны три вещи: платформа, среда разработки и пустая база.
- Поставьте платформу 1С:Предприятие 8.3 (дистрибутив
1cv8). При установке отметьте компонент «1С:Предприятие» — в него входит и Конфигуратор. - Решите, где писать код. Конфигуратор идёт в комплекте платформы. 1C:EDT ставится отдельно и удобнее для командной работы с Git, но тяжелее для старта.
- Создайте пустую базу. В стартовом окне нажмите
Добавить→Создание новой информационной базы→ вариант без конфигурации («для разработки новой конфигурации или загрузки выгруженной ранее»).
Для первой программы хватит файлового варианта базы — она лежит в одной папке, сервер и СУБД не нужны. Клиент-серверный вариант (с PostgreSQL или MS SQL) понадобится позже, когда появятся нагрузка и много пользователей.
Продумываем объекты конфигурации
Прежде чем писать код, спроектируйте структуру данных. В 1С данные хранят не в «таблицах» напрямую, а в типовых объектах метаданных. Открываются они в дереве конфигурации (в Конфигураторе — Конфигурация → Открыть конфигурацию).
Базовый набор объектов, из которого собирают почти любое приложение:
- 📒 Справочники — списки однотипных сущностей: товары, контрагенты, сотрудники, склады. То, что существует постоянно.
- 📄 Документы — события и операции с датой: заказ, поступление, отгрузка, начисление. У документа есть проведение.
- 📊 Регистры накопления — цифры, которые меняются документами: остатки на складе, задолженность. Хранят и остатки, и обороты.
- 🗂 Регистры сведений — срезы значений по датам или ключам: цены, курсы, настройки по организациям.
- 🔖 Перечисления — фиксированные списки вариантов: статусы, типы, виды. Не заводятся пользователем.
- 📈 Отчёты и обработки — вывод данных и сервисные действия.
Правило простое: существительное из предметной области — чаще всего справочник, а глагол или событие — документ. «Товар» — справочник, «Поступление товара» — документ, «Остаток товара» — регистр.
Сначала заведите справочники и перечисления, затем документы, и только потом регистры, которые эти документы будут двигать. Иначе придётся возвращаться и переделывать ссылки.
Сразу продумайте связи между объектами. Реквизит документа «Контрагент» ссылается на справочник контрагентов, реквизит «Товар» в табличной части — на справочник товаров. Тип реквизита выбирают при его создании: примитивный (число, строка, дата, булево) или ссылочный на конкретный объект. Менять тип уже заполненного реквизита в рабочей базе рискованно — спланируйте типы заранее.
Пишем логику на встроенном языке 1С
Код в 1С живёт в модулях, привязанных к объектам. Основные места, куда его пишут:
- Модуль объекта (например, документа) — поведение самого объекта: обработка проведения, проверка заполнения.
- Модуль формы — реакция на действия пользователя: нажал кнопку, изменил поле.
- Общие модули — функции, которые нужны в разных местах. Сюда выносят повторяющуюся логику.
Встроенный язык русскоязычный (есть и английские синонимы ключевых слов). Переменные объявляют через Перем, процедуры — через Процедура … КонецПроцедуры, функции — через Функция … КонецФункции.
Главный обработчик документа — проведение. В нём документ формирует движения по регистрам:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Товар = СтрокаТовары.Товар;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
КонецПроцедуры
Код исполняется либо на сервере, либо на клиенте. Директивы компиляции (&НаСервере, &НаКлиенте, &НаСервереБезКонтекста) задают, где именно. Работа с базой — всегда на сервере; обращаться к базе напрямую из клиентской процедуры нельзя.
Лучшие практики, которые экономят время позже:
- давайте объектам и реквизитам понятные имена без сокращений;
- повторяющийся код выносите в общий модуль сразу, не копируйте;
- не смешивайте клиентскую и серверную логику в одной процедуре без нужды.
Получаем данные через запросы и регистры
Перебирать справочники циклом по одной записи — медленно. Данные в 1С читают запросами на языке запросов 1С. Текст запроса удобно собирать визуально: в модуле правый клик → Конструктор запроса.
Простой запрос к остаткам на складе через виртуальную таблицу регистра:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Товар КАК Товар,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК Остатки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Товар.Наименование + ": " + Формат(Выборка.Остаток, "ЧГ=0"));
КонецЦикла;
Ключевой момент — у регистра накопления есть виртуальные таблицы: Остатки, Обороты, ОстаткиИОбороты. Они считают итоги за вас, собственноручно суммировать движения не нужно. Для контроля отрицательного остатка при проведении читают остатки до записи движений и проверяют результат.
Когда данные нужно взять из нескольких таблиц и соединить, запрос усложняется: появляются СОЕДИНЕНИЕ, группировки СГРУППИРОВАТЬ ПО, итоги ИТОГИ. Тяжёлые выборки удобнее разбивать на пакет: сначала положить промежуточный результат во временную таблицу (ПОМЕСТИТЬ), затем читать из неё. Это и быстрее, и читается яснее, чем один гигантский запрос.
Число со строкой через + склеивается только с явным преобразованием. Используйте Формат(Число, "ЧГ=0") или СтрШаблон("%1: %2", Товар, Остаток) — иначе разделители разрядов попадут в текст или получите ошибку типов.
Собираем формы и интерфейс
Пользователь работает не с объектами, а с формами. В 1С 8.3 формы управляемые: их содержимое компонуется из реквизитов, а не рисуется пиксель в пиксель.
Основы работы с формой:
- У каждого объекта можно создать несколько форм (формы списка, формы элемента/документа). Если не создавать вручную, платформа сгенерирует форму по умолчанию из реквизитов объекта.
- Элементы формы связаны с реквизитами. Перетащите реквизит в дерево элементов — появится поле ввода нужного типа.
- Кнопки — это команды. Команду добавляют в форму, а в её обработчике пишут код реакции.
Чтобы форма была удобной:
- сгруппируйте поля в логические блоки (группы с заголовками);
- вынесите частые действия на командную панель формы, редкие — в меню «Ещё»;
- проверяйте заполнение в обработчике
ОбработкаПроверкиЗаполненияилиПередЗаписью, а не ловите ошибку потом.
Внешний вид в «Такси» настраивается свойствами групп и элементов (отображение, растяжение по горизонтали/вертикали). Отдельный «дизайнер пикселей» в управляемых формах не нужен — раскладкой управляет сама платформа.
Ищем и правим ошибки: отладка
Ошибки ищут отладчиком, встроенным в среду разработки. Он показывает, что реально происходит в коде на конкретных данных.
Как это работает на практике:
- Поставьте точку останова — щёлкните на поле слева от строки кода (или
F9). Исполнение встанет на этой строке. - Запустите приложение в режиме отладки (
Отладка→Начать отладку, либоF5). - Когда исполнение остановилось, листайте код по шагам:
F11— с заходом в процедуру,F10— без захода. - Смотрите значения переменных в Табло или наведите курсор на переменную — покажет текущее значение.
Перед запуском полезно прогнать синтаксический контроль: Конфигурация → Проверка модулей. Он ловит опечатки и обращения к несуществующим методам до старта.
Отдельный приём для кода — прогнать логику в уме на граничных данных: пустая таблица, одна строка, обратный порядок. Классическая ловушка — удаление элементов коллекции в прямом цикле: идите по коллекции с конца.
Передаём программу пользователям
Готовую конфигурацию нужно доставить в рабочую базу. Способ зависит от того, своя это разработка или доработка типовой.
Своя конфигурация. Выгрузите её в файл: Конфигурация → Сохранить конфигурацию в файл (получится .cf). В рабочей базе — Загрузить конфигурацию из файла, затем примите изменения в базу данных (Обновить конфигурацию базы данных, F7).
Доработка типовой (БП, ЗУП, УТ). Не меняйте типовую конфигурацию
напрямую — обновления будут конфликтовать. Делайте расширение конфигурации
: оно хранится отдельным файлом .cfe и подключается к базе, не трогая оригинал. Расширения работают с версии платформы 8.3.6. Загрузка .cfe и обновление конфигурации
базы — два разных шага.
Изменение структуры (новые реквизиты, таблицы) при обновлении требует монопольного доступа к базе — все пользователи должны выйти. Запускайте такое обновление в нерабочее время, предупредив людей: иначе их сеансы прервутся.
Для клиент-серверных баз и доступа через браузер конфигурацию публикуют на веб-сервере (Apache или IIS) средствами Конфигуратора. Файловую базу так публиковать можно, но для нескольких пользователей надёжнее клиент-серверный вариант.
Отдельный шаг перед сдачей — права доступа
. Если в программе работает больше одного человека, заведите роли (объект «Роль» в ветке «Общие»). В роли отмечают, какие объекты пользователь может читать, добавлять, изменять и проводить. Без хотя бы одной роли с правами запуска пользователь в базу не войдёт. Список пользователей и назначение им ролей ведут в Конфигураторе (Администрирование → Пользователи). Не раздавайте всем полные права «потому что так проще» — ограничение прав защищает данные от случайных правок.
Документируем и сопровождаем проект
Программа живёт годами, и через полгода вы забудете, зачем писали ту процедуру. Поэтому сопровождение закладывают сразу, а не «потом».
Что стоит вести с самого начала:
- 💬 Комментарии в коде — не пересказ строки, а зачем она тут и какие есть подводные камни.
- 📝 Встроенная справка — у объектов конфигурации есть разделы справки, которые видит пользователь по
F1. Заполняйте хотя бы ключевые. - 🗃 Версионирование исходников — для командной работы либо хранилище конфигурации (
Конфигурация→Хранилище конфигурации), либо Git через 1C:EDT. Хранилище даёт захват объектов и историю правок. - 📦 Резервные копии рабочей базы перед каждым обновлением структуры.
Хранилище конфигурации решает главную проблему команды: два человека не затрут правки друг друга. Объект захватывается на редактирование одним разработчиком, остальные видят, что он занят.
Нужно ли знать программирование, чтобы создать программу в 1С?
Чем Конфигуратор отличается от 1C:EDT?
Можно ли дорабатывать типовую конфигурацию, не ломая обновления?
Где хранятся данные моей программы?
1Cv8.1CD в папке базы, в клиент-серверном — в СУБД (PostgreSQL, MS SQL и др.). Конфигурация задаёт структуру, а сами записи лежат в базе данных.