ОписаниеКомандыПоляВвода.По умолчанию

Конструкторы

Синтаксис и применение ОписаниеКомандыПоляВвода.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.

Синтаксис

Новый ОписаниеКомандыПоляВвода(<Команда>, <Представление>)
Полное описание, параметры и ограничения

ОписаниеКомандыПоляВвода.По умолчанию

ОписаниеКомандыПоляВвода (InputFieldCommandDescription)

По умолчанию

Доступен, начиная с версии 8.3.23.

Синтаксис:
Новый ОписаниеКомандыПоляВвода(<Команда>, <Представление>)
Параметры:

<Команда> (необязательный)
Тип: СтандартнаяКомандаПоляВвода, ОписаниеОповещения, Массив, Неопределено.
Содержит описание команды:
СтандартнаяКомандаПоляВвода – стандартная команда;

ОписаниеОповещения – процедура, которая будет вызвана при выборе пункта меню. Процедура должна содержать следующие параметры:
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения;

Массив – задает подменю. Массив может содержать элементы обозначенных выше типов;

Неопределено – разделитель;

Любой другой тип - пункт меню не отображается.

Значение по умолчанию: Неопределено.

<Представление> (необязательный)
Тип: Строка.
Текст команды.
Значение по умолчанию: Неопределено.
Использование в версии:

Доступен, начиная с версии 8.3.23.

Описание изменено в версии 8.3.24.

Методическая информация

Практические примеры

Добавить собственную иконку к настоящей команде и обновлять её подпись

Картинка и Представление относятся к своему описанию команды с оповещением. Иконка не заменяет действие и не меняет сумму.

Где и как запускать

Полный модуль своей управляемой формы. Только локальные количество и сумма, собственное контекстное меню поля ввода.

Подготовка

  1. В отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой формой. Вставьте весь модуль одного урока и назначьте событию ПриСозданииНаСервере приведённую процедуру.

  2. Код сам добавляет числовое поле количества и надпись суммы. События ПриИзменении и ОбработкаФормированияКоманд назначаются полю программно. Не добавляйте одноимённые реквизиты и элементы вручную.

  3. Откройте форму на настольном тонком или толстом клиенте 8.5.1.1343 и щёлкните правой кнопкой по полю количества. Только своя Книга: 3 шт. по 250, сумма 750.

  4. Событие ОбработкаФормированияКоманд имеет параметры ПараметрыКоманд, Команды — без дополнительного Элемент. Процедура собственного оповещения имеет один параметр ДополнительныеПараметры и должна быть Экспорт.

  5. Для второго урока добавьте в свою конфигурацию общую картинку УчебныйМаркер из lesson-assets/owned-book-marker-32.png. Для остальных уроков этот ресурс не нужен.

  6. Никакие товары или документы базы не изменяются. Фактическое меню и вид иконки нужно проверить в вашей активной теме; эти 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. Перед созданием своих элементов проверить наличие общей картинки УчебныйМаркер в собственной конфигурации.

  2. Добавить оба действующих пункта меню и заменить только картинку и подпись пункта +1.

  3. Открыть меню при 3 и увидеть предложение 3→4; выполнить команду, повторно открыть меню при 4 и увидеть 4→5.

  4. При 5 пункт по-прежнему недоступен независимо от картинки. Вернуть 3 возвращает исходные количество и сумму.

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

  1. Три сообщения Истина при открытии: тип картинки, текущая цифра в подписи и правильная сумма.

  2. Фактический вид собственной библиотечной иконки и подписи проверить в активной теме клиента.

Ожидаемый результат

Реальная команда с собственной картинкой и динамическим текстом, не декоративный пример чтения свойства.

На что обратить внимание

  1. Картинка не является обработчиком; действие находится в свойстве Команда.

  2. Ресурс должен принадлежать собственной учебной конфигурации.

  3. Не используйте значок как признак безопасности или доступности действия.

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

Добавить действующие +1 и Вернуть 3 в контекстное меню своего поля

Каждый пункт имеет собственное оповещение. Доступность и пометка вычисляются заново при каждом открытии меню, а обработчик повторно проверяет ограничение.

Где и как запускать

Полный модуль своей управляемой формы. Только локальные количество и сумма, собственное контекстное меню поля ввода.

Подготовка

  1. В отдельной конфигурации УчебнаяКонфигурацияСинтаксиса создайте новую внешнюю обработку с пустой управляемой формой. Вставьте весь модуль одного урока и назначьте событию ПриСозданииНаСервере приведённую процедуру.

  2. Код сам добавляет числовое поле количества и надпись суммы. События ПриИзменении и ОбработкаФормированияКоманд назначаются полю программно. Не добавляйте одноимённые реквизиты и элементы вручную.

  3. Откройте форму на настольном тонком или толстом клиенте 8.5.1.1343 и щёлкните правой кнопкой по полю количества. Только своя Книга: 3 шт. по 250, сумма 750.

  4. Событие ОбработкаФормированияКоманд имеет параметры ПараметрыКоманд, Команды — без дополнительного Элемент. Процедура собственного оповещения имеет один параметр ДополнительныеПараметры и должна быть Экспорт.

  5. Для второго урока добавьте в свою конфигурацию общую картинку УчебныйМаркер из lesson-assets/owned-book-marker-32.png. Для остальных уроков этот ресурс не нужен.

  6. Никакие товары или документы базы не изменяются. Фактическое меню и вид иконки нужно проверить в вашей активной теме; эти 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. При создании формы добавить свои реквизиты и поле ввода; назначить точное имя события ОбработкаФормированияКоманд.

  2. При открытии меню не очищать переданный массив: стандартные команды сохранены, свои пункты добавлены в конец.

  3. Первый пункт задаётся через свойства нового описания, второй — конструктором с оповещением и представлением.

  4. Нажать +1 дважды: 3/750→4/1000→5/1250. При следующем открытии пункт +1 недоступен; Вернуть 3 возвращает 3/750.

  5. При 3 пункт Вернуть помечен и недоступен. В обработчике ограничения проверяются снова, независимо от внешнего вида меню.

  6. Прочитать реальные readonly Источник и Идентификатор, не угадывать их значения и не создавать ПараметрыФормированияКомандПоляВвода вручную.

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

  1. При каждом открытии меню три булевые проверки Истина; источник и идентификатор выводятся фактически.

  2. Собственные команды дают 4/1000, 5/1250 и возврат 3/750; ввод 10 или дробного количества восстанавливает 3/750.

Ожидаемый результат

Есть полный действующий учебный цикл меню с перерасчётом суммы и корректными сигнатурами обоих обработчиков.

На что обратить внимание

  1. Доступность — состояние интерфейса, не защита от вызова обработчика: проверка лимита есть и в нём.

  2. Формирование меню получает два аргумента, оповещение выбранной команды — один, а ПриИзменении — Элемент.

  3. Пометка не изменяет значение количества сама по себе.

  4. Не изменяйте readonly Источник и Идентификатор.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.