БСП 2.3. Загрузка из внешнего файла. Проблемы с сопоставлением по ШК.

1. Nigelist 08.12.18 08:23 Сейчас в теме
Выдрал из БСП пример внедрения загрузки в таблицу документа из внешнего файла и постарался настроить под себя. Но видимо криво пытаюсь прикрутить ШК и в результате не сопоставляется чисто по ШК. Подскажите, что не так?

Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт
	Товары = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
	ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных);
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВЫРАЗИТЬ(ДанныеДляСопоставления.Штрихкод КАК СТРОКА(13)) КАК Штрихкод,
		|	ДанныеДляСопоставления.Номенклатура КАК Номенклатура,
		|	ДанныеДляСопоставления.Идентификатор КАК Идентификатор
		|ПОМЕСТИТЬ ДанныеДляСопоставления
		|ИЗ
		|	&ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ДанныеДляСопоставления.Идентификатор КАК Идентификатор,
		|	Штрихкоды.Штрихкод КАК Штрихкод,
		|	спрНоменклатура.Ссылка
		|ПОМЕСТИТЬ СопоставленнаяНоменклатураПоШтрихкоду
		|ИЗ
		|	ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
		|			ПО Штрихкоды.Владелец.Ссылка = спрНоменклатура.Ссылка
		|		ПО ДанныеДляСопоставления.Штрихкод = Штрихкоды.Штрихкод
		|			И (ДанныеДляСопоставления.Штрихкод <> """")
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Идентификатор
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ДанныеДляСопоставления.Номенклатура КАК Номенклатура,
		|	ДанныеДляСопоставления.Идентификатор КАК Идентификатор
		|ПОМЕСТИТЬ ДанныеДляСопоставленияПоНаименованию
		|ИЗ
		|	ДанныеДляСопоставления КАК ДанныеДляСопоставления
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду
		|		ПО ДанныеДляСопоставления.Штрихкод = СопоставленнаяНоменклатураПоШтрихкоду.Штрихкод
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Идентификатор
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(спрНоменклатура.Ссылка) КАК Ссылка,
		|	ДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор,
		|	КОЛИЧЕСТВО(ДанныеДляСопоставленияПоНаименованию.Идентификатор) КАК Количество
		|ИЗ
		|	ДанныеДляСопоставленияПоНаименованию КАК ДанныеДляСопоставленияПоНаименованию
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
		|		ПО (спрНоменклатура.Наименование = (ВЫРАЗИТЬ(ДанныеДляСопоставленияПоНаименованию.Номенклатура КАК СТРОКА(500))))
		|
		|СГРУППИРОВАТЬ ПО
		|	ДанныеДляСопоставленияПоНаименованию.Идентификатор
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	NULL,
		|	СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор,
		|	КОЛИЧЕСТВО(СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор)
		|ИЗ
		|	СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду
		|
		|СГРУППИРОВАТЬ ПО
		|	СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор";

	Запрос.УстановитьПараметр("ДанныеДляСопоставления", ЗагружаемыеДанные);
	РезультатыЗапросов = Запрос.ВыполнитьПакет();
	
	ТаблицаНоменклатура = РезультатыЗапросов[3].Выгрузить();
	ФункциональнаяОпцияХарактеристика = ?(ЗагружаемыеДанные.Колонки.Найти("Характеристика") <> Неопределено, Истина, Ложь);
	Для каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл
		
		Товар = Товары.Добавить();
		Товар.Идентификатор = СтрокаТаблицы.Идентификатор;
		Товар.Количество = СтрокаТаблицы.Количество;
		Товар.Цена = СтрокаТаблицы.Цена;
		
		СтрокаНоменклатура = ТаблицаНоменклатура.Найти(СтрокаТаблицы.Идентификатор, "Идентификатор");
		Если СтрокаНоменклатура <> Неопределено Тогда 
			Если СтрокаНоменклатура.Количество = 1 Тогда 
				Товар.Номенклатура = СтрокаНоменклатура.Ссылка;
				Если ФункциональнаяОпцияХарактеристика Тогда
					Товар.Характеристика = Справочники._ДемоХарактеристики.НайтиПоНаименованию(СтрокаТаблицы.Характеристика, 
						Истина,, Товар.Номенклатура);
				КонецЕсли;
			ИначеЕсли СтрокаНоменклатура.Количество > 1 Тогда
				ЗаписьОНеоднозначности = СписокНеоднозначностей.Добавить();
				ЗаписьОНеоднозначности.Идентификатор = СтрокаТаблицы.Идентификатор; 
				ЗаписьОНеоднозначности.Колонка = "Номенклатура";
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	ПоместитьВоВременноеХранилище(Товары, АдресТаблицыСопоставления);
КонецПроцедуры
Показать


Процедура ЗаполнитьСписокНеоднозначностей(ПолноеИмяТабличнойЧасти, СписокНеоднозначностей, ИмяКолонки, ЗагружаемыеЗначенияСтрока, ДополнительныеПараметры) Экспорт
	Если ИмяКолонки = "Номенклатура" Тогда
		Запрос = Новый Запрос;
		
		ТекстГде = "";
		Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Номенклатура) Тогда
			ТекстГде = "ГДЕ Номенклатура.Наименование = &Наименование";
			Запрос.УстановитьПараметр("Наименование", ЗагружаемыеЗначенияСтрока.Номенклатура);
		КонецЕсли;
			
		Если ЗначениеЗаполнено(ЗагружаемыеЗначенияСтрока.Штрихкод) Тогда
			Если ЗначениеЗаполнено(ТекстГде) Тогда
				ТекстГде = ТекстГде + " ИЛИ Штрихкоды.Штрихкод = &Штрихкод";
			Иначе
				ТекстГде = "ГДЕ Штрихкоды.Штрихкод = &Штрихкод";
			КонецЕсли;
			Запрос.УстановитьПараметр("Штрихкод", ЗагружаемыеЗначенияСтрока.Штрихкод);
		КонецЕсли;
		
		Запрос.Текст = "ВЫБРАТЬ
			|	Номенклатура.Ссылка
			|ИЗ
			|	Справочник.Номенклатура КАК Номенклатура
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
			|		ПО Номенклатура.Ссылка = Штрихкоды.Владелец.Ссылка " + ТекстГде;
		
		РезультатЗапроса = Запрос.Выполнить();
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			СписокНеоднозначностей.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RedAllert 21.09.21 13:59 Сейчас в теме
Собака где-то тут зарыта : ПО ДанныеДляСопоставления.Штрихкод = Штрихкоды.Штрихкод
| И (ДанныеДляСопоставления.Штрихкод <> """")
Ты сопоставляешь "необъектные" загруженные данные как объектные.
Используй вместо = в запросе конструкцию ПОДОБНО
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот