|
Загрузка данных из Excel в 1с | ☑ | ||
---|---|---|---|---|
0
almaz102
03.02.18
✎
00:20
|
Всем привет! Ребята подскажите пож-та есть обработка по загрузке из эксель в 1с., при загрузке он обходит каждую строку в эксель и записывает , в итоге получается он перезаписывает один и тот же объект, в справочнике должно быть около 1000 моделей авто в итоге только одна запись, самая последняя строка которая в экселе
Попытка ExcelApplication = Новый COMObject("Excel.Application"); ExcelApplication.WorkBooks.Open(Объект.ВыборФайла); Исключение Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; //Открываем необходимый лист ExcelApplication.Sheets(1).Select(); //Получим количество строк и колонок. //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel Версия = Лев(ExcelApplication.Version,Найти(ExcelApplication.Version,".")-1); Если Версия = "8" тогда ВсегоСтрок = ExcelApplication.Cells.CurrentRegion.Rows.Count; ВсегоСтолбцов = Макс(ExcelApplication.Cells.CurrentRegion.Columns.Count, 13); Иначе ВсегоСтрок = ExcelApplication.Cells(1,1).SpecialCells(11).Row; ВсегоСтолбцов = ExcelApplication.Cells(1,1).SpecialCells(11).Column; Конецесли; //считываем первую строку и генерируем колонки в таблице Значений ТЗКонтрагентов = Новый ТаблицаЗначений; Сч = 1; Пока ЗначениеЗаполнено(ExcelApplication.Cells(1, Сч).Text) Цикл ИмяКолонки = ExcelApplication.Cells(1, Сч).Text; ИмяКолонки = СтрЗаменить(ИмяКолонки," ",""); // убираем из имени колонок пробелы ИмяКолонки = СтрЗаменить(ИмяКолонки,"/",""); // убираем слеш ИмяКолонки = СтрЗаменить(ИмяКолонки,".",""); // убираем точки ИмяКолонки = СтрЗаменить(ИмяКолонки,"-",""); // убираем точки ТЗКонтрагентов.Колонки.Добавить(ИмяКолонки); Сч = Сч + 1; КонецЦикла; // Добавляем значения строк начиная со второй Для СтрСЧ = 2 по ВсегоСтрок Цикл НоваяСтрока = ТЗКонтрагентов.Добавить(); Для НомерКолонки = 1 по ТЗКонтрагентов.Колонки.Количество() Цикл Если ЗначениеЗаполнено(ExcelApplication.Cells(СтрСЧ,1).Text) = Истина Тогда //До первой пустой строки //заполняем строку значениями ТекущееЗначение = ExcelApplication.Cells(СтрСЧ, НомерКолонки).Text; ИмяКолонки = ТЗКонтрагентов.Колонки[НомерКолонки-1].Имя; НоваяСтрока[ИмяКолонки] = ТекущееЗначение; КонецЕсли; КонецЦикла; КонецЦикла; ExcelApplication.Quit(); КонтрГр = Справочники.Контрагенты.ПустаяСсылка(); Для Каждого Стр ИЗ ТЗКонтрагентов Цикл Запрос = Новый Запрос; Запрос.Текст="ВЫБРАТЬ | асМодели.Наименование, | асМодели.НаименованиеПолное, | асВариантыКомплектации.Наименование КАК НаименованиеКомпл, | асВариантыКомплектации.НаименованиеПолное КАК НаименованиеПолноеКомпл, | асВариантыКомплектации.Ссылка КАК комплек, | асМодели.Ссылка КАК модель, | асВариантыКомплектации.Владелец |ИЗ | Справочник.асВариантыКомплектации КАК асВариантыКомплектации | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.асМодели КАК асМодели | ПО асВариантыКомплектации.Владелец = асМодели.Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МодельАвто = Выборка.модель.ПолучитьОбъект(); МодельАвто.НаименованиеПолное = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"; МодельАвто.Наименование = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение; МодельАвто.Записать(); КомплекАвто = Выборка.комплек.ПолучитьОбъект(); КомплекАвто.Наименование = Стр.Модификация + " " + "кузов" + " " + Стр.Серия; КомплекАвто.НаименованиеПолное = Стр.Модификация + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"+" " + "кузов" + " " + Стр.Серия; КомплекАвто.Владелец = МодельАвто.Ссылка; КомплекАвто.Записать(); КонецЦикла; КонецЦикла; |
|||
1
Fram
03.02.18
✎
00:44
|
(0) опиши свой алгоритм простыми фразами пошагово
|
|||
2
Fram
03.02.18
✎
00:46
|
особенно последний цикл с запросом
|
|||
3
almaz102
03.02.18
✎
00:50
|
в запросе я получаю объект справочника модели авто и так справочник комплектация и в нее записываю из таблицы эксель марку модель год и т.д. записал справочник модель авто далее записываю с справочник комплектация ее же комплектацию
|
|||
4
Fram
03.02.18
✎
00:52
|
(3) > получаю объект справочника
а подразумевается что он у тебя уже существует? |
|||
5
almaz102
03.02.18
✎
00:52
|
В итоге у меня в справочнике добавилась только одна запись, а должно добавиться столько же записей сколько строк в документе Excel, что то не то делаю((
|
|||
6
almaz102
03.02.18
✎
00:55
|
(4) Сам справочник пустой, получается он не существует(
|
|||
7
roman844
03.02.18
✎
00:59
|
автор, ты меня извини, но код написан отвратительно - вторая половину уж точно.
|
|||
8
almaz102
03.02.18
✎
01:00
|
(7) не спорю, я только учусь программировать
|
|||
9
roman844
03.02.18
✎
01:00
|
что такое ТЗКонтрагентов ???
|
|||
10
roman844
03.02.18
✎
01:03
|
(8) какая информация содержится в тзКонтрагентов?
|
|||
11
roman844
03.02.18
✎
01:08
|
ну смотри если ты хочешь добавить элемент справочника, то надо использовать конструкцию
ЭлСправочника = Справочники.ТвойСправочник.СоздатьЭлемент() а у тебя такого нет, у тебя какойто запрос. не понятно зачем он тут нужен? |
|||
12
almaz102
03.02.18
✎
01:16
|
(11) пробую, запрос весь убрал, просто создаю элемент. Ну почему у меня только одна запись добавилась(
|
|||
13
roman844
03.02.18
✎
01:25
|
вместо этого
Для Каждого Стр ИЗ ТЗКонтрагентов Цикл Запрос = Новый Запрос; Запрос.Текст="ВЫБРАТЬ | асМодели.Наименование, | асМодели.НаименованиеПолное, | асВариантыКомплектации.Наименование КАК НаименованиеКомпл, | асВариантыКомплектации.НаименованиеПолное КАК НаименованиеПолноеКомпл, | асВариантыКомплектации.Ссылка КАК комплек, | асМодели.Ссылка КАК модель, | асВариантыКомплектации.Владелец |ИЗ | Справочник.асВариантыКомплектации КАК асВариантыКомплектации | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.асМодели КАК асМодели | ПО асВариантыКомплектации.Владелец = асМодели.Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МодельАвто = Выборка.модель.ПолучитьОбъект(); МодельАвто.НаименованиеПолное = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"; МодельАвто.Наименование = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение; МодельАвто.Записать(); КомплекАвто = Выборка.комплек.ПолучитьОбъект(); КомплекАвто.Наименование = Стр.Модификация + " " + "кузов" + " " + Стр.Серия; КомплекАвто.НаименованиеПолное = Стр.Модификация + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"+" " + "кузов" + " " + Стр.Серия; КомплекАвто.Владелец = МодельАвто.Ссылка; КомплекАвто.Записать(); КонецЦикла; КонецЦикла; Напиши Для Каждого Стр Из тзКонтрагенты Цикл спрАсМодели = Справочники.асМодели.СоздатьЭлемент(); спрАсМодели.Наименование = Стр.Марка + " " + Стр.Модель + " " + Стр.Поколение + " " + "(" + Стр.Годот + "-" + Стр.ГодДо+ ")"; Попытка; спрАсМодели.Записать(); исключение; Сообщить("Не удалось записать..."); КонецПопытки; КонецЦикла; |
|||
14
roman844
03.02.18
✎
01:26
|
ну и соответсвенно сколько записей будет в тзКонтрагенты столько элементов справочника асМодели у тебя добавится. как то так.
|
|||
15
roman844
03.02.18
✎
01:28
|
а при обходе каждой строки тзКонтрагенты у тебя выполняется запрос, который перебирает данные и перезаписывает их, при чем данные в них только последние тзКонтрагенты
|
|||
16
almaz102
03.02.18
✎
01:29
|
(15) Спасибо!
|
|||
17
roman844
03.02.18
✎
01:30
|
не зачто
|
|||
18
roman844
03.02.18
✎
01:31
|
сегодня только писал обработку по загрузке данных из файла
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |