Пишем первый код в Конфигураторе 1С 8.3 с нуля
Содержание
Писать код в 1С можно только в режиме Конфигуратора. Запускаете базу не кнопкой «1С:Предприятие», а кнопкой Конфигуратор в окне запуска, открываете дерево конфигурации (Конфигурация → Открыть конфигурацию), находите нужный объект, открываете его модуль и вводите текст на встроенном языке 1С.
Дальше — по шагам: как войти, куда именно писать, как устроены модули и процедуры, как проверить код отладчиком и как сохранить изменения, чтобы они заработали в базе. Отдельно разберём момент, о который спотыкаются почти все новички: типовую конфигурацию нельзя просто так редактировать, пока она на поддержке.
Как открыть Конфигуратор и войти в режим правки
В стартовом окне 1С выберите нужную информационную базу из списка и нажмите кнопку Конфигуратор (а не 1С:Предприятие). Откроется среда разработки — это и есть «программная среда», в которой пишут код.
Если кнопка Конфигуратор неактивна или база вообще не запускается — проблема обычно не в коде, а в правах или лицензии:
- 🔑 у вашего пользователя должна быть роль с правом на запуск Конфигуратора (у типового пользователя-бухгалтера её нет);
- 🧩 платформа без установленной лицензии базу не запустит (исключение — учебная версия);
- 🗂 для файловой базы нужен доступ на запись к каталогу базы.
Для первых экспериментов удобнее учиться на копии рабочей базы, а не на боевой. Копию файловой базы делают простым копированием каталога, серверную выгружают в .dt через Администрирование → Выгрузить информационную базу.
После входа вы увидите пустое окно с меню сверху . Само дерево объектов по умолчанию закрыто — его нужно открыть отдельно, об этом ниже.
Куда вообще можно писать код: поддержка и расширения
Главная засада типовых конфигураций (Бухгалтерия, ЗУП, Управление торговлей): они стоят на поддержке у поставщика. Пока объект на замке, редактор модуля открывается только на чтение — набрать строку не получится.
Есть два пути.
- Снять конфигурацию с поддержки. Меню
Конфигурация → Поддержка → Настройка поддержки, затем снять возможность изменения. После этого правки доступны, но вы теряете возможность обновлять типовую конфигурацию в один клик — каждое обновление придётся сравнивать и объединять вручную. - Использовать расширение конфигурации
. Расширения появились в платформе 8.3.6. Это отдельный «слой», который лежит поверх типовой и не ломает поддержку. Создаётся через
Конфигурация → Расширения конфигурации, дальше в расширение добавляются свои формы, модули и обработчики.
Для доработок типовых конфигураций по умолчанию выбирайте расширение, а не снятие с поддержки. Так обновления типовой продолжат ставиться штатно, а ваш код останется в отдельном файле .cfe.
Если конфигурация ваша собственная (самописная, не на поддержке) — писать можно сразу, без этих плясок.
Дерево конфигурации: где лежат объекты и их модули
Чтобы увидеть объекты, откройте дерево: Конфигурация → Открыть конфигурацию. Слева появится иерархия — это и есть структура всей конфигурации.
Ветки верхнего уровня, которые встречаются чаще всего:
| Ветка дерева | Что внутри |
|---|---|
| Справочники | номенклатура, контрагенты, склады и т. п. |
| Документы | поступления, реализации, платёжки |
| Обработки | сервисные инструменты без хранения данных |
| Отчёты | печатные и аналитические формы |
| Общие → Общие модули | код, доступный из любого места |
У большинства объектов есть свои модули. Чтобы добраться до кода, раскройте объект (например, конкретный документ) — внутри будут его формы, а у самого объекта есть «Модуль объекта» и «Модуль менеджера».
Не путайте ветку Общие → Общие модули и модули конкретных объектов. Общий модуль виден из всей конфигурации, модуль объекта — только в контексте этого объекта.
Виды модулей и как открыть редактор кода
Код в 1С живёт в модулях. Их несколько видов, и от выбора зависит, где и когда код выполнится:
- 📦 Модуль объекта — логика конкретного справочника или документа (например, расчёты при проведении);
- 🖥 Модуль формы — реакция на действия пользователя в форме (нажал кнопку, изменил поле);
- 🌐 Общий модуль — переиспользуемые процедуры и функции, вызываемые отовсюду;
- 🚀 Модуль приложения (обычного и управляемого) — код при старте и завершении сеанса;
- 🔒 Модуль сеанса — выполняется раньше всех, задаёт параметры сеанса.
Какой модуль выбирать под задачу:
- нужно посчитать что-то при проведении документа — модуль объекта, обработчик
ОбработкаПроведения; - отреагировать на действие пользователя в форме — модуль формы;
- одну и ту же процедуру вызывать из разных мест — вынести в общий модуль.
Открыть редактор можно двумя способами:
- В дереве конфигурации правой кнопкой по объекту →
Открыть модуль объекта(илиОткрыть модуль менеджера). - Для формы — открыть саму форму двойным кликом, затем переключиться на вкладку
Модульвнизу редактора формы.
Откроется текстовое поле с подсветкой синтаксиса — здесь и набирают код.
Основы встроенного языка: процедуры, функции, директивы
Весь код оформляется в процедуры и функции. Процедура выполняет действие, функция возвращает значение.
Процедура ПоказатьПривет()
Сообщить("Привет из 1С");
КонецПроцедуры
Функция Сумма(Первое, Второе)
Возврат Первое + Второе;
КонецФункции
Несколько правил, без которых код не запустится:
- каждый оператор завершается точкой с запятой
;; - тело процедуры закрывается
КонецПроцедуры, функции —КонецФункции; - комментарий — две косые черты
//, до конца строки; - переменные объявлять не обязательно, но для читаемости можно через
Перем.
В управляемом приложении важны директивы компиляции — они говорят платформе, где выполнять код:
&НаКлиенте— на компьютере пользователя (реакция на кнопки, диалоги);&НаСервере— на сервере (работа с базой, запросы, чтение и запись объектов);&НаСервереБезКонтекста— на сервере без передачи данных формы (быстрее).
&НаКлиенте
Процедура ВыполнитьРасчёт(Команда)
Результат = ПолучитьРезультатНаСервере();
Сообщить("Итог: " + Формат(Результат, "ЧГ=0"));
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьРезультатНаСервере()
Возврат 2 + 2;
КонецФункции
Обратите внимание: число со строкой напрямую не склеивают — для корректного вывода оборачивают в Формат(…) или собирают текст через СтрШаблон.
Дальше идут три конструкции, которые закрывают большую часть прикладных задач — без них первый код обычно не обходится.
Условие Если … Тогда:
Если Сумма > 0 Тогда
Статус = "Оплачено";
ИначеЕсли Сумма = 0 Тогда
Статус = "Нет оплаты";
Иначе
Статус = "Переплата";
КонецЕсли;
Цикл по коллекции. Перебор таблиц, выборок и массивов делают через Для Каждого:
Итого = 0;
Для Каждого Строка Из Объект.Товары Цикл
Итого = Итого + Строка.Сумма;
КонецЦикла;
Если из коллекции внутри цикла нужно удалять элементы, не перебирайте её Для Каждого — идите обратным циклом по индексу, иначе часть элементов проскочит:
Для Сч = 1 По Массив.Количество() Цикл
Элемент = Массив[Массив.Количество() - Сч];
// обработка элемента
КонецЦикла;
Обращение к реквизитам. К полям объекта обращаются через точку: Объект.Дата, Объект.Контрагент, Объект.Товары (табличная часть). Записать изменённый объект в базу можно методом Объект.Записать() — но делать это нужно &НаСервере.
Записать() в рабочей базе меняет данные. В примерах и экспериментах проверяйте код на копии базы, чтобы не испортить учёт.
Для выборки данных используют язык запросов — отдельный язык, похожий на SQL. Запрос пишут текстом и выполняют объектом Запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка, Дата
|ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Проведён = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Дата);
КонецЦикла;
Текст запроса удобно собирать не руками, а в Конструкторе запроса — правой кнопкой в коде → Конструктор запроса. Он соберёт синтаксис за вас, достаточно выбрать таблицы и поля мышкой.
Пример: добавляем свой код в модуль формы
Разберём живую задачу — при открытии формы документа показать пользователю сообщение.
- В дереве найдите документ, раскройте его, откройте нужную форму двойным кликом.
- Перейдите на вкладку
Модульв нижней части редактора формы. - Найдите или создайте обработчик события
ПриОткрытии. Создать его правильнее через палитру свойств формы: событиеПриОткрытии→ значок с лупой — платформа сама вставит заготовку процедуры с нужной директивой. - Впишите код внутрь процедуры:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Документ открыт";
Сообщение.Сообщить();
КонецПроцедуры
Конструкция Новый СообщениеПользователю — современный способ вывести текст; старый метод Сообщить() тоже работает, но у него меньше возможностей (нельзя привязать к полю формы).
Не пишите заготовки обработчиков руками. Если создавать их через палитру свойств, 1С сама пропишет имя процедуры и директиву компиляции — опечаток не будет.
Отладка: точки останова, шаги и табло
Проверять код «на глаз» не нужно — в Конфигураторе есть полноценный отладчик.
Запуск с отладкой. Нажмите F5 (или кнопку запуска) — база откроется в режиме 1С:Предприятие, уже подключённая к отладчику.
Точка останова. Поставьте курсор на нужную строку кода и нажмите F9 — слева появится красный кружок. Когда выполнение дойдёт до этой строки, оно остановится, и вы увидите состояние на этот момент.
Пошаговое выполнение, когда код встал на точке останова:
F11— шаг с заходом внутрь вызываемой процедуры;F10— шаг без захода (процедура выполнится целиком);F5— продолжить до следующей точки останова.
Табло. Чтобы посмотреть значения переменных, выделите переменную и перетащите её в окно Табло (Отладка → Табло) либо наведите курсор — всплывёт подсказка с текущим значением.
Если точки останова не срабатывают, проверьте, что отладка вообще разрешена: Сервис → Параметры → Запуск 1С:Предприятия → Отладка, галка «Разрешить отладку».
Проверка синтаксиса без запуска. Прежде чем запускать базу, прогоните код через проверку синтаксиса — Ctrl+F7 или Правка → Синтаксический контроль. Платформа подсветит незакрытые процедуры, лишние и недостающие ;, обращения к несуществующим методам. Это экономит время: часть опечаток видна сразу, без запуска 1С:Предприятия.
Типовые причины, по которым код не компилируется:
- не закрыта процедура или функция (
КонецПроцедуры/КонецФункции); - перепутаны директивы — клиентская процедура обращается к серверному методу напрямую;
- вызов метода, которого нет у объекта (чаще всего из-за опечатки в имени).
Сохранение и обновление конфигурации базы данных
Здесь новички чаще всего теряются: код сохранён, а в базе ничего не изменилось. Причина — в 1С два разных действия.
- Сохранить модуль (
Ctrl+S) — текст запоминается в редакторе, но на работу базы ещё не влияет. - Обновить конфигурацию
базы данных (
F7илиКонфигурация → Обновить конфигурацию базы данных) — именно этот шаг переносит изменения в рабочую структуру. Только после него новый код начнёт выполняться.
При обновлении платформа покажет окно с принимаемыми изменениями — подтвердите их.
Обновление структуры конфигурации требует монопольного доступа к базе. Если в базе работают пользователи, платформа попросит их завершить сеансы. Делайте обновление структуры, когда в базе никого нет, иначе работа людей оборвётся.
Для расширений порядок чуть другой: сначала код сохраняется в самом расширении, затем выполняется то же Обновить конфигурацию базы данных — платформа применит и основную конфигурацию, и подключённые расширения.
Готовое расширение можно выгрузить в файл .cfe (Конфигурация → Расширения конфигурации → Сохранить в файл) и перенести в другую базу — это удобно, когда доработку нужно повторить на нескольких базах одной организации.
После обновления всегда проверяйте код в деле: откройте форму, нажмите кнопку, проведите тестовый документ в копии базы. Компиляция без ошибок означает только, что синтаксис верный, — а не то, что логика делает ровно то, что вы задумали.
Частые вопросы
Можно ли писать код в режиме 1С:Предприятие?
Почему модуль открывается только на чтение?
Конфигурация → Поддержка → Настройка поддержки), либо, что безопаснее, разместите свой код в расширении.На каком языке пишут код в 1С?
Чем отличается `&НаКлиенте` от `&НаСервере`?
&НаСервере, а взаимодействие с пользователем — &НаКлиенте.Код написал, сохранил, а он не работает — почему?
Обновить конфигурацию базы данных (F7). Сохранение модуля (Ctrl+S) и обновление структуры базы — разные операции.