Синтаксис и применение ОписаниеКомандыПоляВвода.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.
Синтаксис
Новый ОписаниеКомандыПоляВвода(<Команда>, <Представление>)Полное описание, параметры и ограничения
ОписаниеКомандыПоляВвода.По умолчанию
ОписаниеКомандыПоляВвода (InputFieldCommandDescription)
По умолчанию
Доступен, начиная с версии 8.3.23.
Синтаксис:
Новый ОписаниеКомандыПоляВвода(<Команда>, <Представление>)
Параметры:
<Команда> (необязательный)
Тип: СтандартнаяКомандаПоляВвода, ОписаниеОповещения, Массив, Неопределено.
Содержит описание команды:
СтандартнаяКомандаПоляВвода – стандартная команда;
ОписаниеОповещения – процедура, которая будет вызвана при выборе пункта меню. Процедура должна содержать следующие параметры:
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения;
Массив – задает подменю. Массив может содержать элементы обозначенных выше типов;
Неопределено – разделитель;
Любой другой тип - пункт меню не отображается.
Значение по умолчанию: Неопределено.
<Представление> (необязательный)
Тип: Строка.
Текст команды.
Значение по умолчанию: Неопределено.
Использование в версии:
Доступен, начиная с версии 8.3.23.
Описание изменено в версии 8.3.24.
Методическая информация
Практические примеры
Добавить собственную иконку к настоящей команде и обновлять её подпись
Картинка и Представление относятся к своему описанию команды с оповещением. Иконка не заменяет действие и не меняет сумму.
Где и как запускать
Полный модуль своей управляемой формы. Только локальные количество и сумма, собственное контекстное меню поля ввода.
Подготовка
В отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой формой. Вставьте весь модуль одного урока и назначьте событию ПриСозданииНаСервере приведённую процедуру.
Код сам добавляет числовое поле количества и надпись суммы. События ПриИзменении и ОбработкаФормированияКоманд назначаются полю программно. Не добавляйте одноимённые реквизиты и элементы вручную.
Откройте форму на настольном тонком или толстом клиенте 8.5.1.1343 и щёлкните правой кнопкой по полю количества. Только своя Книга: 3 шт. по 250, сумма 750.
Событие ОбработкаФормированияКоманд имеет параметры ПараметрыКоманд, Команды — без дополнительного Элемент. Процедура собственного оповещения имеет один параметр ДополнительныеПараметры и должна быть Экспорт.
Для второго урока добавьте в свою конфигурацию общую картинку УчебныйМаркер из lesson-assets/owned-book-marker-32.png. Для остальных уроков этот ресурс не нужен.
Никакие товары или документы базы не изменяются. Фактическое меню и вид иконки нужно проверить в вашей активной теме; эти BSL-модули не исполнялись в 1С автоматически.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Метаданные.ОбщиеКартинки.Найти("УчебныйМаркер") = Неопределено Тогда
ВызватьИсключение "Добавьте только в свою конфигурацию общую картинку УчебныйМаркер";
КонецЕсли;
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число")));
Реквизиты.Добавить(Новый РеквизитФормы("Сумма", Новый ОписаниеТипов("Число")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
Количество = 3;
Сумма = Количество * 250;
Поле = Элементы.Добавить("УчебноеКоличество", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Количество";
Поле.Заголовок = "Книга: количество 0…5";
Поле.УстановитьДействие("ПриИзменении", "КоличествоИзменено");
Поле.УстановитьДействие("ОбработкаФормированияКоманд", "СформироватьУчебноеМеню");
Итог = Элементы.Добавить("УчебнаяСумма", Тип("ПолеФормы"));
Итог.Вид = ВидПоляФормы.ПолеНадписи;
Итог.ПутьКДанным = "Сумма";
Итог.Заголовок = "Сумма при цене 250";
КонецПроцедуры
&НаКлиенте
Процедура КоличествоИзменено(Элемент)
Если ТипЗнч(Количество) <> Тип("Число") Тогда
Количество = 3;
ИначеЕсли Количество < 0 ИЛИ Количество > 5 ИЛИ Количество <> Цел(Количество) Тогда
Количество = 3;
Сообщить("В учебном опыте нужны целые количества 0…5; восстановлены 3");
КонецЕсли;
Сумма = Количество * 250;
КонецПроцедуры
&НаКлиенте
Процедура УчебнаяКомандаВыбрана(ДополнительныеПараметры) Экспорт
Если ТипЗнч(ДополнительныеПараметры) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидается собственный строковый код действия";
КонецЕсли;
Если ДополнительныеПараметры = "Увеличить" Тогда
Если ТипЗнч(Количество) <> Тип("Число") Тогда
ВызватьИсключение "Количество должно быть числом";
КонецЕсли;
Если Количество < 0 ИЛИ Количество >= 5 ИЛИ Количество <> Цел(Количество) Тогда
Сообщить("Увеличение отклонено: нужен целый остаток 0…4 в собственной форме");
Возврат;
КонецЕсли;
Количество = Количество + 1;
ИначеЕсли ДополнительныеПараметры = "Вернуть" Тогда
Количество = 3;
Иначе
ВызватьИсключение "Неизвестное учебное действие";
КонецЕсли;
Сумма = Количество * 250;
Сообщить("Своя Книга: " + Строка(Количество) + ", сумма " + Строка(Сумма));
КонецПроцедуры
&НаКлиенте
Процедура СформироватьУчебноеМеню(ПараметрыКоманд, Команды)
Оповещение = Новый ОписаниеОповещения("УчебнаяКомандаВыбрана", ЭтаФорма, "Увеличить");
Увеличить = Новый ОписаниеКомандыПоляВвода;
Увеличить.Команда = Оповещение;
Увеличить.Представление = "+1 Книга; сейчас " + Строка(Количество);
Увеличить.Доступность = Количество < 5;
Увеличить.Пометка = Ложь;
Увеличить.Картинка = Новый Картинка;
Команды.Добавить(Увеличить);
Вернуть = Новый ОписаниеКомандыПоляВвода(Новый ОписаниеОповещения("УчебнаяКомандаВыбрана", ЭтаФорма, "Вернуть"), "Вернуть количество 3");
Вернуть.Доступность = Количество <> 3;
Вернуть.Пометка = Количество = 3;
Команды.Добавить(Вернуть);
Увеличить.Картинка = БиблиотекаКартинок.УчебныйМаркер;
Увеличить.Представление = "+1 Книга: " + Строка(Количество) + " → " + Строка(Количество + 1);
Сообщить(ТипЗнч(Увеличить.Картинка) = Тип("Картинка"));
Сообщить(СтрНайти(Увеличить.Представление, Строка(Количество)) > 0);
Сообщить(Сумма = Количество * 250);
КонецПроцедурыРазбор по шагам
Перед созданием своих элементов проверить наличие общей картинки УчебныйМаркер в собственной конфигурации.
Добавить оба действующих пункта меню и заменить только картинку и подпись пункта +1.
Открыть меню при 3 и увидеть предложение 3→4; выполнить команду, повторно открыть меню при 4 и увидеть 4→5.
При 5 пункт по-прежнему недоступен независимо от картинки. Вернуть 3 возвращает исходные количество и сумму.
Как проверить результат
Три сообщения Истина при открытии: тип картинки, текущая цифра в подписи и правильная сумма.
Фактический вид собственной библиотечной иконки и подписи проверить в активной теме клиента.
Ожидаемый результат
Реальная команда с собственной картинкой и динамическим текстом, не декоративный пример чтения свойства.
На что обратить внимание
Картинка не является обработчиком; действие находится в свойстве Команда.
Ресурс должен принадлежать собственной учебной конфигурации.
Не используйте значок как признак безопасности или доступности действия.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Добавить действующие +1 и Вернуть 3 в контекстное меню своего поля
Каждый пункт имеет собственное оповещение. Доступность и пометка вычисляются заново при каждом открытии меню, а обработчик повторно проверяет ограничение.
Где и как запускать
Полный модуль своей управляемой формы. Только локальные количество и сумма, собственное контекстное меню поля ввода.
Подготовка
В отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой формой. Вставьте весь модуль одного урока и назначьте событию ПриСозданииНаСервере приведённую процедуру.
Код сам добавляет числовое поле количества и надпись суммы. События ПриИзменении и ОбработкаФормированияКоманд назначаются полю программно. Не добавляйте одноимённые реквизиты и элементы вручную.
Откройте форму на настольном тонком или толстом клиенте 8.5.1.1343 и щёлкните правой кнопкой по полю количества. Только своя Книга: 3 шт. по 250, сумма 750.
Событие ОбработкаФормированияКоманд имеет параметры ПараметрыКоманд, Команды — без дополнительного Элемент. Процедура собственного оповещения имеет один параметр ДополнительныеПараметры и должна быть Экспорт.
Для второго урока добавьте в свою конфигурацию общую картинку УчебныйМаркер из lesson-assets/owned-book-marker-32.png. Для остальных уроков этот ресурс не нужен.
Никакие товары или документы базы не изменяются. Фактическое меню и вид иконки нужно проверить в вашей активной теме; эти BSL-модули не исполнялись в 1С автоматически.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Реквизиты = Новый Массив;
Реквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число")));
Реквизиты.Добавить(Новый РеквизитФормы("Сумма", Новый ОписаниеТипов("Число")));
ЭтаФорма.ИзменитьРеквизиты(Реквизиты);
Количество = 3;
Сумма = Количество * 250;
Поле = Элементы.Добавить("УчебноеКоличество", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Количество";
Поле.Заголовок = "Книга: количество 0…5";
Поле.УстановитьДействие("ПриИзменении", "КоличествоИзменено");
Поле.УстановитьДействие("ОбработкаФормированияКоманд", "СформироватьУчебноеМеню");
Итог = Элементы.Добавить("УчебнаяСумма", Тип("ПолеФормы"));
Итог.Вид = ВидПоляФормы.ПолеНадписи;
Итог.ПутьКДанным = "Сумма";
Итог.Заголовок = "Сумма при цене 250";
КонецПроцедуры
&НаКлиенте
Процедура КоличествоИзменено(Элемент)
Если ТипЗнч(Количество) <> Тип("Число") Тогда
Количество = 3;
ИначеЕсли Количество < 0 ИЛИ Количество > 5 ИЛИ Количество <> Цел(Количество) Тогда
Количество = 3;
Сообщить("В учебном опыте нужны целые количества 0…5; восстановлены 3");
КонецЕсли;
Сумма = Количество * 250;
КонецПроцедуры
&НаКлиенте
Процедура УчебнаяКомандаВыбрана(ДополнительныеПараметры) Экспорт
Если ТипЗнч(ДополнительныеПараметры) <> Тип("Строка") Тогда
ВызватьИсключение "Ожидается собственный строковый код действия";
КонецЕсли;
Если ДополнительныеПараметры = "Увеличить" Тогда
Если ТипЗнч(Количество) <> Тип("Число") Тогда
ВызватьИсключение "Количество должно быть числом";
КонецЕсли;
Если Количество < 0 ИЛИ Количество >= 5 ИЛИ Количество <> Цел(Количество) Тогда
Сообщить("Увеличение отклонено: нужен целый остаток 0…4 в собственной форме");
Возврат;
КонецЕсли;
Количество = Количество + 1;
ИначеЕсли ДополнительныеПараметры = "Вернуть" Тогда
Количество = 3;
Иначе
ВызватьИсключение "Неизвестное учебное действие";
КонецЕсли;
Сумма = Количество * 250;
Сообщить("Своя Книга: " + Строка(Количество) + ", сумма " + Строка(Сумма));
КонецПроцедуры
&НаКлиенте
Процедура СформироватьУчебноеМеню(ПараметрыКоманд, Команды)
Оповещение = Новый ОписаниеОповещения("УчебнаяКомандаВыбрана", ЭтаФорма, "Увеличить");
Увеличить = Новый ОписаниеКомандыПоляВвода;
Увеличить.Команда = Оповещение;
Увеличить.Представление = "+1 Книга; сейчас " + Строка(Количество);
Увеличить.Доступность = Количество < 5;
Увеличить.Пометка = Ложь;
Увеличить.Картинка = Новый Картинка;
Команды.Добавить(Увеличить);
Вернуть = Новый ОписаниеКомандыПоляВвода(Новый ОписаниеОповещения("УчебнаяКомандаВыбрана", ЭтаФорма, "Вернуть"), "Вернуть количество 3");
Вернуть.Доступность = Количество <> 3;
Вернуть.Пометка = Количество = 3;
Команды.Добавить(Вернуть);
Сообщить(ТипЗнч(Увеличить.Команда) = Тип("ОписаниеОповещения"));
Сообщить(Увеличить.Доступность = (Количество < 5));
Сообщить(Вернуть.Пометка = (Количество = 3));
Сообщить("Фактический источник нажатия: " + Строка(ПараметрыКоманд.Источник));
Сообщить("Идентификатор множественного значения: " + Строка(ПараметрыКоманд.Идентификатор));
КонецПроцедурыРазбор по шагам
При создании формы добавить свои реквизиты и поле ввода; назначить точное имя события ОбработкаФормированияКоманд.
При открытии меню не очищать переданный массив: стандартные команды сохранены, свои пункты добавлены в конец.
Первый пункт задаётся через свойства нового описания, второй — конструктором с оповещением и представлением.
Нажать +1 дважды: 3/750→4/1000→5/1250. При следующем открытии пункт +1 недоступен; Вернуть 3 возвращает 3/750.
При 3 пункт Вернуть помечен и недоступен. В обработчике ограничения проверяются снова, независимо от внешнего вида меню.
Прочитать реальные readonly Источник и Идентификатор, не угадывать их значения и не создавать ПараметрыФормированияКомандПоляВвода вручную.
Как проверить результат
При каждом открытии меню три булевые проверки Истина; источник и идентификатор выводятся фактически.
Собственные команды дают 4/1000, 5/1250 и возврат 3/750; ввод 10 или дробного количества восстанавливает 3/750.
Ожидаемый результат
Есть полный действующий учебный цикл меню с перерасчётом суммы и корректными сигнатурами обоих обработчиков.
На что обратить внимание
Доступность — состояние интерфейса, не защита от вызова обработчика: проверка лимита есть и в нём.
Формирование меню получает два аргумента, оповещение выбранной команды — один, а ПриИзменении — Элемент.
Пометка не изменяет значение количества сама по себе.
Не изменяйте readonly Источник и Идентификатор.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.