Устранение проблемы при работе с полем, которое ограничено маской ввода

08.08.12

Разработка - Универсальные функции

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

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

 

Например:

есть поле для ввода номера кредитной карточки с маской 9999-9999-9999-9999

Если у нас есть номер карты

1234123412341234 и мы его запишем в данное поле,

то в результате 1С покажет и самое ужасное, сохранит

1234-2341-3412-34, тем самым заменив некоторые символы нашего номера карты на разделители.

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

 

Функция ПрименитьМаску(Значение, Маска)
	// Назначение: Для начальной строки применить маску ввода, 
//данныя функция необходима в случае программного заполнения поля, которое вводится по маске
// так как 1С хранит информация вместе с значениями разделителей, которые присутвуют в маске
// при программном заполнении поля с заданной маской при начале редактирования данного поля 
//информация в ячейках, которые соответвуют разделителям теряется
	// Автор www2000
	// Тестирована: На маске 9999-9999-9999-9999
	Результат = "";           
	ПерЦиклаЗначения = 1;
	
	Для ПерЦикла = 1 По СтрДлина(Маска) Цикл
		ТекСимволМаски  = Сред(Маска, ПерЦикла, 1);
		Если ПерЦиклаЗначения > СтрДлина(Значение) Тогда
			ТекСимволЗначения  = " ";
		Иначе
			ТекСимволЗначения  = Сред(Значение, ПерЦиклаЗначения, 1);
		КонецЕсли;
		                            
		Если (ТекСимволМаски = "!") ИЛИ (ТекСимволМаски = "@") Тогда
			ТекСимволЗначения = Врег(ТекСимволЗначения);
		ИначеЕсли ТекСимволМаски = "9" Тогда     
			Если ЭтоЦифра(ТекСимволЗначения) = 0 Тогда
				Если ПерЦиклаЗначения <= СтрДлина(Значение) Тогда
					ПерЦикла = ПерЦикла - 1;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТекСимволМаски = "#" Тогда     
			Если (ЭтоЦифра(ТекСимволЗначения) = 0) И (ТекСимволЗначения <> "-")  И (ТекСимволЗначения <> "+")  
 И (ТекСимволЗначения <> " ")  Тогда
				Если ПерЦиклаЗначения <= СтрДлина(Значение) Тогда
					ПерЦикла = ПерЦикла - 1;
					ТекСимволЗначения = "";
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТекСимволМаски = "N" Тогда     
			Если (ЭтоЦифра(ТекСимволЗначения) = 0) И (ЭтоБуква(ТекСимволЗначения) = 0) Тогда
				Если ПерЦиклаЗначения <= СтрДлина(Значение) Тогда
					ПерЦикла = ПерЦикла - 1;
					ТекСимволЗначения = "";
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТекСимволМаски = "X" Тогда     
		Иначе
			ТекСимволЗначения = ТекСимволМаски; 
			ПерЦиклаЗначения = ПерЦиклаЗначения - 1;
		КонецЕсли;
		    
		Результат = Результат + ТекСимволЗначения;   
		ПерЦиклаЗначения = ПерЦиклаЗначения + 1;
	КонецЦикла;  
	
	Возврат Результат;
КонецФункции  
 

Применение

 
			МаскаНомераКарточки = Форма.НомерКарточки.Маска();
			НомерКарточки = ПрименитьМаску(НоыйНомерКарточки,МаскаНомераКарточки);  
 

Дополнительные функции

 

Функция ЭтоЦифра(С) Экспорт 
//Назначение: Проверяет, является ли символ цифрой 
//ДатаСоздания: 20080101 
//Автор: Fixin 
//Тестирована: Да 

   Возврат Мин(Найти("0123456789", С), 1);
КонецФункции  
Функция ЭтоРусскаяБуква(С) Экспорт 
//Назначение: Проверяет, является ли символ русской буквой 
//ДатаСоздания: 20080101 
//Автор: Fixin 
//Тестирована:
   Возврат Мин(Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ", ВРег(С)), 1);
КонецФункции 
 
Функция ЭтоЛатинскаяБуква(С)Экспорт 
//Назначение: Проверяет, является ли символ латинской буквой 
//ДатаСоздания: 20080101 
//Автор: Fixin 
//Тестирована:
Возврат Мин(Найти("ABCDEFGHIJKLMNOPQRSTUVWXYZ", ВРег(С)),1);
КонецФункции

Функция ЭтоБуква(С)Экспорт
//Назначение: Проверяет, является ли символ буквой
 //ДатаСоздания: 20080101
 //Автор: Fixin
 //Тестирована: Да
Возврат Мин(ЭтоРусскаяБуква(С)+ ЭтоЛатинскаяБуква(С),1);
КонецФункции 

См. также

Библиотека процедур и функций для технологической платформы "1С: Предприятие 7.7"

Универсальные функции Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    632    8    user706545_kseg1971    0    

4

1С 7.7 и новый 1С:Контрагент

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    1802    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

Универсальные функции Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4371    Zoltan_Black    11    

2

Установка принтера по умолчанию для 1С 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13259    4    alsen    3    

3

Формирование строки json в 1С: 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10046    malovandrey    1    

17

Как создать индикатор в 1С:Предприятии 7.7

Универсальные функции Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18658    2    HAMMER_59    6    

2
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. www2000 58 08.08.12 13:09 Сейчас в теме
Для поля, у которого установлена маска ввода, перед программной инициализацией необходимо начальное значение преобразовать к значению в соответствии с маской, иначе буду потеряны символы в местах разделителях. В данной публикации приведена функция, которая универсально выполняет данное действие.


Перейти к публикации

1. zarius 184 15.08.12 14:30 Сейчас в теме
А не проще в функциях ЭтоЦифра, ЭтоРусскаяБуква, ЭтоБуква воспользоваться кодом символа? Вроде как побыстрее должно быть...
2. www2000 58 15.08.12 15:13 Сейчас в теме
Оставьте свое сообщение