С чего начать изучение программирования 1С и в каком порядке осваивать темы
Содержание
Программирование в 1С начинается не с языка, а с понимания платформы: данные здесь описываются объектами метаданных (справочники, документы, регистры), а код только ими управляет. Освоить это реально за несколько недель, если идти по порядку — от структуры конфигурации к встроенному языку, запросам и отладке, а не хвататься за всё сразу.
Разработка ведётся в конфигураторе платформы 1С:Предприятие 8.3 (либо в EDT — среде на базе Eclipse). Понять программирование 1С — значит уметь читать дерево конфигурации, писать процедуры с правильным разделением клиент/сервер, доставать данные запросом и находить ошибку в отладчике. Ниже — по шагам, в каком порядке это укладывается в голове.
Платформа и дерево конфигурации: фундамент, без которого язык бесполезен
Сначала разберитесь, из чего состоит прикладное решение. Откройте конфигуратор: Конфигурация → Открыть конфигурацию — слева появится дерево объектов метаданных. Это и есть структура базы.
Ключевые типы объектов, которые встретите в первый день:
- 📘 Справочники — списки условно-постоянных данных: номенклатура, контрагенты, сотрудники.
- 📄 Документы — события хозяйственной жизни: поступление, реализация, начисление зарплаты. Умеют проводиться.
- 📊 Регистры — хранилища итогов. Регистр накопления копит остатки и обороты, регистр сведений хранит значения на дату, регистр бухгалтерии — проводки, регистр расчёта — начисления.
- 🧾 Отчёты и обработки — то, что показывает данные и меняет их пакетно.
Главная мысль: в 1С вы почти не создаёте таблицы руками — вы добавляете объект метаданных, а таблицы в базе платформа строит сама. Документ не хранит остатки — он пишет движения в регистр, а регистр отдаёт итоги. Пока это не уложилось, код будет казаться магией.
Два режима запуска платформы:
| Режим | Для чего | Как запустить |
|---|---|---|
| Конфигуратор | Писать код, менять структуру, отлаживать | Кнопка «Конфигуратор» в окне запуска |
| 1С:Предприятие | Работать в программе как пользователь | Кнопка «1С:Предприятие» |
Держите одну базу открытой сразу в двух окнах: слева конфигуратор с кодом, справа «1С:Предприятие» — так вы сразу видите результат правок.
Встроенный язык и клиент-серверная модель: где главная ловушка новичка
Встроенный язык 1С — русскоязычный, с привычными конструкциями. Переменные без объявления типа, операторы Если … Тогда … КонецЕсли, циклы Для … Цикл … КонецЦикла и Для Каждого … Из … Цикл, процедуры и функции.
Процедура ПоказатьИтог(Сумма) Экспорт
Если Сумма > 0 Тогда
Сообщить("Сумма к оплате: " + Формат(Сумма, "ЧГ=0"));
Иначе
Сообщить("Долга нет");
КонецЕсли;
КонецПроцедуры
Обратите внимание на Формат(Сумма, "ЧГ=0"): число со строкой напрямую складывать неудобно для вывода, поэтому его форматируют.
Теперь главное, обо что спотыкаются все новички — директивы компиляции. Код формы выполняется либо на клиенте, либо на сервере, и вы обязаны это указать:
&НаКлиенте
Процедура ПриНажатии(Команда)
Результат = ПосчитатьНаСервере(Товар);
Сообщить(Результат);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПосчитатьНаСервере(Товар)
// здесь доступны запросы к базе
КонецФункции
Запомните правило: диалоги с пользователем, формы и сообщения — на клиенте; обращения к базе и запросы — на сервере. Клиент не может напрямую читать базу, сервер не может показать окно. Если путаете директивы — получаете ошибки «переменная не определена» или «метод недоступен на клиенте».
Полезно сразу знать, что вызывать «на сервере без контекста» (&НаСервереБезКонтекста) быстрее: платформа не перегоняет на сервер и обратно все данные формы.
Язык запросов и виртуальные таблицы регистров: как доставать данные
Перебирать справочник циклом в коде — почти всегда ошибка. Данные достают запросом: он выполняется на сервере базы данных и возвращает готовую выборку.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Товар,
| Номенклатура.Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Товар";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Товар);
КонецЦикла;
Базовые конструкции языка запросов: ВЫБРАТЬ, ИЗ, ГДЕ, СГРУППИРОВАТЬ ПО, УПОРЯДОЧИТЬ ПО, СОЕДИНЕНИЕ. Синтаксис близок к SQL, но знать SQL заранее не нужно — поможет, но не обязательно.
Следующий шаг после простой выборки — группировка с итогами и соединение таблиц. Например, продажи по каждому товару за период:
"ВЫБРАТЬ
| Продажи.Номенклатура КАК Товар,
| СУММА(Продажи.КоличествоОборот) КАК Количество,
| СУММА(Продажи.СуммаОборот) КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты(&Начало, &Конец) КАК Продажи
|СГРУППИРОВАТЬ ПО
| Продажи.Номенклатура
|УПОРЯДОЧИТЬ ПО
| Сумма УБЫВ"
Здесь СУММА() — агрегатная функция, СГРУППИРОВАТЬ ПО сворачивает строки по товару. Когда данные лежат в разных таблицах (например, нужно к обороту добавить артикул из справочника), их связывают через ЛЕВОЕ СОЕДИНЕНИЕ по ссылке. Левое соединение, а не внутреннее — чтобы не потерять товары без продаж, если они нужны в отчёте.
Отдельно освойте виртуальные таблицы регистров — без них остатки и обороты не посчитать правильно:
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата)— остатки на момент.РегистрНакопления.Продажи.Обороты(&Начало, &Конец)— обороты за период.РегистрСведений.Цены.СрезПоследних(&Дата)— последнее значение на дату.
Не пишите запрос к «сырой» таблице движений регистра, чтобы сложить остаток вручную. Виртуальная таблица Остатки делает это корректно и быстро — платформа сама учитывает все движения.
Запросы удобно собирать и проверять в консоли запросов (внешняя обработка, их много в открытом доступе) — там видно текст и результат, не запуская весь код.
Объектная и ссылочная работа с данными, события объектов
В 1С два способа работать с данными. Запросом — когда нужно много записей на чтение. Через объект — когда нужно создать или изменить одну запись.
Каждый элемент справочника или документа имеет ссылку (адрес записи) и объект (сама запись с полями для изменения):
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = "Кабель ВВГ 3х2.5";
НовыйТовар.Записать();
СсылкаНаТовар = НовыйТовар.Ссылка;
Поведение объектов задают события — процедуры в модуле объекта, которые платформа вызывает сама:
ПередЗаписью— проверить данные до сохранения.ПриЗаписи— действия в момент записи.ОбработкаПроведения— у документа: сформировать движения по регистрам.
Вот сердце учётной логики — документ в обработке проведения пишет движения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Продажи.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = СтрокаТовары.Номенклатура;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
КонецПроцедуры
Поймёте этот механизм — поймёте, как в 1С вообще устроен учёт: документы порождают движения, регистры копят итоги, отчёты их показывают.
Если нужно пройти коллекцию и удалять элементы, идите с конца: Для Сч = 1 По Строки.Количество() Цикл Элемент = Строки[Строки.Количество() - Сч] — иначе индексы собьются.
Отдельно стоит понять связку с формами. Пользователь видит не объект, а управляемую форму — её реквизиты, таблицы и команды. Данные между формой и объектом платформа перекладывает сама; ваша задача — в нужный момент (ПриСозданииНаСервере, нажатие команды) прочитать или заполнить реквизиты
. Правило «клиент показывает, сервер читает базу» здесь тоже действует: обработчик команды живёт на клиенте, а запрос к данным выносят на сервер.
Типовые задачи новичка и как к ним подступиться
Чтобы понять программирование 1С, недостаточно читать синтаксис — нужно решать мелкие задачи. Вот первые, с которых обычно начинают, и чем они решаются:
- Вывести сообщение / значение поля — метод
Сообщить()или объектНовый СообщениеПользователю. - Добавить реквизит
в документ — объект метаданных, не код: правый клик по документу →
Добавить → Реквизит. - Сделать простой отчёт — через систему компоновки данных (СКД): создаёте объект «Отчёт», в схеме компоновки пишете запрос, настраиваете поля — таблицу и форму платформа строит сама.
- Заполнить документ по кнопке — команда формы на клиенте, расчёт на сервере.
- Проверить права и роль — функции типа
РольДоступна().
Ещё одна повседневная задача — найти элемент справочника по коду или наименованию. Для поиска по реквизиту у менеджера справочника есть готовые методы:
Товар = Справочники.Номенклатура.НайтиПоКоду("00-0001");
Если Товар.Пустая() Тогда
Сообщить("Товар с таким кодом не найден");
КонецЕсли;
Метод НайтиПоКоду (и НайтиПоНаименованию) возвращает ссылку; если ничего не нашлось — пустую ссылку, которую проверяют через Пустая(). Это типичный приём: получили ссылку — обязательно проверили, что она не пустая, прежде чем читать её поля.
Паттерн, который экономит силы: не изобретайте велосипед, а смотрите, как сделано в типовой конфигурации. Откройте в конфигураторе похожий документ из «1С:Бухгалтерии» или «Управления торговлей» и прочитайте его модуль — это лучший учебник по стилю кода.
Ещё один приём практика — расширения конфигурации (появились в платформе 8.3.6). Они позволяют дорабатывать типовую конфигурацию , не снимая её с поддержки: вы добавляете свой код «поверх», а при обновлении типовое решение не конфликтует с вашими правками. Для старта знать о них достаточно, но знать — обязательно.
Отладка и поиск медленных мест
Код, который не запускается с первого раза — норма. Поэтому отладчик осваивают сразу, а не «потом».
Как начать отлаживать:
- В конфигураторе поставьте точку останова — клик на поле слева от строки кода (или
F9). - Запустите
1С:Предприятиев режиме отладки (Отладка → Начать отладку,F5). - Когда выполнение дойдёт до точки — окно встанет на паузу.
- Наведите курсор на переменную или откройте табло — увидите текущие значения.
- Шагайте по коду:
F10— по строкам,F11— заходя внутрь процедур.
Для поиска ошибок в данных помогает вывод в сообщения через Сообщить(), но для разбора логики точка останова удобнее — видно всё состояние сразу.
Когда код работает, но тормозит, подключают:
- 🔍 Замер производительности в конфигураторе (
Отладка → Замер производительности) — показывает, какие строки съедают время. - 🧰 Технологический журнал — логи платформы для разбора сложных случаев на сервере.
Типовая причина тормозов у новичка — запрос внутри цикла (на каждой итерации лезем в базу). Решение: один запрос до цикла, а в цикле работаем с выборкой. Второй частый промах — чтение остатков перебором движений вместо виртуальной таблицы.
Замер производительности и технологический журнал включайте точечно и выключайте после разбора: на рабочей базе постоянный сбор подробных логов сам по себе нагружает сервер.
Конфигуратор или EDT, сколько учить и что читать
Коротко о выборе среды и темпе, без воды.
Конфигуратор встроен в платформу, в нём работает большинство специалистов и написана вся документация для начинающих — начинайте с него. EDT (1C:Enterprise Development Tools) — современная среда на базе Eclipse с командной разработкой через Git; к ней логично переходить, когда базовый язык уже освоен.
Темп. Чтобы читать и править чужой код — ориентировочно 1–2 месяца регулярной практики. Чтобы делать свои доработки уверенно — около полугода. Цифры примерные и зависят от того, сколько вы реально пишете кода, а не читаете про него.
Источник знаний №1 — встроенный синтакс-помощник в конфигураторе: по любому методу он показывает параметры и пример. Это быстрее любого учебника.
Частые вопросы
Нужно ли знать другой язык программирования, чтобы освоить 1С?
Нужно ли учить SQL для языка запросов 1С?
ВЫБРАТЬ, ГДЕ, СОЕДИНЕНИЕ), но работает с объектами метаданных и виртуальными таблицами. Знание SQL помогает понять принцип, но синтаксис у 1С свой.С чего начать: с конфигуратора или с EDT?
Можно ли учиться на рабочей базе?
.dt и загрузка в новую пустую базу) и тренируйтесь на ней. Любая ошибка в коде на рабочей базе может испортить данные или движения документов.