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

25.07.24

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

    //    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 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    218614    1196    413    

1058

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

14400 руб.

20.08.2024    44095    240    123    

224

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    27765    73    30    

101

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

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

9500 руб.

17.05.2024    39554    143    57    

181

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

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

16000 руб.

10.11.2023    19621    76    39    

92

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    10453    16    7    

27

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 руб.

22.11.2024    2634    2    0    

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