Имя: Пароль:
1C
1С v8
Загрузка из ексель в справочник
,
0 amadeus2010
 
12.09.12
05:55
Доброе утро всем.Сразу с раннего утра вопрос.Имеется файл ексель который надо загрузить в справочник номенклатура согласно июмеющимся полям.Номенклатура разбита на группы,около 20.Как правильно сделать так чтобы строки из файл ексель правильно располагались в свои группы и если такой элемент уже есть в справочнике то не записывать его заново? Сейчас мой код при работе подвешивает платформу.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
   ФайлНаДиске = Новый Файл(Файл);
   Если Не ФайлНаДиске.Существует() Тогда
       Предупреждение("Не найден файл!");
       Возврат;
   КонецЕсли;
   
   Объект                            = Новый COMОбъект("Excel.Application");
   Объект.Visible                  = Ложь;
   Книга                            = Объект.Workbooks;
   Книга.Open(Файл);
   КоличествоЛистов                = Объект.WorkSheets.Count();
   Sheets                            = 1;
   Лист                            = Объект.WorkSheets(Sheets);
   
   ВесьЛист                        = Лист; // ActiveSheet;
   ИспользуемыйЛист                = Лист.UsedRange; // ActiveSheet.UsedRange;  
       
   КоличествоКолонок                = ВесьЛист.Columns.Count();
   КоличествоИспользуемыхКолонок    = ИспользуемыйЛист.Columns.Count();
   КоличествоСтрок                    = ВесьЛист.Rows.Count();
   КоличествоИспользуемыхСтрок        = ИспользуемыйЛист.Rows.Count();
   КоличествоЯчеек                    = ВесьЛист.Cells.Count();
   КоличествоИспользуемыхЯчеек        = ИспользуемыйЛист.Cells.Count();

   
   

КодГруппы = "00000031596";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Номенклатура.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);
Если Группа.Пустая() Тогда
   Группа = Справочники.Номенклатура.СоздатьГруппу();
   Группа.Код = КодГруппы;
   Группа.Наименование = "BAG";
   Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
   Сообщить("Найден элемент справочника с указанным кодом!");
   // Предусмотреть прерывание алгоритма.
КонецЕсли;

Спр = Справочники.Номенклатура.СоздатьЭлемент();

Спр.Наименование = СокрЛП(Лист.Cells(1).Value);
Спр.НаименованиеПолное=СокрЛП(Лист.Cells(1).Value);
Спр.Количество= Число(СокрЛП(Лист.Cells(5).Value));
Спр.Размер=СокрЛП(Лист.Cells(3).Value);
Спр.Цвет=СокрЛП(Лист.Cells(4).Value);
Спр.Сезон= СокрЛП(Лист.Cells(2).Value);
Спр.ЗакупочнаяЦена=Число(СокрЛП(Лист.Cells(6).Value));
Спр.Себестоимость=Число(СокрЛП(Лист.Cells(7).Value));
Спр.РозничнаяЦена=Число(СокрЛП(Лист.Cells(8).Value));
Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт.");
Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар (пр. ТМЦ)");

Спр.Родитель = Группа.Ссылка;
Спр.Записать();
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Такой код я сдублировал для каждой группы номенклатуры
1 kolanych
 
12.09.12
06:02
А есть же стандартная обработка - загрузка из екселя
2 amadeus2010
 
12.09.12
06:10
имеете ввиду  то что на диске ИТС, загрузка табличных документов?
3 kolanych
 
12.09.12
06:24
да, она
4 amadeus2010
 
12.09.12
08:05
но она не всегда подходит, иногда требуется написать свою обработку, у меня поэтому вопрос по коду,вроде написан правильно но при загрузке даже нескольких элементов программа зависает и вылетает
5 Strogg
 
12.09.12
08:10
ЖЖесть. Жосткая жесть. Что мешает заполнить данные из екселя в какую-нибудь ТЗ и потом спокойно оттудова их забирать?
6 Простенький вопросик
 
12.09.12
08:18
(0)
1. возможно надо группы брать из екселя, а не заносить принудительно в одну, чтобы номенклатура по группам разбивалась?
2. А что мешает написать, что если справочники.номенклатура.найтипонаименованию("ченибудь") существует, то не создавать элемент?
7 AaNnDdRrEeYy
 
12.09.12
09:27
Кинь на форму табличный документ туда скопируй эксель, и с него читай. Зачем с КОМ объектами париться тем более Excel.Application
8 amadeus2010
 
12.09.12
10:26
(7)изначально так и было-табличное поле-загрузка из ексель,но потом решил сразу записывать в справочник минуя табличное поле.По ходу придется вернуться к начальному варианту
9 zladenuw
 
12.09.12
10:28
(8) когда тз читаешь и записываешь в бд быстрее. чем читать с ёкселя и записывать.
пробуй читай сразу область нужную с ёкселя и помещать ее в тз. примеры есть на мисте.
10 salvator
 
12.09.12
10:30
(8) // Предусмотреть прерывание алгоритма.

Тут так ничего не появилось?
11 amadeus2010
 
12.09.12
12:14
(10) пока нет
12 salvator
 
12.09.12
14:33
(11) Так сделай. Получается, если натыкается на это условие, то пытается записать в родителя элемент, а не группу.