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

а) полное чтение экселя
б) полная синхронизация со справочником
в) создание регистрации цен

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

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

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

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

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

Плюсы

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

У меня пока проблем не возникало с форматами и прочим, работает быстрее комки.
26 MaiorovYury
 
24.05.18
11:12
(23) я так изначально и делал, и как раз у меня копируется 65534 строк - не больше
Точно у вас работает с 65+к строк?
27 Maniac
 
24.05.18
11:12
вышли мне файл
[email protected]
28 MaiorovYury
 
24.05.18
11:21
(27) отправил
Но специально попробовал сделать файл с нуля
Добавил туда 70к строк и все равно не копируется
29 ptiz
 
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();
    Исключение
    КонецПопытки;
    
    Возврат Данные;

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

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

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

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

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

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

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

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