|
v7: ТЗ, быстро "сохранить" наружу от 1С и потом "быстро" загрузить обратно...? | ☑ | ||
---|---|---|---|---|
0
Злопчинский
17.01.20
✎
19:38
|
Есть ТЗ, может быть большая, десятки-сотни тысяч строк.
как _максимально_ быстро сохранить "наружу" от 1С (на диск), потом как _максимально_ быстро загрузить "внутрь" в 1С (на диск)..? лучший вариант - с сохранением внутреннего представления, крайний вариант - только внешнее представление? лучший вариант - штатными 1С возможностями, крайний вариант - использование нештатного (типа скюлайт) что предложите использовать? (только не 8-ку! ;-) спсб. |
|||
1
Провинциальный 1сник
17.01.20
✎
19:56
|
Лучше работать с индексированной таблицей из 1с++, она своим методом ВФайл сохраняется намного быстрее штатной платформенной процедуры ЗначениеВФайл. Даже если исходно есть обычная ТЗ, то получить из неё ИТЗ и сохранить - на порядок быстрее прямого сохранения.
|
|||
2
Garykom
гуру
17.01.20
✎
20:07
|
(0) 1С 7.x : ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр
Но лучше переписать код/алгоритм так чтобы не нужна была эта большая ТЗ. Короче лучше всего отказаться от 8-ки. Для 8-ки я кста вот тестил тут с ТЗ глянь в конце Удаление строк из таблицы значений по номеру |
|||
3
astrawalk
17.01.20
✎
20:09
|
(0) Таблица mxl
|
|||
4
Garykom
гуру
17.01.20
✎
20:09
|
(2) *отказаться от 77-ки.
|
|||
5
astrawalk
17.01.20
✎
20:11
|
(0) или XBase
|
|||
6
Garykom
гуру
17.01.20
✎
20:11
|
(3) Да уж сказанул.
1. Каким образом быстро из ТЗ засунуть в mxl? 2. Про глюк с сохранением больших mxl на диск слышали? |
|||
7
Провинциальный 1сник
17.01.20
✎
20:13
|
+(1) Вот специально тестовый пример сделал, табличку с сотней строк сохранял через ЗначениеВФайл - порядка 70 секунд само сохранение заняло. А если её загрузить в индексированную таблицу, а потом сохранить родным методом - ДВЕ секунды. Включая загрузку из ТЗ.
|
|||
8
Провинциальный 1сник
17.01.20
✎
20:13
|
(7) Сотня ТЫСЯЧ строк, конечно же..
|
|||
9
Злопчинский
17.01.20
✎
20:15
|
(1) думал об этом. использовать есть возможность.
|
|||
10
Злопчинский
17.01.20
✎
20:17
|
(2) "Переписать" - смысла не имеет. по сути ТЗ - большая плоская таблица, а отчет - универсальный построитель/группировщик. ТЗ собирается долго, а крутить-анализировать несколько раз (в разное время/сесси) в разных разрезах хочется, и чтобы каждый раз не насчитыаать ТЗ заново между сессиями - хочется "хранить". Этакий миниолап
|
|||
11
Злопчинский
17.01.20
✎
20:19
|
(7) сохранял во внутреннем формате?
сколько обьем файла получился? . сколько чтение обратно в ТЗ занимает? |
|||
12
Провинциальный 1сник
17.01.20
✎
20:23
|
(11) Во внутреннем. Там похоже характерный для 7.7 баг с нелинейным ростом времени сохранения в файл от размера объекта. А в ИТЗ сохранялка своя, без этого бага. Размеры файлов практически одинаковые получились. Загружать не пробовал.
|
|||
13
Злопчинский
17.01.20
✎
20:24
|
(12) лентяй, как все 1сники ;-)
|
|||
14
Garykom
гуру
17.01.20
✎
20:27
|
(2) Походу я уже забыл 7.7
Короче забираю свои слова назад. ЗначениеВСтрокуВнутр() на 7.7 пипец как тормозно на больших ТЗ Сча пробую с ВК |
|||
15
Злопчинский
17.01.20
✎
20:35
|
(14) см. (7)
. таблица с примерно 3 агрегатными колонками, остальные - примитивные типы, всего ~10 (3 - агрегатные типы, 4 - число, 3 строка нефиксированной длины) |
|||
16
Злопчинский
17.01.20
✎
20:37
|
(14) я потому и спрашивал, бо когда на ТСД-склад - задания в виде ТЗ во внешних файлах - сброс/восстановление некритичнор блыо бо обьемы, но уже понятно что тормозно будет на обьемах больших
|
|||
17
Злопчинский
17.01.20
✎
20:37
|
..это я давно делал, сейчас "задача" чуть иная
|
|||
18
Garykom
гуру
17.01.20
✎
20:39
|
Протестируй плиз
|
|||
19
Garykom
гуру
17.01.20
✎
20:47
|
(18) Блин у СоздатьОбъект("Текст"); тоже проблема большого объема.
100к строк идеально за 7 секунд, а вот 200к строк уже полторы минуты. Короче бьешь на куски по 50к строк или меньше и сохраняешь штатно средствами 1С 7.7 в несколько файлов через Текст. |
|||
20
Garykom
гуру
17.01.20
✎
20:54
|
Кстати XBase для 1С 7.7 это отличный вариант, очень шустрый
|
|||
21
Злопчинский
17.01.20
✎
21:00
|
(20) кстати.
|
|||
22
План счетов
17.01.20
✎
21:01
|
Давно делал, так вроде самое быстрое было
Это читаем из файла FSO=СоздатьОбъект("Scripting.FileSystemObject"); File=FSO.GetFile(ИмяФНов); TextStream=File.OpenAsTextStream(1); Пока TextStream.AtEndOfStream=0 Цикл //3 строки в текстовом файле = 1 строке в ТЗ Стр_ = TextStream.ReadLine(); Если НомерСтроки = 1 Тогда ТЗ.НоваяСтрока(); ТЗ.День = Дата(Стр_); НомерСтроки = НомерСтроки + 1; ИначеЕсли НомерСтроки = 2 Тогда ТЗ.ДанныеТаблицы = ЗначениеИзСтрокиВнутр(Стр_); НомерСтроки = 3; ИначеЕсли НомерСтроки = 3 Тогда // Тут какаято процедура была, удалил НомерСтроки = 1; КонецЕсли; КонецЦикла; TextStream.Close(); |
|||
23
Garykom
гуру
17.01.20
✎
21:02
|
(22) Кому не влом проверьте через FSO на ТЗ 100к строк из (18)
|
|||
24
План счетов
17.01.20
✎
21:03
|
Сохранение
FSO=СоздатьОбъект("Scripting.FileSystemObject"); TextStream=FSO.CreateTextFile(ИмяФНов); ТЗ.Сортировать("День"); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл TextStream.WriteLine(ТЗ.День); Стр = ЗначениеВСтрокуВнутр(ТЗ.ДанныеТаблицы); TextStream.WriteLine(Стр); Стр2 = ЗначениеВСтрокуВнутр(СЗ_С_КакимитоДанными); TextStream.WriteLine(Стр2); КонецЦикла; TextStream.Close(); |
|||
25
План счетов
17.01.20
✎
21:06
|
Код чуть подрезал, смысл думаю понятен. Мы хранили так ТЗ, большие, но не знаю скольтко строк, там строк не много, колонок много было.
Файл получается 3-4 метра, сохраняется секунд 30 и примерно так же извлекается. Когда делал, этот способ был вроде самый быстрый |
|||
26
Garykom
гуру
17.01.20
✎
21:08
|
(24) Угу просто идеально через FSO!
Заполнение ТЗ, начало 21:8:6 Заполнение ТЗ, конец 21:8:6 ТЗ в Текст, начало 21:8:6 ТЗ в Текст, конец 21:8:13 ТЗ в FSO, начало 21:8:13 ТЗ в FSO, конец 21:8:15 |
|||
27
Garykom
гуру
17.01.20
✎
21:11
|
1 лям строк через FSO пишет примерно минуту
Заполнение ТЗ, начало 21:10:27 Заполнение ТЗ, конец 21:10:34 ТЗ в FSO, начало 21:10:34 ТЗ в FSO, конец 21:10:59 |
|||
28
Garykom
гуру
17.01.20
✎
21:12
|
||||
29
Злопчинский
17.01.20
✎
21:57
|
бдю...
|
|||
30
Злопчинский
17.01.20
✎
21:58
|
тут больше времени будет преобразование в строкуВнутр и наоботрот занимать будет.
запихни агрегатный тип.. |
|||
31
Cthulhu
18.01.20
✎
12:31
|
(30) на агрегатных самый тормоз на преобразоании объект-строка (д/сохр) и строка-объект (д/загр).
универсальное по ИД - самое тормозное. ситуацию можно значительно улучшить НЕ универсальным кодом - ЕСЛИ структура данных позволяет белать быстрый поиск (справочника по коду в зависимости от уникальности, документы по номеру+дате в зависимости от периодичности). по скоростям сохр/загр ТЗ примитивных типов тебе уже накидали там выше... |
|||
32
Cthulhu
18.01.20
✎
12:33
|
(31)+ ну или если "идеальный" случай уникальности текстового представления объектов и тебе не важны объекты - то тупо в ТЗ загоняй примитивные текстовые представления (для верчения в плясках с группировками такого должно хватить, например)
|
|||
33
Злопчинский
18.01.20
✎
19:10
|
(32) да, такогоо думал и частично юзаю
|
|||
34
AAA
18.01.20
✎
19:45
|
Если уж дошло до XBASE, то не лучше ли в самой конфигурации создать справочник и в него писать? зачем сторонний файл?
|
|||
35
GreyK
18.01.20
✎
20:21
|
(0) Задам главный вопрос, а наферкуя все эти пляски?
|
|||
36
Злопчинский
18.01.20
✎
22:03
|
(34) нахера временные "файлы" писать в базу?
|
|||
37
Злопчинский
18.01.20
✎
22:05
|
(35) большой отчет. считается долго. отлаживается долго. для отладки - надо "смотреть" в таблицу. данные мутные. в базе - криво. по сути - таблица для отчета - эмуляция упрощенного учета за хрен знает с какой даты до сегодня.
|
|||
38
AAA
18.01.20
✎
22:14
|
(36)Это предрассудок. Разделение данных на базу и не базу чисто условное. Твой временный файл это тоже база. И не надо заботиться о типизации, об имени файла и прочей бадяге. Но дело хозяйское)
|
|||
39
Arbuz
20.01.20
✎
12:20
|
ну, я буду не оригинален - на больших объёмах удобнее и быстрее вместо гигантской тз изначально использовать скулайт базу. и прямо из неё выборки делать со всякими cte и оконными плюшками. качественно решается одновременно столько вопросов, что вне конкуренции. мы ж про дбф базу?
|
|||
40
Злопчинский
20.01.20
✎
14:35
|
(39) ок. принял во внимание.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |