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

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

Как перейти к написанию кода команд в 1С

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

Команда в 1С — это действие, которое пользователь запускает кнопкой на форме, пунктом меню или клавишей. За её работу отвечает код на встроенном языке 1С, размещённый в модуле команды или в модуле формы. Чтобы перейти к написанию такого кода, нужно открыть конфигуратор, найти нужный объект (общую команду, команду формы или команду объекта) и создать обработчик её выполнения.

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

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

Где в 1С находится код команды

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

Модуль — это текстовое окно с кодом на встроенном языке. Открыть его можно несколькими способами: нажать кнопку с изображением лупы у свойства «Действие» команды, кликнуть правой кнопкой по команде и выбрать пункт перехода к обработчику, либо вручную открыть модуль формы через меню «Форма → Модуль». После создания обработчика платформа сама вставляет каркас процедуры:

&НаКлиенте

Процедура МояКоманда(Команда)

// Здесь ваш код

КонецПроцедуры

Создание команды и переход к её модулю

Рассмотрим самый частый сценарий: добавить кнопку на форму документа. Откройте конфигуратор, найдите нужный документ в дереве конфигурации, разверните ветку «Формы» и откройте форму документа. В редакторе формы перейдите на закладку «Команды» (обычно рядом с закладкой «Элементы») и добавьте новую команду через кнопку «Добавить» или контекстное меню.

Задайте команде имя без пробелов (например, ЗаполнитьПоОстаткам) и понятный заголовок, который увидит пользователь. Затем в палитре свойств команды найдите строку «Действие» и нажмите кнопку выбора — платформа предложит создать обработчик и спросит, где его разместить: на клиенте, на сервере или в комбинированном варианте. После выбора откроется модуль формы с готовой заготовкой процедуры.

Осталось вывести команду в интерфейс: перетащите её из списка команд в дерево элементов формы, например в командную панель табличной части или в группу кнопок. Без этого шага код будет написан, но пользователь не сможет его запустить.

Порядок действий
  1. 1
    Откройте конфигуратор и форму нужного объекта
  2. 2
    На закладке «Команды» добавьте новую команду, задайте имя и заголовок
  3. 3
    В свойстве «Действие» создайте обработчик, выбрав контекст выполнения
  4. 4
    Напишите код в открывшейся заготовке процедуры
  5. 5
    Перетащите команду в дерево элементов формы, чтобы появилась кнопка
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте работу в режиме предприятия

Выбор контекста: клиент, сервер, тонкий клиент

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

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

&НаКлиенте

Процедура ЗаполнитьПоОстаткам(Команда)

ЗаполнитьПоОстаткамНаСервере();

ПоказатьПредупреждение(, "Заполнение завершено");

КонецПроцедуры

&НаСервере

Процедура ЗаполнитьПоОстаткамНаСервере()

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Номенклатура, КоличествоОстаток

|ИЗ РегистрНакопления.ОстаткиТоваров.Остатки";

Результат = Запрос.Выполнить().Выгрузить();

// далее обработка результата

КонецПроцедуры

Базовый синтаксис, который понадобится в коде команд

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

Каждый оператор завершается точкой с запятой. Комментарии пишутся после двойного слэша //. Обращение к данным текущего объекта в модуле формы идёт через Объект.ИмяРеквизита, а к табличной части — через Объект.Товары с последующим перебором строк:

Для Каждого Строка Из Объект.Товары Цикл

Если Строка.Количество = 0 Тогда

Строка.Количество = 1;

КонецЕсли;

КонецЦикла;

При сомнениях в синтаксисе используйте синтакс-помощник (Ctrl+Shift+F1 или меню «Справка»): он встроен в конфигуратор и содержит описание всех методов с примерами. Контекстная подсказка по Ctrl+Пробел подскажет доступные свойства и методы объекта прямо при наборе кода.

Отладка и проверка работы команды

После написания кода обновите конфигурацию базы данных клавишей F7 и запустите режим предприятия. Если команда не срабатывает или ведёт себя не так, включите отладку: меню «Отладка → Начать отладку», затем поставьте точку останова (F9) на строке внутри обработчика. При нажатии кнопки выполнение остановится, и вы сможете посмотреть значения переменных через табло (Shift+F9) или окно «Вычислить выражение».

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

Контрольные точки

Как проверить результат

Кнопка видна на форме
Норма

Кнопка отображается в командной панели и доступна для нажатия

Тревожный признак

Кнопки нет — команда не перенесена в дерево элементов формы

Выполнение кода
Норма

При отладке точка останова в обработчике срабатывает

Тревожный признак

Точка не срабатывает — обработчик не привязан к команде

Изменение данных
Норма

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

Тревожный признак

Данные не изменились — ошибка в логике или код выполняется не в том контексте

Типичные ошибки и ограничения

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

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

Типичные ошибки
01
Запрос к базе в клиентском обработчике — ошибка компиляции; выносите запросы в серверные процедуры
02
Команда создана, но не перенесена в дерево элементов — кнопка не появляется на форме
03
Изменение типовой конфигурации вместо расширения — сложности при обновлении
04
Проверка только под полными правами — у рядовых пользователей команда падает с ошибкой доступа
05
Отсутствие обновления конфигурации БД (F7) — код есть, но в режиме предприятия его не видно

Альтернативы: расширения и внешние обработки

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

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

Сравнение вариантов

Доработка конфигурации

Полный доступ ко всем объектам, но требует снятия с поддержки и усложняет обновления

Расширение конфигурации

Команды добавляются без изменения типового кода; ограничение — не все объекты можно заимствовать

Внешняя обработка

Быстрый старт и безопасность для базы; подходит для разовых операций, но не встраивается в штатный интерфейс

Частые вопросы о написании кода команд в 1С

Можно ли писать код команды без конфигуратора?

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

Чем общая команда отличается от команды формы?

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

Почему обработчик не создаётся по кнопке «Действие»?

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

Как передать параметр из команды в серверную процедуру?

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

Нужно ли знать SQL для написания запросов в 1С?

Нет, язык запросов 1С лишь внешне похож на SQL. Достаточно конструктора запроса (правый клик в модуле → «Конструктор запроса»), который визуально соберёт текст запроса по выбранным таблицам и полям.

Как добавить команду печати, не изменяя конфигурацию?

Используйте механизм дополнительных отчетов и обработок из библиотеки стандартных подсистем: печатная форма подключается как внешняя обработка через справочник «Дополнительные отчеты и обработки» и появляется в меню «Печать» без доработки кода конфигурации.

Итог

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

Код команды в 1С пишется в обработчике, который создаётся через свойство «Действие» команды в конфигураторе. Запросы к базе выполняйте на сервере, интерактив — на клиенте, кнопку обязательно выводите в дерево элементов формы. Проверяйте результат отладкой на копии базы, а для типовых конфигураций предпочитайте расширения.