Здравствуйте!
Стоит задача: убирать справа нули в поле ввода числового типа на форме элемента.
Можно ли это сделать с помощью формата?
УПП обычные формы.
Поле ввода число (длина-12, точность -3)
---
```1c
    Процедура ТестОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    Если Окр(ЭлементыФормы.Тест.Значение) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=0";
    ИначеЕсли Окр(ЭлементыФормы.Тест.Значение,1) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=1";
    ИначеЕсли Окр(ЭлементыФормы.Тест.Значение,2) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=2";
    КонецЕсли;
    КонецПроцедуры

    Процедура ТестАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
    Если ЭлементыФормы.Тест.Формат <> "ЧЦ=12; ЧДЦ=3" Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=3";
    КонецЕсли;
    КонецПроцедуры
```
---
Поле ввода число (длина-12, точность -3)

при таком раскладе простого решения не будет.
---
да мне бы хотя бы узнать это решение вообще возможно ли?? ведь поле ввода ЧИСЛОВОЕ! не строковое.. и подсунуть туда даже если обработаем значение вообще получится??! ибо формат 12,3.. т.е. один фиг выводиться будут 000
---
Ну, можно на форме поместить текстовое поле с маской ввода ###.###, к нему прикрутить обработку ввода текста и запись/отображение в нужный реквизит. Будет охрененно накрученный костыль.
---
доп поля нельзя.. не желательно. попробую щас через окончание ввода текста и СтандартнаяОбработка = ложь.. не знаю пока че получится. отпишусь
---
```1c
    СтрокаПроверки = "12000123000000";
    НомерПервойЦифры = СтрДлина(СтрокаПроверки);
    Для а = 1 По СтрДлина(СтрокаПроверки) Цикл
    КодСимвола = КодСимвола(Сред(СтрокаПроверки, НомерПервойЦифры, НомерПервойЦифры-1));
    Если КодСимвола = 48 Тогда
    СтрокаПроверки = ЛЕв(СтрокаПроверки, НомерПервойЦифры-1);
    Иначе
    Прервать;
    КонецЕсли;
    НомерПервойЦифры = НомерПервойЦифры - 1;
    КонецЦикла;
    Сообщить(Строкапроверки);
```
 Как вариант
---
ну так в числовое поле все равно запихнет число с форматом с 3мя знаками после запятой..
---
Ну да, потому что формат такой. Но отображается то оно без завершающих нулей, если формат не настраивать.
---
Тебе что, нужно выводить числа в тысячах чего-то там? Если да, дели на 1000 и все
---
смотри (10), не все так просто.
---
АА, оо...уууу :) Не помню, хоть убей, есть у обычных форм условное оформление или нет. Если есть, можно попробовать через него замутить. Суть идеи в том, чтобы брать числа после запятой проверяем, умножаем на 1000, проверяем на равенство 0. Если число равно нулю. значит в условном оформлении ставим формат число 12,0. Если не равно нулю, делим на 10, проверяем, поделилось без остатка или нет, если нет, то формат ставим 12,3. Если остатка от деления нету, делим еще раз на 10, опять проверяем, есть ли остаток от деления. Если остатка нет, значит формат 12,1, если есть, формат 12,2. Ну и все это вешаем на процедуру приИзменении. Ну, я бы как-то так попробовал.
---
А ты спроси директора - зачем это надо ему?
---
Поле ввода число (длина-12, точность -3)
в любом случае Формат и Формат редактирования - надо убрать все флаги, тогда автоматом будет:
123,230 - 123,23
123,200 - 123,2
123,000 - 123

а если прям вот так надо длина 12 и точность 3 - то уже после ввода программно проверять корректность ;)
---
а это как? у реквизита же тип стоит "Число", длина - 12, точность - 3
---
конфа на поддержке? разблокировать нельзя?
---
В формате убрать галочку "Выводить лидирующие нули" ?
---
ему справа надо убрать. Тут через формат не получится.

только строчку посимвольно обрабатывать.
---
это для строкового типа! для числового типа не прокатит. и мне надо чтобы наоборот не выводились!
---
Точно справа? Там вроде как нули нужны :)
---
да.. точно.. к сожалению.. дир хочет чтобы было не 1,500 а просто 1,5
---
Тогда в формате поставьте точность 1 ? или он хочет
1,500 -> 1,5
1,550 -> 1,55
---
да -да! именно это и хочет
1,500 -> 1,5
1,550 -> 1,55
при этом строковый тип делать не хочется!
---
он не наркоман, часом?
---
Начальник может быть не прав, но он всегда начальник :)

1. Директор всегда прав.
2. Если директор не прав, смотри 1 :)
---
Сообщение было скрыто модератором.
---
там только для этого поля поставить тип строка и программно формат для каждой ячейки устанавливать... но это костыль, никому не нужный.

похоже, кого-то из-за некорректной постановки задачи премии лишат... :)
---
похоже, кого-то из-за некорректной постановки задачи премии лишатНее, это саботаж внедрения. "Фигня ваша адинэс, даже ексель круче умеет"
---
кстати, да. Можно через activex вывести лист excel на форму и в нём данные колотить :)
---
```1c
    Процедура ТестОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    Если Окр(ЭлементыФормы.Тест.Значение) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=0";
    ИначеЕсли Окр(ЭлементыФормы.Тест.Значение,1) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=1";
    ИначеЕсли Окр(ЭлементыФормы.Тест.Значение,2) = ЭлементыФормы.Тест.Значение Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=2";
    КонецЕсли;
    КонецПроцедуры

    Процедура ТестАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
    Если ЭлементыФормы.Тест.Формат <> "ЧЦ=12; ЧДЦ=3" Тогда
    ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=3";
    КонецЕсли;
    КонецПроцедуры
```
---
так и сделали. коллега подсказал! спасибо всем!
---
Можно слегка изменить

Процедура ТестОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Ч = 0;
Пока Окр(ЭлементыФормы.Тест.Значение, Ч) <> ЭлементыФормы.Тест.Значение Цикл
Ч = Ч + 1;
КонецЦикла;
ЭлементыФормы.Тест.Формат = "ЧЦ=12; ЧДЦ=" + Строка(Ч);
КонецПроцедуры
---
Если Реквизит Формы, тогда можно использовать свойство "ФиксДробнаяЧасть" = Ложь.

а вот с реквизитом объекта это не работает.

Может только у меня?
---
на управляемых формах проблему решил через формат используя ЧС.