Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 07:44

Загрузка из Excel

Автор xDee, 16 окт 2011, 20:15

0 Пользователей и 1 гость просматривают эту тему.

xDee

Загружаю номенклатуру из Excel, счтывает по строкам номенклатуру все нормально но доходит до строки в экселевском файле где стоит группа номенклатуры и вываливается с ошибкой СпрЕдиницы.Записать();  Проверка идет по Артиклу, в экселе в строке нет такого столбца артикул. В номенклатуре не нужны группы, запись идет в корень справочника. Подскажите пожалуйста как обойти такие строки в обработке ? Для примера пропустить строку 2 
1. 122218   ПЭВМ X5000B/PRO (X5338PRi): Core i5-2500/ 4 Гб/ 1 Тб/ 1 Гб Radeon HD6950/ DVDRW/ Win7 Premium
2. Компьютеры универсальные                                          
3. 122730   ПЭВМ X5000B (X531ELGi): Core i5-2400/ 4 Гб/ 1 Тб/ 1 Гб GeForce GTX560Ti/ DVDRW/ Win7 Premium      

СпрНом=СоздатьОбъект("Справочник.Номенклатура");
Если СпрНом.НайтиПоРеквизиту("Артикул",АртиклExcel, 1)=0 Тогда
            Сообщить("Товар с кодом "+АртиклExcel+"("+ТоварExcel+") не найден и будет записан", "!");
СпрНом.Новый(); 
СпрНом.Наименование=ТоварExcel;
СпрНом.Артикул=АртиклExcel;
СпрНом.ПолнНаименование=ТоварExcel;
СпрНом.СтавкаНДС=Перечисление.СтавкиНДС.БезНДС;
СпрНом.ВидНоменклатуры=Перечисление.ВидыНоменклатуры.Прочее;
КонецЕсли;
СпрНом.Записать();

СпрЕдиницы.ИспользоватьВладельца(СпрНом.ТекущийЭлемент());
         СпрЕдиницы.Новый();
         СпрЕдиницы.ОКЕИ = СпрОКЕИ.ТекущийЭлемент();
         СпрЕдиницы.Коэффициент = 1;
         СпрЕдиницы.Записать();
               
СпрНом.ОсновнаяЕдиница=СпрЕдиницы.ТекущийЭлемент();
СпрНом.БазоваяЕдиница=СпрЕдиницы.ТекущийЭлемент();
СпрНом.Записать();
КонецЦикла;
КонецЦикла;
xlApp.Quit();         
xlApp = 0;

xDee

Проверка идет по Артиклу, в экселе во 2ой строке нет такого столбца артикул

chuevsf

Ставь условие что артикула у тебя число. Если не число, то значит группа.

xDee

Подтолкни пожалуйста как это написать

AntonB

Если Артикул используется и для элемента, и для группы, то ошибка вываливается из-за того, что НайтиПоРеквизиту может найти группу, а группу нельзя установить владельцем справочника Единицы.
Тогда должно помочь

Если СпрНом.ЭтоГруппа()=0 Тогда
......
КонецЕсли;


Предлагаю полный ИТ сервис небольшой организации в Москве (приходящий сисадмин+1С7.7,1С8.x)

sergejK74

Попробуй перед своим кодом
Если ПустоеЗначение(АртиклExcel)=1 Тогда
продолжить;
КонецЕсли;

Или
Если Число(АртиклExcel)>0 Тогда
продолжить;
КонецЕсли;
Кнопочка Спасибо - слева!

xDee

Если Число(АртиклExcel)=0 Тогда
продолжить;
КонецЕсли;


Спасибо, вот так сработало, а как мне отрезать первые пять символов строки слева если там есть название [NEW] чтобы в прайс попадало только название.
1. 122218   [NEW] ПЭВМ X5000B/PRO (X5338PRi): Core i5-2500/ 4 Гб/ 1 Тб/ 1 Гб Radeon HD6950/ DVDRW/ Win7 Premium

sergejK74

Если Врег(Лев(ТоварExcel,5))="[NEW]" Тогда
ТоварExcel = СокрЛП(Прав(ТоварExcel,(СтрДлина(ТоварExcel)-5)));
КонецЕсли;
Кнопочка Спасибо - слева!

xDee

Большое Спасибо!

xDee

Подскажите пожалуйста еще один нюанс, если запускаю загрузку еще один раз то не отрабатывает
Если СпрНом.НайтиПоРеквизиту("Артикул",АртиклExcel, 1)=0  Тогда вернее отрабатывет в отладчике показывает что =1, но при этом
СпрНом.Новый(); 
СпрНом.Наименование=ТоварExcel;
показывает первую позицию номенклатуры в экселе, которую он вроде должен был уже пройти

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск