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

· 9 мин

Содержание

Команду в 1С называют одним словом без пробелов: буквы, цифры и подчёркивание, первым символом — буква или _. Принятый стиль — глагол плюс объект в «верблюжьей» записи: ЗаполнитьПоОстаткам, ПечатьАктаСверки, ОтправитьПоПочте. Текст на кнопке задаётся не именем, а свойством «Синоним».

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

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

Имя команды подчиняется тем же правилам, что и имя любого объекта метаданных или переменной встроенного языка. Ограничения технические, конфигуратор проверяет их сразу при вводе.

✅ Можно:

  • буквы кириллицы и латиницы;
  • цифры — но не первым символом;
  • подчёркивание _ в любом месте, в том числе первым символом.

❌ Нельзя:

  • пробелы, дефисы, точки, скобки, кавычки;
  • знаки +, /, №, % и прочие спецсимволы;
  • цифру в начале: 1Заполнить — ошибка, Заполнить1 — допустимо, хотя и неудачно.

Регистр букв платформа не различает. ЗаполнитьТовары и заполнитьтовары для неё одно и то же имя. Поэтому две команды, отличающиеся только регистром, в одном объекте создать не получится.

Самая коварная ловушка — смешение алфавитов. Латинская «C» и кириллическая «С», латинская «o» и русская «о» выглядят одинаково. Имя Сформировать с латинской первой буквой пройдёт проверку, но поиск по модулю и обращение из кода по «правильному» имени перестанут его находить. Если команда «не находится», перепечатайте имя вручную.

Ограничения на длину имени на практике не мешают: проблемы начинаются гораздо раньше, когда имя перестаёт читаться. Ориентир — 2–4 слова в имени. Если нужно больше, вероятно, команда делает слишком много.

Как назвать команду по смыслу: глагол и объект действия

Команда — это действие. Поэтому имя строят от глагола: что команда делает и над чем.

Основная схема

Глагол + Объект + Уточнение (по необходимости):

ЧастьПримерЗачем
ГлаголЗаполнить, Загрузить, Проверить, Отправитьпоказывает действие
ОбъектТовары, Цены, Реквизитыпоказывает, над чем действие
УточнениеПоОстаткам, ИзФайла, ПоКонтрагентуотличает от похожих команд

Получается ЗагрузитьЦеныИзФайла, ПроверитьРеквизитыКонтрагента, ЗаполнитьТоварыПоОстаткам.

Для печати и отчётов — существительное

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

Что делает имя хуже

  • 🚫 Сокращения. ЗаплТовПоОст понятно только автору и только сегодня.
  • 🚫 Номера. Команда1, Кнопка2, Заполнить3 ничего не говорят о действии.
  • 🚫 Транслит. ZapolnitTovary хуже и русского, и нормального английского имени.
  • 🚫 Смесь языков. ЗаполнитьItems ломает единообразие и мешает поиску.
  • 🚫 Название кнопки вместо действия. КнопкаОК, ЖёлтаяКнопка описывают интерфейс, а не смысл.

Имя и синоним — разные свойства

СвойствоКто видитПример
Имяразработчик, кодЗаполнитьПоОстаткам
Синонимпользователь: текст кнопки, пункт меню«Заполнить по остаткам»
Подсказкапользователь при наведении«Заполняет табличную часть остатками склада на дату документа»
Комментарийтолько разработчик«Доработка по заявке 1452»

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

Синоним можно менять когда угодно — на код это не влияет. Имя менять дорого: на него завязаны модули, формы и права. Поэтому над именем стоит подумать один раз, при создании.

Где регистрируется команда и как от этого зависит имя

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

Общая команда

Создаётся в дереве конфигурации: Общие → Общие команды. Доступна во всей конфигурации, её размещают в разделах, панелях навигации и командных панелях форм разных объектов. Полное имя выглядит как ОбщаяКоманда.ЗагрузитьКурсыВалют.

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

Команда объекта

Создаётся на закладке «Команды» в окне редактирования справочника, документа, отчёта, обработки и других объектов. Полное имя включает объект: Документ.РеализацияТоваров.Команда.ПечатьТТН.

Здесь контекст уже задан, повторять название объекта в имени команды не нужно. Для документа «Реализация товаров» достаточно СоздатьВозврат, а не СоздатьВозвратПоРеализацииТоваров.

Команда формы

Создаётся в редакторе формы на закладке «Команды». Живёт только внутри этой формы. Связь с кодом задаётся свойством «Действие»: при создании обработчика конфигуратор предлагает процедуру с тем же именем, что у команды.

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

У общих команд и команд объектов код пишется в модуле команды, в предопределённом обработчике:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	// ПараметрКоманды — ссылка или массив ссылок, тип задаёт свойство «Тип параметра команды»
КонецПроцедуры

Имя этой процедуры менять нельзя: платформа ищет обработчик именно по имени ОбработкаКоманды.

Вид командыГде создаётсяГде имя уникальноКак выглядит обращение
ОбщаяОбщие → Общие командысреди общих команд конфигурацииОбщаяКоманда.Имя
Объектазакладка «Команды» объектавнутри объектаСправочник.Имя.Команда.Имя
Формызакладка «Команды» редактора формывнутри формыКоманды.Имя в модуле формы

Уникальность имени команды и конфликты имён

Платформа сама не даст создать две команды с одинаковым именем в одной области. Конфликты возникают на стыке областей и при доработках.

Где пересекаются имена

  1. Команда формы и её обработчик. Обработчик — обычная процедура модуля формы. Если в модуле уже есть процедура или функция с тем же именем, конфликт всплывёт при синтаксической проверке модуля.
  2. Одно действие — две команды. Общая команда ПечатьАктаСверки и команда объекта с тем же именем технически допустимы, но в интерфейсе появятся две похожие кнопки, и через полгода никто не вспомнит, какая из них рабочая.
  3. Команды, добавленные кодом. При программном создании команды формы платформа выдаст исключение, если имя уже занято. Перед добавлением проверяйте:
ИмяКоманды = "Загрузить_" + ИмяПрофиля;
Если Команды.Найти(ИмяКоманды) = Неопределено Тогда
	НоваяКоманда = Команды.Добавить(ИмяКоманды);
	НоваяКоманда.Действие = "ПодключаемаяЗагрузка";
	НоваяКоманда.Заголовок = "Загрузить: " + ИмяПрофиля;
КонецЕсли;

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

Расширения: префикс имён

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

Префикс решает реальную проблему. Поставщик типовой конфигурации может в следующем релизе добавить свою команду ЗагрузитьЗаказыСайта. Без префикса имя расширения совпадёт с новым типовым объектом, и расширение перестанет применяться после обновления.

Типовые конфигурации на поддержке

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

Примеры: удачные и неудачные имена команд

Разбор на типовых задачах из реальных доработок.

ЗадачаНеудачноЛучшеПочему
Заполнить табличную часть остаткамиЗаполнить1ЗаполнитьПоОстаткамномер не говорит о действии
Загрузить прайс поставщика из ExcelЗагрПрайсXLSЗагрузитьЦеныИзФайласокращения и привязка к формату
Печать акта сверкиАктПечатьАктаСверкислишком общее имя
Отправить счёт по почтеSendОтправитьСчетПоПочтесмесь языков в русской конфигурации
Общая команда «Проверить ИНН»ПроверитьПроверитьИННКонтрагентау общей команды нет контекста
Команда документа «Создать возврат»СоздатьВозвратПоДокументуРеализацияТоваровСоздатьВозвратконтекст уже задан объектом
Команда в расширенииВыгрузитьНаСайтРасш1_ВыгрузитьНаСайтбез префикса возможен конфликт после обновления

Аббревиатуры

Устоявшиеся аббревиатуры пишут целиком заглавными: ПроверитьИНН, ВыгрузитьВЕГАИС, ОтправитьЭДО. Свои сокращения вроде «Конт» вместо «Контрагент» не изобретайте.

Группы похожих команд

Если команд одного типа несколько, начинайте их с одного глагола. Тогда в дереве объекта они встанут рядом по алфавиту:

  • ЗагрузитьЦеныИзФайла
  • ЗагрузитьЦеныИзПрайсаПоставщика
  • ЗагрузитьЦеныНовые — а вот это уже неудачно: уточнение должно описывать источник или способ, а не то, когда команду добавили.
Проверьте себя
Какое имя конфигуратор не примет?
Где задаётся текст, который пользователь видит на кнопке команды?
Как правильно назвать общую команду проверки ИНН?

Переименование и проверка имён команд

Когда менять имя уже поздно

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

Перед переименованием:

  1. Вызовите в контекстном меню команды «Поиск ссылок на объект» — увидите формы, подсистемы и роли, где она используется.
  2. Выполните глобальный поиск по старому имени через Правка → Глобальный поиск — найдёте обращения в модулях, включая текстовые строки.
  3. После переименования запустите Конфигурация → Проверка конфигурации и синтаксический контроль модулей.

Не переименовывайте типовые команды в конфигурации на поддержке — это усложнит каждое следующее обновление. Нужна другая надпись на кнопке — меняйте синоним в расширении или выводите свою команду.

Проверка имён кодом

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

&НаСервере
Процедура ПроверитьИменаКомандНаСервере()

	Подозрительные = Новый Массив;

	Для Каждого Команда Из Метаданные.ОбщиеКоманды Цикл
		ПроверитьИмя(Команда, Подозрительные);
	КонецЦикла;

	Для Каждого Объект Из Метаданные.Справочники Цикл
		Для Каждого Команда Из Объект.Команды Цикл
			ПроверитьИмя(Команда, Подозрительные);
		КонецЦикла;
	КонецЦикла;

	Для Каждого Объект Из Метаданные.Документы Цикл
		Для Каждого Команда Из Объект.Команды Цикл
			ПроверитьИмя(Команда, Подозрительные);
		КонецЦикла;
	КонецЦикла;

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

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

&НаСервере
Процедура ПроверитьИмя(Команда, Подозрительные)
	ПоследнийСимвол = Прав(Команда.Имя, 1);
	Если СтрНайти("0123456789", ПоследнийСимвол) > 0 Тогда
		Подозрительные.Добавить(Команда.ПолноеИмя());
	КонецЕсли;
КонецПроцедуры

Так же легко добавить свои проверки: имя короче 5 символов, отсутствие префикса в расширении (СтрНачинаетсяС(Команда.Имя, "Расш1_")), латиница в русской конфигурации.

Командная договорённость

Если в проекте больше одного разработчика, запишите правила в короткий регламент и проверяйте их на ревью:

Перед тем как сохранить новую команду
Выполнено: 0 / 6

Для автоматической проверки стиля кода и имён удобно подключить анализатор BSL Language Server в EDT или VS Code: он подсвечивает часть нарушений прямо при наборе.

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

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