Сравнение строк

  • Автор темы LittleFairy
  • Дата начала
L

LittleFairy

#1
Здравствуйте!
1с 7.7 026
Имеется такой не сложный код:

Код:
СпрНом=СоздатьОбъект("Справочник.Номенклатура");
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент() = 1 Цикл	 
Если СпрНом.Наименование = Товар Тогда...
Сожержимое переменной Товар понятное дело берется из Справочник.Номенклатура .
Проблема в том, что условие
Код:
СпрНом.Наименование = Товар
не выполняется.
Если строки отдельно выводить в окно сообщений, то на глаз разницы никакой нет. Даже код символов сравнил на всякий случай ) !
С чем это может быть связано???
 
L
#2
С длиной строки.
Если Наименование длиной 100 символов, то выглядит оно как "Товар [...еще пробелы до 100 символов]".
Сравнивая же эту строку с переменной Товар, длина которой НЕ 100 символов, вы получите неравенство в любом случае.
Либо сравнивайте:

СпрНом=СоздатьОбъект("Справочник.Номенклатура");
СпрНом.ВыбратьЭлементы();
Пока СпрНом.ПолучитьЭлемент() = 1 Цикл
Если СокрЛП(СпрНом.Наименование) = СокрЛП(Товар) Тогда...

Либо, используйте функцию Формат() для приведения строк к одной длине.
 
H

Hryv

#4
Вообще то проблема была не в длине строк
СокрЛП() попутно преобразовала 'Товар' в строку (как я понял 'Товар' содержит элемент справочника)
Но если бы в конфигураторе предстовление для Справочник.Номенклатура было не наименование, а код, то это не сработало бы
И кстати, если нет уникальности по нименованию, то будет глючить

Правильнее сделать, если надо сравнить именно элементы
Код:
Если СпрНом.ТекущийЭлемент() = Товар Тогда
Или
Если надо сравнить именно нименования, то
Код:
Если СпрНом.Наименование = Товар.Наименование Тогда
или еще

Код:
Если СокрЛП(СпрНом.Наименование) = СокрЛП(Товар.Наименование) Тогда