Поиск товара по коду через загрузку Excel в 1С

1. Stanislav1993 11.01.19 10:49 Сейчас в теме
Всем привет.
Возникла ошибка. Имеется документ "Поступление продукции" и шаблон экзеля для загрузки в 1С.
Таблица шаблона "Код" и "Количество".
Табличная часть документа "Номенклатура, Количество" .
При загрузке, строка колонки "Номенклатура" выдает пустое значение.

&НаСервере
Функция НайтиТоварПоКоду(КодТовараВСистеме)
	Перем ТоварДляПоиска, СсылкаНаНайденныйТовар;
    ТоварДляПоиска = Справочники.Номенклатура;
    СсылкаНаНайденныйТовар = ТоварДляПоиска.НайтиПоКоду(КодТовараВСистеме);
    Если СсылкаНаНайденныйТовар = ТоварДляПоиска.ПустаяСсылка() Тогда
        Возврат "Товар не найден";
   Иначе
        Возврат СсылкаНаНайденныйТовар.Наименование;
    КонецЕсли; 	
КонецФункции


&НаКлиенте
Процедура ЗагрузкаЧерезExcel(Команда)
	РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); 
	Если Не РасширениеПодключено Тогда
		УстановитьРасширениеРаботыСФайлами();
		РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами();
	КонецЕсли;
	Если РасширениеПодключено Тогда
		ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
		ДиалогФыбораФайла.Фильтр = "Файлы Excel (*.xls,*.xlsx) |*.xls*"; 
		ДиалогФыбораФайла.Заголовок = "Выберите файл для загрузки ковров";
		ДиалогФыбораФайла.ПредварительныйПросмотр = Истина;
		ДиалогФыбораФайла.ИндексФильтра = 0;
		Если ДиалогФыбораФайла.Выбрать() Тогда
			ОбработкаExcel(ДиалогФыбораФайла.ПолноеИмяФайла);
		КонецЕсли;	
	Иначе
		Сообщить("Расширение работы с файлами не доступно !");
	КонецЕсли;	

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаExcel(Файл)
	ВыбФайл = Новый Файл(Файл);
	Если Не ВыбФайл.Существует()Тогда
		Сообщить("Что то пошло не так");
		Возврат;
	Иначе
		НомерЛиста = 1;
		Попытка
			Excel = Новый COMОбъект("Excel.Application");
			Excel.Workbooks.Open(СокрЛП(Файл));
		Исключение
			Сообщить("Не удается!");
			Возврат;
		КонецПопытки;
		Excel.Sheets().select();
		Excel.ActiveWorkbook.Worksheets(НомерЛиста).Activate();
		
		Версия = Лев(Excel.Version,Найти(Excel.Version,"")-1);
		Если Версия = 8 Тогда
			ФайлСтрок 	= Excel.Cells.CurrentRegion.Rows.Count;
			ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count,13);
		Иначе
			ФайлСтрок 	= Excel.Cells(1,1).SpecialCells(11).Row;
			ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
		КонецЕсли;
		
		
		НомерКолонкиТовара 				= 1;
		НомерКолонкиКоличествоТоваров 	= 2;
		
		Для НомерЛиста 		= 1 По Excel.ActiveWorkbook.Sheets.Count Цикл
			ПроцентЗагрузки = 0;
			rows			= Excel.ActiveSheet.UsedRange.Rows.Count;
			ШагиЗагрузки	= 100/rows;
			
			Для СчСтроки = 2 По ФайлСтрок Цикл
				КодТовара 			= СокрЛ(Excel.Cells(СчСтроки,НомерКолонкиТовара).Value);
				Количество			= СокрЛ(Excel.Cells(СчСтроки,НомерКолонкиКоличествоТоваров).Value);
				Сообщить(КодТовара);
				СтрокаТовар = Строка(КодТовара);
				ПолучитьТовар = НайтиТоварПоКоду(СтрокаТовар);
				
								
				НоваяСтрока = объект.ПрайсЛист.Добавить();
				НоваяСтрока.Номенклатура = ПолучитьТовар;
				НоваяСтрока.Количество = Количество;
				//НоваяСтрока.ТипПродукции = НоваяСтрока.Продукция.ПолучитьОбъект().ТипПродукции;
				//НоваяСтрока.Фирма = НоваяСтрока.Продукция.ПолучитьОбъект().Фирма;
				//НоваяСтрока.ЕдИзмерения = НоваяСтрока.Продукция.ПолучитьОбъект().ЕдИзмерения;
				//НоваяСтрока.Цена  = ПослЦена(НоваяСтрока.Продукция,Объект.Дата);
				//НоваяСтрока.Количество = Количество;
				//РаботаСДокументами.РассчитатьСумму(НоваяСтрока);
				
				Состояние("Идет загрузка данных" + ". Прогресс:",ШагиЗагрузки*СчСтроки);	
			КонецЦикла;
		КонецЦикла;
		Excel.ActiveWorkbook.Close(); 
	КонецЕсли;
КонецПроцедуры

Показать
+
По теме из базы знаний
Найденные решения
25. Stanislav1993 11.01.19 15:38 Сейчас в теме
Вот это мне помогло
ТекущийКод = СтрЗаменить(КодТовара,Символы.НПП,""); 
ПолучитьТовар = НайтиТоварПоКоду(ТекущийКод);

plebedinskiy; user619273_alevtina; +2
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
28. Stanislav1993 11.01.19 18:09 Сейчас в теме
Возникла теперь другая проблема.
В шаблоне есть колонка "Валюта". В системе создан объект конфигурации Перечисления.Валюты.
Занесены два значения.
Функция ПолучитьВалюту(Вал)Экспорт
	Если Вал = 1 Тогда
		Возврат Перечисления.Валюты.Доллар;
	КонецЕсли;
	Если Вал = 2 Тогда
		Возврат Перечисления.Валюты.Сум;
	КонецЕсли;
КонецФункции
Показать



Валюта = СокрЛП(Excel.Cells(СчСтроки,НомерКолонкиВалюты).Value);
Если Валюта = ОбщегоНазначения.ПолучитьВалюту(1) Тогда
	РаботаСДокументами.РасчетСуммыСКурсом(НоваяСтрока,КурсДоллара);
КонецЕсли;


Сумма в отладчике дает ноль.
+
2. kumi2012 103 11.01.19 11:04 Сейчас в теме
Функция НайтиТоварПоКоду(КодТовараВСистеме)
    Перем ТоварДляПоиска, СсылкаНаНайденныйТовар;
    ТоварДляПоиска = Справочники.Номенклатура;
    СсылкаНаНайденныйТовар = ТоварДляПоиска.НайтиПоКоду(КодТовараВСистеме);
    Если СсылкаНаНайденныйТовар = ТоварДляПоиска.ПустаяСсылка() Тогда
        Возврат "Товар не найден";
   Иначе
        Возврат СсылкаНаНайденныйТовар;
    КонецЕсли;     
КонецФункции
Показать
+
3. Stanislav1993 11.01.19 11:10 Сейчас в теме
(2)Не помогло.
Не подскажете как работать с Функцией Формат()? Думаю, что дело в формате значения.
У меня через отладчик код выглядит 47 808 550...А в 1С 47808550
+
4. kumi2012 103 11.01.19 11:13 Сейчас в теме
(3) Должно помочь СтрЗаменить( ," ","")
+
6. Stanislav1993 11.01.19 13:11 Сейчас в теме
(4)
ЧГ=0

не получается)
+
7. kumi2012 103 11.01.19 13:16 Сейчас в теме
(6) СтрЗаменить( ," ","")
+
8. Stanislav1993 11.01.19 13:16 Сейчас в теме
9. kumi2012 103 11.01.19 13:19 Сейчас в теме
(8) Код справочника номенклатуры числовой?
+
10. Stanislav1993 11.01.19 13:21 Сейчас в теме
12. kumi2012 103 11.01.19 13:22 Сейчас в теме
(10) Тогда точно должен работать:
КодТовара=СтрЗаменить(КодТовара," ","");
+
13. Stanislav1993 11.01.19 13:27 Сейчас в теме
(12)Не работает. Не могу понять почему...
+
14. kumi2012 103 11.01.19 13:30 Сейчас в теме
(13) Смотрите по отладчику. По шагово.
+
15. Stanislav1993 11.01.19 15:02 Сейчас в теме
(14)Просмотрел. Ничего не поменялось
+
16. Stanislav1993 11.01.19 15:16 Сейчас в теме
(14)Если код трех-значный, то табличная часть заполняется
+
20. kumi2012 103 11.01.19 15:24 Сейчас в теме
(16) В каком месте кода вставлена функция КодТовара=СтрЗаменить(КодТовара," ",""); ?
+
22. Stanislav1993 11.01.19 15:26 Сейчас в теме
(20)Я объявляю новую переменную.
СтрокаТовар = СтрЗаменить(КодТовара," ","");
+
24. kumi2012 103 11.01.19 15:34 Сейчас в теме
(22) Здесь?

Для СчСтроки = 2 По ФайлСтрок Цикл
КодТовара = СокрЛ(Excel.Cells(СчСтроки,НомерКолонкиТовара).Value);
Количество = СокрЛ(Excel.Cells(СчСтроки,НомерКолонкиКоличествоТоваров).Value);
Сообщить(КодТовара);
СтрокаТовар = Строка(КодТовара);
ПолучитьТовар = НайтиТоварПоКоду(СтрокаТовар);
+
17. antz 11.01.19 15:18 Сейчас в теме
(13) потому что там неразрывный пробел, а ты ставишь обычный. Вот сюда надо писать формат:

СтрокаТовар = Формат(КодТовара, "ЧГ=0");
ПолучитьТовар = НайтиТоварПоКоду(СтрокаТовар);
+
18. Stanislav1993 11.01.19 15:21 Сейчас в теме
(17)
СтрокаТовар = Формат(КодТовара, "ЧГ=0");
ПолучитьТовар = НайтиТоварПоКоду(СтрокаТовар);


Я так уже пробовал - не помогает.
+
19. antz 11.01.19 15:23 Сейчас в теме
(18) лидирующие нули в коде товара есть? Из екселя прилетает, наверно, 456, а в справочнике 0000000456, да?
+
21. Stanislav1993 11.01.19 15:25 Сейчас в теме
(19)нету никаких нулей.
Прикрепленные файлы:
+
23. antz 11.01.19 15:31 Сейчас в теме
(21) Ну конечно, мы дружно пытаемся форматировать строку.

КодТовара             = Формат(Excel.Cells(СчСтроки,НомерКолонкиТовара).Value, "ЧГ=0");
Количество            = СокрЛ(Excel.Cells(СчСтроки,НомерКолонкиКоличествоТоваров).Value);
Сообщить(КодТовара);
ПолучитьТовар = НайтиТоварПоКоду(КодТовара);
+
5. BarsukM 11.01.19 11:23 Сейчас в теме
(3)Нужно убрать разделители групп в числе? Тогда добавить параметр "ЧГ=0"
Формат(Сумма, "ЧГ=0")
+
11. Stanislav1993 11.01.19 13:22 Сейчас в теме
(5)Дело не в сумме, а то что по коду не могу получить наименование элемента и поместить в таблич.часть
+
25. Stanislav1993 11.01.19 15:38 Сейчас в теме
Вот это мне помогло
ТекущийКод = СтрЗаменить(КодТовара,Символы.НПП,""); 
ПолучитьТовар = НайтиТоварПоКоду(ТекущийКод);

plebedinskiy; user619273_alevtina; +2
26. antz 11.01.19 15:39 Сейчас в теме
(25) В (23) меньше лишних действий.
+
27. Stanislav1993 11.01.19 15:42 Сейчас в теме
(26)Спасибо за содействие. Учту!)
+
Внимание! Тема сдана в архив

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