Как убрать кнопку выбора (калькулятор) в ячейке табличного документа 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на управляемых формах 1С часто возникает задача создания компактных таблиц для быстрого ввода данных через ТабличныйДокумент. Одной из раздражающих особенностей платформы является автоматическое появление кнопки выбора (значка калькулятора) в ячейках с числовым типом данных. В узких колонках этот значок перекрывает само вводимое значение, что делает работу пользователя практически невозможной. Разберем подробно, почему это происходит и какими способами можно подавить отображение этой кнопки.

Почему появляется кнопка выбора?

Проанализируем поведение платформы 1С. Когда мы программно устанавливаем свойство ячейки СодержитЗначение = Истина и задаем ТипЗначения как Число с определенными квалификаторами (длина, точность), система автоматически определяет, что для редактирования этого поля лучше всего подходит стандартный числовой редактор. В управляемом приложении (особенно в интерфейсе «Такси») это подразумевает наличие кнопки вызова калькулятора.

Многие разработчики пытаются решить проблему через свойство ЭлементУправления, надеясь найти там знакомое по обычным формам свойство КнопкаВыбора. Однако на управляемых формах в контексте ячейки табличного документа это свойство часто ведет себя непредсказуемо или вовсе недоступно для прямой модификации, если элемент управления не был явно назначен.

Способ 1: Управление квалификаторами типа (Самый эффективный)

Рассмотрим наиболее простое и элегантное решение, которое было найдено опытным путем. Выяснилось, что платформа инициирует показ кнопки калькулятора только в том случае, если в описании типов четко заданы ограничения через КвалификаторыЧисла. Если же оставить тип «неопределенным» числом, кнопка не появится.

Посмотрим на пример кода, который вызывает появление кнопки:


// Этот код вызовет появление калькулятора
Квалификаторы = Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный);
Область.ТипЗначения = Новый ОписаниеТипов("Число", Квалификаторы);
Область.СодержитЗначение = Истина;

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


Область = ТабличныйДокумент.Область(ИндексСтроки, 3);
Область.СодержитЗначение = Истина;

// Устанавливаем чистый тип "Число" без квалификаторов
Область.ТипЗначения = Новый ОписаниеТипов("Число");

// Все ограничения накладываем через формат и формат редактирования
Область.Формат = "ЧЦ=11; ЧДЦ=2; ЧГ=0";
Область.ФорматРедактирования = "ЧЦ=11; ЧДЦ=2; ЧГ=0";

Область.Значение = Выборка.Количество;
Область.Защита = Ложь;

В этом случае платформа позволит пользователю вводить только числа, будет соблюдать точность в 2 знака, но при этом «решит», что дополнительная помощь в виде калькулятора здесь не требуется. Это происходит потому, что без явных квалификаторов поле ввода в ячейке считается «простым».

Способ 2: Использование свойства ФорматРедактирования

Проанализируем ситуацию подробнее. Иногда недостаточно просто изменить тип значения. Важно понимать разницу между свойствами Формат и ФорматРедактирования. Первый отвечает за то, как число выглядит, когда ячейка не активна. Второй — за маску ввода в момент, когда пользователь начал набирать текст.

Если вы установите ФорматРедактирования, платформа применит указанные правила (например, количество десятичных знаков) непосредственно к интерактивному полю ввода в ячейке. Часто сочетание пустого ОписаниеТипов("Число") и заполненного ФорматРедактирования является «золотым стандартом» для компактных таблиц.

Способ 3: Программное создание элемента управления

Если предыдущие методы не помогают (что случается на некоторых версиях платформы или при специфических настройках интерфейса), можно пойти по пути явного назначения элемента управления ячейке. Рассмотрим, как это сделать программно:


Область = ТабличныйДокумент.Область(ИндексСтроки, 3);
Область.СодержитЗначение = Истина;
Область.ТипЗначения = Новый ОписаниеТипов("Число");

// Явно устанавливаем элемент управления типа ПолеВвода
Область.УстановитьЭлементУправления(Тип("ПолеВвода"));

// Теперь мы можем обратиться к свойствам этого элемента
ЭУ = Область.ЭлементУправления;
ЭУ.КнопкаВыбора = Ложь;
ЭУ.КнопкаОчистки = Ложь;
ЭУ.РежимВыбораИзСписка = Ложь;

Важный момент: работа с объектом ЭлементУправления в табличном документе на управляемых формах имеет свои ограничения. Часто эти изменения корректно отрабатывают только на стороне сервера при начальном формировании документа. Попытка изменить эти свойства динамически на клиенте может не дать мгновенного результата без перерисовки формы.

Способ 4: Строковый тип с последующей конвертацией

В самых сложных случаях, когда калькулятор упорно не желает исчезать (например, в очень старых релизах 8.3 или при использовании составных типов данных), профессиональные разработчики применяют «обходной маневр».

  1. Устанавливаем для области ТипЗначения — Строка.
  2. Задаем ФорматРедактирования с маской для ввода только цифр.
  3. В обработчике события табличного документа ПриИзменении выполняем обратную конвертацию:

&НаСервере
Процедура ТабличноеПолеПриИзменении(Элемент, Область)
    ВведенноеЗначение = Область.Текст;
    // Удаляем лишние пробелы и преобразуем в число
    ЧисловоеЗначение = Число(СтрЗаменить(ВведенноеЗначение, Символы.НПП, ""));
    
    // Далее записываем значение в базу данных или реквизит
    ЗаписатьЗначениеВРегистр(ЧисловоеЗначение);
КонецПроцедуры

Для строкового типа платформа никогда не выводит кнопку выбора по умолчанию, если не включено свойство КнопкаСпискаВыбора. Это гарантирует стопроцентное отсутствие лишних элементов интерфейса в ячейке.

Выводы и рекомендации

Подводя итог, можно сказать, что наиболее правильным и стабильным решением для современных конфигураций 1С (ERP, УТ 11, БП 3.0) является отказ от использования квалификаторов числа в объекте ОписаниеТипов при программном заполнении ТабличногоДокумента.

Выясним основные правила для создания компактного ввода:

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

← На главную