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. ПодводныйТ 12 06.12.18 13:49 Сейчас в теме
что отладчик говорит? что в переменной АдресТаблицыСопоставления?
3. Nigelist 06.12.18 15:16 Сейчас в теме
(2) не нашел такой переменной.
4. ПодводныйТ 12 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. ПодводныйТ 12 07.12.18 15:09 Сейчас в теме
а что не так с РС Штрихкоды?

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

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

Вакансии

Старший Программист 1С НОВОСИБИРСК
Новосибирск
зарплата до 130 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 75 000 руб.
Полный день

Ведущий программист 1С
Воронеж
зарплата от 90 000 руб. до 120 000 руб.
Полный день

Программист 1С
Воронеж
зарплата от 65 000 руб. до 90 000 руб.
Полный день