Разработка и Конфигурация · 11 мин
Как перейти к написанию кода команд в 1С
Как начать писать код команд в 1С: где находится модуль команды, синтаксис встроенного языка, обработчики событий, типичные ошибки и проверка результата.
Команда в 1С — это действие, которое пользователь запускает кнопкой на форме, пунктом меню или клавишей. За её работу отвечает код на встроенном языке 1С, размещённый в модуле команды или в модуле формы. Чтобы перейти к написанию такого кода, нужно открыть конфигуратор, найти нужный объект (общую команду, команду формы или команду объекта) и создать обработчик её выполнения.
Чаще всего задача возникает у начинающих разработчиков и внедренцев: требуется добавить кнопку «Печать», «Заполнить», «Пересчитать» или любую другую операцию, которой нет в типовой конфигурации. Платформа 1С:Предприятие 8 позволяет сделать это без глубоких знаний программирования, если понимать, где живёт код команды и как он связан с интерфейсом.
Статья разбирает практический путь: от создания команды до рабочего обработчика с проверкой результата. Примеры приведены на встроенном языке 1С и подходят для большинства конфигураций на управляемых формах.
Где в 1С находится код команды
Команды в 1С существуют в трёх основных местах, и от этого зависит, где писать код. Общие команды хранятся в ветке «Общие → Общие команды» дерева конфигурации и имеют собственный модуль команды. Команды формы создаются в редакторе конкретной формы на закладке «Команды», а их обработчики размещаются в модуле этой формы. Команды объектов (например, команды справочника или документа) задаются на закладке «Команды» в палитре свойств объекта.
Модуль — это текстовое окно с кодом на встроенном языке. Открыть его можно несколькими способами: нажать кнопку с изображением лупы у свойства «Действие» команды, кликнуть правой кнопкой по команде и выбрать пункт перехода к обработчику, либо вручную открыть модуль формы через меню «Форма → Модуль». После создания обработчика платформа сама вставляет каркас процедуры:
&НаКлиенте
Процедура МояКоманда(Команда)
// Здесь ваш код
КонецПроцедуры
Создание команды и переход к её модулю
Рассмотрим самый частый сценарий: добавить кнопку на форму документа. Откройте конфигуратор, найдите нужный документ в дереве конфигурации, разверните ветку «Формы» и откройте форму документа. В редакторе формы перейдите на закладку «Команды» (обычно рядом с закладкой «Элементы») и добавьте новую команду через кнопку «Добавить» или контекстное меню.
Задайте команде имя без пробелов (например, ЗаполнитьПоОстаткам) и понятный заголовок, который увидит пользователь. Затем в палитре свойств команды найдите строку «Действие» и нажмите кнопку выбора — платформа предложит создать обработчик и спросит, где его разместить: на клиенте, на сервере или в комбинированном варианте. После выбора откроется модуль формы с готовой заготовкой процедуры.
Осталось вывести команду в интерфейс: перетащите её из списка команд в дерево элементов формы, например в командную панель табличной части или в группу кнопок. Без этого шага код будет написан, но пользователь не сможет его запустить.
- 1Откройте конфигуратор и форму нужного объекта
- 2На закладке «Команды» добавьте новую команду, задайте имя и заголовок
- 3В свойстве «Действие» создайте обработчик, выбрав контекст выполнения
- 4Напишите код в открывшейся заготовке процедуры
- 5Перетащите команду в дерево элементов формы, чтобы появилась кнопка
- 6Обновите конфигурацию базы данных (F7) и проверьте работу в режиме предприятия
Выбор контекста: клиент, сервер, тонкий клиент
Директивы &НаКлиенте и &НаСервере определяют, где выполнится код. На клиенте доступны интерактивные действия: предупреждения, вопросы пользователю, открытие форм, работа с файлами на компьютере пользователя. На сервере выполняются запросы к базе данных, проведение документов, массовые вычисления — всё, что требует доступа к данным.
Типовой шаблон для команды, которая должна изменить данные, выглядит так: клиентский обработчик вызывает серверную процедуру, та выполняет работу с базой, а результат возвращается и отображается пользователю:
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
ЗаполнитьПоОстаткамНаСервере();
ПоказатьПредупреждение(, "Заполнение завершено");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоОстаткамНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура, КоличествоОстаток
|ИЗ РегистрНакопления.ОстаткиТоваров.Остатки";
Результат = Запрос.Выполнить().Выгрузить();
// далее обработка результата
КонецПроцедуры
Базовый синтаксис, который понадобится в коде команд
Встроенный язык 1С использует русскоязычные ключевые слова (допустимы и английские аналоги). Для написания кода команд достаточно освоить небольшой набор конструкций: объявление переменных через Перем, условия Если … Тогда … Иначе … КонецЕсли;, циклы Для Каждого … Из … Цикл … КонецЦикла; и обращение к реквизитам объектов через точку.
Каждый оператор завершается точкой с запятой. Комментарии пишутся после двойного слэша //. Обращение к данным текущего объекта в модуле формы идёт через Объект.ИмяРеквизита, а к табличной части — через Объект.Товары с последующим перебором строк:
Для Каждого Строка Из Объект.Товары Цикл
Если Строка.Количество = 0 Тогда
Строка.Количество = 1;
КонецЕсли;
КонецЦикла;
При сомнениях в синтаксисе используйте синтакс-помощник (Ctrl+Shift+F1 или меню «Справка»): он встроен в конфигуратор и содержит описание всех методов с примерами. Контекстная подсказка по Ctrl+Пробел подскажет доступные свойства и методы объекта прямо при наборе кода.
Отладка и проверка работы команды
После написания кода обновите конфигурацию базы данных клавишей F7 и запустите режим предприятия. Если команда не срабатывает или ведёт себя не так, включите отладку: меню «Отладка → Начать отладку», затем поставьте точку останова (F9) на строке внутри обработчика. При нажатии кнопки выполнение остановится, и вы сможете посмотреть значения переменных через табло (Shift+F9) или окно «Вычислить выражение».
Частая ситуация — кнопка нажимается, но ничего не происходит. Причины обычно три: команда не связана с элементом формы, обработчик создан не в том модуле, либо код завершается ошибкой, которая не видна пользователю. Проверьте журнал регистрации и убедитесь, что в свойстве кнопки указано правильное «ИмяКоманды».
Как проверить результат
Кнопка отображается в командной панели и доступна для нажатия
Кнопки нет — команда не перенесена в дерево элементов формы
При отладке точка останова в обработчике срабатывает
Точка не срабатывает — обработчик не привязан к команде
После выполнения реквизиты или табличная часть изменились как задумано
Данные не изменились — ошибка в логике или код выполняется не в том контексте
Типичные ошибки и ограничения
Начинающие разработчики чаще всего сталкиваются с одними и теми же проблемами. Первая — попытка выполнить запрос к базе в клиентском обработчике: платформа выдаёт ошибку компиляции, потому что на клиенте объект Запрос недоступен в управляемых формах. Вторая — изменение данных объекта на сервере без последующего обновления представления формы, из-за чего пользователь не видит результат.
Третья группа ошибок связана с правами: код команды может быть корректным, но у пользователя нет прав на изменение объекта или регистра. Проверяйте поведение под реальной ролью пользователя, а не только под полными правами. Наконец, изменение типовой конфигурации напрямую затрудняет обновления — по возможности используйте механизм расширений, где команды добавляются без снятия конфигурации с поддержки.
Альтернативы: расширения и внешние обработки
Не всегда код команды нужно встраивать в конфигурацию. Если доработка небольшая и предназначена для одной формы, удобнее создать расширение конфигурации: в нём вы заимствуете форму, добавляете свою команду и обработчик, а типовая конфигурация остаётся на поддержке. Расширения подключаются и отключаются без изменения основной базы.
Для разовых операций подойдёт внешняя обработка — отдельный файл .epf с формой и командами, который открывается через «Файл → Открыть». Это безопасный способ потренироваться в написании кода команд: даже при ошибке вы не затронете данные основной конфигурации, если обработка не выполняет запись в базу.
Сравнение вариантов
Полный доступ ко всем объектам, но требует снятия с поддержки и усложняет обновления
Команды добавляются без изменения типового кода; ограничение — не все объекты можно заимствовать
Быстрый старт и безопасность для базы; подходит для разовых операций, но не встраивается в штатный интерфейс
Частые вопросы о написании кода команд в 1С
Можно ли писать код команды без конфигуратора?
Нет, разработка ведётся только в конфигураторе. Однако внешние обработки можно создавать и редактировать в том же конфигураторе отдельно от основной базы, а затем открывать в режиме предприятия как файл.
Чем общая команда отличается от команды формы?
Общая команда хранится в ветке «Общие команды» и может быть выведена сразу на многие формы через параметризацию — её модуль один на всю конфигурацию. Команда формы существует только внутри конкретной формы, и её код живёт в модуле этой формы.
Почему обработчик не создаётся по кнопке «Действие»?
Обычно причина в том, что модуль формы уже содержит процедуру с таким именем, либо форма открыта в режиме просмотра без возможности изменения. Проверьте, что конфигурация открыта на изменение и имя команды уникально в пределах модуля.
Как передать параметр из команды в серверную процедуру?
Добавьте параметры в объявление серверной процедуры и передайте значения при вызове из клиентского обработчика: ЗаполнитьНаСервере(Объект.Склад);. Объекты данных (ссылки, структуры, массивы) передаются между клиентом и сервером автоматически.
Нужно ли знать SQL для написания запросов в 1С?
Нет, язык запросов 1С лишь внешне похож на SQL. Достаточно конструктора запроса (правый клик в модуле → «Конструктор запроса»), который визуально соберёт текст запроса по выбранным таблицам и полям.
Как добавить команду печати, не изменяя конфигурацию?
Используйте механизм дополнительных отчетов и обработок из библиотеки стандартных подсистем: печатная форма подключается как внешняя обработка через справочник «Дополнительные отчеты и обработки» и появляется в меню «Печать» без доработки кода конфигурации.
Что важно запомнить
Код команды в 1С пишется в обработчике, который создаётся через свойство «Действие» команды в конфигураторе. Запросы к базе выполняйте на сервере, интерактив — на клиенте, кнопку обязательно выводите в дерево элементов формы. Проверяйте результат отладкой на копии базы, а для типовых конфигураций предпочитайте расширения.