Учимся писать код в 1С: путь от первой установки до рабочей процедуры

· 8 мин

Содержание

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

Язык 1С русскоязычный, поэтому читается почти как обычный текст. Но за простым синтаксисом стоит большая платформа со своей логикой: справочники, документы, регистры, клиент-серверное взаимодействие. Её приходится осваивать параллельно с языком.

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

Подготовка среды: что поставить и где писать код

Нужны три вещи: платформа 1С:Предприятие, база для экспериментов и Конфигуратор.

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

Дальше:

  1. Запустите 1С, в окне запуска нажмите «Добавить» и создайте новую базу из шаблона или пустую.
  2. Выберите созданную базу в списке и нажмите «Конфигуратор».
  3. В Конфигураторе откройте дерево конфигурации: меню Конфигурация → Открыть конфигурацию.

В дереве лежат все объекты: справочники, документы, обработки, отчёты, регистры. Код живёт в модулях этих объектов.

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

С чего начать в Конфигураторе

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

  1. В Конфигураторе: Файл → Новый → Внешняя обработка.
  2. Добавьте форму: в дереве объекта найдите ветку «Формы» и создайте новую.
  3. На форме создайте команду, а в её обработчике напишите код.

Минимальный обработчик:

&НаКлиенте
Процедура Привет(Команда)
    Сообщить("Привет из 1С");
КонецПроцедуры

Запустите отладку клавишей F5, откроется «1С:Предприятие» с вашей обработкой. Нажмите кнопку команды и увидите сообщение. Это уже полный цикл: написали, запустили, проверили.

Синтаксис языка 1С: переменные, условия, циклы, процедуры

Язык нечувствителен к регистру. Строки заканчиваются точкой с запятой. Комментарий начинается с //.

Переменные не нужно объявлять заранее, достаточно присвоить значение:

Имя = "Иван";
Возраст = 30;
Сумма = 1250.50;
Активен = Истина;

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

Если Возраст >= 18 Тогда
    Сообщить("Совершеннолетний");
ИначеЕсли Возраст > 0 Тогда
    Сообщить("Несовершеннолетний");
Иначе
    Сообщить("Возраст указан неверно");
КонецЕсли;

Для Сч = 1 По 5 Цикл
    Сообщить("Шаг " + Формат(Сч, "ЧГ=0"));
КонецЦикла;

Пока Сумма > 0 Цикл
    Сумма = Сумма - 500;
КонецЦикла;

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

Процедуры и функции

Процедура выполняет действие, функция возвращает значение:

Функция СуммаСНДС(Сумма, Ставка)
    Возврат Сумма + Сумма * Ставка / 100;
КонецФункции

Процедура ПоказатьИтог()
    Сообщить(СтрШаблон("Итого: %1", СуммаСНДС(1000, 20)));
КонецПроцедуры

Для 1000 руб. и ставки 20% функция вернёт 1200.

Часть языка пока не нужна, но запомните названия: «Попытка … Исключение … КонецПопытки» для перехвата ошибок, «Перем» для переменных модуля, директивы компиляции вроде &НаКлиенте и &НаСервере (о них ниже).

Типы данных и коллекции: массив, структура, таблица значений

Почти вся прикладная работа — это перекладывание данных между коллекциями. Основные пять.

КоллекцияКогда нужнаПример создания
МассивСписок однотипных значенийНовый Массив
СтруктураНабор именованных полей, как «карточка»Новый Структура("Имя, Возраст", "Иван", 30)
СоответствиеПоиск по ключу: код → значениеНовый Соответствие
Список значенийВыбор в формах, значения с представлениемНовый СписокЗначений
Таблица значенийДанные с колонками, как маленькая таблицаНовый ТаблицаЗначений

Массив и обход через «Для каждого»

Города = Новый Массив;
Города.Добавить("Москва");
Города.Добавить("Казань");
Города.Добавить("Омск");

Для Каждого Город Из Города Цикл
    Сообщить(Город);
КонецЦикла;

Индексация массива начинается с нуля: Города[0] вернёт «Москва».

Структура и соответствие

Клиент = Новый Структура;
Клиент.Вставить("Имя", "ООО Ромашка");
Клиент.Вставить("ИНН", "7700000000");
Сообщить(Клиент.Имя);

Остатки = Новый Соответствие;
Остатки.Вставить("Болт М8", 120);
Остатки.Вставить("Гайка М8", 300);
Сообщить(Остатки.Получить("Болт М8"));

Структуру удобно передавать в функцию как набор параметров, а не тянуть десять аргументов.

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

Таб = Новый ТаблицаЗначений;
Таб.Колонки.Добавить("Товар");
Таб.Колонки.Добавить("Количество");

Строка = Таб.Добавить();
Строка.Товар = "Болт М8";
Строка.Количество = 100;

Строка = Таб.Добавить();
Строка.Товар = "Гайка М8";
Строка.Количество = 250;

Таб.Сортировать("Количество Убыв");

Для Каждого Стр Из Таб Цикл
    Сообщить(Стр.Товар + ": " + Формат(Стр.Количество, "ЧГ=0"));
КонецЦикла;

Результат запроса часто выгружают именно в таблицу значений методом Выгрузить().

Ссылки и объекты

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

Объект = Ссылка.ПолучитьОбъект();
Объект.Наименование = "Новое имя";
Объект.Записать();

Новый элемент создают так: Объект = Справочники.Номенклатура.СоздатьЭлемент();, затем заполняют реквизиты и вызывают Записать().

Запись в базу из тестового кода делайте только на учебной базе. Ошибка в цикле по справочнику легко испортит тысячи элементов.

Язык запросов 1С: как читать данные из базы

Данные из базы выбирают запросом. Его синтаксис похож на SQL, только слова русские, а таблицы называются по именам объектов конфигурации: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг.

Полный цикл выглядит так:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Наименование КАК Наименование,
    |    Номенклатура.Артикул КАК Артикул
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = ЛОЖЬ
    |    И Номенклатура.Наименование ПОДОБНО &Маска
    |УПОРЯДОЧИТЬ ПО
    |    Наименование";
Запрос.УстановитьПараметр("Маска", "%болт%");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " (" + Выборка.Артикул + ")");
КонецЦикла;

Что здесь важно:

  • 🔹 Каждая строка текста запроса после первой начинается с вертикальной черты |.
  • 🔹 Значения подставляют через параметры (&Маска), а не склеивают в строку: так нет ошибок с кавычками и датами.
  • 🔹 ПОДОБНО ищет по маске, где % — любое число символов.
  • 🔹 Результат читают через Выбрать() и цикл Пока Выборка.Следующий().

Если нужна именно таблица, пишите Таб = Запрос.Выполнить().Выгрузить();.

Что обязательно освоить дальше

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

Для отладки текстов запросов программисты используют внешнюю обработку «Консоль запросов»: она позволяет вводить запрос и сразу видеть результат. Найдите её в открытых источниках сообщества 1С и проверьте перед запуском: такие обработки исполняют код в вашей базе.

Не пишите запрос внутри цикла по другому запросу. Один запрос с соединением почти всегда быстрее сотни запросов в цикле.

Программирование форм: события и клиент-серверное взаимодействие

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

Каждая процедура формы помечается директивой:

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

Клиентская процедура не может выполнить запрос к базе напрямую. Она вызывает серверную, а та возвращает результат.

&НаКлиенте
Процедура ПоказатьКоличество(Команда)
    Количество = КоличествоТоваров();
    Сообщить("Всего товаров: " + Формат(Количество, "ЧГ=0"));
КонецПроцедуры

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

События формы и элементов

Обработчики событий создают в свойствах формы или элемента (кнопка «Открыть» рядом с нужным событием). Платформа сама добавит пустую процедуру в модуль формы.

Самые частые:

  • 🔹 ПриСозданииНаСервере — настройка формы до показа: условное оформление, значения по умолчанию.
  • 🔹 ПриОткрытии — действия на клиенте после показа формы.
  • 🔹 ПриИзменении у поля — реакция на ввод пользователя.
  • 🔹 ПередЗаписью и ПриЗаписи — проверки и заполнение при записи объекта.
  • 🔹 ОбработкаПроверкиЗаполнения — свои проверки обязательных полей.

Проверка на лету выглядит так:

&НаКлиенте
Процедура КоличествоПриИзменении(Элемент)
    Если Объект.Количество < 0 Тогда
        Сообщить("Количество не может быть отрицательным");
    КонецЕсли;
КонецПроцедуры

Для вызова серверного кода из события клиента делайте как в примере выше: клиентская процедура зовёт серверную функцию.

Отладка и поиск ошибок: как найти, где сломалось

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

Что делать при остановке:

  1. Смотрите значения переменных: наведите курсор или откройте окно локальных переменных.
  2. F10 — шаг без захода в вызываемую процедуру.
  3. F11 — шаг с заходом внутрь.
  4. Shift+F9 — вычислить произвольное выражение при остановке.
  5. F5 — продолжить до следующей точки останова.

Если платформа показала ошибку, читайте текст целиком. В нём обычно есть имя модуля, номер строки и описание: «Поле объекта не обнаружено», «Переменная не определена», «Значение не является значением объектного типа ».

Типичные причины ошибок начинающих

СообщениеВероятная причина
«Поле объекта не обнаружено»Опечатка в имени реквизита или колонки
«Переменная не определена»Имя написано с ошибкой или значение не присвоено
«Значение не является значением объектного типа»Вместо объекта пришло Неопределено, пустая ссылка
«Недопустимое значение параметра»В метод передан не тот тип данных
Запрос не выполняетсяНет `

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

Для перехвата ошибки используйте Попытка … Исключение. Текст ошибки получите через ОписаниеОшибки():

Попытка
    Объект.Записать();
Исключение
    Сообщить("Не удалось записать: " + ОписаниеОшибки());
КонецПопытки;

Не оставляйте пустое «Исключение» без вывода сообщения. Ошибка пропадёт, а причина останется неизвестной.

Первая неделя обучения
Выполнено: 0 / 5

Частые вопросы начинающих программистов 1С

Нужно ли знать другие языки программирования?
Нет. Язык 1С учится с нуля. Опыт в любом языке помогает быстрее понять циклы и условия, но не обязателен.
Чем отличается Конфигуратор от режима 1С:Предприятие?
Конфигуратор — среда разработки: в нём правят модули, формы, структуру объектов. В режиме «1С:Предприятие» работают пользователи, и там же проверяют результат.
С чего учить: язык или запросы?
Сначала базовый синтаксис и коллекции, затем запросы. Без коллекций результат запроса некуда складывать, а без запросов отчёты и выборки не напишешь.
Что такое расширения конфигурации и когда они нужны?
Это способ изменить типовую конфигурацию, не затрагивая её код: изменения хранятся отдельно и не слетают при обновлении. Появились в платформе 8.3.6. Как научитесь писать простые модули, переходите к расширениям.
Где проверять свои знания?
Решайте практические задачи на учебной базе: отчёт по остаткам, обработка загрузки из файла, проверка заполнения при записи документа. Рабочая база для этого не подходит.
Сколько времени нужно, чтобы стать программистом 1С?
Базовые навыки появляются за 2–3 месяца регулярной практики. До самостоятельной работы с типовыми конфигурациями обычно проходит около года, но сроки сильно зависят от нагрузки и наличия задач.