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