Пишем первый код в Конфигураторе 1С 8.3 с нуля

· 9 мин

Содержание

Писать код в 1С можно только в режиме Конфигуратора. Запускаете базу не кнопкой «1С:Предприятие», а кнопкой Конфигуратор в окне запуска, открываете дерево конфигурации (Конфигурация → Открыть конфигурацию), находите нужный объект, открываете его модуль и вводите текст на встроенном языке 1С.

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

Как открыть Конфигуратор и войти в режим правки

В стартовом окне 1С выберите нужную информационную базу из списка и нажмите кнопку Конфигуратор (а не 1С:Предприятие). Откроется среда разработки — это и есть «программная среда», в которой пишут код.

Если кнопка Конфигуратор неактивна или база вообще не запускается — проблема обычно не в коде, а в правах или лицензии:

  • 🔑 у вашего пользователя должна быть роль с правом на запуск Конфигуратора (у типового пользователя-бухгалтера её нет);
  • 🧩 платформа без установленной лицензии базу не запустит (исключение — учебная версия);
  • 🗂 для файловой базы нужен доступ на запись к каталогу базы.

Для первых экспериментов удобнее учиться на копии рабочей базы, а не на боевой. Копию файловой базы делают простым копированием каталога, серверную выгружают в .dt через Администрирование → Выгрузить информационную базу.

После входа вы увидите пустое окно с меню сверху . Само дерево объектов по умолчанию закрыто — его нужно открыть отдельно, об этом ниже.

Куда вообще можно писать код: поддержка и расширения

Главная засада типовых конфигураций (Бухгалтерия, ЗУП, Управление торговлей): они стоят на поддержке у поставщика. Пока объект на замке, редактор модуля открывается только на чтение — набрать строку не получится.

Есть два пути.

  1. Снять конфигурацию с поддержки. Меню Конфигурация → Поддержка → Настройка поддержки, затем снять возможность изменения. После этого правки доступны, но вы теряете возможность обновлять типовую конфигурацию в один клик — каждое обновление придётся сравнивать и объединять вручную.
  2. Использовать расширение конфигурации . Расширения появились в платформе 8.3.6. Это отдельный «слой», который лежит поверх типовой и не ломает поддержку. Создаётся через Конфигурация → Расширения конфигурации, дальше в расширение добавляются свои формы, модули и обработчики.

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

Если конфигурация ваша собственная (самописная, не на поддержке) — писать можно сразу, без этих плясок.

Дерево конфигурации: где лежат объекты и их модули

Чтобы увидеть объекты, откройте дерево: Конфигурация → Открыть конфигурацию. Слева появится иерархия — это и есть структура всей конфигурации.

Ветки верхнего уровня, которые встречаются чаще всего:

Ветка дереваЧто внутри
Справочникиноменклатура, контрагенты, склады и т. п.
Документыпоступления, реализации, платёжки
Обработкисервисные инструменты без хранения данных
Отчётыпечатные и аналитические формы
Общие → Общие модуликод, доступный из любого места

У большинства объектов есть свои модули. Чтобы добраться до кода, раскройте объект (например, конкретный документ) — внутри будут его формы, а у самого объекта есть «Модуль объекта» и «Модуль менеджера».

Не путайте ветку Общие → Общие модули и модули конкретных объектов. Общий модуль виден из всей конфигурации, модуль объекта — только в контексте этого объекта.

Виды модулей и как открыть редактор кода

Код в 1С живёт в модулях. Их несколько видов, и от выбора зависит, где и когда код выполнится:

  • 📦 Модуль объекта — логика конкретного справочника или документа (например, расчёты при проведении);
  • 🖥 Модуль формы — реакция на действия пользователя в форме (нажал кнопку, изменил поле);
  • 🌐 Общий модуль — переиспользуемые процедуры и функции, вызываемые отовсюду;
  • 🚀 Модуль приложения (обычного и управляемого) — код при старте и завершении сеанса;
  • 🔒 Модуль сеанса — выполняется раньше всех, задаёт параметры сеанса.

Какой модуль выбирать под задачу:

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

Открыть редактор можно двумя способами:

  1. В дереве конфигурации правой кнопкой по объекту → Открыть модуль объекта (или Открыть модуль менеджера).
  2. Для формы — открыть саму форму двойным кликом, затем переключиться на вкладку Модуль внизу редактора формы.

Откроется текстовое поле с подсветкой синтаксиса — здесь и набирают код.

Добираемся до кода за 5 шагов
Выполнено: 0 / 5

Основы встроенного языка: процедуры, функции, директивы

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

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

Функция Сумма(Первое, Второе)
    Возврат Первое + Второе;
КонецФункции

Несколько правил, без которых код не запустится:

  • каждый оператор завершается точкой с запятой ;;
  • тело процедуры закрывается КонецПроцедуры, функции — КонецФункции;
  • комментарий — две косые черты //, до конца строки;
  • переменные объявлять не обязательно, но для читаемости можно через Перем.

В управляемом приложении важны директивы компиляции — они говорят платформе, где выполнять код:

  • &НаКлиенте — на компьютере пользователя (реакция на кнопки, диалоги);
  • &НаСервере — на сервере (работа с базой, запросы, чтение и запись объектов);
  • &НаСервереБезКонтекста — на сервере без передачи данных формы (быстрее).
&НаКлиенте
Процедура ВыполнитьРасчёт(Команда)
    Результат = ПолучитьРезультатНаСервере();
    Сообщить("Итог: " + Формат(Результат, "ЧГ=0"));
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьРезультатНаСервере()
    Возврат 2 + 2;
КонецФункции

Обратите внимание: число со строкой напрямую не склеивают — для корректного вывода оборачивают в Формат(…) или собирают текст через СтрШаблон.

Дальше идут три конструкции, которые закрывают большую часть прикладных задач — без них первый код обычно не обходится.

Условие Если … Тогда:

Если Сумма > 0 Тогда
    Статус = "Оплачено";
ИначеЕсли Сумма = 0 Тогда
    Статус = "Нет оплаты";
Иначе
    Статус = "Переплата";
КонецЕсли;

Цикл по коллекции. Перебор таблиц, выборок и массивов делают через Для Каждого:

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

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

Для Сч = 1 По Массив.Количество() Цикл
    Элемент = Массив[Массив.Количество() - Сч];
    // обработка элемента
КонецЦикла;

Обращение к реквизитам. К полям объекта обращаются через точку: Объект.Дата, Объект.Контрагент, Объект.Товары (табличная часть). Записать изменённый объект в базу можно методом Объект.Записать() — но делать это нужно &НаСервере.

Записать() в рабочей базе меняет данные. В примерах и экспериментах проверяйте код на копии базы, чтобы не испортить учёт.

Для выборки данных используют язык запросов — отдельный язык, похожий на SQL. Запрос пишут текстом и выполняют объектом Запрос:

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

Текст запроса удобно собирать не руками, а в Конструкторе запроса — правой кнопкой в коде → Конструктор запроса. Он соберёт синтаксис за вас, достаточно выбрать таблицы и поля мышкой.

Пример: добавляем свой код в модуль формы

Разберём живую задачу — при открытии формы документа показать пользователю сообщение.

  1. В дереве найдите документ, раскройте его, откройте нужную форму двойным кликом.
  2. Перейдите на вкладку Модуль в нижней части редактора формы.
  3. Найдите или создайте обработчик события ПриОткрытии. Создать его правильнее через палитру свойств формы: событие ПриОткрытии → значок с лупой — платформа сама вставит заготовку процедуры с нужной директивой.
  4. Впишите код внутрь процедуры:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Документ открыт";
    Сообщение.Сообщить();
КонецПроцедуры

Конструкция Новый СообщениеПользователю — современный способ вывести текст; старый метод Сообщить() тоже работает, но у него меньше возможностей (нельзя привязать к полю формы).

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

Отладка: точки останова, шаги и табло

Проверять код «на глаз» не нужно — в Конфигураторе есть полноценный отладчик.

Запуск с отладкой. Нажмите F5 (или кнопку запуска) — база откроется в режиме 1С:Предприятие, уже подключённая к отладчику.

Точка останова. Поставьте курсор на нужную строку кода и нажмите F9 — слева появится красный кружок. Когда выполнение дойдёт до этой строки, оно остановится, и вы увидите состояние на этот момент.

Пошаговое выполнение, когда код встал на точке останова:

  • F11 — шаг с заходом внутрь вызываемой процедуры;
  • F10 — шаг без захода (процедура выполнится целиком);
  • F5 — продолжить до следующей точки останова.

Табло. Чтобы посмотреть значения переменных, выделите переменную и перетащите её в окно Табло (Отладка → Табло) либо наведите курсор — всплывёт подсказка с текущим значением.

Если точки останова не срабатывают, проверьте, что отладка вообще разрешена: Сервис → Параметры → Запуск 1С:Предприятия → Отладка, галка «Разрешить отладку».

Проверка синтаксиса без запуска. Прежде чем запускать базу, прогоните код через проверку синтаксиса — Ctrl+F7 или Правка → Синтаксический контроль. Платформа подсветит незакрытые процедуры, лишние и недостающие ;, обращения к несуществующим методам. Это экономит время: часть опечаток видна сразу, без запуска 1С:Предприятия.

Типовые причины, по которым код не компилируется:

  • не закрыта процедура или функция (КонецПроцедуры / КонецФункции);
  • перепутаны директивы — клиентская процедура обращается к серверному методу напрямую;
  • вызов метода, которого нет у объекта (чаще всего из-за опечатки в имени).

Сохранение и обновление конфигурации базы данных

Здесь новички чаще всего теряются: код сохранён, а в базе ничего не изменилось. Причина — в 1С два разных действия.

  1. Сохранить модуль (Ctrl+S) — текст запоминается в редакторе, но на работу базы ещё не влияет.
  2. Обновить конфигурацию базы данных (F7 или Конфигурация → Обновить конфигурацию базы данных) — именно этот шаг переносит изменения в рабочую структуру. Только после него новый код начнёт выполняться.

При обновлении платформа покажет окно с принимаемыми изменениями — подтвердите их.

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

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

Готовое расширение можно выгрузить в файл .cfe (Конфигурация → Расширения конфигурации → Сохранить в файл) и перенести в другую базу — это удобно, когда доработку нужно повторить на нескольких базах одной организации.

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

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

Можно ли писать код в режиме 1С:Предприятие?
Нет. Редактирование конфигурации и ввод кода доступны только в Конфигураторе. В режиме 1С:Предприятие код лишь выполняется.
Почему модуль открывается только на чтение?
Конфигурация стоит на поддержке. Либо снимите её с поддержки (Конфигурация → Поддержка → Настройка поддержки), либо, что безопаснее, разместите свой код в расширении.
На каком языке пишут код в 1С?
На встроенном языке 1С — у него русский и английский синтаксис. Запросы к данным пишут на отдельном языке запросов, похожем на SQL.
Чем отличается `&НаКлиенте` от `&НаСервере`?
Директива задаёт, где выполнится процедура. Работа с базой (чтение, запись, запросы) идёт &НаСервере, а взаимодействие с пользователем — &НаКлиенте.
Код написал, сохранил, а он не работает — почему?
Скорее всего не выполнено Обновить конфигурацию базы данных (F7). Сохранение модуля (Ctrl+S) и обновление структуры базы — разные операции.