Имя: Пароль:
1C
1С v8
Как в 1С загрузить данные из *.XLS если нет офиса на ПК?
0 heyfec
 
09.12.14
21:04
Как загружать данные из XLS при наличии на компьютере  EXCEL я представляю, а что делать если Excel на компьютере нет, а данные из файла выгрузить в 1С надо(купить или скачать офис не получится нужен лицензионный)?
1 ДенисЧ
 
09.12.14
21:05
2 heyfec
 
09.12.14
21:08
adodb а как он тоже требует Эксель вот пример

     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+ИмяФайла+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодключения);
    ИмяЛиста = "Лист1$";
    СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]";
    RecordSet = Connection.Execute(СтрЗапроса);
3 heyfec
 
09.12.14
21:10
На эту конструкцию сильно ругается программа пита неизвестный оператор.
4 ДенисЧ
 
09.12.14
21:10
(3) И на что ругается конкректно?
5 heyfec
 
09.12.14
21:12
Сейчас
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,72)}: Переменная не определена (ИмяФайла)
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+<<?>>ИмяФайла+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер)
6 g00dtlt
 
09.12.14
21:13
через опенофис можно, но там тоже танцы с бубном
7 ДенисЧ
 
09.12.14
21:14
(5) И в этом тоже ексель виноват???
метлу не предлагаю, она занята...
Но может, лопату совковую?
8 heyfec
 
09.12.14
21:16
Смотри вставляем имя файла получаем вот это
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодключения);
    ИмяЛиста = "Лист1$";
    СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]";
    RecordSet = Connection.Execute(СтрЗапроса);

ответ системы
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,73)}: Неопознанный оператор
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C<<?>>:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер)
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(9,28)}: Обнаружено логическое завершение исходного текста модуля
    RecordSet = Connection.<<?>>Execute(СтрЗапроса); (Проверка: Сервер)
9 heyfec
 
09.12.14
21:18
И еще вот это
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(4,73)}: Неопознанный оператор
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C<<?>>:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"""; (Проверка: Сервер)
{ОбщийМодуль.ЗагрузкаизЭксель.Модуль(9,28)}: Обнаружено логическое завершение исходного текста модуля
    RecordSet = Connection.<<?>>Execute(СтрЗапроса); (Проверка: Сервер)
10 ДенисЧ
 
09.12.14
21:19
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+C:\users\user\documents\book1.xls+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";

За такое я бы сразу того...
Кавычки для кого были придуманы??
11 heyfec
 
09.12.14
21:19
Агде их не хватает?
12 ДенисЧ
 
09.12.14
21:20
Data Source="+C:\users\user\documents\book1.xls+"

Например, тут.
ты вообще - со строками работать умеешь?
13 ДенисЧ
 
09.12.14
21:20
Такой длинный хвостик...
14 heyfec
 
09.12.14
21:22
Умею но эта конструкция не от мира сего
15 heyfec
 
09.12.14
21:23
Ты хочешь сказать что он эту строку складывает по правилам сложения строк?  тогда ясно в чем ошибка.
16 heyfec
 
09.12.14
21:24
Спасибки помогло ошибок больше нет.
17 Йохохо
 
09.12.14
21:24
(15) щас "оператор БСЛ" прилипнет
18 Maniac
 
09.12.14
21:24
Ну у меян решение. Полное. Работает под всеми виндами и линусами, всеми редимами 1С (клиент-серверная, управляемые формы, облака и так далее.

Нативная компонента, на питоне. Читает напрямую все и хавает все.
19 Maniac
 
09.12.14
21:25
Считывает сразу все листы экселя, все возвращает в 1С в виде массива таблицы эксель.
Не нужно выбирать листы, не нужно указывать именя листов и так далее.

Сразу мгновенно все в 1С.
Скорость 100 000 строк в минуту.
20 ДенисЧ
 
09.12.14
21:25
:челодлань.пнг:
21 Господин ПЖ
 
09.12.14
21:30
я даже написать не успел - спроси маню...
22 ДенисЧ
 
09.12.14
21:31
(21) :слоупок.жпг:
)))))
23 Господин ПЖ
 
09.12.14
21:35
гы
24 Garykom
 
гуру
09.12.14
21:38
(0) через GoogleDocs ?
25 heyfec
 
09.12.14
21:42
Так отлично работает только не понятно как определить какую строку и какой столбец как выгружать конструкция типа
ФИО = RecordSet.Fields(1).value;
ничего не говорит как выбрать конкретный столбец и строку в таблице Эксель?
26 ДенисЧ
 
09.12.14
21:46
не... с лопатой я погорячился...
Максимум черпак третьего ученика младшего помощника при холерных бараках...
27 Господин ПЖ
 
09.12.14
21:48
(25) Fields(1) - вот тебе поле
28 heyfec
 
09.12.14
21:49
(27) Как при этой хитрой системе определить какой столбец и какую строку ты выбираешь? Когда работаешь через
Excel = новый COMОбъект("Excel.Application");
там понятно
ФИО = Лист.Cells(2, КолонкаНаименования).Value;
есть строка и столбец, а здесь что вместо этого?
29 Господин ПЖ
 
09.12.14
21:49
Пока НЕ RecordSet.EOF Цикл

//блаблабла

RecordSet.MoveNext();
КонецЦикла;
30 Господин ПЖ
 
09.12.14
21:50
(28) у тебя же написан запрос к листу:

ИмяЛиста = "Лист1$";
    СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]";
31 heyfec
 
09.12.14
21:50
(27) Fields(1) - вот тебе поле. Что поле он все поля по очереди перебирает слева направо и сверху вниз?
32 Господин ПЖ
 
09.12.14
21:51
как с выборкой из результата запроса - так и здесь по сути
33 heyfec
 
09.12.14
21:52
Понятно
34 heyfec
 
09.12.14
21:58
Это как VISUAL BASIC я так с ACCESS работал когда миниСУБД писал.
35 heyfec
 
09.12.14
22:02
Спасибки
36 Мимохожий Однако
 
09.12.14
22:04
Скопируй через буфер обмена в табличный документ 1С. Потом из него грузи.
37 Maniac
 
09.12.14
22:05
(36) сто пудово
38 heyfec
 
09.12.14
22:07
(36)Интересное предложение наверное так действительно проще.
39 GreyK
 
09.12.14
22:08
(36) А это зачем? Доверять пользователю нельзя!
40 heyfec
 
09.12.14
22:13
А теперь полный текст программы
Процедура ЗагрузкаИзЭксель() Экспорт
     Перем Нов;
    
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"C:\users\user\documents\book1.xls"+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодключения);
    ИмяЛиста = "Sheet1$";
    СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]";
    RecordSet = Connection.Execute(СтрЗапроса);
//   Пока НЕ RecordSet.EOF() Цикл
       RecordSet.MoveNext();

       ФИО = RecordSet.Fields(2).value;
//       //...
//сообщить(ФИО);
//   КонецЦикла;
    Connection.Close();
    RecordSet = "";
    
//    Excel = новый COMОбъект("Excel.Application");
//    Книга = Excel.Workbooks.Open("C:\Users\user\documents\Book1.xls");
//    Лист = Книга.Worksheets("Лист1").UsedRange;
//    КолонкаНаименования = 1;
//Для Стр = 1 По 5 Цикл
//        ФИО = Лист.Cells(2, КолонкаНаименования).Value;
//КонецЦикла ;
//    Excel.WorkBooks.Close();
//    Excel = "";

Нов = Справочники.Сотрудники.СоздатьЭлемент();
НовГруппа = Справочники.Сотрудники.СоздатьГруппу();
НовГруппа.Наименование = "Работающие";
НовГруппа.Записать();
Нов.Наименование = "Иванов Иван Иванович";
СпрСотр = Справочники.Сотрудники;
ГруппаРаботающие = СпрСотр.НайтиПоНаименованию("Работающие");
выборка = СпрСотр.Выбрать(ГруппаРаботающие);
Нов.Родитель = ГруппаРаботающие;
Нов.ФИО = ФИО;
Нов.ДатаПриема = '2014.12.12';
Нов.Записать();
КонецПроцедуры
41 Йохохо
 
09.12.14
22:16
(40) НовГруппа = Справочники.Сотрудники.СоздатьГруппу();
.
.
ГруппаРаботающие = СпрСотр.НайтиПоНаименованию("Работающие");
профит
42 heyfec
 
09.12.14
22:20
(41) это просто заготовка лишнее будет удалено
43 heyfec
 
09.12.14
22:26
Процедура ЗагрузкаИзЭксель() Экспорт
     Перем Нов;
     СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+"C:\users\user\documents\book1.xls"+"; Extended Properties=""Excel 8.0;HDR=No;IMEX=1;""";
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодключения);
    ИмяЛиста = "Sheet1$";
    СтрЗапроса = "SELECT * FROM [" + ИмяЛиста+ "]";
    RecordSet = Connection.Execute(СтрЗапроса);
    RecordSet.MoveNext();
    ФИО = RecordSet.Fields(2).value;
    Connection.Close();
    RecordSet = "";
    Нов = Справочники.Сотрудники.СоздатьЭлемент();
    НовГруппа = Справочники.Сотрудники.СоздатьГруппу();
    НовГруппа.Наименование = "Работающие";
    НовГруппа.Записать();
    Нов.Наименование = "Иванов Иван Иванович";
    СпрСотр = Справочники.Сотрудники;
    Нов.Родитель = СпрСотр.НайтиПоНаименованию("Работающие");
    Нов.ФИО = ФИО;
    Нов.ДатаПриема = '2014.12.12';
    Нов.Записать();
КонецПроцедуры
44 Господин ПЖ
 
09.12.14
22:36
реальный программист - из-за одной позиции целая обработка
45 Котокот
 
09.12.14
22:44
(38) Нет, можно еще проще. Размещаешь на форме поле табличного документа, в него копируешь твой эксель через Ctrl+C - Ctrl+V и грузишь. Не надо никаких файлов конвертить/пересохранять/открывать_программно - все средствами 1С: дешево, удобно и практично.
46 Котокот
 
09.12.14
22:45
+(45) Оу, сорри, похоже крымский мускатель в голову дал, в (36) именно об эт ом и написано.
47 Котокот
 
09.12.14
22:47
Пойду лучше, вместо того чобы умничать, книжку почитаю про то, как наши бойцы в 43-м фашистам люлей под Днестром наваляли...
48 Злопчинский
 
09.12.14
23:09
(19) и что у тебя тянется из ячейки - значение или форматное представление?
49 Maniac
 
10.12.14
00:11
Мужики не парьтесь вы с адо и прочими методами. все выкинуть на свалку можно. поверьте человеку который 5 лет загрузку писал.

с АДо все заканчивается когда к вам попадает прайс какого нибудь 95 офиса, а таких навалом просто или еще вагон проблем.

Все это неуниверсально, ломается и выходит из строя.
50 Maniac
 
10.12.14
00:11
Я уже молчу про получение листов. Это просто головной мозг взорвет когда пользователю надо писать имя листа который он хочет считать.
51 Maniac
 
10.12.14
00:12
Самый универсальный сопосб и просто - буфер. Табличное поле на форме 1С. копи-паст - ВСЕ
52 MMF
 
10.12.14
00:28
Например, можно скачать ломаную ActiveX OLE XLSFile (или купить) и получить чтение порядка 150К ячеек в секунду и запись 100К без необходимости иметь офис. http://sm-software.com/ole-xlsfile-benchmark.htm
А если взять ее исходники и за час изваять компоненту (только не на всяком ховне типа питона) - скорость еще выше будет
53 Ctrekoza
 
10.12.14
00:33
(0) А может эта подойдет на сайте 1с?
---------------------------
1С:Предприятие - Работа с файлами
Программа "1С:Предприятие - Работа с файлами" представляет собой отдельный программный продукт, который распространяется бесплатно. Она предназначена для просмотра и редактирования файлов 1С:Предприятия на тех компьютерах, где система 1С:Предприятие не установлена.
http://v8.1c.ru/metod/fileworkshop.htm
54 Garykom
 
гуру
10.12.14
01:17
(52) а где бы исходники то взять? декомпиляцию не предлагать плиз

изваял бы "за час" - ну пусть сутки некий форк ))
55 Худой
 
10.12.14
05:39
(53) Что-то я там не увидел работу с файлами, типа, *.XLS прямо из приложения 1С.
"Программа "1С:Предприятие - Работа с файлами" представляет собой отдельный программный продукт..."
56 Поpyчик-4
 
10.12.14
08:02
(0) На инфостарте уже давно валяются несколько обработок с набором процедур для чтение .xls. Одна от Душелова, другая от Абадонны и ещё какая-то.
57 DrZombi
 
гуру
10.12.14
08:27
(0) Через ADO
58 spectre1978
 
10.12.14
08:53
(49) если в качестве входных данных может быть вообще все что угодно, то да, ADO не вариант. Но если файлы идут из одного источника и их структура боле-менее предсказуема, то ADO лучшее что можно придумать. Потому как бесплатно и есть на любом компе с виндой.

Хотя если действительно что угодно - ну хрен знает... мне как-то прайс попался из-под навижена... вроде на экселе... но цены были сделаны надписями... Т.е. в каждую ячейку был вкрячен объект "надпись" (тот что с панели рисования) и в нем цена. Вот и подумайте - ЭТО чем-нибудь считать получится?
59 SleepyHead
 
гуру
10.12.14
09:04
Ну вот зачем так сложно? Нет экслея, конвертирую с помощью Yoksel файл в формат MXL и читаю средствами 1с.

Второй вариант - ставить Open Office, конвертировать в csv и читать оттуда опять же средствами 1с.
60 Smallrat
 
10.12.14
09:28
(58) вот не на любом компе с виндой. До сих пор не могу найти компоненту для WinServer 2012 R2
61 anatoly
 
10.12.14
09:28
(36) я так понял даже открыть нет возможности...
хотя можно в гмейле или мейл.ру прицепить к письму и открыть.
и еще обработка такая на ИТС есть: ЗагрузитьИзТабличногоДокумента.
62 IamAlexy
 
10.12.14
09:29
блин ну очевидно же - сохраните файл в XLSX и разберите файл средствами 1С

это кстати еще и самый быстрый способ загрузки файлов...
63 MMF
 
10.12.14
09:30
(54) ищущий, да обрящет - например: http://rutracker.org/forum/viewtopic.php?t=3575031
64 IamAlexy
 
10.12.14
09:31
http://infostart.ru/public/142187/  и еще 100500 примеров по поиску по строке "чтение xlsx"
65 spectre1978
 
10.12.14
10:55
(60) в 2012 похоронили OLE DB?
66 Garykom
 
гуру
10.12.14
14:53
(63) ок, спасибо

постараюсь сделать
67 Smallrat
 
10.12.14
15:08
(65) вот эта штука 2012 не поддерживает
http://www.microsoft.com/en-US/download/details.aspx?id=13255
68 etc
 
11.12.14
02:21
(50) тоже решаемо. Список листов получается через то же АДОДБ.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.