К статье
Практический материал

Разработка и Конфигурация · 10 мин

Что означают термины и конструкции в языке 1С

Разбираем, что означают ключевые термины и конструкции встроенного языка 1С: переменные, запросы, объекты, операторы и типичные ошибки новичков.

Встроенный язык 1С (его часто называют «языком 1С» или «языком конфигуратора») похож на русскоязычный BASIC: операторы пишутся кириллицей, а логика строится вокруг объектов конфигурации — справочников, документов, регистров. Новички, открыв чужой модуль, сталкиваются с десятками непонятных слов: «Экспорт», «ДеревоЗначений», «Отбор», «Менеджер». Каждое из них имеет точный смысл, и без понимания терминов читать и изменять код невозможно.

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

Базовые конструкции: Процедура, Функция, Перем

Процедура — именованный блок кода, который выполняет действия и не возвращает значения. Функция отличается тем, что обязательно возвращает результат через оператор Возврат. Если функция объявлена, но не содержит Возврат, платформа вернёт Неопределено — частая причина скрытых ошибок.

Ключевое слово Перем объявляет переменную. В 1С типизация динамическая: одна и та же переменная может сначала хранить строку, а затем число. Явное объявление через Перем не обязательно внутри процедур, но обязательно для переменных модуля, доступных во всех его процедурах.

Модификатор Экспорт после имени процедуры или переменной означает, что она видна из других модулей. Без Экспорт процедура остаётся внутренней, приватной для модуля. Злоупотребление экспортными методами размывает интерфейс модуля и затрудняет поддержку.

Условия и циклы: Если, Пока, Для Каждого

Конструкция Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли; — стандартное ветвление. Обратите внимание: каждая конструкция языка заканчивается точкой с запятой после завершающего слова (КонецЕсли;, КонецЦикла;). Пропущенная точка с запятой — самая частая синтаксическая ошибка начинающих.

Цикл Для Каждого Элемент Из Коллекции Цикл перебирает элементы массивов, таблиц значений, выборок запросов. Цикл Пока Условие Цикл выполняется, пока условие истинно — при ошибке в условии легко получить бесконечный цикл, который «повесит» сеанс пользователя или регламентное задание.

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

Объекты метаданных: Справочник, Документ, Регистр

Справочник — объект для хранения условно-постоянной информации: номенклатуры, контрагентов, складов. В коде обращение выглядит как Справочники.Номенклатура.НайтиПоКоду("001"). Документ фиксирует факт хозяйственной операции и может проводиться — то есть формировать записи в регистрах.

Регистр — хранилище накопленной информации. Регистры сведений хранят данные в разрезе измерений (например, цены по товарам), регистры накопления — остатки и обороты (товары на складах). Проведение документа как раз и создаёт движения по регистрам.

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

Коллекции: Массив, Структура, ТаблицаЗначений

Массив — упорядоченный список значений с доступом по индексу (индексация с нуля). Структура — набор пар «ключ–значение», удобна для передачи параметров: Новый Структура("Имя, Возраст", "Иван", 30). Соответствие похоже на структуру, но ключом может быть любой тип, не только строка.

ТаблицаЗначений — универсальная двумерная коллекция в памяти: строки и колонки, как лист Excel. На ней строятся отчёты, загрузка данных, промежуточные расчёты. ДеревоЗначений — иерархический вариант таблицы с родительскими и дочерними строками.

Что выбрать для хранения данных в памяти

Массив

Простой список однотипных значений, важен порядок. Не подходит для поиска по ключу.

Структура

Фиксированный набор именованных полей, передача параметров. Ключи — только строки, состав задаётся при создании.

Соответствие

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

ТаблицаЗначений

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

Запросы: что означает «Запрос» и его конструкции

Запрос — объект для чтения данных из базы на языке запросов 1С, похожем на SQL. Типовой код: создать Новый Запрос, задать свойство Текст, установить параметры через УстановитьПараметр(), выполнить и обойти выборку.

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

Конструкция РАЗЛИЧНЫЕ убирает дубли строк, ПЕРВЫЕ 1 ограничивает результат, ОБЪЕДИНИТЬ ВСЕ склеивает результаты нескольких выборок. Параметры в тексте обозначаются амперсандом: ГДЕ Номенклатура = &Номенклатура. Передавать параметры конкатенацией строк нельзя — это и ошибка, и риск некорректной работы.

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

Системные понятия: Контекст, Отбор, Неопределено, NULL

Контекст — окружение, в котором выполняется код. Код в модуле формы видит реквизиты формы, код в модуле объекта — реквизиты объекта. Ошибка «Переменная не определена» чаще всего означает обращение к чему-то вне текущего контекста.

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

Особые значения: Неопределено — отсутствие значения в коде, NULL — отсутствие значения в результате запроса (например, при левом соединении), пустая ссылка — существующий, но не заполненный указатель на объект. Сравнивать NULL нужно через ЕСТЬ NULL, а не равенством.

Типичные ошибки новичков
01
Сравнение NULL обычным равенством в запросе — условие никогда не сработает, нужен оператор ЕСТЬ NULL.
02
Вызов ПолучитьОбъект() внутри цикла — резкое падение производительности, читайте данные запросом.
03
Функция без Возврат — результат Неопределено и трудноотслеживаемые сбои дальше по коду.
04
Пропущенная точка с запятой после КонецЕсли или КонецЦикла — синтаксическая ошибка при проверке модуля.
05
Передача параметров в запрос склейкой строк — риск ошибок и некорректных данных, используйте УстановитьПараметр.

Как проверить понимание и где искать значения терминов

Главный справочник — синтакс-помощник в конфигураторе (меню «Справка» или Ctrl+F1 на любом слове кода). Он показывает описание оператора, параметры и примеры. Дополнительно полезен отладчик: точка останова и окно «Вычислить выражение» (Shift+F9) позволяют увидеть реальное значение переменной в момент выполнения.

Как разобрать незнакомый фрагмент кода
  1. 1
    Выделите непонятное слово и нажмите Ctrl+F1 — откроется справка синтакс-помощника.
  2. 2
    Определите, к какой группе относится термин: оператор языка, объект метаданных, коллекция или системное значение.
  3. 3
    Поставьте точку останова перед фрагментом и запустите отладку.
  4. 4
    Через «Вычислить выражение» проверьте типы и значения переменных.
  5. 5
    Сверьте поведение кода с описанием в синтакс-помощнике и зафиксируйте вывод.

Если термин встречается в типовой конфигурации, полезно найти все места его использования через глобальный поиск (Ctrl+Shift+F) — по контексту вызовов смысл обычно становится очевиден даже без документации.

Итог

Что важно запомнить

Термины языка 1С делятся на конструкции языка, объекты метаданных, коллекции, запросные слова и системные значения. Понимание разницы между ссылкой и объектом, Неопределено и NULL, процедурой и функцией устраняет большинство ошибок новичка. Синтакс-помощник и отладчик — основные инструменты проверки значений.

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

Чем процедура отличается от функции в 1С?

Функция обязана вернуть значение через оператор Возврат и может использоваться в выражениях. Процедура только выполняет действия. Если функция не содержит Возврат, она вернёт Неопределено, что часто приводит к скрытым ошибкам.

Что означает слово «Экспорт» после имени процедуры?

Оно делает процедуру или переменную доступной из других модулей конфигурации. Без Экспорт метод остаётся приватным внутри своего модуля.

В чём разница между Неопределено и NULL?

Неопределено — отсутствие значения в коде встроенного языка. NULL — отсутствие значения в результатах запроса, например при левом соединении без совпадений. NULL проверяется только конструкцией ЕСТЬ NULL, а не сравнением.

Что такое выборка запроса?

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

Можно ли писать код 1С на английском?

Да, язык поддерживает английский синтаксис (If, While, Function и т.д.), и оба варианта можно смешивать. На практике в российских конфигурациях используется русский вариант, а типовой код написан именно на нём.

Где посмотреть точное описание любого оператора?

В конфигураторе: установите курсор на слово и нажмите Ctrl+F1 — откроется синтакс-помощник с описанием, параметрами и примерами использования.