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


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к строк

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует