Имя: Пароль:
1C
1С v8
Какую маску задать, чтоб пробелы не вводить? Или есть другой способ?
0 Антиквар
 
08.02.12
12:22
Всем привет!
Пользователи копируют из одной программы коды и вставляют их в 1С в поле ввода. Но нужно, чтобы при этом пробелы из вставляемой строки удалялись.
ПриИзменении() не подходит, т.к. в этом случае пробелы удалятся только после ввода, а поскольку само поле ввода ограниченной фиксированной длины, то из-за пробелов вводимая строка обрезается.
Выход вижу в наложении маски. Если маску указать "9999", то при копировании например строки "123 45" пробел благополучно удаляется ещё до ввода в поле ввода и мы получаем "12345". Но в строке могут быть и буквы. И вот аткой маски не нашел. По описанию подходит маска "N", но почему то она позволяет ввести пробелы.
1 kosts
 
08.02.12
12:25
(0) Есть событие "окончание ввода текста", оно подойдет
2 Антиквар
 
08.02.12
12:31
(1) Могу конечно попробовать, но оно "Вызывается после ввода текста при сходе с элемента управления"
А при вводе последние символы уже обрежутся. Например поле ввода фиксированной длины 5 символов. Мы копируем в него строку "123 45", в итоге на выходе получаем "123 4", и там уже бестолку пробелы убирать
3 del123
 
08.02.12
12:36
Как вариант сохранять в поле с бОльшей длинной и при изменении записывать куда надо после удаления лишних пробелов
4 FIXXXL
 
08.02.12
12:38
Поле кода сделай недоступным, поле ввода - просто на форме, при изменении поля ввода пиши-формать в код как угодно
5 kosts
 
08.02.12
12:41
(2) Вариант - своя кнопка вставить, берешь из буфера и как нужно так и вставляешь...
6 kosts
 
08.02.12
12:43
+ к (5) Если вставляешь в табличную часть, то вообще замечательно можно вставить из Excel сразу много строк...
7 Stim
 
08.02.12
12:45
все просто - при вводе нового элемента вместо поля код - поле ввода. тип строка, длина 100. после изменения - обработка и перенос в реквизит КОД.

Но лучше все же автоматизировать процесс и выгружать из сторонней программы в автоматическом режиме.
8 Антиквар
 
08.02.12
13:03
(3) так наверное и придется делать. Потому как расширить поле ввода не могу, поскольку поле ввода - это реквизит регистра, который в нужном отборе прямо на форме для редактирования.
(4) как я написал уже выше, редактируется сам регистр, т.е. в таб.поле придется добавить колонку дял ввода.
(7) из сторонней программы будет выгружаться, но когда ещё... там нет выгрузок, свой формат данных, вобщем другая история :)
9 Антиквар
 
08.02.12
13:04
ну т.е. маски подходящей нет, так что ли ? :)
чтобы не только цифры, но и буквы можно было писать, но кроме пробелов
10 kosts
 
08.02.12
13:19
Сделай кнопку "вставить из буфера" рядом с реквизитом.

процедура Вставить()

Попытка
   ЭлементыФормы.Добавить(Тип("ПолеHTMLДокумента"), "ПолеHTMLДокумента", Ложь);
Исключение
КонецПопытки;
Окно = ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow;
ТвоеЗначение = СтрЗаменить(Окно.clipboardData.getData("Text"), " ", "");

конецпроцедуры

и все...
11 Антиквар
 
08.02.12
13:32
(10) не понял, слишком умно :) Этот код для вставки из HTML-документа?
а если копирование будет из ворда, или в моем случае чаще всего из сторонней программы, то какой код писать... Для каждой программы, из которой копируем, свой код получается?
12 kosts
 
08.02.12
13:40
(11) Это типичная для 1С вставка из буфера обмена.
13 Антиквар
 
08.02.12
17:28
(12) никогда не делал такое.
Дак программный код зависит от того, откуда копируешь, или не важно, главное чтоб в буфере обмена что-то было?
Просто по Вашему коду вроде как привязка к источнику идет, откуда копируется.
14 kosts
 
08.02.12
18:47
(13) Это вставка из буфера обмена, того который в виндовс, тот в который попадает текст, если его скопировать в ворде или блокноте. Если в коде что-то не понятно, не думай, используй как есть, это рабочий код. Просто у 1С нет своего метода вставки из буфера, по этому такие хм извращения, через поле HTML...
Основная теорема систематики: Новые системы плодят новые проблемы.