Задача:
В строке "Лот ..12345... Новая облицовка" удалить число и все что перед ним.
Задача слегка расплывчата, т.к. первая реализация столкнулась с тем, что первое число может быть и не в начале и не подпадать под определение. Поэтому решил сделать так:
В строке "Лот ..12345... Новая облицовка" удалить число и все что перед ним.
Задача слегка расплывчата, т.к. первая реализация столкнулась с тем, что первое число может быть и не в начале и не подпадать под определение. Поэтому решил сделать так:
- Функция имеет два параметра: строка и длина предполагаемого числа
- Функция ищет первое вхождение числа в обрезанной строке
- Если число найдено, то ищет первое вхождение буквы после первого числа в обрезанной строке
- Обрезает строку
- Проверяет наличие в начале строки не букв (пробелы, точки, запятые и т.д.)
- Возвращает новую строку
Писалось под БП2.0, поэтому не использовалась функция СтрНайти()
Функция ОбработатьСтроку(СтрокаПоиска, ДлинаЧисла=10)
МассивСимволов="абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
НомерСимвола=1;
СтрокаПоискаОбрезанная=Лев(СтрокаПоиска,ДлинаЧисла);
НовоеЗначение=Неопределено;
ПервоеЧислоНайдено=Ложь;
ПервоеНеЧислоНайдено=Ложь;
Пока НомерСимвола<>ДлинаЧисла Цикл
СимволСтроки=Сред(СтрокаПоискаОбрезанная,НомерСимвола,1);
Для Цифры=0 По 9 Цикл
ВхождениеЧисла=Найти(СимволСтроки,Цифры);
Если ВхождениеЧисла>0 И НЕ ПервоеЧислоНайдено Тогда
ПервоеЧислоНайдено=Истина;
Прервать;
ИначеЕсли ВхождениеЧисла=0 И ПервоеЧислоНайдено Тогда
ПервоеНеЧислоНайдено=Истина;
Прервать
КонецЕсли;
КонецЦикла;
Если ПервоеНеЧислоНайдено Тогда
Прервать;
Иначе
НомерСимвола=НомерСимвола+1;
КонецЕсли;
КонецЦикла;
Если ПервоеНеЧислоНайдено Тогда
НовоеЗначение=Прав(СтрокаПоиска,СтрДлина(СтрокаПоиска)-НомерСимвола);
Иначе
Возврат(СтрокаПоиска);
КонецЕсли;
ЭтоНеБуква=Истина;
Каунт=1;
Пока ЭтоНеБуква Цикл
Если Найти(НРег(МассивСимволов), сред(НРег(НовоеЗначение),Каунт,1))=0 Тогда
Каунт=Каунт+1;
Иначе
ЭтоНеБуква=Ложь;
КонецЕсли;
КонецЦикла;
Если Каунт<>1 Тогда
НовоеЗначение=Прав(НовоеЗначение,СтрДлина(НовоеЗначение)-(Каунт-1));
КонецЕсли;
Возврат(НовоеЗначение);
КонецФункции
И применяем к полному наименованию справочника "номенклатура"
Процедура ВыполнитьСопоставление()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ЭлементСправочника=ВыборкаДетальныеЗаписи.Ссылка;
НовоеНаименование=ОбработатьСтроку(ЭлементСправочника.Наименование);
Если НовоеНаименование<>ЭлементСправочника.НаименованиеПолное Тогда
ЭлементОбъект=ЭлементСправочника.ПолучитьОбъект();
ЭлементОбъект.НаименованиеПолное=НовоеНаименование;
//Справочники.Номенклатура.СоздатьЭлемент().Записать();
Попытка
ЭлементОбъект.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Сообщить(""+ЭлементОбъект.Код+" - "+НовоеНаименование+" +++ "+Лев(ЭлементСправочника.Наименование,10));
КонецЕсли;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
Комментариев нет:
Отправить комментарий