Загрузка в табличную часть документа из файла

1. Nigelist 06.12.18 13:32 Сейчас в теме
Пытаюсь в Рознице 2.2 прикрутить к табличной части "Товары" документа "Оприходование товаров", загрузку из внешнего файла. Процедуры взял из демки БСП и адаптировал под себя. Но сталкиваюсь с ошибкой:
{Документ.ОприходованиеТоваров.МодульМенеджера(317)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)
	Товары =  ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления);
по причине:
Ошибка получения значения из временного хранилища
по причине:
Неправильный путь к файлу 'ТаблицаЗначений'


Код кнопки в форме:
&НаКлиенте
Процедура ЗагрузитьТоварыИзФайла(Команда)
    ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();
    ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "ОприходованиеТоваров.Товары";
    ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка списка товаров из файла'");
    ДополнительныеПараметры = Новый Структура();
    ДополнительныеПараметры.Вставить("Магазин", Объект.Магазин);
    ДополнительныеПараметры.Вставить("Склад", Объект.Склад);
    ДополнительныеПараметры.Вставить("Организация", Объект.Организация);
    ПараметрыЗагрузки.ДополнительныеПараметры = ДополнительныеПараметры;
    Оповещение = Новый ОписаниеОповещения("ЗагрузитьТоварыИзФайлаЗавершение", ЭтотОбъект);
    ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьТоварыИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
    Если АдресЗагруженныхДанных = Неопределено Тогда 
        Возврат;
    КонецЕсли;
    ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных);
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьТоварыИзФайлаНаСервере(АдресЗагруженныхДанных)
    ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных);
    ТоварыДобавлены = Ложь;
    Для каждого СтрокаТаблицы Из ЗагруженныеДанные Цикл 
        Если Не ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) Тогда 
            Продолжить;
        КонецЕсли;
        НоваяСтрокаТовары = Объект.Товары.Добавить();
        НоваяСтрокаТовары.Номенклатура = СтрокаТаблицы.Номенклатура;
        НоваяСтрокаТовары.Цена = СтрокаТаблицы.Цена;
        НоваяСтрокаТовары.Количество = СтрокаТаблицы.Количество;
        НоваяСтрокаТовары.ЕдиницаИзмерения = СтрокаТаблицы.ЕдиницаИзмерения;
        ТоварыДобавлены = Истина;
    КонецЦикла;
    Если ТоварыДобавлены Тогда
        Модифицированность = Истина;
    КонецЕсли;
КонецПроцедуры
Показать


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

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

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


Подскажите, где проблема? Учитывая, что в демке всё работает прекрасно.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. lefthander 07.12.18 08:57 Сейчас в теме
(1)Обычно АдресТаблицыСопоставления это реквизит формы.
7. Nigelist 07.12.18 11:42 Сейчас в теме
(6) но непонятно где он? В документе и в обработке нет. Хотя было бы логично, если бы он был в обработке.
2. ПодводныйТ 45 06.12.18 13:49 Сейчас в теме
что отладчик говорит? что в переменной АдресТаблицыСопоставления?
3. Nigelist 06.12.18 15:16 Сейчас в теме
(2) не нашел такой переменной.
4. ПодводныйТ 45 06.12.18 20:05 Сейчас в теме
(3) в смысле не нашел?

АдресТаблицыСопоставления = неопределено ?
5. Nigelist 07.12.18 08:47 Сейчас в теме
(4) АдресЗагруженныхДанных <> АдресТаблицыСопоставления

Пробовал глобальный поиск. И эта переменная упоминается только в менеджерах объектов где используется загрузка из внешнего файла.
8. Nigelist 07.12.18 14:18 Сейчас в теме
Вроде победил указанную проблему. Но всплывает другая. Из файла не вставляется количество.
9. Nigelist 07.12.18 14:59 Сейчас в теме
Подскажите конфигурацию, где используется загрузка из файла в документ и РС Штрихкоды. Я так понял у меня кривое сопоставление ШК и Номенклатуры. В том же УТ используется загрузка из файла не из БСП.
10. ПодводныйТ 45 07.12.18 15:09 Сейчас в теме
а что не так с РС Штрихкоды?

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

ну и отладчик должен бы помочь в решении данной проблемы.
11. Nigelist 08.12.18 07:38 Сейчас в теме
(10) да видимо проблема в запросе, а именно в связях. Что-то делаю не так.
12. Nigelist 08.12.18 12:44 Сейчас в теме
(10) А не подскажете конфу где используется загрузка номенклатуры по РС Штрихкоды с помощью функционала из БСП?
13. ПодводныйТ 45 08.12.18 16:38 Сейчас в теме
(12) не знаю... а обязательно БСП? может без нее можно?
14. Nigelist 10.12.18 06:25 Сейчас в теме
(13) не обязательно, просто сам БСП уже встроен в конфигурацию.
15. Nigelist 10.12.18 12:37 Сейчас в теме
(13) Разобрался с сопоставлением. Но проблема с вставкой количества осталась. И непонятно, для чего в запросе строка:
КОЛИЧЕСТВО(ДанныеДляСопоставленияПоНаименованию.Идентификатор) КАК Количество
16. ПодводныйТ 45 10.12.18 15:04 Сейчас в теме
(15) скорее всего это не то количество, которое вам нужно)
Оставьте свое сообщение

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