Имя команды в конфигурации 1С: что разрешает платформа и как выбрать понятное
Содержание
Команду в 1С называют одним словом без пробелов: буквы, цифры и подчёркивание, первым символом — буква или _. Принятый стиль — глагол плюс объект в «верблюжьей» записи: ЗаполнитьПоОстаткам, ПечатьАктаСверки, ОтправитьПоПочте. Текст на кнопке задаётся не именем, а свойством «Синоним».
Частая ошибка новичка — пытаться назвать команду фразой, которую увидит пользователь, например «Заполнить по остаткам». Конфигуратор такое имя не примет. Имя нужно программе и разработчику, а пользователю нужен синоним. Если разделить эти две роли, правила именования команд в 1С становятся простыми.
Какие символы допускает платформа в имени команды
Имя команды подчиняется тем же правилам, что и имя любого объекта метаданных или переменной встроенного языка. Ограничения технические, конфигуратор проверяет их сразу при вводе.
✅ Можно:
- буквы кириллицы и латиницы;
- цифры — но не первым символом;
- подчёркивание
_в любом месте, в том числе первым символом.
❌ Нельзя:
- пробелы, дефисы, точки, скобки, кавычки;
- знаки
+,/,№,%и прочие спецсимволы; - цифру в начале:
1Заполнить— ошибка,Заполнить1— допустимо, хотя и неудачно.
Регистр букв платформа не различает. ЗаполнитьТовары и заполнитьтовары для неё одно и то же имя. Поэтому две команды, отличающиеся только регистром, в одном объекте создать не получится.
Самая коварная ловушка — смешение алфавитов. Латинская «C» и кириллическая «С», латинская «o» и русская «о» выглядят одинаково. Имя Сформировать с латинской первой буквой пройдёт проверку, но поиск по модулю и обращение из кода по «правильному» имени перестанут его находить. Если команда «не находится», перепечатайте имя вручную.
Ограничения на длину имени на практике не мешают: проблемы начинаются гораздо раньше, когда имя перестаёт читаться. Ориентир — 2–4 слова в имени. Если нужно больше, вероятно, команда делает слишком много.
Как назвать команду по смыслу: глагол и объект действия
Команда — это действие. Поэтому имя строят от глагола: что команда делает и над чем.
Основная схема
Глагол + Объект + Уточнение (по необходимости):
| Часть | Пример | Зачем |
|---|---|---|
| Глагол | Заполнить, Загрузить, Проверить, Отправить | показывает действие |
| Объект | Товары, Цены, Реквизиты | показывает, над чем действие |
| Уточнение | ПоОстаткам, ИзФайла, ПоКонтрагенту | отличает от похожих команд |
Получается ЗагрузитьЦеныИзФайла, ПроверитьРеквизитыКонтрагента, ЗаполнитьТоварыПоОстаткам.
Для печати и отчётов — существительное
Команды, которые открывают печатную форму или отчёт, удобно называть существительным: ПечатьСчетаНаОплату, ОтчетПоДолгам. Так их легко отличить от команд, меняющих данные.
Что делает имя хуже
- 🚫 Сокращения.
ЗаплТовПоОстпонятно только автору и только сегодня. - 🚫 Номера.
Команда1,Кнопка2,Заполнить3ничего не говорят о действии. - 🚫 Транслит.
ZapolnitTovaryхуже и русского, и нормального английского имени. - 🚫 Смесь языков.
ЗаполнитьItemsломает единообразие и мешает поиску. - 🚫 Название кнопки вместо действия.
КнопкаОК,ЖёлтаяКнопкаописывают интерфейс, а не смысл.
Имя и синоним — разные свойства
| Свойство | Кто видит | Пример |
|---|---|---|
| Имя | разработчик, код | ЗаполнитьПоОстаткам |
| Синоним | пользователь: текст кнопки, пункт меню | «Заполнить по остаткам» |
| Подсказка | пользователь при наведении | «Заполняет табличную часть остатками склада на дату документа» |
| Комментарий | только разработчик | «Доработка по заявке 1452» |
Когда вы вводите имя, конфигуратор сам заполняет синоним, разбивая имя по заглавным буквам: из ЗаполнитьПоОстаткам получится «Заполнить по остаткам». Это ещё одна причина писать имя в «верблюжьей» записи: синоним выходит почти готовым, его остаётся только поправить.
Синоним можно менять когда угодно — на код это не влияет. Имя менять дорого: на него завязаны модули, формы и права. Поэтому над именем стоит подумать один раз, при создании.
Где регистрируется команда и как от этого зависит имя
Команда в 1С живёт в одном из трёх мест. От места зависит, где имя должно быть уникальным и как к команде обращаются из кода.
Общая команда
Создаётся в дереве конфигурации: Общие → Общие команды. Доступна во всей конфигурации, её размещают в разделах, панелях навигации и командных панелях форм разных объектов. Полное имя выглядит как ОбщаяКоманда.ЗагрузитьКурсыВалют.
Раз команда общая, имя должно говорить о действии без привязки к контексту. Заполнить — плохое имя для общей команды: непонятно, что и где заполняется. ЗаполнитьКонтактыИзСайта — хорошее.
Команда объекта
Создаётся на закладке «Команды» в окне редактирования справочника, документа, отчёта, обработки и других объектов. Полное имя включает объект: Документ.РеализацияТоваров.Команда.ПечатьТТН.
Здесь контекст уже задан, повторять название объекта в имени команды не нужно. Для документа «Реализация товаров» достаточно СоздатьВозврат, а не СоздатьВозвратПоРеализацииТоваров.
Команда формы
Создаётся в редакторе формы на закладке «Команды». Живёт только внутри этой формы. Связь с кодом задаётся свойством «Действие»: при создании обработчика конфигуратор предлагает процедуру с тем же именем, что у команды.
&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
ЗаполнитьПоОстаткамНаСервере();
КонецПроцедуры
У общих команд и команд объектов код пишется в модуле команды, в предопределённом обработчике:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// ПараметрКоманды — ссылка или массив ссылок, тип задаёт свойство «Тип параметра команды»
КонецПроцедуры
Имя этой процедуры менять нельзя: платформа ищет обработчик именно по имени ОбработкаКоманды.
| Вид команды | Где создаётся | Где имя уникально | Как выглядит обращение |
|---|---|---|---|
| Общая | Общие → Общие команды | среди общих команд конфигурации | ОбщаяКоманда.Имя |
| Объекта | закладка «Команды» объекта | внутри объекта | Справочник.Имя.Команда.Имя |
| Формы | закладка «Команды» редактора формы | внутри формы | Команды.Имя в модуле формы |
Уникальность имени команды и конфликты имён
Платформа сама не даст создать две команды с одинаковым именем в одной области. Конфликты возникают на стыке областей и при доработках.
Где пересекаются имена
- Команда формы и её обработчик. Обработчик — обычная процедура модуля формы. Если в модуле уже есть процедура или функция с тем же именем, конфликт всплывёт при синтаксической проверке модуля.
- Одно действие — две команды. Общая команда
ПечатьАктаСверкии команда объекта с тем же именем технически допустимы, но в интерфейсе появятся две похожие кнопки, и через полгода никто не вспомнит, какая из них рабочая. - Команды, добавленные кодом. При программном создании команды формы платформа выдаст исключение, если имя уже занято. Перед добавлением проверяйте:
ИмяКоманды = "Загрузить_" + ИмяПрофиля;
Если Команды.Найти(ИмяКоманды) = Неопределено Тогда
НоваяКоманда = Команды.Добавить(ИмяКоманды);
НоваяКоманда.Действие = "ПодключаемаяЗагрузка";
НоваяКоманда.Заголовок = "Загрузить: " + ИмяПрофиля;
КонецЕсли;
В примере ИмяПрофиля тоже должно быть допустимым идентификатором: без пробелов и спецсимволов. Если имя строится из пользовательских данных, сначала очистите строку или используйте порядковый номер с понятным префиксом.
Расширения: префикс имён
В свойствах расширения конфигурации
есть «Префикс имён», например Расш1_ или сокращение вашей компании. Собственные объекты расширения, включая общие команды и команды форм, называйте с этим префиксом: Расш1_ЗагрузитьЗаказыСайта. Конфигуратор предупреждает, если имя собственного объекта расширения не начинается с префикса.
Префикс решает реальную проблему. Поставщик типовой конфигурации может в следующем релизе добавить свою команду ЗагрузитьЗаказыСайта. Без префикса имя расширения совпадёт с новым типовым объектом, и расширение перестанет применяться после обновления.
Типовые конфигурации на поддержке
В типовой конфигурации на поддержке поставщика свои команды лучше добавлять в расширение, а не в основную конфигурацию. Если всё же дорабатываете основную, тоже используйте префикс: так ваши объекты сразу видны при сравнении и объединении с новым релизом.
Примеры: удачные и неудачные имена команд
Разбор на типовых задачах из реальных доработок.
| Задача | Неудачно | Лучше | Почему |
|---|---|---|---|
| Заполнить табличную часть остатками | Заполнить1 | ЗаполнитьПоОстаткам | номер не говорит о действии |
| Загрузить прайс поставщика из Excel | ЗагрПрайсXLS | ЗагрузитьЦеныИзФайла | сокращения и привязка к формату |
| Печать акта сверки | Акт | ПечатьАктаСверки | слишком общее имя |
| Отправить счёт по почте | Send | ОтправитьСчетПоПочте | смесь языков в русской конфигурации |
| Общая команда «Проверить ИНН» | Проверить | ПроверитьИННКонтрагента | у общей команды нет контекста |
| Команда документа «Создать возврат» | СоздатьВозвратПоДокументуРеализацияТоваров | СоздатьВозврат | контекст уже задан объектом |
| Команда в расширении | ВыгрузитьНаСайт | Расш1_ВыгрузитьНаСайт | без префикса возможен конфликт после обновления |
Аббревиатуры
Устоявшиеся аббревиатуры пишут целиком заглавными: ПроверитьИНН, ВыгрузитьВЕГАИС, ОтправитьЭДО. Свои сокращения вроде «Конт» вместо «Контрагент» не изобретайте.
Группы похожих команд
Если команд одного типа несколько, начинайте их с одного глагола. Тогда в дереве объекта они встанут рядом по алфавиту:
ЗагрузитьЦеныИзФайлаЗагрузитьЦеныИзПрайсаПоставщикаЗагрузитьЦеныНовые— а вот это уже неудачно: уточнение должно описывать источник или способ, а не то, когда команду добавили.
Переименование и проверка имён команд
Когда менять имя уже поздно
Переименовать команду в конфигураторе можно в любой момент, но платформа сама поправит только связи, которые хранятся в метаданных: размещение в интерфейсе, ссылки в формах. Строки в коде, где имя записано текстом, останутся старыми.
Перед переименованием:
- Вызовите в контекстном меню команды «Поиск ссылок на объект» — увидите формы, подсистемы и роли, где она используется.
- Выполните глобальный поиск по старому имени через
Правка → Глобальный поиск— найдёте обращения в модулях, включая текстовые строки. - После переименования запустите
Конфигурация → Проверка конфигурациии синтаксический контроль модулей.
Не переименовывайте типовые команды в конфигурации на поддержке — это усложнит каждое следующее обновление. Нужна другая надпись на кнопке — меняйте синоним в расширении или выводите свою команду.
Проверка имён кодом
Для большой конфигурации удобно собрать все имена команд и посмотреть их списком. Пример внешней обработки, которая выводит общие команды и команды справочников и документов, у которых имя заканчивается цифрой — частый признак «временной» команды:
&НаСервере
Процедура ПроверитьИменаКомандНаСервере()
Подозрительные = Новый Массив;
Для Каждого Команда Из Метаданные.ОбщиеКоманды Цикл
ПроверитьИмя(Команда, Подозрительные);
КонецЦикла;
Для Каждого Объект Из Метаданные.Справочники Цикл
Для Каждого Команда Из Объект.Команды Цикл
ПроверитьИмя(Команда, Подозрительные);
КонецЦикла;
КонецЦикла;
Для Каждого Объект Из Метаданные.Документы Цикл
Для Каждого Команда Из Объект.Команды Цикл
ПроверитьИмя(Команда, Подозрительные);
КонецЦикла;
КонецЦикла;
Для Каждого ПолноеИмя Из Подозрительные Цикл
Сообщить(ПолноеИмя);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьИмя(Команда, Подозрительные)
ПоследнийСимвол = Прав(Команда.Имя, 1);
Если СтрНайти("0123456789", ПоследнийСимвол) > 0 Тогда
Подозрительные.Добавить(Команда.ПолноеИмя());
КонецЕсли;
КонецПроцедуры
Так же легко добавить свои проверки: имя короче 5 символов, отсутствие префикса в расширении (СтрНачинаетсяС(Команда.Имя, "Расш1_")), латиница в русской конфигурации.
Командная договорённость
Если в проекте больше одного разработчика, запишите правила в короткий регламент и проверяйте их на ревью:
Для автоматической проверки стиля кода и имён удобно подключить анализатор BSL Language Server в EDT или VS Code: он подсвечивает часть нарушений прямо при наборе.
Частые вопросы
Можно ли назвать команду латиницей в русской конфигурации?
Чем имя команды отличается от синонима?
Почему команда не появилась в интерфейсе после создания?
Можно ли две команды назвать одинаково в разных справочниках?
ПечатьЭтикетки может быть и у «Номенклатуры», и у «Складов».