Разработка своей конфигурации в 1С:Предприятие 8.3: с чего начать

· 9 мин

Содержание

Программа в 1С — это не отдельный exe-файл, а собственная конфигурация, которая работает поверх платформы 1С:Предприятие 8.3. Создают её в двух средах: классическом Конфигураторе или в 1C:EDT (среда на базе Eclipse). Начинают с пустой информационной базы «без конфигурации», добавляют объекты метаданных (справочники, документы, регистры), пишут логику на встроенном языке и собирают формы.

Ниже — рабочий порядок от установки платформы до момента, когда приложением пользуются живые люди. Пути и кнопки даны для интерфейса «Такси» на платформе версии не ниже 8.3.2x. Разработка в Конфигураторе и в EDT отличается деталями интерфейса, но набор объектов и язык одинаковы.

Платформа без лицензии не запускает базу в обычном режиме. Для учёбы подойдёт бесплатная учебная версия 1С — она ставит те же объекты и тот же язык, но с ограничениями на объём данных и число соединений.

Что ставим перед первым запуском

Для разработки нужны три вещи: платформа, среда разработки и пустая база.

  1. Поставьте платформу 1С:Предприятие 8.3 (дистрибутив 1cv8). При установке отметьте компонент «1С:Предприятие» — в него входит и Конфигуратор.
  2. Решите, где писать код. Конфигуратор идёт в комплекте платформы. 1C:EDT ставится отдельно и удобнее для командной работы с Git, но тяжелее для старта.
  3. Создайте пустую базу. В стартовом окне нажмите Добавить → Создание новой информационной базы → вариант без конфигурации («для разработки новой конфигурации или загрузки выгруженной ранее»).

Для первой программы хватит файлового варианта базы — она лежит в одной папке, сервер и СУБД не нужны. Клиент-серверный вариант (с PostgreSQL или MS SQL) понадобится позже, когда появятся нагрузка и много пользователей.

В чём разрабатывать: Конфигуратор или 1C:EDT?

Продумываем объекты конфигурации

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

Базовый набор объектов, из которого собирают почти любое приложение:

  • 📒 Справочники — списки однотипных сущностей: товары, контрагенты, сотрудники, склады. То, что существует постоянно.
  • 📄 Документы — события и операции с датой: заказ, поступление, отгрузка, начисление. У документа есть проведение.
  • 📊 Регистры накопления — цифры, которые меняются документами: остатки на складе, задолженность. Хранят и остатки, и обороты.
  • 🗂 Регистры сведений — срезы значений по датам или ключам: цены, курсы, настройки по организациям.
  • 🔖 Перечисления — фиксированные списки вариантов: статусы, типы, виды. Не заводятся пользователем.
  • 📈 Отчёты и обработки — вывод данных и сервисные действия.

Правило простое: существительное из предметной области — чаще всего справочник, а глагол или событие — документ. «Товар» — справочник, «Поступление товара» — документ, «Остаток товара» — регистр.

Сначала заведите справочники и перечисления, затем документы, и только потом регистры, которые эти документы будут двигать. Иначе придётся возвращаться и переделывать ссылки.

Сразу продумайте связи между объектами. Реквизит документа «Контрагент» ссылается на справочник контрагентов, реквизит «Товар» в табличной части — на справочник товаров. Тип реквизита выбирают при его создании: примитивный (число, строка, дата, булево) или ссылочный на конкретный объект. Менять тип уже заполненного реквизита в рабочей базе рискованно — спланируйте типы заранее.

Пишем логику на встроенном языке 1С

Код в 1С живёт в модулях, привязанных к объектам. Основные места, куда его пишут:

  • Модуль объекта (например, документа) — поведение самого объекта: обработка проведения, проверка заполнения.
  • Модуль формы — реакция на действия пользователя: нажал кнопку, изменил поле.
  • Общие модули — функции, которые нужны в разных местах. Сюда выносят повторяющуюся логику.

Встроенный язык русскоязычный (есть и английские синонимы ключевых слов). Переменные объявляют через Перем, процедуры — через Процедура … КонецПроцедуры, функции — через Функция … КонецФункции.

Главный обработчик документа — проведение. В нём документ формирует движения по регистрам:

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

Код исполняется либо на сервере, либо на клиенте. Директивы компиляции (&НаСервере, &НаКлиенте, &НаСервереБезКонтекста) задают, где именно. Работа с базой — всегда на сервере; обращаться к базе напрямую из клиентской процедуры нельзя.

Лучшие практики, которые экономят время позже:

  • давайте объектам и реквизитам понятные имена без сокращений;
  • повторяющийся код выносите в общий модуль сразу, не копируйте;
  • не смешивайте клиентскую и серверную логику в одной процедуре без нужды.

Получаем данные через запросы и регистры

Перебирать справочники циклом по одной записи — медленно. Данные в 1С читают запросами на языке запросов 1С. Текст запроса удобно собирать визуально: в модуле правый клик → Конструктор запроса.

Простой запрос к остаткам на складе через виртуальную таблицу регистра:

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

Ключевой момент — у регистра накопления есть виртуальные таблицы: Остатки, Обороты, ОстаткиИОбороты. Они считают итоги за вас, собственноручно суммировать движения не нужно. Для контроля отрицательного остатка при проведении читают остатки до записи движений и проверяют результат.

Когда данные нужно взять из нескольких таблиц и соединить, запрос усложняется: появляются СОЕДИНЕНИЕ, группировки СГРУППИРОВАТЬ ПО, итоги ИТОГИ. Тяжёлые выборки удобнее разбивать на пакет: сначала положить промежуточный результат во временную таблицу (ПОМЕСТИТЬ), затем читать из неё. Это и быстрее, и читается яснее, чем один гигантский запрос.

Число со строкой через + склеивается только с явным преобразованием. Используйте Формат(Число, "ЧГ=0") или СтрШаблон("%1: %2", Товар, Остаток) — иначе разделители разрядов попадут в текст или получите ошибку типов.

Собираем формы и интерфейс

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

Основы работы с формой:

  1. У каждого объекта можно создать несколько форм (формы списка, формы элемента/документа). Если не создавать вручную, платформа сгенерирует форму по умолчанию из реквизитов объекта.
  2. Элементы формы связаны с реквизитами. Перетащите реквизит в дерево элементов — появится поле ввода нужного типа.
  3. Кнопки — это команды. Команду добавляют в форму, а в её обработчике пишут код реакции.

Чтобы форма была удобной:

  • сгруппируйте поля в логические блоки (группы с заголовками);
  • вынесите частые действия на командную панель формы, редкие — в меню «Ещё»;
  • проверяйте заполнение в обработчике ОбработкаПроверкиЗаполнения или ПередЗаписью, а не ловите ошибку потом.

Внешний вид в «Такси» настраивается свойствами групп и элементов (отображение, растяжение по горизонтали/вертикали). Отдельный «дизайнер пикселей» в управляемых формах не нужен — раскладкой управляет сама платформа.

Ищем и правим ошибки: отладка

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

Как это работает на практике:

  1. Поставьте точку останова — щёлкните на поле слева от строки кода (или F9). Исполнение встанет на этой строке.
  2. Запустите приложение в режиме отладки (Отладка → Начать отладку, либо F5).
  3. Когда исполнение остановилось, листайте код по шагам: F11 — с заходом в процедуру, F10 — без захода.
  4. Смотрите значения переменных в Табло или наведите курсор на переменную — покажет текущее значение.

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

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

Проверка перед сдачей функции
Выполнено: 0 / 6

Передаём программу пользователям

Готовую конфигурацию нужно доставить в рабочую базу. Способ зависит от того, своя это разработка или доработка типовой.

Своя конфигурация. Выгрузите её в файл: Конфигурация → Сохранить конфигурацию в файл (получится .cf). В рабочей базе — Загрузить конфигурацию из файла, затем примите изменения в базу данных (Обновить конфигурацию базы данных, F7).

Доработка типовой (БП, ЗУП, УТ). Не меняйте типовую конфигурацию напрямую — обновления будут конфликтовать. Делайте расширение конфигурации : оно хранится отдельным файлом .cfe и подключается к базе, не трогая оригинал. Расширения работают с версии платформы 8.3.6. Загрузка .cfe и обновление конфигурации базы — два разных шага.

Изменение структуры (новые реквизиты, таблицы) при обновлении требует монопольного доступа к базе — все пользователи должны выйти. Запускайте такое обновление в нерабочее время, предупредив людей: иначе их сеансы прервутся.

Для клиент-серверных баз и доступа через браузер конфигурацию публикуют на веб-сервере (Apache или IIS) средствами Конфигуратора. Файловую базу так публиковать можно, но для нескольких пользователей надёжнее клиент-серверный вариант.

Отдельный шаг перед сдачей — права доступа . Если в программе работает больше одного человека, заведите роли (объект «Роль» в ветке «Общие»). В роли отмечают, какие объекты пользователь может читать, добавлять, изменять и проводить. Без хотя бы одной роли с правами запуска пользователь в базу не войдёт. Список пользователей и назначение им ролей ведут в Конфигураторе (Администрирование → Пользователи). Не раздавайте всем полные права «потому что так проще» — ограничение прав защищает данные от случайных правок.

Документируем и сопровождаем проект

Программа живёт годами, и через полгода вы забудете, зачем писали ту процедуру. Поэтому сопровождение закладывают сразу, а не «потом».

Что стоит вести с самого начала:

  • 💬 Комментарии в коде — не пересказ строки, а зачем она тут и какие есть подводные камни.
  • 📝 Встроенная справка — у объектов конфигурации есть разделы справки, которые видит пользователь по F1. Заполняйте хотя бы ключевые.
  • 🗃 Версионирование исходников — для командной работы либо хранилище конфигурации (Конфигурация → Хранилище конфигурации), либо Git через 1C:EDT. Хранилище даёт захват объектов и историю правок.
  • 📦 Резервные копии рабочей базы перед каждым обновлением структуры.

Хранилище конфигурации решает главную проблему команды: два человека не затрут правки друг друга. Объект захватывается на редактирование одним разработчиком, остальные видят, что он занят.

Нужно ли знать программирование, чтобы создать программу в 1С?
Базовое — да. Встроенный язык проще универсальных языков, но понимание переменных, циклов, условий и работы с данными обязательно. Структуру из справочников и документов можно спроектировать и без глубокого кода, но без запросов и проведения приложение останется картинкой.
Чем Конфигуратор отличается от 1C:EDT?
Это две среды для одной задачи. Конфигуратор входит в платформу и привычен большинству. 1C:EDT построен на Eclipse, хранит исходники в текстовом виде и дружит с Git — его берут команды. Набор объектов и язык в обеих средах одинаковы.
Можно ли дорабатывать типовую конфигурацию, не ломая обновления?
Да, для этого есть расширения конфигурации. Они подключаются к базе отдельным файлом и не меняют типовой код, поэтому обновления от вендора встают поверх без ручного слияния.
Где хранятся данные моей программы?
В информационной базе. В файловом варианте это файл 1Cv8.1CD в папке базы, в клиент-серверном — в СУБД (PostgreSQL, MS SQL и др.). Конфигурация задаёт структуру, а сами записи лежат в базе данных.
Что выбрать для первой базы: файловый или клиент-серверный вариант?
Для учёбы и одного пользователя — файловый: ничего, кроме платформы, не нужно. Клиент-серверный берут, когда пользователей много, нужна нагрузка и регламентные задания по расписанию.