С чего начать изучение программирования 1С и в каком порядке осваивать темы

· 9 мин

Содержание

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

Разработка ведётся в конфигураторе платформы 1С:Предприятие 8.3 (либо в EDT — среде на базе Eclipse). Понять программирование 1С — значит уметь читать дерево конфигурации, писать процедуры с правильным разделением клиент/сервер, доставать данные запросом и находить ошибку в отладчике. Ниже — по шагам, в каком порядке это укладывается в голове.

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

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

Ключевые типы объектов, которые встретите в первый день:

  • 📘 Справочники — списки условно-постоянных данных: номенклатура, контрагенты, сотрудники.
  • 📄 Документы — события хозяйственной жизни: поступление, реализация, начисление зарплаты. Умеют проводиться.
  • 📊 Регистры — хранилища итогов. Регистр накопления копит остатки и обороты, регистр сведений хранит значения на дату, регистр бухгалтерии — проводки, регистр расчёта — начисления.
  • 🧾 Отчёты и обработки — то, что показывает данные и меняет их пакетно.

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

Два режима запуска платформы:

РежимДля чегоКак запустить
КонфигураторПисать код, менять структуру, отлаживатьКнопка «Конфигуратор» в окне запуска
1С:ПредприятиеРаботать в программе как пользовательКнопка «1С:Предприятие»

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

Встроенный язык и клиент-серверная модель: где главная ловушка новичка

Встроенный язык 1С — русскоязычный, с привычными конструкциями. Переменные без объявления типа, операторы Если … Тогда … КонецЕсли, циклы Для … Цикл … КонецЦикла и Для Каждого … Из … Цикл, процедуры и функции.

Процедура ПоказатьИтог(Сумма) Экспорт
    Если Сумма > 0 Тогда
        Сообщить("Сумма к оплате: " + Формат(Сумма, "ЧГ=0"));
    Иначе
        Сообщить("Долга нет");
    КонецЕсли;
КонецПроцедуры

Обратите внимание на Формат(Сумма, "ЧГ=0"): число со строкой напрямую складывать неудобно для вывода, поэтому его форматируют.

Теперь главное, обо что спотыкаются все новички — директивы компиляции. Код формы выполняется либо на клиенте, либо на сервере, и вы обязаны это указать:

&НаКлиенте
Процедура ПриНажатии(Команда)
    Результат = ПосчитатьНаСервере(Товар);
    Сообщить(Результат);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПосчитатьНаСервере(Товар)
    // здесь доступны запросы к базе
КонецФункции

Запомните правило: диалоги с пользователем, формы и сообщения — на клиенте; обращения к базе и запросы — на сервере. Клиент не может напрямую читать базу, сервер не может показать окно. Если путаете директивы — получаете ошибки «переменная не определена» или «метод недоступен на клиенте».

Полезно сразу знать, что вызывать «на сервере без контекста» (&НаСервереБезКонтекста) быстрее: платформа не перегоняет на сервер и обратно все данные формы.

Язык запросов и виртуальные таблицы регистров: как доставать данные

Перебирать справочник циклом в коде — почти всегда ошибка. Данные достают запросом: он выполняется на сервере базы данных и возвращает готовую выборку.

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

Базовые конструкции языка запросов: ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО, СОЕДИНЕНИЕ. Синтаксис близок к SQL, но знать SQL заранее не нужно — поможет, но не обязательно.

Следующий шаг после простой выборки — группировка с итогами и соединение таблиц. Например, продажи по каждому товару за период:

"ВЫБРАТЬ
|    Продажи.Номенклатура КАК Товар,
|    СУММА(Продажи.КоличествоОборот) КАК Количество,
|    СУММА(Продажи.СуммаОборот) КАК Сумма
|ИЗ
|    РегистрНакопления.Продажи.Обороты(&Начало, &Конец) КАК Продажи
|СГРУППИРОВАТЬ ПО
|    Продажи.Номенклатура
|УПОРЯДОЧИТЬ ПО
|    Сумма УБЫВ"

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

Отдельно освойте виртуальные таблицы регистров — без них остатки и обороты не посчитать правильно:

  • РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата) — остатки на момент.
  • РегистрНакопления.Продажи.Обороты(&Начало, &Конец) — обороты за период.
  • РегистрСведений.Цены.СрезПоследних(&Дата) — последнее значение на дату.

Не пишите запрос к «сырой» таблице движений регистра, чтобы сложить остаток вручную. Виртуальная таблица Остатки делает это корректно и быстро — платформа сама учитывает все движения.

Запросы удобно собирать и проверять в консоли запросов (внешняя обработка, их много в открытом доступе) — там видно текст и результат, не запуская весь код.

Объектная и ссылочная работа с данными, события объектов

В 1С два способа работать с данными. Запросом — когда нужно много записей на чтение. Через объект — когда нужно создать или изменить одну запись.

Каждый элемент справочника или документа имеет ссылку (адрес записи) и объект (сама запись с полями для изменения):

НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = "Кабель ВВГ 3х2.5";
НовыйТовар.Записать();
СсылкаНаТовар = НовыйТовар.Ссылка;

Поведение объектов задают события — процедуры в модуле объекта, которые платформа вызывает сама:

  • ПередЗаписью — проверить данные до сохранения.
  • ПриЗаписи — действия в момент записи.
  • ОбработкаПроведения — у документа: сформировать движения по регистрам.

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

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

Поймёте этот механизм — поймёте, как в 1С вообще устроен учёт: документы порождают движения, регистры копят итоги, отчёты их показывают.

Если нужно пройти коллекцию и удалять элементы, идите с конца: Для Сч = 1 По Строки.Количество() Цикл Элемент = Строки[Строки.Количество() - Сч] — иначе индексы собьются.

Отдельно стоит понять связку с формами. Пользователь видит не объект, а управляемую форму — её реквизиты, таблицы и команды. Данные между формой и объектом платформа перекладывает сама; ваша задача — в нужный момент (ПриСозданииНаСервере, нажатие команды) прочитать или заполнить реквизиты . Правило «клиент показывает, сервер читает базу» здесь тоже действует: обработчик команды живёт на клиенте, а запрос к данным выносят на сервер.

Типовые задачи новичка и как к ним подступиться

Чтобы понять программирование 1С, недостаточно читать синтаксис — нужно решать мелкие задачи. Вот первые, с которых обычно начинают, и чем они решаются:

  1. Вывести сообщение / значение поля — метод Сообщить() или объект Новый СообщениеПользователю.
  2. Добавить реквизит в документ — объект метаданных, не код: правый клик по документу → Добавить → Реквизит.
  3. Сделать простой отчёт — через систему компоновки данных (СКД): создаёте объект «Отчёт», в схеме компоновки пишете запрос, настраиваете поля — таблицу и форму платформа строит сама.
  4. Заполнить документ по кнопке — команда формы на клиенте, расчёт на сервере.
  5. Проверить права и роль — функции типа РольДоступна().

Ещё одна повседневная задача — найти элемент справочника по коду или наименованию. Для поиска по реквизиту у менеджера справочника есть готовые методы:

Товар = Справочники.Номенклатура.НайтиПоКоду("00-0001");
Если Товар.Пустая() Тогда
    Сообщить("Товар с таким кодом не найден");
КонецЕсли;

Метод НайтиПоКоду (и НайтиПоНаименованию) возвращает ссылку; если ничего не нашлось — пустую ссылку, которую проверяют через Пустая(). Это типичный приём: получили ссылку — обязательно проверили, что она не пустая, прежде чем читать её поля.

Паттерн, который экономит силы: не изобретайте велосипед, а смотрите, как сделано в типовой конфигурации. Откройте в конфигураторе похожий документ из «1С:Бухгалтерии» или «Управления торговлей» и прочитайте его модуль — это лучший учебник по стилю кода.

Ещё один приём практика — расширения конфигурации (появились в платформе 8.3.6). Они позволяют дорабатывать типовую конфигурацию , не снимая её с поддержки: вы добавляете свой код «поверх», а при обновлении типовое решение не конфликтует с вашими правками. Для старта знать о них достаточно, но знать — обязательно.

Порядок освоения: отмечайте, что уже поняли
Выполнено: 0 / 8

Отладка и поиск медленных мест

Код, который не запускается с первого раза — норма. Поэтому отладчик осваивают сразу, а не «потом».

Как начать отлаживать:

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

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

Когда код работает, но тормозит, подключают:

  • 🔍 Замер производительности в конфигураторе (Отладка → Замер производительности) — показывает, какие строки съедают время.
  • 🧰 Технологический журнал — логи платформы для разбора сложных случаев на сервере.

Типовая причина тормозов у новичка — запрос внутри цикла (на каждой итерации лезем в базу). Решение: один запрос до цикла, а в цикле работаем с выборкой. Второй частый промах — чтение остатков перебором движений вместо виртуальной таблицы.

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

Конфигуратор или EDT, сколько учить и что читать

Коротко о выборе среды и темпе, без воды.

Конфигуратор встроен в платформу, в нём работает большинство специалистов и написана вся документация для начинающих — начинайте с него. EDT (1C:Enterprise Development Tools) — современная среда на базе Eclipse с командной разработкой через Git; к ней логично переходить, когда базовый язык уже освоен.

Темп. Чтобы читать и править чужой код — ориентировочно 1–2 месяца регулярной практики. Чтобы делать свои доработки уверенно — около полугода. Цифры примерные и зависят от того, сколько вы реально пишете кода, а не читаете про него.

Источник знаний №1 — встроенный синтакс-помощник в конфигураторе: по любому методу он показывает параметры и пример. Это быстрее любого учебника.

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

Нужно ли знать другой язык программирования, чтобы освоить 1С?
Нет. Встроенный язык 1С самодостаточен и русскоязычный. Прошлый опыт в программировании ускорит старт, но для чтения и правки кода он не требуется. Полезнее понимать учёт: что такое документ, остаток, проводка.
Нужно ли учить SQL для языка запросов 1С?
Не обязательно. Язык запросов похож на SQL по логике (ВЫБРАТЬ, ГДЕ, СОЕДИНЕНИЕ), но работает с объектами метаданных и виртуальными таблицами. Знание SQL помогает понять принцип, но синтаксис у 1С свой.
С чего начать: с конфигуратора или с EDT?
С конфигуратора. Он встроен в платформу, на него рассчитаны учебные материалы и синтакс-помощник. EDT имеет смысл осваивать позже, когда понадобится командная разработка и Git.
Можно ли учиться на рабочей базе?
Не нужно. Сделайте копию базы (выгрузка в файл .dt и загрузка в новую пустую базу) и тренируйтесь на ней. Любая ошибка в коде на рабочей базе может испортить данные или движения документов.
Чем отличается ссылка от объекта?
Ссылка — это адрес записи, по ней читают и подставляют значение в другие документы. Объект — сама запись с полями, которые можно менять и записывать. Создают и редактируют через объект, ссылаются и читают — через ссылку.