Поиск по реквизиту номенклатуры с выводом остатков

  • Автор темы oleco
  • Дата начала
O

oleco

Гость
#1
Доброго времени суток!
Суть вопроса следующая:
Есть типовая ТиС (954), немного редактированная, а именно:
предпиятие - сеть магазинов по продаже японских (и не только) автозапчастей, практически у каждой запчасти есть свой японский (оригинальный) номер (называется OEM), к оригинальной запчасти куча заводов выпускает свои аналоги (со своими номерами), тем не менее каждая запчасть имеет привязку к OEM-у, как правило одна и таже деталь подходит к разным маркам авто, практически это выглядит так:
Наим: 335689 //Номер продукции производителя, занесен в наименование для облегчения импорта из .xls катологов завода
OEM: 485625513, 485534412, 486512233 //номера совместимых оригинальных TOYOTA-вских амортизаторов
Расшифровка: Амортизатор задний Toyota Chaiser //добавленные мною реквизиты номенклатуры, для вывода в докуметах: чекККМ; этикетках и ценниках
Аналог: кузов 100, 105, 110 // модели кузовов авто к которым подходят данные амортизаторы

Так вот нужно организовать поиск, основанные на OEM номерах, то бишь продавец вбивая название "335689" и видя что его нет на остатке должен увидеть есть ли в наличии товары, OEM которых идет через запятую в данной номенклатуре в реквизите OEM

поиск я вроде сделал, но окончательно запутался и тем боле не могу вывести остаток найденных товаров, поиск реализован в подборе, его код:

Процедура ПоискОЕМ()

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

Пока Спр.ПолучитьЭлемент() = 1 Цикл

Если Спр.ЭтоГруппа() = 1 Тогда

Продолжить;

КонецЕсли;

// ОстатокТекНоменклатуры = СокрЛП(Формат(СписокОст.ПолучитьЗначение(1),"Ч014.3"));

Если Найти(Нрег(СокрЛП(Спр.Артикул)),Нрег(СокрЛП(ВыбО))) <> 0 Тогда

Найд.ДобавитьЗначение(Спр.ТекущийЭлемент(), СокрЛП(Спр.Наименование)+?(Спр.Уровень() <> 1," - "+ Спр.Родитель.Наименование,""));
КонецЕсли;

КонецЦикла;

Если Найд.РазмерСписка() = 0 Тогда

Предупреждение("Уважаемый по вашему запросу ничего НЕ найдено!!!");
Возврат;
КонецЕсли;

Если Найд.РазмерСписка() = 1 Тогда

АктивизироватьОбъект(Найд.ПолучитьЗначение(1));
Возврат;

КонецЕсли;

зн = "";
Если Найд.ВыбратьЗначение(зн,"Все что есть :unsure:",,,0) = 1 Тогда

АктивизироватьОбъект(зн);

КонецЕсли;


КонецПроцедуры // ПоискОЕМ

С С-ку не так давно работаю, посоветую что-нибудь :)

Я понимаю, что нужно в отдел внедрения францайзи идти, НО у нас во-первых ценник лупят не хилый, причем предлагают все переписать, а во-вторых, и это самое главное человека жалко: после запрета ввоза праворуких машин бизнес, поставленный им за 5 лет, трешит по швам, да и некрасиво признаваться в собственной некомпетенции, может все же поможете?
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#2
через перебор работает медленно - через запрос быстрее.
а судя по коду - остатки у тебя вообще не трогаются.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
44
Минск
#3

unknown181538

НеГуру
28.12.2008
1 417
0
30
Москва
#6
А не подойдет ли типовая форма подбора? У вас ведь ОЕМ в наименовании...
А так - изучайте получение остатков по регистру.