Имя: Пароль:
1C
 
БП 3.0 Загрузка отчета о продажах Wildberies. Неправильно связывается номенклатура
↓ (Волшебник 07.02.2025 15:10)
0 bvb
 
06.02.25
11:27
Добрый день

Что то я не пойму как сопоставления номенклатур в БП конкретно для WB

Есть регистр "Номенклатура маркетплейсов" для сопоставления
Там есть связка Маркетплейс + Номенклатура -> Иденитификатор товара

Гружу отчет о продажах их Эксель.
По идее номенклатура 1С должна связываться по значению из столбца "Код номенклатуры" из Эксель

Запись сопоставления под этот код в регистре есть. Все равно связывает не с той номенклатурой

ЧЯДНТ ?
1 Волшебник
 
06.02.25
11:28
Скажите как на духу, Вы программировать умеете? Отладчик знаете?
2 Ненавижу 1С
 
гуру
06.02.25
11:29
Несколько записей имеет место быть для разных номенклатур, например
3 bvb
 
06.02.25
11:43
(2) По данному коду номенклатуры WB в регистре есть только одна запись.

При этом часть номенклатур обработка сопоставляет верно, а часть нет.

Я не могу понять логику разработчиков - если есть регистр, то там должно быть соответствие с данными регистра.

Судя по наличию ползунка "Точность поиска в форме" там идет поиск по мнемоническому соответствию.

И еще момент: Если записи в регистре нет - сопоставлять абы с чем не нужно.
4 bvb
 
07.02.25
14:56
Дошли руки разобраться.

Пишу - может кому пригодится.

Штатное сопоставление номенклатуры - бредятина полная
Поэтому просто перезаполняем сопоставление по своему алгоритму в расширении сразу в форме СопоставлениеНоменклатурыБЭД

 &НаСервере
Процедура ОсуществитьПоискНоменклатур()
	Для Каждого Стр ИЗ Объект.Сопоставление Цикл
		//Предварительно очищаем результат штатного поиска
		Стр.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();  
		//поиск сразу по реквизиту справочника. 
		//Регистр "Номенклатура маркетплейсов" не используем
		Стр.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("STR_АртикулWB",Стр.КодМагазина);  
	КонецЦикла;	
КонецПроцедуры	

&НаКлиенте
Процедура STR_ПриОткрытииПосле(Отказ)
	  ОсуществитьПоискНоменклатур();
КонецПроцедуры
5 bvb
 
07.02.25
14:55
Ну и кнопку на форму добавляем, чтобы не перезапускать если что-то не сопоставилось и поправили справочник:

&НаСервере
Процедура STR_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	ПодключаемыеКоманды.ВставитьМалыйЛоготип (ЭтаФорма, ЭтаФорма.Элементы.ГруппаОтбор, ЭтаФорма.Элементы.ВладелецОтбор);
	
	
	//Добавление команды
	НоваяКоманда = ЭтаФорма.Команды.Добавить("СопоставитьНоменклатуру");
	НоваяКоманда.Заголовок = "(STR) Сопоставить номенклатуру";
	НоваяКоманда.Действие = "СопоставитьНоменклатуру"; 
	
	//Добавление кнопки команды
	НоваяКнопка = ЭтаФорма.Элементы.Вставить("КнопкаСопоставитьНоменклатуру", Тип("КнопкаФормы"), ЭтаФорма.Элементы.КомандыГруппаСохранить, );
	НоваяКнопка.ИмяКоманды = "СопоставитьНоменклатуру";
	НоваяКнопка.ЦветТекста = WebЦвета.Синий;
	НоваяКнопка.Картинка = БиблиотекаКартинок.STR_Иконка;
	НоваяКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;
	
КонецПроцедуры
6 Волшебник
 
07.02.25
14:56
(4) это не нужно:
//Предварительно очищаем результат штатного поиска
Стр.Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); 
7 Волшебник
 
07.02.25
14:57
(4) мы не используем регистр сопоставления, мы просто тупо ищем по реквизиту STR_АртикулWB в спр. Номенклатура.
Это ж конгениально.
8 bvb
 
07.02.25
15:07
см. " по своему алгоритму "

Важен подход - далее кастомизировать можно как угодно

Я ищи так. Мне так проще.
Зачем мне заполнять регистр сопоставления, когда у меня кодВБ сразу в реквизите справочника в реквизите расширения ?

Кто хочет пусть делает отбор по регистру сведений
9 Волшебник
 
07.02.25
15:11
(8) У Вас подход неправильный и всё сломается. Реквизит Ваш отвалится, все коды похерятся. Потом не жалуйтесь.
10 d4rkmesa
 
07.02.25
15:24
(4) Там действительно идиотский поиск (думаю, я могу так писать не нарушая правила, т.к. 1С ЭДО и БЭД разрабатывали не 1С Софт вроде). Нормально работает только если номенклатуру создавать при первом сопоставлении, по идентификатору. Я переписывал какую-то процедуру, точнее не скажу, под рукой нет, еще в 2018. Воз, видимо, и ныне там.
11 bvb
 
07.02.25
15:30
(9) Да я люблю расширения.  И люблю добавлять туда реквизиты.

Если хочется по феншую - тогда так :




//Стр.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("STR_АртикулWB",Стр.КодМагазина);  //поиск сразу по реквизиту спраочника.

Регистр "Номенклатура маркетплейсов" не используем
        
        НаборЗаписей = РегистрыСведений.НоменклатураМаркетплейсов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ИдентификаторТовара.Установить(Стр.КодМагазина);    
        НаборЗаписей.Отбор.Маркетплейс.Установить(Перечисления.ВидыМаркетплейсов.Wildberries);            
        НаборЗаписей.прочитать();
        
        Если НаборЗаписей.Количество() = 1 Тогда //однозначное соотвествие
             Стр.Номенклатура =  НаборЗаписей[0].Номенклатура;
        КонецЕсли;
12 bvb
 
07.02.25
15:34
Вскользь замечу (без ложной скромности) :
я темой МП периодически занимаюсь, но не дока. Больше знаю со стороны бухучета (как что должно закрываться).

Проблемой этой занимался 1,5 часа (включая пост на форум) и решил.
Франчи из солнечного города на Неве решали ее полгода а воз был и ныне там.
13 Волшебник
 
07.02.25
15:52
(11) Вам здесь не нужен набор записей. Достаточно запроса к регистру.

Вы вообще программировать умеете?
14 d4rkmesa
 
08.02.25
23:07
(11) Посмотрите еще: СопоставлениеНоменклатурыКонтрагентовПереопределяемый.ПриПоискеНоменклатурыПоИдентификатору , если используется в этих обменах.
15 bvb
 
10.02.25
14:22
(14) В типовой обработке он не вызывается