Имя: Пароль:
1C
1С v8
Вывести Таблицу Значений в Табл Документ
,
0 Black Dragon
 
19.12.14
14:37
Доброго всем дня!

Есть запрос, который выдает более 2 млн строк выборки

Результат нужно вывести во внешн файл либо как текст либо как таб док

Есть ли штатные функции по сабжу?

И не маловажно чтобы ОЗУ не сильно загружалась, ибо есть вылеты предприятия по выделению памяти!

Всем спасибо!
1 Chai Nic
 
19.12.14
14:37
ЗаписьТекста
2 ДенисЧ
 
19.12.14
14:39
А можно вопрос?
Нафейхоа такое нужно?
3 Chai Nic
 
19.12.14
14:39
И не делать выгрузку запроса в таблицу значений, ибо нефиг - делать перебор выборки
4 Black Dragon
 
19.12.14
14:40
(1) пробовал, долго работает
Может возможно писать в файл не построчно а большими объемами?
Например, если ЗаписьТекста.Записать(Буфер), где буфер это несколько строк, например 100, разделенных Символы.ПС ???
5 ejikbeznojek
 
19.12.14
14:41
(2) Распечатают, и читать будут)))
6 Black Dragon
 
19.12.14
14:41
(2) нужно для другой уч системы
7 ejikbeznojek
 
19.12.14
14:42
(0)  Чтобы не держать в памяти большой табдок, сохрани эксельку и построчно выводи в неё)))
8 ДенисЧ
 
19.12.14
14:44
(6) Так пусть другая учсистема сама подключится и читает...
9 Chai Nic
 
19.12.14
14:44
(4) Ну так формируй большие куски, содержащие несколько строк.. в чем проблема?
10 Black Dragon
 
19.12.14
14:45
(3) это конечно сэкономит оперативу, не спорю, вывод хочется оптимизировать, потому и сабж такой!

Так по сабжу собственно, есть штатные механизмы ???
11 Black Dragon
 
19.12.14
14:45
(9) не пробовал так никогда, вот спросил, раз такое возможно, буду попробывать!
12 ДенисЧ
 
19.12.14
14:46
(10) ЗначениеВФайл
Только нужно на сервере 64бит делать.
13 ДенисЧ
 
19.12.14
14:46
(11) "попробывать"
У тебя буква ё на клавиатуре западает...
14 Black Dragon
 
19.12.14
14:47
(13) АГА_И_ПРОБЕЛ_СЛОМАЛСЯ
15 vicof
 
19.12.14
14:48
(14) И капс запал
16 hhhh
 
19.12.14
14:52
(10) ну, два миллиона - это детские размеры. Стоит ли париться по этому поводу?
17 Black Dragon
 
19.12.14
14:53
(16) как сказать, консоль запросов вылетает по памяти! при формировании ТабДок видимо!
18 hhhh
 
19.12.14
14:55
(17) два миллиона строчек? хм.
19 Black Dragon
 
19.12.14
14:55
2754386 строк
20 sapphire
 
19.12.14
14:58
(0) В текст выводить + лучше порциями
21 antoneus
 
19.12.14
15:00
Я, наверно, скажу сейчас глупость, но, может, старый добрый TextStream?
22 Зеленый пень
 
19.12.14
15:05
(4) "пробовал, долго работает" - думаю, проблема не в ЗаписиТекста, а в том, какие данные туда отправляешь.
Может, ты формируешь строку как Номенклатура.Код или СокрЛП(Контрагент) - конечно, будет долго.
23 Black Dragon
 
19.12.14
15:17
(21) это через СОМ?
24 Necessitudo
 
19.12.14
15:19
ПостроительОтчета как-то получше будет.
25 Black Dragon
 
19.12.14
15:20
Объект TextStream обеспечивает доступ к текстовым файлам и содержимому текстовых потоков. Данный объект возвращается методами
OpenTextFile() [объект FileSystemObject];
CreateTextFile() [объект FileSystemObject];
OpenAsTextStream() [объект File].
Свойствами:
StdOut,StdIn,StdErr [объект WshScriptExec]
26 antoneus
 
19.12.14
15:40
(23) ага
27 Black Dragon
 
19.12.14
15:52
(20) это очень хорошо помогло:
19.12.2014 15:38:59Выведено 500 строк
19.12.2014 15:38:59Выведено 500 строк
19.12.2014 15:39:00Выведено 500 строк
19.12.2014 15:39:00Выведено 500 строк
19.12.2014 15:39:00Выведено 500 строк
19.12.2014 15:39:00Выведено 500 строк
19.12.2014 15:39:00Выведено 500 строк

вот первая и посл строки:

19.12.2014 15:31:01 Выполняется формирование выходного документа...
19.12.2014 15:31:01Выведено 500 строк

19.12.2014 15:39:01Выведено 500 строк
Текстовый файл ТаблицаСверки.txt успешно сохранен!
19.12.2014 15:39:01 Обработка завершена

В итоге примерно 8 минут!
28 ИС-2
 
naïve
19.12.14
15:59
(27) и как анализировать будешь?

Вывести ТЗ в Таб док быстрее всего через конструктор запроса с обработкой результата. В качестве источника указываешь ТЗ.
Ну или построитель отчета
29 Бубка Гоп
 
19.12.14
15:59
(27) 8 минут? жесть! попробуй увеличить порции, 500 строк - вообще копейки. хотя конечно что в строках - одному тс известно...
30 Black Dragon
 
19.12.14
16:03
ХЕХ! Это ж бубль гум!

это из лога строки!
31 Зеленый пень
 
19.12.14
16:18
Пример.

    ВремяНачала = ТекущаяДата();
    
    ЗаписьТекста = Новый ЗаписьТекста("D:\test.txt", КодировкаТекста.ANSI);
    
    Для сч = 1 По 2000000 Цикл
        
        Если сч%1000 = 0 Тогда
            ОбработкаПрерыванияПользователя();
            Состояние("Выведено строк: " + сч);
        КонецЕсли;
        
        ЗаписьТекста.ЗаписатьСтроку("строка " + сч + ": 123 123 15465465 123 123 15465465 123 123 15465465 123 123 15465465 123 123 15465465 123 123 15465465 123 123 15465465 123 123 15465465 ");
    
    КонецЦикла;
    
    ЗаписьТекста.Закрыть();
    
    Сообщить("Затрачено секунд: " + (ТекущаяДата() - ВремяНачала));



Затрачено секунд: 25

Вывод: автор не там ищеттормоза.
32 Лефмихалыч
 
19.12.14
16:24
(0) сохранить в xml||dbf||mdb||что угодно еще
33 Лефмихалыч
 
19.12.14
16:25
табличный документ с 2млн строк ни одному человеку во вселенной не может быть нужен. Он нужен какой-то программе, а программы могут всё читать
34 Black Dragon
 
19.12.14
16:29
(33) верно мыслите!

в др уч системе этот файл будет прочитан и проанализирован...меня это не касается, что с ним там будут делать, пусть хоть битовые маски накладывают)
35 Black Dragon
 
19.12.14
16:34
(31) все тут нормаль! время правильно считаю:

                Если СчСтр < КолЗаписейВФайл Тогда
                    Если СчСтр = 1 Тогда
                        Стр = "" + ДатаПериод + ";" + ВремяПериод + ";" + ТипДвижения + ";" + Выборка.Заказ.НомерЗаказа + ";" + КодТовара + ";" + КоличествоОборот + ";" + Выборка.Вычерки;// + ";" + Цена;
                    Иначе
                        Стр = Стр + Символы.ПС + "" + ДатаПериод + ";" + ВремяПериод + ";" + ТипДвижения + ";" + Выборка.Заказ.НомерЗаказа + ";" + КодТовара + ";" + КоличествоОборот + ";" + Выборка.Вычерки;// + ";" + Цена;
                    КонецЕсли;    
                Иначе
                    Стр = Стр + Символы.ПС;
                    ТекстДок.Записать(Стр);
                    СчСтр = 0;
                    Сообщить("" + ТекущаяДата() + "Выведено " + КолЗаписейВФайл + " строк");
                КонецЕсли;
36 Лефмихалыч
 
19.12.14
16:46
xml - онле
csv - для быдлокодеров
37 Бубка Гоп
 
19.12.14
16:47
(36)
а dbf тогда для кого? подонкоф?
38 Лефмихалыч
 
19.12.14
16:48
(37) для клюшкодавов
39 Зеленый пень
 
19.12.14
16:56
(35)  Выборка.Заказ.НомерЗаказа - о чем и речь. Это тебе и дает тормоза. Сделай хотя бы замер производительности.
40 Black Dragon
 
19.12.14
17:09
(39) да все норм уже, как буфер записи прикрутился все стало ОК!
эти тормоза несущественны по сравнению с записью в файл построчно!
а вот доп реквизиты объектов плохо влияют на производительность самого запроса!
41 Black Dragon
 
19.12.14
17:17
у меня базы древние, от 8.1 идут, сейчас на 8.3.5 в режиме совместимости работаем