Имя: Пароль:
1C
1С v8
1с и Ексель
, ,
0 Singenor
 
22.11.12
16:08
Понимаю, что тема заезженная, но все же, у меня есть файл выгрузки базы из сапа, данные в экселе разбросаны по файлу( начинаются данные с позиции С7, и дальше идет таблица с данными, вот теперь вопрос, как мне выгрузить эти данные в саму 1ску с созданием документов? ну точнее как потом создать документы с заполнением данных я знаю, не знаю как выгрузить данные, в дбф как то проще было)
1 Singenor
 
22.11.12
16:08
Выгрзука из екселя в 1с 8.2
2 Heckfy
 
22.11.12
16:10
3 Singenor
 
22.11.12
16:10
Док = ПолучитьCOMОбъект(ПутьКФайлу);
   
   НомерСтраницы = 1;
   
   Пока СокрЛП(Док.Sheets(1).Cells(НомерСтроки,1).Value) <> "" Цикл
       // Если значение ячейки = "Begin_Doc", тогда создаем новый документ
       Если СокрЛП(Док.Sheets(1).Cells(НомерСтроки,1).Value) = "Begin_Doc" Тогда
           // Переход на след. строку с реквизитами
           
           Номер        = СокрЛП(Док.Sheets(1).Cells(НомерСтроки,1).Value);
           Дата        = Дата(СокрЛП(Док.Sheets(1).Cells(НомерСтроки,2).Value));

как вариант тут дальше прописывать названия полей которые мне нужны, и строки в экселе, но мне че то не особо этот вариант нравится
4 vde69
 
22.11.12
16:10
5 Singenor
 
22.11.12
16:13
буду ковырять, спс
6 Singenor
 
22.11.12
16:14
тока еще вопрос:
СоздатьОбъект
это ведь типовая процедура? почему 1ска ругается что она не определена?
7 vde69
 
22.11.12
16:15
(6) 1с бывает 7.7 и 8.х
8 Singenor
 
22.11.12
16:16
(7) не понял к чему это
9 Singenor
 
22.11.12
16:17
новый ком объект потому что в 8)
10 vde69
 
22.11.12
16:17
(8) "СоздатьОбъект"  - это из синтаксиса 7.7
в 8.х вместо него "Новый"
11 Heckfy
 
22.11.12
16:18
Замени на:
Новый COMОбъект("Excel.Application");
12 Singenor
 
22.11.12
16:21
да, понял это)
13 Singenor
 
22.11.12
16:22
теперь такой вопрос, как вручную задать чтобы поиск шел например с 10 строки? я делаю поле с числовым типом, ввожу туда 10, и в екселе сразу с 10 строки поиск начинается?
14 Singenor
 
22.11.12
16:23
для Строка = 1 по ВсегоСтрок цикл
   
   для Колонка = 1 по ВсегоКолонок цикл
       Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
   КонецЦикла;
в Строка просто передаю то, что у меня будет вводиться в числовом поле?
15 Singenor
 
22.11.12
16:24
ТО есть ПолеДля ввода числа - реквизит

для Строка = ПолеДлявводачисла по ВсегоСтрок цикл
   
   для Колонка = 1 по ВсегоКолонок цикл
       Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
   КонецЦикла;
16 Singenor
 
22.11.12
16:24
ок?
17 vde69
 
22.11.12
16:25
(16) чего кликаешь? я тебе дал рабочие процедуры, просто скопируй и все
18 Singenor
 
22.11.12
16:25
дааа)
19 Singenor
 
22.11.12
16:27
(17) мне надо понять сразу) чтоб потом не спрашивать то же самое)
20 Dionis Sergeevich
 
22.11.12
16:27
Щас из своей обработочки скопипастю
21 Dionis Sergeevich
 
22.11.12
16:31
Попытка
       Эксель =  Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить("Excel не установлен");
   КонецПопытки;
   
   Попытка
       Файл = Эксель.WorkBooks.Open(ПутьКфайлуТолстый);
   Исключение
       Сообщить("Файл не найден");
       ЗакрытьЭксель(Эксель);
   КонецПопытки;

Лист2 = Файл.WorkSheets(2);
   Лист5 = Файл.WorkSheets(5);
// запись
 Лист5.Cells(8,3).Value = Результат.НАчальноеСальдо;
       Лист5.Cells(9,3).Value = Результат.СуммаОборотДТ;
       Лист5.Cells(11,3).Value = Результат.СуммаОборотКТ;

//чтение
 А = Лист5.Cells(8,3).Value;
Б = Лист5.Cells(9,3).Value;
В = Лист5.Cells(11,3).Value;

Эксель.Application.Quit();
22 Dionis Sergeevich
 
22.11.12
16:33
А дальше оперируй циклами-счетчиками для обхода строк-столбцов
23 Singenor
 
22.11.12
16:52
(21) вот я тут не понимаю, смотри
Лист5.Cells(11,3).Value = Результат.СуммаОборотКТ;
к примеру, 11 и 3 позиции соответственно, это уже считай жеско задано, и именнов  этой области будет искаться запрашиваемый результат, а у меня может один раз 11, 3 оказаться, другой раз 12, 4, и т.д. Как сделать чтобы универсальный поиск был? пока приходит тока идея делать выбор на запрашиваемое значение, то есть типа там Наименование у меня берется из определенной колонки, Б4 например, нормально ведь так? или не прокатит?
24 Heckfy
 
22.11.12
16:54
Как осуществить поиск / замену значений ячеек на листе
//Выбираем область поиска - весь лист
ОбластьПоиска = Лист.Cells;

// Укажем начало листа
НачалоЛиста = Диапазон.Cells(1, 1);

// Ищем ячейку с текстом, указанным в переменной ТекстДляПоиска,
//укажем откуда искать - с начала листа
ОбластьПараметр = ОбластьПоиска.Find(ТекстДляПоиска, НачалоЛиста);


// Если нашли, заполняем значением из переменной Значение
Если ОбластьПараметр <> неопределено Тогда
   ОбластьПараметр.Value = Значение;
КонецЕсли;

Замечание. Текст для замены лучше выделять, например, в угловые скобки, аналогично параметрам макета в 1С. Это улучшит наглядность, визуально отделит от рабочего текста.
Текст для поиска в этом случае будет выглядеть так:

ТекстДляПоиска = "<ИмяДляЗамены>"
25 Singenor
 
22.11.12
18:05
пишу:
Эксель = Новый COMОбъект("Excel.Application");
   Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
   Лист = Эксель.WorkSheets(1);
   ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
   ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
   КодТовара             = СокрЛП(Книга.Sheets(1).Cells(НомерСтроки,1).Value);
   Наименование         = СокрЛП(Книга.Sheets(1).Cells(НомерСтроки,2).Value);
   Количество             = СокрЛП(Книга.Sheets(1).Cells(НомерСтроки,3).Value);
   Цена                 = СокрЛП(Книга.Sheets(1).Cells(НомерСтроки,4).Value);
выдает ошибку:

{Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Cells)
   КодТовара             = СокрЛП(Книга.Sheets(1).Cells(НомерСтроки,1).Value);
по причине:
Произошла исключительная ситуация (0x800a03ec)
((