Поиск товара по коду через загрузку 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 102 11.01.19 11:04 Сейчас в теме
Функция НайтиТоварПоКоду(КодТовараВСистеме)
    Перем ТоварДляПоиска, СсылкаНаНайденныйТовар;
    ТоварДляПоиска = Справочники.Номенклатура;
    СсылкаНаНайденныйТовар = ТоварДляПоиска.НайтиПоКоду(КодТовараВСистеме);
    Если СсылкаНаНайденныйТовар = ТоварДляПоиска.ПустаяСсылка() Тогда
        Возврат "Товар не найден";
   Иначе
        Возврат СсылкаНаНайденныйТовар;
    КонецЕсли;     
КонецФункции
Показать
3. Stanislav1993 11.01.19 11:10 Сейчас в теме
(2)Не помогло.
Не подскажете как работать с Функцией Формат()? Думаю, что дело в формате значения.
У меня через отладчик код выглядит 47 808 550...А в 1С 47808550
4. kumi2012 102 11.01.19 11:13 Сейчас в теме
(3) Должно помочь СтрЗаменить( ," ","")
6. Stanislav1993 11.01.19 13:11 Сейчас в теме
7. kumi2012 102 11.01.19 13:16 Сейчас в теме
8. Stanislav1993 11.01.19 13:16 Сейчас в теме
9. kumi2012 102 11.01.19 13:19 Сейчас в теме
(8) Код справочника номенклатуры числовой?
10. Stanislav1993 11.01.19 13:21 Сейчас в теме
12. kumi2012 102 11.01.19 13:22 Сейчас в теме
(10) Тогда точно должен работать:
КодТовара=СтрЗаменить(КодТовара," ","");
13. Stanislav1993 11.01.19 13:27 Сейчас в теме
(12)Не работает. Не могу понять почему...
14. kumi2012 102 11.01.19 13:30 Сейчас в теме
(13) Смотрите по отладчику. По шагово.
15. Stanislav1993 11.01.19 15:02 Сейчас в теме
(14)Просмотрел. Ничего не поменялось
16. Stanislav1993 11.01.19 15:16 Сейчас в теме
(14)Если код трех-значный, то табличная часть заполняется
20. kumi2012 102 11.01.19 15:24 Сейчас в теме
(16) В каком месте кода вставлена функция КодТовара=СтрЗаменить(КодТовара," ",""); ?
22. Stanislav1993 11.01.19 15:26 Сейчас в теме
(20)Я объявляю новую переменную.
СтрокаТовар = СтрЗаменить(КодТовара," ","");
24. kumi2012 102 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)Спасибо за содействие. Учту!)
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)