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

· 9 мин

Содержание

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

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

Сначала платформа: что такое метаданные и где живёт код

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

Откройте конфигуратор своей учебной базы и найдите окно конфигурации (Конфигурация → Открыть конфигурацию). Там дерево с ветками. Вот основные:

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

У каждого объекта есть реквизиты, табличные части, формы и модули. Модуль — это место, где лежит код. Модуль объекта отвечает за поведение самого объекта. Модуль формы — за поведение окна. Общие модули хранят процедуры, которые вызывают отовсюду.

Заведите себе учебную базу на поставке «Бухгалтерия предприятия» или «Управление торговлей» и не бойтесь её ломать. Рабочую базу для экспериментов не используют никогда.

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

Клиент и сервер: деление, без которого код не заработает

В управляемых формах код исполняется то на клиенте (в окне пользователя), то на сервере. Это задаётся директивой компиляции перед процедурой:

ДирективаГде выполняетсяЧто доступно
&НаКлиентена компьютере пользователяэлементы формы, диалоги, сообщения
&НаСерверена сервере, с контекстом формыданные формы, запросы к базе
&НаСервереБезКонтекстана сервере, без данных формызапросы, быстрый вызов

Клиентская процедура не может напрямую выполнить запрос к базе. Она вызывает серверную, передаёт ей параметры и получает результат. Поймёте эту схему — и половина ошибок «Поле объекта не обнаружено» исчезнет.

Синтаксис встроенного языка: минимум, который реально нужен

Язык русскоязычный, регистр не важен, операторы закрываются словами. Выучить базу можно за две-три недели. Вот что действительно нужно на старте.

Переменные и типы. Объявлять переменную заранее не обязательно: она создаётся при первом присваивании. Основные типы: Строка, Число, Дата, Булево, Неопределено, а также ссылки на объекты базы.

Процедуры и функции. Процедура ничего не возвращает, функция возвращает значение.

Функция ПолучитьСтавкуНДС(СуммаСНДС)
    Возврат Окр(СуммаСНДС * 20 / 120, 2);
КонецФункции

Для суммы 1 200 результат — 200. Пример простой, но показывает главное: у функции есть параметр, тело и Возврат.

Условия и циклы.

Если Сумма > 100000 Тогда
    Сообщить("Крупная сделка");
ИначеЕсли Сумма > 0 Тогда
    Сообщить("Обычная сделка");
Иначе
    Сообщить("Нулевая сумма");
КонецЕсли;

Для Каждого Строка Из ТаблицаТоваров Цикл
    Итого = Итого + Строка.Сумма;
КонецЦикла;

Коллекции. Запомните четыре, остальные потом:

  • 🔹 Массив — список значений по порядку;
  • 🔹 Структура — набор пар «ключ — значение»;
  • 🔹 Соответствие — то же, но ключом может быть что угодно;
  • 🔹 ТаблицаЗначений — таблица с колонками, главный рабочий инструмент.

Обработку ошибок в коде делают через Попытка … Исключение … КонецПопытки. Но не оборачивайте в попытку всё подряд: ошибка, которую вы спрятали, потом всплывёт у пользователя в виде странных данных.

Не копируйте код с форумов, не поняв каждую строку. Чужая процедура может писать в базу, и вы это увидите только по последствиям.

Запросы и СКД: как достать данные из базы

Язык запросов похож на SQL, но работает не с таблицами, а с объектами метаданных. Именно запросы занимают большую часть работы практикующего программиста 1С.

Минимальный пример: вывести наименования элементов справочника.

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

Параметры в запрос передают через &Параметр и Запрос.УстановитьПараметр(...), а не склейкой строк. Так проще читать и безопаснее.

Что учить по запросам, в порядке сложности:

  1. ВЫБРАТЬ … ИЗ … ГДЕ и сортировка УПОРЯДОЧИТЬ ПО.
  2. Соединения: ЛЕВОЕ СОЕДИНЕНИЕ, ВНУТРЕННЕЕ СОЕДИНЕНИЕ.
  3. Группировка и агрегатные функции: СУММА, КОЛИЧЕСТВО, МАКСИМУМ.
  4. Виртуальные таблицы регистров: Остатки, Обороты, СрезПоследних.
  5. Временные таблицы и пакетные запросы.

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

Система компоновки данных

СКД — это механизм отчётов, где запрос и оформление описываются настройками, а не кодом. В конфигураторе создаётся объект «Отчёт», у него схема компоновки данных. Вы задаёте набор данных (запрос), поля, ресурсы (итоги), группировки и отборы.

Зачем это нужно: пользователь сам может менять отборы и группировки в готовом отчёте, а вы не пишете для этого форму. Освоите запросы — СКД пойдёт за пару недель.

Объекты, ссылки и наборы записей: как код читает и пишет данные

Здесь новички путаются сильнее всего. Три понятия, три разных вещи.

ПонятиеЧто этоКогда используют
Ссылка«адрес» записи в базепередать, сравнить, прочитать реквизит
Объектредактируемая копия записиизменить и записать
Набор записейпачка записей регистразаписать движения

Ссылка (СправочникСсылка.Контрагенты) хранит только идентификатор. Прочитать через неё реквизит можно напрямую: Контрагент.ИНН. Но каждое такое обращение — это запрос к базе. В цикле по тысяче элементов вы получите тысячу запросов и тормоза.

Объект получают из ссылки, меняют и записывают:

Объект = Контрагент.ПолучитьОбъект();
Объект.Комментарий = "Проверен";
Объект.Записать();

Новый элемент создают через менеджер: Справочники.Контрагенты.СоздатьЭлемент(). Новый документ — Документы.ПоступлениеТоваров.СоздатьДокумент().

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

Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(Валюта);
Набор.Отбор.Период.Установить(Дата);
Запись = Набор.Добавить();
Запись.Период = Дата;
Запись.Валюта = Валюта;
Запись.Курс = 92.5;
Набор.Записать();

Имя регистра в примере условное — в вашей конфигурации оно своё. Важно понять схему: набор записывается целиком, и старые записи по отбору заменяются новыми.

Если нужно просто прочитать данные, берите запрос. Если нужно изменить — объект или набор записей. Читать через объект в цикле — самая частая ошибка производительности.

Отладка: как находить причину, а не гадать

Писать код научитесь быстро. Отладка отделяет тех, кто разбирается, от тех, кто перебирает варианты наугад.

Запустите базу из конфигуратора в режиме отладки (меню Отладка, пункт «Начать отладку», клавиша F5). Дальше:

  • 🔴 Точка останова — клавиша F9 на нужной строке. Исполнение остановится на ней.
  • ➡️ Шаг в обход — F10: выполнить строку целиком.
  • ⤵️ Шаг с заходом — F11: зайти внутрь вызываемой процедуры.
  • 👁 Вычислить выражение — посмотреть значение переменной или результат вызова, не меняя код.

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

Для запросов полезен консоль запросов — внешняя обработка, которую можно найти в открытых источниках и на дисках ИТС. Вставляете текст, задаёте параметры, видите результат. Так проверяют запрос до того, как он попал в код.

Что делать, если ошибка вылетает только у пользователей, а у вас всё работает:

  1. Узнайте точный текст ошибки и под каким пользователем она возникла.
  2. Проверьте права этого пользователя и его роли.
  3. Посмотрите журнал регистрации: он показывает ошибки с временем и сеансом.
  4. Воспроизведите на копии базы с теми же данными.

Журнал регистрации открывается из режима «1С:Предприятие»: раздел администрирования, пункт «Журнал регистрации». Привыкайте к нему сразу, это ваш главный источник фактов.

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

Типовая конфигурация (Бухгалтерия, ЗУП, УТ) стоит на поддержке. Если изменить её код напрямую, обновление придётся каждый раз сливать вручную, и это дорого.

Поэтому для нетиповых доработок сегодня выбирают расширения конфигурации . Они лежат отдельно от основной конфигурации и подключаются к ней. Типовая остаётся нетронутой и обновляется как обычно.

Найти их можно в конфигураторе: Конфигурация → Расширения конфигурации. Расширение умеет:

  • добавлять свои объекты — справочники, отчёты, обработки;
  • менять поведение процедур через аннотации &Перед, &После, &Вместо;
  • дополнять формы реквизитами и командами.

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

Способ доработкиРиск при обновленииКогда подходит
Расширение с аннотацияминизкийбольшинство задач
Изменение конфигурации на поддержкевысокийтолько если расширения не справляются
Внешняя обработка или отчётпочти нулевойразовые задачи, печатные формы

Режим поддержки смотрят через Конфигурация → Поддержка → Настройка поддержки. Там видно, какие объекты можно менять и какие заблокированы.

Перед любым изменением конфигурации сделайте копию информационной базы. В конфигураторе это выгрузка через Администрирование → Выгрузить информационную базу.

Порядок практики: чем закреплять каждую неделю

Теория без задач не работает . Вот примерный план, который можно пройти за два-три месяца.

НеделяТемаПрактическое задание
1–2Метаданные и формысоздать справочник и документ, добавить реквизиты и форму
3–4Синтаксис и коллекциинаписать функцию подсчёта итогов по таблице значений
5–6Запросывывести остатки и обороты по регистру
7–8Объекты и наборы записейсделать обработку, которая создаёт документы пачкой
9–10СКДсобрать отчёт с группировкой и отбором
11–12Отладка, расширениядоработать форму документа расширением
Что должно получаться к концу плана
Выполнено: 0 / 6

Для самопроверки пройдите тест.

Проверьте себя
Вам нужно в цикле прочитать ИНН у 5 000 контрагентов. Как правильно?
Где записывают движения документа по регистру накопления?
Каким способом лучше доработать типовую конфигурацию?

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

Нужно ли знать программирование, чтобы начать?
Нет. Базовые понятия (переменная, цикл, условие) объясняются за пару недель. Важнее знать предметную область: бухгалтерию, склад или зарплату. Без неё вы будете писать код, который не отвечает на вопрос заказчика.
Сколько времени уходит на то, чтобы начать работать самостоятельно?
Если заниматься ежедневно, первые простые задачи (отчёты, печатные формы, небольшие обработки) получаются через три-четыре месяца. До уверенной работы с типовыми конфигурациями обычно проходит около года практики.
Чем язык 1С отличается от обычных языков программирования?
Он встроен в платформу и работает с её объектами: справочниками, документами, регистрами. Отдельно от конфигурации писать на нём почти нечего. Зато то, что в других языках требует подключения базы и библиотек, здесь уже есть.
С чего практиковаться, если нет рабочей базы?
Установите учебную версию платформы и демо-конфигурацию, например из поставки типового решения. Ломайте её сколько хочется: на учебной базе это ничем не грозит.
Что учить первым: запросы или объектную модель?
Сначала синтаксис и метаданные, затем запросы. К объектной модели переходите, когда уже умеете читать данные, потому что запись без чтения не нужна.
Можно ли доработать типовую конфигурацию, если она на поддержке?
Да, лучше расширением. Прямое изменение возможно только через снятие объектов с поддержки, и тогда каждое обновление придётся объединять вручную.