Уведомление, остаток символов в реквизите

1. Satoshi_Nakamoto 16.08.21 12:54 Сейчас в теме
Доброго времени суток.

Input: У нас есть реквизит с типом данных строка, с 150 символов(может быть и неограниченным, тогда задача меняется сколько символов в данный момент)
Условия: Пользователь вводит символы например 44, алгоритм считает 150-44=106(пробелы символами не считать!)
Output: Сообщение осталось 106 символов

Вопрос как это сделать(можно пожалуйста скриншотами дополнять свою мысль, спасибо)?

Я знаю, что есть функции строк СтрДлина(), СокрЛ() и т.п., вы помогите мне написать код 0_О
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lefthander 16.08.21 13:06 Сейчас в теме
(1)СтрДлина (StrLen)
Синтаксис:
СтрДлина(<Строка>) получает количество символов в строке.
3. alxarz 32 16.08.21 13:12 Сейчас в теме
(1) СтрЗаменить(исхСтрока," ",""); ну и СтрДлина(исхстрока)
4. Satoshi_Nakamoto 16.08.21 13:40 Сейчас в теме
(3)
&НаКлиенте
Процедура ОписаниеПриИзменении(Элемент)
Сч = 150;
ДлинаСтроки = СтрДлина(Объект.Реквизит); //Узнаем длину строки
Пока Сч <= ДлинаСтроки Цикл //повторяем цикл
Сообщить(Строка(ДлинаСтроки));
КонецЦикла
КонецПроцедуры
5. Satoshi_Nakamoto 16.08.21 13:40 Сейчас в теме
(4)Не получается, сообщения не выводится :( У реквизита тип строка 150 символов)
6. Octopus 338 16.08.21 13:50 Сейчас в теме
(5) Если СтрДлина(Объект.Реквизит) всегда возвращает 150, то надо СтрДлина(СтрЗаменить(Объект.Реквизит," ",""))
Satoshi_Nakamoto; +1 Ответить
7. Satoshi_Nakamoto 16.08.21 13:55 Сейчас в теме
(6)Не получается, сообщения не выводится :( У реквизита тип строка 150 символов)
8. Satoshi_Nakamoto 16.08.21 14:57 Сейчас в теме
(4)Он вообще не записывает(Он записывает, но как только провожу или записываю документ, данные исчезают, не сохраняются) ПриИзменении, ПередЗаписью, ПослеЗаписи, ПередПечатью, событий всего 4 у реквизита. Может данные как-то сохранить или обновить?
9. FatPanzer 16.08.21 14:59 Сейчас в теме
(8) А что и куда он должен записывать?
10. M_A_D 184 16.08.21 15:21 Сейчас в теме
(8) вам писали вот про такой вариант...

Но, нужно учитывать, что работать он будет только при условии, что данные ввели и сняли выделение с поля ввода.
Динамически это работать не будет.

Единственное, цикл не подойдет, т.к. процедура зациклится. Лучше, делайте через условия.
Прикрепленные файлы:
ПроверкаОсталосьСимволов.epf
12. Satoshi_Nakamoto 17.08.21 06:23 Сейчас в теме
(11)
Динамически это работать не будет


Я хочу функцию как у word-а, вот
Прикрепленные файлы:
11. spacecraft 16.08.21 15:38 Сейчас в теме
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ВывестиСообщение(СтрДлина(СокрЛП(ВводимыеДанные)));
	Элементы.ВводимыеДанные.ОбновитьТекстРедактирования();
КонецПроцедуры
&НаКлиенте
Процедура ВводимыеДанныеИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
	ВывестиСообщение(СтрДлина(СокрЛП(Текст)));
КонецПроцедуры

&НаКлиенте
Процедура ВывестиСообщение(ДлинаТекста)
	Длина = 150;
	Результат = Длина - ДлинаТекста;
	Элементы.ДекорацияВыводСообщения.Заголовок = СтрШаблон("Сообщение осталось %1 символов", Результат);
КонецПроцедуры
Показать

На форму добавить декарацию "ДекорацияВыводСообщения". ( Вместо декорации можно использовать строковый реквизит формы)
Свойство поля ввода "ОбновлениеТекстаРедактирования" установить в "Не использовать".
Прикрепленные файлы:
ТестВводаСимволов.epf
13. Satoshi_Nakamoto 17.08.21 06:27 Сейчас в теме
(11)Уоу круто, это уже близко.
14. Satoshi_Nakamoto 17.08.21 06:48 Сейчас в теме
Почему-то у вас в обработчике есть событие ИзменениеТекстаРедактирования, а у меня в конфигурации документа нет(раньше этого не замечал), там 4 события. Я могу добавлять события в ручную?
Прикрепленные файлы:
15. FatPanzer 17.08.21 07:13 Сейчас в теме
(14) Потому что это событие поля ввода, а не поля текстового документа.
Satoshi_Nakamoto; +1 Ответить
16. Satoshi_Nakamoto 17.08.21 07:56 Сейчас в теме
17. Ivanov_OM 38 17.08.21 09:31 Сейчас в теме
Для поля ввода устанавливаешь следующие свойства.
"ОбновлениеТекстаРедактирования" - "НеИспользовать.
На форму вводишь Реквизит с типом "Строка"., В моем случае это "ОставшиесяСимволы".
Для Текстового поля создаешь событие "ИзменениеТекстаРедактирования". Выбираешь НаКлиенте
Создастся процедура:
&НаКлиенте
Процедура ТекстовоеПолеИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОсталосьСимволов = 300 - СтрДлина(СокрЛП(Текст));
	ЭтаФорма.ОставшиесяСимволы = "Осталось символов: " + ОсталосьСимволов;
КонецПроцедуры

Теперь при изменении текстового поля динамически будет показываться в строке "Оставшиеся символы" количество оставшихся символов. В моем случае длина текстового поля = 300. Поэтому я и отнимаю от 300.
Прикрепленные файлы:
Satoshi_Nakamoto; +1 Ответить
18. Satoshi_Nakamoto 17.08.21 09:33 Сейчас в теме
(17)Зря вы убрали те картинки.
19. Ivanov_OM 38 17.08.21 09:34 Сейчас в теме
(18) Случайно, восстановил. Все работает динамически.
Satoshi_Nakamoto; +1 Ответить
20. spacecraft 17.08.21 09:36 Сейчас в теме
(17) чем отличается от (11)? Кроме того, что не будет отображать сохраненные данные при открытии?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот