Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Копирование 65000 строк из Excel в табличный документ

Копирование 65000 строк из Excel в табличный документ
Я
   MaiorovYury
 
24.05.18 - 10:22
Всем доброго утра!
Если попытаться скопировать 100,000 строк из xlsx файла в табличный документ, то копируется только 65,534 строк
Можно это как-то обойти?
Первая мысль была - сделать чтение из Excel по кнопке через com объект
Но чтение 100,000 строк в 4 колонках занимает минут 20, так что это не вариант
 
 
   _Дайвер_
 
1 - 24.05.18 - 10:26
(0) Всегда было интересно, что это за документы такие где овер дохрена строк в тч?
   PR
 
2 - 24.05.18 - 10:26
(0) Пипец у людей проблемы
Ну так скопируй за два раза по частям
   PR
 
3 - 24.05.18 - 10:27
(1) Список документов в базе, например
Примеров дохрена, если честно
   0xFFFFFF
 
4 - 24.05.18 - 10:28
(2) видимо он делает обработку для тупого юзера, который не сможет скопировать за два раза.
   volfy
 
5 - 24.05.18 - 10:28
(1) Прайсы какие нить наверное
   _Дайвер_
 
6 - 24.05.18 - 10:31
Таблица значений и массив — это программные объекты, существующие только в памяти. Соответственно, их размер ограничивается количеством памяти.
   lodger
 
7 - 24.05.18 - 10:32
(0) "как-то обойти" - да, но в неумелых руках это превращается в "занимает минут 20"
   _Дайвер_
 
8 - 24.05.18 - 10:32
ак, максимально допустимое количество строк табличной части объектов, хранимых в базе данных (например, документов), составляет 99 999. Разработчики платформы объясняют это ограничение тем, что оно введено из соображений производительности и объемов используемой памяти — табличная часть и набор записей являются гранулой манипулирования данными соответствующих таблиц, поэтому использование очень больших объемов в одной табличной части или наборе записей может привести к существенным технологическим проблемам прикладного решения. И экономия длины записи не являлась определяющим критерием.
   craxx
 
9 - 24.05.18 - 10:33
(5) в прайсах запчастей (например Тойоты) бывает и более миллиона позиций.
   dezss
 
10 - 24.05.18 - 10:34
кастую Маню в тему)
 
 Рекламное место пустует
   aka MIK
 
11 - 24.05.18 - 10:34
   Maniac
 
12 - 24.05.18 - 10:36
(0) у меня 100 000 загружается в 1С
а) полное чтение экселя 
б) полная синхронизация со справочником
в) создание регистрации цен

37 СЕКУНД ВСЕ ВМЕСТЕ
   Cool_Profi
 
13 - 24.05.18 - 10:36
Поставь ексель 2007 и выше
   aka MIK
 
14 - 24.05.18 - 10:36
(0) http://catalog.mista.ru/public/163640/ грузит практически мгновенно
   Mort
 
15 - 24.05.18 - 10:40
(0) А что потом делать с этим табличным документом?
   Maniac
 
16 - 24.05.18 - 10:41
(14) ком объекты. тьфу. на клиент-серверных базах будут проблемы.
   MaiorovYury
 
18 - 24.05.18 - 10:44
У меня это загрузка коэффициентов для 200,000 городов для доставки
Потом оттуда оно заливается в регистр сведений
Если заполнить данные в табличном документе потом уже минут за 5 оно все копируется
   MaiorovYury
 
19 - 24.05.18 - 10:46
(2), (4) а вы пытались скопировать два раза?
У меня на 8.3.12.1412 даже за два раза не копируется
Если копируешь вторые 65к строк 1с почему-то вставляет одну строку, причем одну рандомную строку!)))
   MaiorovYury
 
20 - 24.05.18 - 10:48
(13) у меня Excel 2016 так что тут не в Excel проблема, а в 1с
   MaiorovYury
 
21 - 24.05.18 - 10:48
(14) спасибо! Посмотрю
   _stay true_
 
22 - 24.05.18 - 11:08
(0) В относительно свежих релизах платформы добавили чтение экселек средствами платформы.

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение); 

    Построитель = Новый ПостроительЗапроса;
    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьМакета);
    Построитель.ИсточникДанных = ИсточникДанных;
    Построитель.Выполнить();
    ТабЗначений = Построитель.Результат.Выгрузить();
   Maniac
 
23 - 24.05.18 - 11:09
Чувак ДАРЮ тебе секрет.

1) Делаешь в форме обработки поле табличный документ.
2) Открываешь свой ФАЙЛ в экселе
3) Копируешь ВСЕ
4) в 1С становишся в табличный документ
5) ВСТАВИТЬ

выаля - весь твой экселевский файл со всеми данными мигом в 1С в табличном документе, который можно считать за доли секунд.

Плюсы

а) Ни капли кода по какому то чтению экселей
б) Скорость
в) Работать будет на любой клиент-серверной базе, даже если сервер линукс и прочее.
   Maniac
 
24 - 24.05.18 - 11:10
(22) фигня.
а) не сможет прочитать много форматов экселя
б) не работает с книгами и множеством листов
   _stay true_
 
25 - 24.05.18 - 11:12
(24) В 8.3.14 добавят)))

У меня пока проблем не возникало с форматами и прочим, работает быстрее комки.
   MaiorovYury
 
26 - 24.05.18 - 11:12
(23) я так изначально и делал, и как раз у меня копируется 65534 строк - не больше
Точно у вас работает с 65+к строк?
   Maniac
 
27 - 24.05.18 - 11:12
вышли мне файл
support@subsystems.ru
   MaiorovYury
 
28 - 24.05.18 - 11:21
(27) отправил
Но специально попробовал сделать файл с нуля
Добавил туда 70к строк и все равно не копируется
   ptiz
 
29 - 24.05.18 - 11:25
(0) " чтение 100,000 строк в 4 колонках занимает минут 20" - ты обходом ячеек, что-ли, читаешь?

Функция ЗагрузитьФайлExcelВМассив(ИмяФайла, ТекстОшибок = "") Экспорт

     // Пытаемся создать новый объект

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
    Исключение
        ТекстОшибок = "Ошибка при попытке создать COMОбъект ""Excel.Application"": " + Символы.ПС + ОписаниеОшибки();
        ОбщегоНазначения.СообщитьОбОшибке(ТекстОшибок);
        Возврат Неопределено;
    КонецПопытки;              
    
    // Пытаемся открыть рабочую книгу

    Попытка
        Excel.Application.Workbooks.Open(ИмяФайла);
    Исключение
        Excel.Quit();
        ТекстОшибок = "Ошибка при попытке открыть рабочую книгу файла: " + ИмяФайла + Символы.ПС + ОписаниеОшибки();
        ОбщегоНазначения.СообщитьОбОшибке(ТекстОшибок);
        Возврат Неопределено;
    КонецПопытки;
    
    Попытка
        Данные = Excel.ActiveSheet.UsedRange.Value.Выгрузить();
    Исключение
        Excel.Quit();
        ТекстОшибок = "Ошибка при получении данных: " + Символы.ПС + ОписаниеОшибки();
        ОбщегоНазначения.СообщитьОбОшибке(ТекстОшибок);
        Возврат Неопределено;
    КонецПопытки;
    
    Попытка
        Excel.ActiveWorkbook.Close(0);
        Excel.Quit();
    Исключение
    КонецПопытки;
    
    Возврат Данные;

КонецФункции
   dezss
 
30 - 24.05.18 - 11:25
(26) этот момент настал...
назови конфу, клиент-серверная она или файловая.
   Maniac
 
31 - 24.05.18 - 11:27
Только что вставил - все вставилось.
все 70121 строк
   Maniac
 
32 - 24.05.18 - 11:28
(29) в топку. Требует наличия экселя.

Не будет или очень криво будет работать с книгами.
   dezss
 
33 - 24.05.18 - 11:28
Я вот помню, что в рознице не получалось создать документ больше 65к строк...это Розница 1 и база файловая.
Сильно разбираться не стал, просто забил
 
 
   Maniac
 
34 - 24.05.18 - 11:28
я как то и 250 000 вставлял в табличное поле.
   Maniac
 
35 - 24.05.18 - 11:30
(33) вообще то в 1С - 99 999 строк в табличных частях.
Но даже не смотря на это можно впихнуть и больше.

Просто номера строк будут идти все 99 999
И это может сказаться на скорости проведения документов ну и не дай бог если где то номер строки в запросах учавствует
   dezss
 
36 - 24.05.18 - 11:31
(35) на ут 10.3 клиент-серверноей действительно было 99 999, а вот на файловой рознице было около 65к. Вот точно помню это.
   Maniac
 
37 - 24.05.18 - 11:31
Итого вставка в табличное поле занимает 6-7 секунд.
Размер присланного мне файла 70121 строка
   MaiorovYury
 
38 - 24.05.18 - 11:32
(31) сейчас заметил, что у меня 32-разрядный excel
Может в этом дело?
У вас 64х ?
   Maniac
 
39 - 24.05.18 - 11:33
У меня вообще опенофис
   Maniac
 
40 - 24.05.18 - 11:34
Моей загрузкой твой файл в 70 000 загружается в 1С за 1 СЕКУНДУ!
   Вафель
 
41 - 24.05.18 - 11:35
(23) копипаст не обязательно делать. табличный документ умеет читать ексель
   Maniac
 
42 - 24.05.18 - 11:36
(41) если сможет. он не все форматы читает.
но если всего 1 файл надо постоянно грузить и он будет читаться то да.

конечно же стоит сделать код. чем постоянно клацать
   MaiorovYury
 
43 - 24.05.18 - 11:37
Ааааааа
Чуваки
Я скопировал в блокнот, скопировал из блокнота в 1с - все вставилось за пару секунд!!!
   Maniac
 
44 - 24.05.18 - 11:38
(43) ну дык я тоде удивился с самого начала. в 1С нет ограничений у табличного поля по размеру строк
   MaiorovYury
 
45 - 24.05.18 - 11:38
То есть открыл excel, скопировал 200к строк, вставил их в блокнот - туда вставились все строки, скопировал данные в блокнтое - вставил в 1с
И все! Работает!
   Aleksey
 
46 - 24.05.18 - 11:40
1с вообще как то странно работает с екселем при копировании через буфер в табличный документ. Иногда данные портит.
   trdm
 
47 - 24.05.18 - 11:41
(0) > Можно это как-то обойти?

Если надо машинно обрабатывать xlsx, то можно парсить его вручную. Там внутри xml.
   MaiorovYury
 
48 - 24.05.18 - 11:42
Я кажись понял в чем тут дело
Если копировать в таб док через "специальная вставка" там есть 3 варианта
Текст
Текст в формате юникод
Формат Microsoft Excel 97 - 2003

Видимо по умолчанию используется формат excel 2003, а там ограничение в 65к строк

Если использовать первый или второй вариант, то все копируется

Загадка раскрыта)


Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь во втором сообщении вам дадут решение, а в двадцатом дадут правильное решение. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует