Имя: Пароль:
1C
Жизнь прекрасна
Замена в справочнике
0 Масянька
 
22.08.12
13:15
День добрый!

Прошу помощи:

Спр = СоздатьОбъект("Справочник.Номенклатура");

Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
   Если УчетГруппы = 1 Тогда
       Если Спр.ПринадлежитГруппе(мГруппа) = 1 Тогда
           СтрокаПоиска = Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрЛП(ЧтоИщем))));
       Иначе
           СтрокаПоиска = 0;
       КонецЕсли;
   Иначе
       СтрокаПоиска = Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрЛП(ЧтоИщем))));
   КонецЕсли;
   Если СтрокаПоиска > 0 Тогда
       
       // подстроку поиска надобно преобразовать
       СтрокаПоиска = Нрег(СокрЛП(ЧтоИщем));
       
       // подстроку замены надобно преобразовать
       СтрокаЗамены = СокрЛП(НаЧтоМеняем);
       
       мПоле = Спр.ПолучитьАтрибут(РабочийРеквизит);
       мНовоеПоле = СтрЗаменить(мПоле, СтрокаПоиска, СтрокаЗамены);
       Спр.УстановитьАтрибут(РабочийРеквизит, мНовоеПоле);
       Спр.Записать();
       
   КонецЕсли;
КонецЦикла;

Должно искать "Что ищем" (ищет) и менять "НаЧтоМеняем" (НЕ МЕНЯЕТ).
Где косяк?
Спасибо.
1 Капитан О
 
22.08.12
13:16
СтрЗаменить(НРег(мПоле)), не?
2 PuhUfa
 
22.08.12
13:24
Реквизит "РабочийРеквизит" тип строка?
3 Масянька
 
22.08.12
13:26
(2) Да.
4 PuhUfa
 
22.08.12
13:30
А зачем тогда конструкция: Строка(Спр.ПолучитьАтрибут(РабочийРеквизит) ?
5 Масянька
 
22.08.12
13:32
(4) А что, не нужна?
6 PuhUfa
 
22.08.12
13:34
(5) ну преобразование строки в строку ненужное телодвижение которое и навело на мысль, что реквизит справочника в котором происходит замена ни раз не тип Строка.
7 Ёпрст
 
22.08.12
13:37
мНовоеПоле = СтрЗаменить(нрег(мПоле), СтрокаПоиска, СтрокаЗамены);
8 Масянька
 
22.08.12
13:39
(7) Ты - ГЕНИЙ! Только объясни, почему НРЕГ?
9 PuhUfa
 
22.08.12
13:40
(8) потому что у тебя
СтрокаПоиска = Нрег(СокрЛП(ЧтоИщем));
10 Ёпрст
 
22.08.12
13:42
(8) ответ был еще в (1)..
а так, ты же сама ишешь строку в строке вот здесь
Найти(Нрег(Строка(Спр.ПолучитьАтрибут(РабочийРеквизит))), Нрег(Строка(СокрЛП(ЧтоИщем))));

приводя всё к Нрег.. а потом пытаешься без приведения к нижнему регистру сделать СтрЗаменить..
11 Ёпрст
 
22.08.12
13:43
естественно, ничего не меняет, ибо такую подстроку (не приведенную) не находит
12 Масянька
 
22.08.12
13:44
Не, не пойдет. Сохраняет всю строку в нижнем регистре.
Нужно в строке найти нужный кусок (например, Laser Jet или laser jet) и заменить (например, LaserJet). То есть при поиске - регистр не учитывать, а при замене - учитывать.
13 Масянька
 
22.08.12
13:45
То бишь поиск - только по полному соответствию?
Laser Jet и laser jet - надо искать по разному?
14 Ёпрст
 
22.08.12
13:48
(12) :)

самое простое, через сред, склеить из 3-х кусков
15 Zmich
 
22.08.12
13:48
Как вариант, запомнить номер позиции, где найдена нужная строка и заменить, используя Лев, Прав и Сред.
16 Масянька
 
22.08.12
13:49
(14) Говорю же, ГЕНИЙ!
Всем спасибо!
Независимо от того, куда вы едете — это в гору и против ветра!