1. Stanislav1993 11.01.19 10:49 Сейчас в теме

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

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

Программист 1С
Видное
Полный день

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

Консультант-аналитик 1С
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день