|
Загрузка из ексель в справочник | ☑ | ||
---|---|---|---|---|
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) Так сделай. Получается, если натыкается на это условие, то пытается записать в родителя элемент, а не группу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |