Имя: Пароль:
1C
1С v8
Перенос из Ексель в УФ.
,
0 temsa
 
13.06.13
06:03
Загружаю данные. Понял что на клиенте читая строки таблицы ексель надо грузить в ТЗ и потом уже на сервере делать обработку.

Поделитесь примером кода чтоб мне не изобретать велосипед.
1 Флудер
 
13.06.13
06:05
Смотри ИТСную "ЗагрузкуИзТабличногоДокумента"
2 el-gamberro
 
13.06.13
06:06
ТЗ недоступна на клиенте.
Непонятно чего ты делать собрался.
Вообще оптимальным считаю решение с загрузкой данных екселя в массив и обработка его на сервере
3 temsa
 
13.06.13
06:22
(1) то что в ИТС там не для УФ а просто для 8.2
(2) Спасибо за уточнения Массив значит.
4 el-gamberro
 
13.06.13
06:28
COMSafeArray (COMSafeArray)
Выгрузить (Unload)
Синтаксис:

Выгрузить()
Возвращаемое значение:

Тип: Массив.

Описание:

Создает массив значений и копирует в него содержимое COMSafeArray.
Если COMSafeArray имеет более чем одно измерение, то элементами полученного массива значений будут вложенные массивы значений, и так от старшего индекса до самого младшего.
5 el-gamberro
 
13.06.13
06:28
COMSafeArray создать через выбор области в екселе.
Удачи!
6 temsa
 
13.06.13
06:46
Вот я попал. Решил на УФ писать конфу ((

(5) Тяжелая зверь пока так и не понял как что к чему
7 el-gamberro
 
13.06.13
06:51
Область = Эксель.ля-ля.Range(x,y);
Массив = Область.Выгрузить() ;
8 temsa
 
13.06.13
06:54
У меня токок это есть:

Попытка
       Excel = Новый COMОбъект("Excel.Application");
       Excel.WorkBooks.Open(ПутьКФайлу);
       ExcelЛист = Excel.Sheets(1);
   Исключение
       Сообщить("Не установлено приложение MS Excel!");
       Возврат;
   КонецПопытки;
   
   ТекущаяСтрока = 10; Пустоты = 0;
   Для к = 10 по 20  цикл
       
       ОбработкаПрерыванияПользователя();
       ТекущаяСтрока = ТекущаяСтрока+1;
       Текавто  = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 1).Text);
       ТекПробег  = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 12).value);
       
   КонецЦикла;
   
   Excel.Quit();
   
   Excel = "";
9 temsa
 
13.06.13
06:54
А как работать с областью не знаю ((((
10 el-gamberro
 
13.06.13
07:00
11 temsa
 
13.06.13
07:07
Кое что начал понимать
Но как быть если заранее не известен область?
12 temsa
 
13.06.13
07:07
Я имею ввиду количество строк
13 kosts
 
13.06.13
07:14
Если будет удобно так работать, то можно попробовать из Excel копировать в 1С через буфер обмена. В обычных формах буфер можно было достать через HTML поле. В некоторых случаях в 1000 раз удобнее было работать. В УФ буфер обмена еще не испытывал...
14 temsa
 
13.06.13
08:48
Пока еще туплю.. (((

Один мне предлагает что сразу на сервере делай. НО попытка ничего не дает не вижу отклика.

ДРугой гворит через ТЗ. ТАк ведь ТЗ не доступно на клиенте. Тогда говоорит введи ТЗ на форму как реквизит.

Короче труба дело пока.
15 kosts
 
13.06.13
09:11
(14) ТЗ или не ТЗ дело одно, а получить данные из Excel, дело другое.
Для передачи на сервер, можно использовать массив, структуру( или соответствие), табличный документ (вроде, но не уверен).
Разберись сперва с получением данных.
16 el-gamberro
 
13.06.13
09:14
17 semiluki
 
13.06.13
09:19
Делай так:

На клиенте
Попытка
       Эксель = Новый COMОбъект("Excel.Application");
       Книга = Эксель.WorkBooks.Open(ИмяФайла, ложь);
       Эксель.Application.Visible= ложь;
   Исключение
       Попытка
           Эксель.Application.Quit();
       Исключение
           Отказ = ИСТИНА;
           Возврат;
       КонецПопытки;
   КонецПопытки;
   Попытка
       КонечнаяСтрокаДанных    = Эксель.Sheets(1).UsedRange.Rows.Count;
       КоличествоКолонокДанных    = Эксель.Sheets(1).UsedRange.Columns.Count;
       ДанныеЭксель            = Эксель.Range(Эксель.Sheets(1).Cells(2,1),    Эксель.Sheets(1).Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных)).Value.Выгрузить();
   Исключение
       Попытка
           Эксель.Application.Quit();
       Исключение
           Отказ = ИСТИНА;
           Возврат;
       КонецПопытки;
   КонецПопытки;
   Попытка
       Эксель.Application.Quit();
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

А полученный массив обрабатывай на сервере
18 kosts
 
13.06.13
09:21
>Но как быть если заранее не известен область?
Цикл до первой пустой строки
19 temsa
 
13.06.13
09:24
(18) Я про то что массив заранее должен быть определен размером.
20 semiluki
 
13.06.13
09:26
(19) Я же тебе написал

КонечнаяСтрокаДанных    = Эксель.Sheets(1).UsedRange.Rows.Count;
       КоличествоКолонокДанных    = Эксель.Sheets(1).UsedRange.Columns.Count;
21 temsa
 
13.06.13
09:49
(17) (20) Огромный сенкс. Все получается.
Но у меня было 150 строк и 12 колонок.  А массив у меня вытащил 12 масивов по каждой колонке.
И как же мне с ним работать если мне нужно было всего 1 я  и 12 я кологнка???
22 el-gamberro
 
13.06.13
09:53
(21) Действительно очень сложная и математически неоднозначная задача :))
23 temsa
 
13.06.13
09:55
(22) Я понимаю ваш сарказм.  Но блин со вложенными массивам я тоже не дружу.
24 semiluki
 
13.06.13
09:59
(23) Первая колонка ДанныеЭксель[0] 12 колнка ДанныеЭксель[11]
25 temsa
 
13.06.13
10:03
(24) ТАк я в отладчике увидел их.

ДанныеЭксель[0] это в свою очередь массив всех значений по первйо колонке аналогично ДанныеЭксель[11]

А мне ведь надо связать их значения по строчно. Неужели мне еще заливать их в ТЗ?
26 vmv
 
13.06.13
10:12
данные листа это матрица, таже ТЗ.

т.е. если известно количество строк/количество колонок, то значение каждой ячейки можно получить получить банальной адресацией и крути эти значения в самых хирых алгоритмах

если данные листа небольшие, а аглоритм действительно хитрый, то я запихую значения листа в двумерное Соответсвие

и тогда можно получить данные ячейки очень просто

СтвДанныеЛиста[НомерСтроки][НомерКолонки]

причем соответствие можно гонять и на сервер и на клиент и на веб как хочь)

эээ либо гонять табличный документ с данными листа и также юзать адресацию в таб. доке
27 AaNnDdRrEeYy
 
13.06.13
10:17
нафиг этот эксель! копируешь данные из экселя в обычный табличный документ и работаешь с ним.
28 DexterMorgan
 
13.06.13
10:21
(27) пользователи не любят кнтрлФ-кнтрлС-кнтрлМ, они любят просто файлик выбрать!