Язык программирования 1С с нуля: что учить и в каком порядке
Содержание
Начинать надо не с синтаксиса, а с конфигуратора и структуры данных. Язык 1С почти не живёт отдельно от платформы: половина «кода» — это обращения к справочникам, документам и регистрам, которые вы сначала должны увидеть в дереве метаданных. Порядок такой: метаданные, затем базовый синтаксис, затем запросы, затем объекты и отладка, и только потом расширения и нетиповые задачи.
Новички обычно ломаются на другом: берут учебник по языку, пишут циклы и условия, а потом не понимают, откуда в модуле берётся Справочники.Номенклатура. Ниже план, в котором каждый следующий шаг опирается на предыдущий. На всё уходит примерно два-четыре месяца регулярной практики по часу-два в день.
Сначала платформа: что такое метаданные и где живёт код
Конфигурация 1С — это набор объектов, которые вы описываете в конфигураторе, а не пишете строками кода. Справочник, документ, регистр, отчёт, обработка — всё это объекты метаданных. Код лишь оживляет их.
Откройте конфигуратор своей учебной базы и найдите окно конфигурации (Конфигурация → Открыть конфигурацию). Там дерево с ветками. Вот основные:
- 📘 Справочники — списки сущностей: контрагенты, номенклатура, сотрудники.
- 📄 Документы — события с датой и номером: поступление, реализация, приказ.
- 🗂 Регистры сведений — данные по ключам, часто с периодичностью (курсы валют, цены).
- 📊 Регистры накопления — остатки и обороты (склад, взаиморасчёты).
- 🧾 Отчёты и обработки — формы и логика без хранения собственных данных.
- 🔢 Перечисления, планы видов характеристик, планы счетов — служебные типы.
У каждого объекта есть реквизиты, табличные части, формы и модули. Модуль — это место, где лежит код. Модуль объекта отвечает за поведение самого объекта. Модуль формы — за поведение окна. Общие модули хранят процедуры, которые вызывают отовсюду.
Заведите себе учебную базу на поставке «Бухгалтерия предприятия» или «Управление торговлей» и не бойтесь её ломать. Рабочую базу для экспериментов не используют никогда.
Пока не запомните, чем документ отличается от регистра и чем модуль формы отличается от модуля объекта, в код лучше не лезть. Это самая частая причина непонимания языка: человек читает чужую процедуру и не видит, на каком объекте она висит.
Клиент и сервер: деление, без которого код не заработает
В управляемых формах код исполняется то на клиенте (в окне пользователя), то на сервере. Это задаётся директивой компиляции перед процедурой:
| Директива | Где выполняется | Что доступно |
|---|---|---|
&НаКлиенте | на компьютере пользователя | элементы формы, диалоги, сообщения |
&НаСервере | на сервере, с контекстом формы | данные формы, запросы к базе |
&НаСервереБезКонтекста | на сервере, без данных формы | запросы, быстрый вызов |
Клиентская процедура не может напрямую выполнить запрос к базе. Она вызывает серверную, передаёт ей параметры и получает результат. Поймёте эту схему — и половина ошибок «Поле объекта не обнаружено» исчезнет.
Синтаксис встроенного языка: минимум, который реально нужен
Язык русскоязычный, регистр не важен, операторы закрываются словами. Выучить базу можно за две-три недели. Вот что действительно нужно на старте.
Переменные и типы. Объявлять переменную заранее не обязательно: она создаётся при первом присваивании. Основные типы: Строка, Число, Дата, Булево, Неопределено, а также ссылки на объекты базы.
Процедуры и функции. Процедура ничего не возвращает, функция возвращает значение.
Функция ПолучитьСтавкуНДС(СуммаСНДС)
Возврат Окр(СуммаСНДС * 20 / 120, 2);
КонецФункции
Для суммы 1 200 результат — 200. Пример простой, но показывает главное: у функции есть параметр, тело и Возврат.
Условия и циклы.
Если Сумма > 100000 Тогда
Сообщить("Крупная сделка");
ИначеЕсли Сумма > 0 Тогда
Сообщить("Обычная сделка");
Иначе
Сообщить("Нулевая сумма");
КонецЕсли;
Для Каждого Строка Из ТаблицаТоваров Цикл
Итого = Итого + Строка.Сумма;
КонецЦикла;
Коллекции. Запомните четыре, остальные потом:
- 🔹
Массив— список значений по порядку; - 🔹
Структура— набор пар «ключ — значение»; - 🔹
Соответствие— то же, но ключом может быть что угодно; - 🔹
ТаблицаЗначений— таблица с колонками, главный рабочий инструмент.
Обработку ошибок в коде делают через Попытка … Исключение … КонецПопытки. Но не оборачивайте в попытку всё подряд: ошибка, которую вы спрятали, потом всплывёт у пользователя в виде странных данных.
Не копируйте код с форумов, не поняв каждую строку. Чужая процедура может писать в базу, и вы это увидите только по последствиям.
Запросы и СКД: как достать данные из базы
Язык запросов похож на SQL, но работает не с таблицами, а с объектами метаданных. Именно запросы занимают большую часть работы практикующего программиста 1С.
Минимальный пример: вывести наименования элементов справочника.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
Параметры в запрос передают через &Параметр и Запрос.УстановитьПараметр(...), а не склейкой строк. Так проще читать и безопаснее.
Что учить по запросам, в порядке сложности:
ВЫБРАТЬ … ИЗ … ГДЕи сортировкаУПОРЯДОЧИТЬ ПО.- Соединения:
ЛЕВОЕ СОЕДИНЕНИЕ,ВНУТРЕННЕЕ СОЕДИНЕНИЕ. - Группировка и агрегатные функции:
СУММА,КОЛИЧЕСТВО,МАКСИМУМ. - Виртуальные таблицы регистров:
Остатки,Обороты,СрезПоследних. - Временные таблицы и пакетные запросы.
Виртуальные таблицы регистров — отдельная тема. Остатки по складу не суммируют руками из движений: платформа отдаёт их уже посчитанными.
Система компоновки данных
СКД — это механизм отчётов, где запрос и оформление описываются настройками, а не кодом. В конфигураторе создаётся объект «Отчёт», у него схема компоновки данных. Вы задаёте набор данных (запрос), поля, ресурсы (итоги), группировки и отборы.
Зачем это нужно: пользователь сам может менять отборы и группировки в готовом отчёте, а вы не пишете для этого форму. Освоите запросы — СКД пойдёт за пару недель.
Объекты, ссылки и наборы записей: как код читает и пишет данные
Здесь новички путаются сильнее всего. Три понятия, три разных вещи.
| Понятие | Что это | Когда используют |
|---|---|---|
| Ссылка | «адрес» записи в базе | передать, сравнить, прочитать реквизит |
| Объект | редактируемая копия записи | изменить и записать |
| Набор записей | пачка записей регистра | записать движения |
Ссылка (СправочникСсылка.Контрагенты) хранит только идентификатор. Прочитать через неё реквизит можно напрямую: Контрагент.ИНН. Но каждое такое обращение — это запрос к базе. В цикле по тысяче элементов вы получите тысячу запросов и тормоза.
Объект получают из ссылки, меняют и записывают:
Объект = Контрагент.ПолучитьОбъект();
Объект.Комментарий = "Проверен";
Объект.Записать();
Новый элемент создают через менеджер: Справочники.Контрагенты.СоздатьЭлемент(). Новый документ — Документы.ПоступлениеТоваров.СоздатьДокумент().
Набор записей относится к регистрам. Он содержит записи одного регистратора или по отбору. Запись выглядит так: создали набор, поставили отбор, заполнили строки, записали.
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(Валюта);
Набор.Отбор.Период.Установить(Дата);
Запись = Набор.Добавить();
Запись.Период = Дата;
Запись.Валюта = Валюта;
Запись.Курс = 92.5;
Набор.Записать();
Имя регистра в примере условное — в вашей конфигурации оно своё. Важно понять схему: набор записывается целиком, и старые записи по отбору заменяются новыми.
Если нужно просто прочитать данные, берите запрос. Если нужно изменить — объект или набор записей. Читать через объект в цикле — самая частая ошибка производительности.
Отладка: как находить причину, а не гадать
Писать код научитесь быстро. Отладка отделяет тех, кто разбирается, от тех, кто перебирает варианты наугад.
Запустите базу из конфигуратора в режиме отладки (меню Отладка, пункт «Начать отладку», клавиша F5). Дальше:
- 🔴 Точка останова — клавиша
F9на нужной строке. Исполнение остановится на ней. - ➡️ Шаг в обход —
F10: выполнить строку целиком. - ⤵️ Шаг с заходом —
F11: зайти внутрь вызываемой процедуры. - 👁 Вычислить выражение — посмотреть значение переменной или результат вызова, не меняя код.
Когда остановились на точке, смотрите окно локальных переменных. Для таблицы значений и результата запроса есть просмотр содержимого — не нужно выводить всё через Сообщить.
Для запросов полезен консоль запросов — внешняя обработка, которую можно найти в открытых источниках и на дисках ИТС. Вставляете текст, задаёте параметры, видите результат. Так проверяют запрос до того, как он попал в код.
Что делать, если ошибка вылетает только у пользователей, а у вас всё работает:
- Узнайте точный текст ошибки и под каким пользователем она возникла.
- Проверьте права этого пользователя и его роли.
- Посмотрите журнал регистрации: он показывает ошибки с временем и сеансом.
- Воспроизведите на копии базы с теми же данными.
Журнал регистрации открывается из режима «1С:Предприятие»: раздел администрирования, пункт «Журнал регистрации». Привыкайте к нему сразу, это ваш главный источник фактов.
Расширения и типовые конфигурации: как дорабатывать, не ломая обновление
Типовая конфигурация (Бухгалтерия, ЗУП, УТ) стоит на поддержке. Если изменить её код напрямую, обновление придётся каждый раз сливать вручную, и это дорого.
Поэтому для нетиповых доработок сегодня выбирают расширения конфигурации . Они лежат отдельно от основной конфигурации и подключаются к ней. Типовая остаётся нетронутой и обновляется как обычно.
Найти их можно в конфигураторе: Конфигурация → Расширения конфигурации. Расширение умеет:
- добавлять свои объекты — справочники, отчёты, обработки;
- менять поведение процедур через аннотации
&Перед,&После,&Вместо; - дополнять формы реквизитами и командами.
Разница между вариантами видна из названий. &Перед выполнит ваш код до оригинальной процедуры, &После — после, &Вместо — заменит её, но вызвать оригинал можно через ПродолжитьВызов(). Выбирайте самый мягкий вариант: чем меньше вы подменяете, тем реже расширение ломается после обновления.
| Способ доработки | Риск при обновлении | Когда подходит |
|---|---|---|
| Расширение с аннотациями | низкий | большинство задач |
| Изменение конфигурации на поддержке | высокий | только если расширения не справляются |
| Внешняя обработка или отчёт | почти нулевой | разовые задачи, печатные формы |
Режим поддержки смотрят через Конфигурация → Поддержка → Настройка поддержки. Там видно, какие объекты можно менять и какие заблокированы.
Перед любым изменением конфигурации сделайте копию информационной базы. В конфигураторе это выгрузка через Администрирование → Выгрузить информационную базу.
Порядок практики: чем закреплять каждую неделю
Теория без задач не работает . Вот примерный план, который можно пройти за два-три месяца.
| Неделя | Тема | Практическое задание |
|---|---|---|
| 1–2 | Метаданные и формы | создать справочник и документ, добавить реквизиты и форму |
| 3–4 | Синтаксис и коллекции | написать функцию подсчёта итогов по таблице значений |
| 5–6 | Запросы | вывести остатки и обороты по регистру |
| 7–8 | Объекты и наборы записей | сделать обработку, которая создаёт документы пачкой |
| 9–10 | СКД | собрать отчёт с группировкой и отбором |
| 11–12 | Отладка, расширения | доработать форму документа расширением |
Для самопроверки пройдите тест.