Строку раскладываем согласно шаблону 1С 8.3

25.07.24

Разработка - Инструментарий разработчика

Разложить строку согласно форматной строке (шаблону). Пример процедуры - с возможностью самостоятельного расширения функционала.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
ПримерИспользованияформаьнойСтроки
.erf 17,64Kb
0
0
5 SM
Скачать Купить за 3 050 руб.

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

С помощью этого возврата - имеем возможность выделить нужные нам части из строки

В прикрепленной обработке реализован пример  определения принадлежности номенклатуры к определенной группе и вытаскивание данных о размерах. Обработка для тех, кому лень вытаскивать отсюда метод. При открытии обработки она сразу заполнится данными для теста.

В методе есть возможность использовать

    //    N - символ от 0..9,
    //# - любая последовательность чисел (0..9)
    //$ - любая последовательность кроме чисел (0..9)
    //Ю - любая последовательность русских букв
    //F - любая последовательность КРОМЕ русских букв (для поиска артикула)
    //Q - любая последовательность английских букв
    //* - любая последовательность символов
    //~ - любой символ кроме буквы (это числа и всякие =,- и прочее)
    
    // I - любой символ кроме числа (0..9)
    // &A - любой символ после &, с учётом регистра
    // ^A - любой символ после ^, без учётом регистра
    //? - любой символ
    //Y    - любая буква английская
    //Я  - любая буква русская
    //С - любая буква на русском или английском
    
    //ё  - русская буква в нижнем регистре
    //Ё    -    русская буква в верхнем регистре
    //z    -    латиница в нижнем регистре
    //Z    -    латиница в верхнем регистре

 

Пример форматной строки *#I#* для того, чтобы вычленить размеры в названии

"Двери стальные 1650x3610 мм СТ с.п. BYPR3102266701 от 23.06.2023 г., ОКРБ 007-2012 25.12.10.500"   

 

Метод вернет список значений, состоящий из

Двери стальные

 1650

x

3610

мм СТ с.п. BYPR3102266701 от 23.06.2023 г., ОКРБ 007-2012 25.12.10.500

а из него выделить размеры легко и просто.

 

Пример самого метода ниже

 Функция глСтрокаСоответствуетФорматнойСтроке(СтрПроверяемая,ФорматнаяСтрока,СпЗнСогласноФорматнойСтрокеВозвращаем = "",ПризнакУбиратьКрайниеПробелыВпроверяемойСтроке = 1,РазделительДробнойЧасти = "",РазделительТриад = "") Экспорт
	//2023.03.22
	Если ТипЗнч(СпЗнСогласноФорматнойСтрокеВозвращаем)<>Тип("СписокЗначений")
	Тогда СпЗнСогласноФорматнойСтрокеВозвращаем = Новый СписокЗначений;
	
	КонецЕсли;
	//форматная строка,
	//	N - символ от 0..9,
	//# - любая последовательность чисел (0..9)
	//$ - любая последовательность кроме чисел (0..9)
	//Ю - любая последовательность русских букв
	//F - любая последовательность КРОМЕ русских букв (для поиска артикула)
	//Q - любая последовательность английских букв
	//* - любая последовательность символов
	//~ - любой символ кроме буквы (это числа и всякие =,- и прочее)
	
	// I - любой символ кроме числа (0..9)
	// &A - любой символ после &, с учётом регистра
	// ^A - любой символ после ^, без учётом регистра
	//? - любой символ
	//Y	- любая буква английская
	//Я  - любая буква русская
	//С - любая буква на русском или английском
	
	//ё  - русская буква в нижнем регистре
	//Ё	-	русская буква в верхнем регистре
	//z	-	латиница в нижнем регистре
	//Z	-	латиница в верхнем регистре
	//расширять по мере необходимости
	
	Если (НЕ ЗначениеЗаполнено(СтрПроверяемая))	
	Тогда 
		Если (ФорматнаяСтрока = "*")ИЛИ
				 (НЕ ЗначениеЗаполнено(ФорматнаяСтрока))	
		Тогда Возврат 1;
		Иначе Возврат 0;
		КонецЕсли;
	КонецЕсли;
	
	СпЗнПроверяемыеКуски = Новый СписокЗначений;
	Стр = "";
	ТекущийКусокСтроки = "";
	НомерСимвола = 0;
	Пока НомерСимвола<СтрДлина(ФорматнаяСтрока)
	Цикл
		НомерСимвола=НомерСимвола+1;
		ПризнакНоваяЧасть = 0;
		Символ = Сред(ФорматнаяСтрока,НомерСимвола,1);
		Если Врег(Символ) = "N"// - служебный символ
		Тогда СпЗнПроверяемыеКуски.Добавить("N");
		ИначеЕсли Символ = "&"
		Тогда
			СпЗнПроверяемыеКуски.Добавить(Сред(ФорматнаяСтрока,НомерСимвола,2));
			НомерСимвола=НомерСимвола+1;
		ИначеЕсли Символ = "^"
		Тогда
			СпЗнПроверяемыеКуски.Добавить(Сред(ФорматнаяСтрока,НомерСимвола,2));
			НомерСимвола=НомерСимвола+1;			
		ИначеЕсли Символ = "?"
		Тогда СпЗнПроверяемыеКуски.Добавить("?");
		ИначеЕсли Врег(Символ) = "Y"
		Тогда СпЗнПроверяемыеКуски.Добавить("Y");
		ИначеЕсли Врег(Символ) = "Я"
		Тогда СпЗнПроверяемыеКуски.Добавить("Я");
		ИначеЕсли (Врег(Символ) = "C")ИЛИ
							(Врег(Символ) = "С")
		Тогда СпЗнПроверяемыеКуски.Добавить("C");
		ИначеЕсли (Символ = "z")ИЛИ
							(Символ = "Z")ИЛИ
							(Символ = "ё")ИЛИ
							(Символ = "Ё")
		Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
		ИначеЕсли Символ = "I"
		Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
		ИначеЕсли (Символ = "*")ИЛИ//последовательности символов
							(Символ = "#")ИЛИ
							(Символ = "Ю")ИЛИ
							(Символ = "F")ИЛИ
							(Символ = "~")ИЛИ
							(Символ = "Q")ИЛИ
							(Символ = "$")
		Тогда
			Если СпЗнПроверяемыеКуски.Количество()>0 
			Тогда
				Если СпЗнПроверяемыеКуски.Получить(СпЗнПроверяемыеКуски.Количество()-1).Значение <> Символ
				Тогда СпЗнПроверяемыеКуски.Добавить(Символ);
				КонецЕсли;     
			Иначе СпЗнПроверяемыеКуски.Добавить(Символ);    
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Если ПризнакУбиратьКрайниеПробелыВпроверяемойСтроке = 1
	Тогда СтрДляПроверки = СокрЛП(СтрПроверяемая);
	Иначе СтрДляПроверки = СтрПроверяемая;
	КонецЕсли;
	
	
	НомерСимвола = 1;
	Для НомерПроверяемогоКуска=1 По СпЗнПроверяемыеКуски.Количество()
	Цикл
		ПроверяемыйКусок = СпЗнПроверяемыеКуски.Получить(НомерПроверяемогоКуска-1).Значение;
		Если НЕ ЗначениеЗаполнено(СтрДляПроверки)
		Тогда
			Если (ПроверяемыйКусок="*")
			Тогда 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе Возврат 0;
			КонецЕсли;
		КонецЕсли;
		
		Если ПроверяемыйКусок="*"
		Тогда
			Если НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество()
			Тогда
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						//стрВернём = стрВернём + Лев(СтрДляПроверки,1);
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					Иначе 
						стрВернём = стрВернём + Лев(СтрДляПроверки,1);
						СтрДляПроверки = Сред(СтрДляПроверки,2);
					КонецЕсли;
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;
			
		ИначеЕсли ПроверяемыйКусок = "#"//любое число
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"#",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть чисто число
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					Если (Лев(СтрДляПроверки,1)>="0")И
					 		 (Лев(СтрДляПроверки,1)<="9")
					Тогда//относится к числу
							//стрВернём=стрВернём+Лев(СтрДляПроверки,1);
							//СтрДляПроверки = Сред(СтрДляПроверки,2);
					ИначеЕсли (Лев(СтрДляПроверки,1) = РазделительДробнойЧасти)И
										(СтрДлина(РазделительДробнойЧасти) = 1)//(ЗначениеЗаполнено(РазделительДробнойЧасти))
					Тогда
						Если Найти(стрВернём,РазделительДробнойЧасти)>0
						Тогда Прервать;//уже имеется разделитель - такого не может быть чтобы в числе было два разделителя дробной части
						Иначе //относится к числу
						КонецЕсли;
					ИначеЕсли (Лев(СтрДляПроверки,1) = РазделительТриад)И
							  (СтрДлина(РазделительТриад) = 1)			//(ЗначениеЗаполнено(РазделительТриад))
					Тогда	                
					Иначе Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;
			
		ИначеЕсли ПроверяемыйКусок = "Ю"//русские буквы - несколько
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
					Если (СимволДляПроверки<"А")ИЛИ
					 		 (СимволДляПроверки>"Я")
					Тогда Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;	
			
		ИначеЕсли ПроверяемыйКусок = "F"//любая последовательность КРОМЕ русских букв
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
					Если (СимволДляПроверки>="А")И
					 		 (СимволДляПроверки<="Я")
					Тогда Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;			
			
		ИначеЕсли ПроверяемыйКусок = "Q"//английские буквы - несколько
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"Ю",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
					Если (СимволДляПроверки<"A")ИЛИ
					 		 (СимволДляПроверки>"Z")
					Тогда Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;			
		ИначеЕсли ПроверяемыйКусок = "~"//символы кроме букв
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"~",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					СимволДляПроверки = Врег(Лев(СтрДляПроверки,1));//!!переводим в верхнгий регистр
					Если (СимволДляПроверки>="А")И
					 		 (СимволДляПроверки<="Я")
					Тогда Прервать;
					ИначеЕсли (СимволДляПроверки>="A")И
					 		 			(СимволДляПроверки<="Z")
					Тогда Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;	
		ИначеЕсли ПроверяемыйКусок = "$"//символы кроме чисел
		Тогда
			Если (НомерПроверяемогоКуска = СпЗнПроверяемыеКуски.Количество())И
					 (СпЗнПроверяемыеКуски.Количество()>1)
			Тогда
				Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,"~",,,РазделительДробнойЧасти,РазделительТриад) = 0//последний кусок должен быть русскими буквами
				Тогда Возврат 0;//если в последнем куске есть хотя бы один не символ
				КонецЕсли;
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(СтрДляПроверки,ПроверяемыйКусок);
				Возврат 1;
			Иначе 
				ФорматнаяСтрокаСледующая = "";
				Для П=НомерПроверяемогоКуска+1 По СпЗнПроверяемыеКуски.Количество() 
				Цикл ФорматнаяСтрокаСледующая=ФорматнаяСтрокаСледующая+СпЗнПроверяемыеКуски.Получить(П-1).Значение;
				КонецЦикла;
				
				стрВернём = "";
				Пока СтрДлина(СтрДляПроверки)>0
				Цикл
					СимволДляПроверки = Лев(СтрДляПроверки,1);
					Если (СимволДляПроверки>="0")И
					 		 (СимволДляПроверки<="9")
					Тогда Прервать;
					КонецЕсли;
					стрВернём=стрВернём+Лев(СтрДляПроверки,1);
					СтрДляПроверки = Сред(СтрДляПроверки,2);
					
				КонецЦикла;
				
				Пока СтрДлина(стрВернём)>0
				Цикл
					Если глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,,0,РазделительДробнойЧасти,РазделительТриад) = 1
					Тогда
						СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(стрВернём,ПроверяемыйКусок);
						глСтрокаСоответствуетФорматнойСтроке(СтрДляПроверки,ФорматнаяСтрокаСледующая,СпЗнСогласноФорматнойСтрокеВозвращаем,0,РазделительДробнойЧасти,РазделительТриад);
						Возврат 1;
					КонецЕсли;
					
					СтрДляПроверки = Прав(стрВернём,1)+СтрДляПроверки;
					стрВернём = Лев(стрВернём,СтрДлина(стрВернём)-1);
				КонецЦикла;
				
				Возврат 0;
			КонецЕсли;			
		ИначеЕсли ПроверяемыйКусок="N"
		Тогда
			Если (Лев(СтрДляПроверки,1)<"0")ИЛИ
					 (Лев(СтрДляПроверки,1)>"9")	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "I"
		Тогда
			Если (Лев(СтрДляПроверки,1)>="0")И
					 (Лев(СтрДляПроверки,1)<="9")	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "?"
		Тогда 
			СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
			СтрДляПроверки = Сред(СтрДляПроверки,2);
		ИначеЕсли ПроверяемыйКусок = "Y"
		Тогда
			Символ = Врег(Лев(СтрДляПроверки,1));
			Если (Символ<"A")ИЛИ
					 (Символ>"Z")	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "Я"
		Тогда
			Символ = Врег(Лев(СтрДляПроверки,1));
			Если (Символ<"А")ИЛИ
					 (Символ>"Я")	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "ё"
		Тогда
			Символ = КодСимвола(Лев(СтрДляПроверки,1));
			Если (Символ<КодСимвола("а"))ИЛИ
					 (Символ>КодСимвола("я"))	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "Ё"
		Тогда
			Символ = КодСимвола(Лев(СтрДляПроверки,1));
			Если (Символ<КодСимвола("А"))ИЛИ
					 (Символ>КодСимвола("Я"))	
			Тогда Возврат 0;
			Иначе
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "z"
		Тогда
			Символ = КодСимвола(Лев(СтрДляПроверки,1));
			Если (Символ<КодСимвола("a"))ИЛИ
					 (Символ>КодСимвола("z"))	
			Тогда Возврат 0;
			Иначе 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "Z"
		Тогда
			Символ = КодСимвола(Лев(СтрДляПроверки,1));
			Если (Символ<КодСимвола("A"))ИЛИ
					 (Символ>КодСимвола("Z"))	
			Тогда Возврат 0;
			Иначе
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			КонецЕсли;
		ИначеЕсли ПроверяемыйКусок = "C"
		Тогда
			Символ = Врег(Лев(СтрДляПроверки,1));
			Если ((Символ>="A")И
					  (Символ<="Z"))ИЛИ
					 ((Символ>="А")И
					  (Символ<="Я"))
			Тогда 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			Иначе Возврат 0;
			КонецЕсли;
		ИначеЕсли Лев(ПроверяемыйКусок,1) = "&"
		Тогда
			Символ = Лев(СтрДляПроверки,1);
			Если Символ = Сред(ПроверяемыйКусок,2,1)
			Тогда
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			Иначе Возврат 0;
			КонецЕсли;
		ИначеЕсли Лев(ПроверяемыйКусок,1) = "^"
		Тогда
			Символ = Врег(Лев(СтрДляПроверки,1));
			Если Символ = Врег(Сред(ПроверяемыйКусок,2,1))
			Тогда 
				СпЗнСогласноФорматнойСтрокеВозвращаем.Добавить(Лев(СтрДляПроверки,1),ПроверяемыйКусок);
				СтрДляПроверки = Сред(СтрДляПроверки,2);
			Иначе Возврат 0;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Если НЕ ЗначениеЗаполнено(СтрДляПроверки)
	Тогда Возврат 1;
	Иначе Возврат 0;
	КонецЕсли;
КонецФункции//глСтрокасоотвествуетФорматнойСтроке

Проверено на платформе 1С:Предприятие 8.3 (8.3.23.1997) Версия для разработчиков.

формат строка регулярные выражения части слова разложить выражение регулярное форматная шаблон шаблону текст выделить часть составляющие

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    146704    805    392    

822

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    13079    34    7    

67

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    17422    52    34    

98

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    13863    12    27    

36

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    8262    29    10    

53

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    183983    1118    0    

891

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    16349    5    25    

41

Инструментарий разработчика Чистка данных Свертка базы DevOps и автоматизация разработки Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

6900 руб.

20.08.2024    1665    3    0    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 786 25.07.24 13:08 Сейчас в теме
Лютый велосипед. Регулярки вам в помощь.
2. user707242_Gold_karas 15 26.07.24 12:49 Сейчас в теме
(1) Спасибо за помощь. Как с помощью регулярки вырвать определенные части из строки, у меня возвращается список значений в котором я знаю что где находится. Может есть такой пример на регулярке - буду премного благодарен.
3. SerVer1C 786 26.07.24 12:52 Сейчас в теме
(2) Регулярки за вас писать не буду, а вот консоль для тестирования регулярок посоветую: https://infostart.ru/1c/tools/1831997/
4. user707242_Gold_karas 15 26.07.24 20:15 Сейчас в теме
(3) Здорово, но без 100 грамм и спец курсов не разберёшься :)
5. user707242_Gold_karas 15 26.07.24 20:54 Сейчас в теме
(3) Здорово, но без 100 грамм и спец курсов не разберёшься :)
Оставьте свое сообщение