Имя: Пароль:
1C
1С v8
загрузка из Excel в 1С
,
0 prog-Igor
 
02.10.14
16:10
Подскажите в чем причина, почему в 1С не создаются все элементы справочника(их 12)а только 1 первый,ниже код,  прошу строго не судить я новичек! Как правильно написать загрузку из Excel?

&НаКлиенте
Процедура Сформировать(Команда)
    ЗагрузитьНоменклатуру();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНоменклатуру()
    Попытка
    МойЭксель= Новый COMОбъект("Excel.Application","WIN-KZA1CPTJWQ7");
    Книга=МойЭксель.WorkBooks.Open(Объект.ВыбратьФайл); //ПутьКФайлу!!!*****        
    //Книга=МойЭксель.WorkBooks.Open(Объект.ВыбратьФайл); //ПутьКФайлу!!!*****    
    
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Лист=Книга.WorkSheets(3); //Изменить на второй лист*********
//МойЭксель.Visible = Ложь;
//МойЭксель.DisplayAlerts = Истина;

                        //****Номенклатура****
ВсегоКолонок=3; //Колонка
ВсегоСтрок=12;   //Количество строк

Для Строки=2 По ВсегоСтрок Цикл
    
Выборка=Справочники.Номенклатура.СоздатьЭлемент();

Значение=СокрЛП(Лист.Cells(Строки,ВсегоКолонок).Value);    
Выборка.Наименование=Значение;
Выборка.НаименованиеПолное=Значение;
выборка.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
Выборка.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.Товар;

                         //****Находим Вид группы  по наименованию
ВсегоКолонокГруппы=4;
ВсегоСтрокГруппы=12;

Для Строки=2 По ВсегоСтрокГруппы Цикл
ЗначениеГруппы=СокрЛП(Лист.Cells(Строки,ВсегоКолонокГруппы).Value);    
Выборка.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию(ЗначениеГруппы);//Найти по Наименованию!!!*****    

КонецЦикла;
                          //*** находим родителя группы
    ВсегоКолонокРодителя=2;
    ВсегоСтрокРодителя=4;
    Для Строки=2 По ВсегоСтрокРодителя Цикл
ЗначениеРодителя=СокрЛП(Лист.Cells(Строки,ВсегоКолонокРодителя).Value);        
Выборка.Родитель=Справочники.Номенклатура.НайтиПоНаименованию(ЗначениеРодителя);        
    Продолжить;
    КонецЦикла;


                          //**** Находим производителя по наименованию
ВсегоКолонокПроизводителя=5;
ВсегоСтрокПроизводителя=12;
Для Строки=2 По ВсегоСтрокПроизводителя Цикл
    
ЗначениеПроиз=СокрЛП(Лист.Cells(Строки,ВсегоКолонокПроизводителя).Value);    
Выборка.Производитель=Справочники.Производители.НайтиПоНаименованию(ЗначениеПроиз);//Найти по Наименованию!!!*****    
КонецЦикла;

Выборка.Записать();
Сообщить("Создана номенклатура "+Выборка.Наименование);
КонецЦикла;

//Лист.Cells(1.3).Value="";

МойЭксель.ActiveWorkBook.Close(); //ПутьКФайлу!!!*****        
МойЭксель.Application.Quit();

КонецПроцедуры // ЗагрузитьНоменклатуру()


&НаКлиенте
Процедура ВыбратьФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ДиалогВыбора=новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок="Выберите файл";
    Если ДиалогВыбора.Выбрать() Тогда
         Объект.ВыбратьФайл=ДиалогВыбора.ПолноеИмяФайла;
            
    КонецЕсли;
КонецПроцедуры
1 prog-Igor
 
02.10.14
16:12
Получается что только первый элемент справочника создается а остальные 11 нет!
2 salvator
 
02.10.14
16:13
А отладчик пробовал запускать?
3 acanta
 
02.10.14
16:15
Для Строки=2 По насчитала аж 3 штуки
4 prog-Igor
 
02.10.14
16:21
Строки=2 но разные Столбцы
5 barrgand
 
02.10.14
16:22
(0) В таком коде сложно ориентироваться, вот и ошибку найти сложно. Приведите код в порядок, может и ошибка найдется...
6 FN
 
02.10.14
16:22
(4) одна и та же переменная в разных вложенных циклах.
7 acanta
 
02.10.14
16:22
причем тут столбцы, переменные наружного и двух внутренних циклов совпадают и всегда = 2
8 prog-Igor
 
02.10.14
16:23
Где ошибка,подскажите пожалуйста
9 prog-Igor
 
02.10.14
16:23
понял,сейчас буду смотреть
10 prog-Igor
 
02.10.14
16:43
исправил перем теперь выдает ошибку:
значение поля группа должно быть группой
11 acanta
 
02.10.14
16:44
уже лучше, правда?
12 prog-Igor
 
02.10.14
16:46
согласен, но все же
13 Borometr
 
02.10.14
16:49
посмотри у тебя наименование Номенклатуры и Родителя не совпадает случайно где-нибудь
14 Borometr
 
02.10.14
16:51
т.е. в 3 и 4 графе не должно быть одинаковых наименований
15 Borometr
 
02.10.14
16:53
Или же то наименование которое в 4-ой графе уже есть в справочнике в виде элемента
16 prog-Igor
 
02.10.14
16:55
да, вы правы
тогда подскажите как правильно найти группу
17 Borometr
 
02.10.14
16:59
Группа = Справочники.Номенклатура.НайтиПоНаименованию(ЗначениеРодителя)
Если Группа.ЭтоГруппа Тогда
   Выборка.Родитель = Группа;
Иначе
  Придеться что-то переименовывать или элемент или группу  

КонецЕсли;
18 Borometr
 
02.10.14
17:00
Или можно запросом, если его никто не увидит и тебе не так важно что запрос используется в цикле
19 acanta
 
02.10.14
17:02
(18)а можно загнать названия из екселя в список значений и выбрать одним запросом все группы с такими наименованиями?
20 prog-Igor
 
02.10.14
17:06
Большое спасибо, ошибки больше нет
Независимо от того, куда вы едете — это в гору и против ветра!