Ктот из нас двои тупит? Помогите!!

Лесник

Новичок
Платформа 8.3 Бухгалтерия 3.0 (3.0.37.37) . Надо найти Номенклатуру по реквизиту "Артикул"
Команда Справочники.Номенклатура.НайтаПоРеквизиту("Артикул",Артикул) - резульпат пустая ссылка. Справочники.Номенклатура.НайтаПоРеквизиту("Артикул","11108") - находит. В Артакул строка "11108". Делаю поиск запросом - результат тот же. Помогите!!
 

Andrey

ВР
Команда форума
Попробуйте так
Справочники.Номенклатура.НайтаПоРеквизиту("Артикул",СокрЛП(Артикул))
Запрос то находит? Или тоже дает пустую ссылку?
 

Лесник

Новичок
СокЛП пробывал и запросом тоже. Поиск на сервере. 1С:Предприятие 8.3 (8.3.5.138)
 

Andrey

ВР
Команда форума
Согласен, код в студию....
Имхо, на момент поиска в переменной Артикул, что-то иное, но только не искомый артикул.
 

Лесник

Новичок
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Товар= ПоискПоАртикулю(Номенклатур);
КонецПроцедуры

&НаСервере
Функция ПоискПоАртикулю(Номенклатур)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";

Запрос.УстановитьПараметр("Артикул",Номенклатур); //См здесь
РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи;
Иначе
Сообщить("Ненайдена номенклатура с артикулем "+Номенклатур)
КонецЕсли;

Возврат 0;
КонецФункции
В отладчеке
Выдаёт Ссылка Ошибка чтения значения
Номенклатур "11 016" Строка

а если конкретно указать артикул т.е

&НаСервере
Функция ПоискПоАртикулю(Номенклатур)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";
Запрос.УстановитьПараметр("Артикул", "11016"); //См здесь
РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи;
Иначе
Сообщить("Ненайдена номенклатура с артикулем "+Номенклатур)
КонецЕсли;

Возврат 0;
КонецФункции
В отладчике
ВыборкаДетальныеЗаписи.Ссылка 11016 Пружина подвески СправочникСсылка.Номенклатура
т.е всё ищет

А теперь возможно ключ к развязке. на сервере присвою полю код.
&НаСервере
Функция ПоискПоАртикулю(Номенклатур)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Артикул = &Артикул";
Номенклатур="11016"; // Возможно отгадка

Запрос.УстановитьПараметр("Артикул",Номенклатур); //См здесь //См здесь
РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи;
Иначе
Сообщить("Ненайдена номенклатура с артикулем "+Номенклатур)
КонецЕсли;

Возврат 0;
КонецФункции

Всё ок
В отладчике
ВыборкаДетальныеЗаписи.Ссылка 11016 Пружина подвески СправочникСсылка.Номенклатура

Вывод: Дело где-то в передаче данных ч Клиента на Сервер.
Может кто даст ссылку где прочесть про этот механизм.
 

Andrey

ВР
Команда форума
Вот тут
&НаКлиенте
.....
Товар = ПоискПоАртикулю(Номенклатур)

Номенклатур - какое значение?
 

Andrey

ВР
Команда форума
Немного повангую.
Вы открываете некий файл XLS, в котором есть некий перечень номенклатуры с артикулами. Парсите файл и из какой-то колонки дергаете ЧИСЛОВОЕ значение артикула, по которому и ищите номенклатуру. Но тут есть нюанс, в 1С по умолчанию разделитель триад (групп разрядов) числа - неразрывный пробел, что приводит к тому что число "10999" в строку транслируется как "10 999". Используйте функцию СтрЗаменить(ИсходнаяСтрока, Символы.НПП, "")
 

Лесник

Новичок
Андрей Вы телепат! Но дело в том что Это поле не числовое, а символьное и в нем пробелов не видно. Всё равно спасибо. попробую Используйте функцию СтрЗаменить(ИсходнаяСтрока, Символы.НПП.
 

Andrey

ВР
Команда форума
Загвоздка в том что там только числовые символы, и 1С, скорее всего, интерпретирует значение как число. Как вариант при загрузке значения из данной строки явно идентифицируйте его как строку, через "Строка()". Либо, если данные сначала загружаются в таблицу значений то у соответствующей колонки явно установите строковый тип.
 

Лесник

Новичок
Спасибо Андрей. Всё получилось. Сделал как Вы советовали - поставил СтрЗаменить(ИсходнаяСтрока, Символы.НПП,"")
Резюме:
Очевидно При чтении из Эксель поле с типом"символьное, где все символы числа 1С вставляет пробелы которые невидны. Решение при чтении из Экселя символьных полей всегда вставляйте "СтрЗаменить(ИсходнаяСтрока, Символы.НПП,"")"
 
Верх