Имя: Пароль:
1C
1C 7.7
v7: На каком объеме памяти падает 1с 7.7 на таблице значений
0 Franchiser
 
гуру
20.07.19
23:21
Создал простую обработку:
Из 20 колонок.
Добавляю в них числовые значения.
Семёрка падает на диапазоне 500-600 тысяч строк. Объем памяти при этом процесса 900 - 1000 мб.
Это нормальный результат?
Как можно повысить используемый объем памяти и возможность добавления большего количества строк а тз?
(27-я платформа sql2008).
74 Djelf
 
22.07.19
08:46
(68) Что-то другое.
Нужно на exe установить флаг LARGE_ADDRESS_AWARE, ну вот этим например https://ntcore.com/?page_id=371
И 7ка сможет около 3.7 гигов использовать на х64 или на х32 с флагами из (71)
75 Djelf
 
22.07.19
08:52
Если использовать sqlite как временное хранилище, возможно потребуется указывать прагму temp_store file https://www.sqlite.org/pragma.html#pragma_temp_store потому что по-умолчанию, ВК для 7ки скомпилирована с temp_store в оперативке.
76 Franchiser
 
гуру
22.07.19
10:53
(74) в статье пишут что это нужно делать на x32 только системе .
77 Franchiser
 
гуру
22.07.19
10:57
(75) а если указать :memo: ?
78 Djelf
 
22.07.19
14:16
(76) Врут! Ну не совсем врут, если флаг установлен то приложение будет использовать 4гб, а если не установлен то все равно 2.
Почитай у Русиновича насчет LARGE_ADDRESS_AWARE http://programming-lang.com/ru/computers/russinovich/3/j2.html

(77) С sqlite возможно работать как с файлом так и с базой в памяти.
Отдельно, можно указать что временные таблицы тоже находятся в памяти или в файле.
Обычно, указывать расположение временных таблиц в файле не требуется. Такое случается довольно редко.
Если у тебя объем больше 2х гигов то базу однозначно держать в файле, а вот нужно ли переносить временные таблицы в файлы узнаешь по ходу дела.
Тебе видимо нужно примерно так делать:
Открываешь сразу две базы!!! Одну в памяти, а вторую уже как файл.
База.Открыть(":memory:");
База.НовыйЗапрос().ВыполнитьЗапрос("ATTACH DATABASE '"+ФайлБазы+"' AS '"+ИмяСхемы+"';",0);
Дальше периодически укладываем таблицы в базу в памяти
База.УложитьТЗ(ТЗ, ИмяТаблицыВПамяти, [КакПостоянную])
И перекидываем из памяти в Файл, в транзакции
База.НовыйЗапрос().ВыполнитьЗапрос("BEGIN")
База.НовыйЗапрос().ВыполнитьЗапрос("INSERT INTO ИмяСхемы.ИмяТаблицыВФайле (ПОЛЯ) FROM (SELECT ПОЛЯ FROM ИмяТаблицыВПамяти)
База.НовыйЗапрос().ВыполнитьЗапрос("COMMIT")

Вот тут может быть засада, данные одновременно и в ТЗ и в базе sqlite в памяти.
Если будет переполнение памяти, придется укладывать временную таблицу в файл, а это значительно медленнее.
79 Franchiser
 
гуру
22.07.19
14:37
(78) не понял на x64 нужно дополнительно вносить строку в boot.ini.
Экзешник пропатчен но все равно больше 2гб не расходует
80 Franchiser
 
гуру
22.07.19
14:53
Получилось: скоппировал каталог семерки и заново пропатчил объем памяти используется больше 2 гб
81 Franchiser
 
гуру
22.07.19
15:18
Заметил такую особенность: при пропатченном файле можно одинаково добавить по 2 млн строк в ТЗ из 20 колонок, но при этом ИТЗ расходует на 1 гб больше памяти чем ТЗ.
Т.е. при использовании ТЗ примерно доходит до 2.5 ГБ; При ИТЗ до 3.5 гб.
82 Franchiser
 
гуру
22.07.19
15:23
При этом сравнивал Типизированную ТЗ с ИТЗ.
Если не типизировать ТЗ, то ИТЗ выигрывает в 2 раза.
Есть ли возможность типизировать колонки ИТЗ?
83 Salimbek
 
22.07.19
15:51
(82) На сколько я помню, там совсем другой механизм хранения данных в ИТЗ и типизация там не играет роли.
(81) Индексы в ИТЗ не используешь?
84 Franchiser
 
гуру
22.07.19
18:58
(83) нет пока без индексов
85 ADirks
 
23.07.19
13:35
(82) В ИТ колонки не типизируются. Вследствие чего она гарантировано жрёт больше, чем ТЗ с типизацией.
А вот утверждение "Если не типизировать ТЗ, то ИТЗ выигрывает в 2 раза" - весьма странно. Должно отжираться примерно одинаково.
86 Провинциальный 1сник
 
24.07.19
18:13
(79)  "не понял на x64 нужно дополнительно вносить строку в boot.ini. "
Не нужно.
"Экзешник пропатчен но все равно больше 2гб не расходует"
Значит, экзешник "недостаточно пропатчен", и есть методы работы с памятью в коде, которые упираются в 2 гигабайта независимо от опции экзешника.
87 Franchiser
 
гуру
24.07.19
18:46
(86) не уже заработало:
На ИТЗ вылится при памяти 3.5 Гб
На ТЗ на 2.5 Гб
88 Djelf
 
24.07.19
20:06
(87) слишком много, ограничения в запросах есть?
по дате хотя бы есть чтобы не запрашивать 2000й год?
ну если нет то цикл с ограничением по дате
89 Chum
 
05.08.19
11:54
(0) Семёрка падает на диапазоне 500-600 тысяч строк.... (27-я платформа sql2008).

Сдается мне, что тебе не нужна такая большая таблица, или твой подход неверный.
Если используется sql, а выше уже упоминалась ИТЗ, то что тебе мешает переложить обработку таблиц непосредственно на sql? Создавай на сервере временные таблицы, скидывай туда все, что нужно, там же и обрабатывай данные, а на выходе передавай в свою семерку уже готовый результат.
Делать простой запрос, выгружать много-много строк и потом перебирать их средствами 1С - глупо.
1. sql отработает задачу несопоставимо быстрее, чем средствами 1с;
2. sql не жалуется на размер памяти, а еще там можно всякие хранимые процедуры писать;
3. из косвенных минусов придется использовать 1cpp.dll (кто-то этого не любит), но там столько плюшек.
90 Botanik8888
 
05.08.19
12:28
(89) - так ИТЗ пробует, значит и 1cpp использует, а так самая действенная рекомендация, если нельзя весь мусор на стороне источника оставить.
91 Злопчинский
 
05.08.19
13:39
(89) ну, это смотя где...
столкнулся с тем, сто скуль запрос с условием типа "Условие(Номенклатура в СЗ)" обрабатывало очень медленно.
горааааздо быстрее оказалось убрать условие и фильтровать при обходе результатов
92 Chum
 
05.08.19
13:58
(91) это может и так, но при грамотном составлении текста прямого запроса, т.е. со всякими пересечениями таблиц, все отрабатывает моментально. Что мешает предварительно сделать запрос к номенклатуре вместо "Условие(Номенклатура в СЗ)"? Или подзапрос? Это сработает гораздо быстрее.
93 АгентБезопасной Нацио
 
05.08.19
13:59
(91) Прямой запрос (с соединением или фильтрацией п овременной) тоже медленно отрабатывал?
94 VladZ
 
05.08.19
14:08
(0) Для большого объема данных используй внешние БД.
95 Arbuz
 
05.08.19
17:30
Если прям совсем руки не поднимаются на внешние БД или переписывание основной логики запросов, то есть ещё ValTable - по расходу памяти выигрывает в 2-5 раз у ТЗ, в зависимости от типа значений. у меня работало на таблицах чуть менее 2кк строк, 10 числовых полей и одно фикс строка*50 - около 500 метров рамы кушало.
96 Arbuz
 
05.08.19
17:33
упс
*фикс строка*150
97 Franchiser
 
гуру
05.08.19
17:54
(95) что то не могу найти компоненту ValTable, ссылки битые.
98 Franchiser
 
гуру
05.08.19
18:48
Телепат  не видит методы ValTable, как ее зарегистрировать?
99 Franchiser
 
гуру
05.08.19
18:59
intsOleGenerator.vbs может сгенрировать ints-ы под  addin?
100 Franchiser
 
гуру
05.08.19
19:01
При запуске Regenerator пишет
"По прог-ид addin.valtable не удалось получить главного интерфейса
Ошибка генерации файлов по прог-иду: addin.valtable"
101 Franchiser
 
гуру
05.08.19
19:44
Есть ли анлалог метода ТЗ ПолучитьСтрокуПоНомеру() , или Индексированной Таблицы НайтиСтроку() для valtable ?
102 Djelf
 
05.08.19
19:50
(100) Это не проблема, есть же Информатор в 1с++

0000 LineNum
0000 НомерСтроки
0000 Очистить();
0000 КоличествоКолонок()
0000 НазваниеКолонки(f)
0000 НомерКолонки(f)
0000 ТипКолонки(f)
0000 Копия()
0000 КопиКолонку(f);
0000 Debug(f)
0000 УдалитьПоЗначению(f)
0000 УдалитьКолонку(f)
0000 УдалитьСтроку(f)
0000 УдалитьСтроки();
0000 НайтиЗначение(f)
0000 Первая()
0000 Получить(f)
0000 ПолучитьПоЗначению(f)
0000 ПолучитьСтроку()
0000 ПолучитьСтрокуПоНомеру(f);
0000 GetSelf()
0000 Множество(f)
0000 ПолучитьМножествоПоФильтру(f)
0000 ПолучитьПодмножество(f)
0000 ПолучитьИтоги(f)
0000 ПолучитьЗначение(f)
0000 Индекс(f)
0000 Последняя()
0000 КоличествоСтрок()
0000 КоличествоСтрокВПодмножестве(f)
0000 Загрузить(f);
0000 Макс(f)
0000 Мин(f)
0000 НоваяКолонка(f)
0000 НоваяСтрока(f)
0000 Следующая()
0000 OutDebug(f)
0000 Предыдущая()
0000 ПереименоватьКолонку(f);
0000 ВыбратьПоЗначению(f)
0000 ВыбратьСтроки()
0000 Установить(f);
0000 УстановитьПоЗначению(f)
0000 УстановитьЗначение(f);
0000 Показать(f)
0000 Сортировать(f);
0000 test(f)
0000 Итог(f)
0000 Выгрузить(f)
0000 Версия()
0000 Зарегистрированна()
103 Djelf
 
05.08.19
19:52
+(102 ) В OtherTypesDefine.txt вставь строку
addin.valtable,addin_valtable
ну и сам файл должен быть назван addin_valtable.ints
104 Djelf
 
05.08.19
19:55
(101) Ха! В als то и нет ПолучитьСтрокуПоНомеру(), а такой метод есть ;)
105 Franchiser
 
гуру
05.08.19
20:16
(130) добавил addin.valtable,addin_valtable,
переименовал als в ints в папке config/Intell
Не заработал телепат
106 Franchiser
 
гуру
05.08.19
20:18
А понял, нужно было твой текст туда скопировать...
107 Djelf
 
05.08.19
20:28
(106) Бывает ;)

P.S. Что-то не так у этой компонеты с регистрацией в 1С, кажется автор что-то недокурил...
Например "LineNum" в информаторе и в русском и в английском совпадают, но есть еще и "НомерСтроки", который тоже совпадает! И вообще ВСЕ методы в Информаторе представлены дважды (пришлось слегка поправить парсер в ints из Информатора).
Но если работает, то и так сойдет...
108 Franchiser
 
гуру
05.08.19
20:29
(103) все получилось, спасибо!
109 Franchiser
 
гуру
05.08.19
20:30
(107) что за Информатор, где он находится?
110 Djelf
 
05.08.19
20:41
(109) В 1с++
Объект = СоздатьОбъект("ЧтоТоТам")
Информатор=СоздатьОбъект("Информатор");
тзСвойств = Информатор.ПолучитьТаблицуСвойств(Объект);
тзМетодов = Информатор.ПолучитьТаблицуМетодов(Объект);
111 Злопчинский
 
05.08.19
20:56
и что будет в ТЗ этих? - инфа из метаданных?
112 Djelf
 
05.08.19
21:05
(111) Будет инфа из ВК о наличии доступных свойств и методов для 1С.
Ну вот ты знал что в FormEx есть метод methCtrlInfo()? А он есть!
113 Злопчинский
 
05.08.19
21:11
(112) яндекс знает всего две ссылки... ;-)
114 Franchiser
 
гуру
05.08.19
22:22
(110) Понятно, действительно работает.
Как ты получил содержимое файла ints в (102), обработкой?
115 Franchiser
 
гуру
05.08.19
22:40
У ValTable мне не нравится что в случае переполнения памяти Таблицы код не прерывается в excp и выдается много раз сообщение "Out of memory" в отличие от Индексированной Таблицы где происходит excp.
116 Franchiser
 
гуру
05.08.19
23:18
Как бы отловить сообщение выдаваемое компонентой в окно сообщений "Out of memory"  ?
117 Злопчинский
 
05.08.19
23:51
(116) как ты его отловишь - процесс-то идет, только если внешними приблудами по отношению к текущему процессу.
в 1С можно грабить окно сообщений через 1Spy.dll - инициирушь грабление - потом идет какойнить пароцесс - потом награбленное получаешь
и в последних формексах тоже чтото вроде есть
118 Franchiser
 
гуру
05.08.19
23:53
(117) ну при добавлении строки в ТЗ возвращается номер добавляемой строки.
Так вот строка же не добавилась, значит этот метод не должен или возвращать новый номер, или же количество строк в тз не должно соответствовать этому номеру строки добавляемому.
119 Franchiser
 
гуру
05.08.19
23:58
Вот такой код пробую, не фига остановить обработку не могу.
Процедура ValTable()
    
    ТзВал = СоздатьОбъект("AddIn.ValTable");

    ТзВал.НоваяКолонка("Колнка1",);
    ТзВал.НоваяКолонка("Колнка2");
    ТзВал.НоваяКолонка("Колнка3");
    ТзВал.НоваяКолонка("Колнка4");
    ТзВал.НоваяКолонка("Колнка5");
    ТзВал.НоваяКолонка("Колнка6");
    ТзВал.НоваяКолонка("Колнка7");
    ТзВал.НоваяКолонка("Колнка8");
    ТзВал.НоваяКолонка("Колнка9");
    ТзВал.НоваяКолонка("Колнка10");
    ТзВал.НоваяКолонка("Колнка11");
    ТзВал.НоваяКолонка("Колнка12");
    ТзВал.НоваяКолонка("Колнка13");
    ТзВал.НоваяКолонка("Колнка14");
    ТзВал.НоваяКолонка("Колнка15");
    ТзВал.НоваяКолонка("Колнка16");
    ТзВал.НоваяКолонка("Колнка17");
    ТзВал.НоваяКолонка("Колнка18");
    ТзВал.НоваяКолонка("Колнка19");
    ТзВал.НоваяКолонка("Колнка20");
    НомстрДо = 0;
    Для Сч = 1 по 3000000 Цикл
        Если  сч%100000 = 0 Тогда
            Сообщить("" +сч);
        КонецЕсли;
        
        Стр = "Стр_"+сч+"_";
        
        //Попытка    
            //Номстр = 0;
            Номстр = ТзВал.НоваяСтрока();
            
            Если ТзВал.КоличествоСтрок() <> Номстр Тогда
                Сообщить("Возникла ошибка памяти (Out of memory)");    
               Сообщить("Ном стр"+ Номстр);
               Возврат;
        КонецЕсли;
        
        НомстрДо = Номстр;
        //Исключение
        //Сообщить("Возникла ошибка памяти");    
        //Возврат;    
        //КонецПопытки;
    ТзВал.Колнка1 = Стр+1;
    ТзВал.Колнка2 = Стр+2;
    ТзВал.Колнка3 = Стр+3;
    ТзВал.Колнка4 = Стр+4;
    ТзВал.Колнка5 = Стр+5;
    ТзВал.Колнка6 = Стр+6;
    ТзВал.Колнка7 = Стр+7;
    ТзВал.Колнка8 = Стр+8;
    ТзВал.Колнка9 = Стр+9;
    ТзВал.Колнка10 = Стр+10;
    ТзВал.Колнка11 = Стр+11;
    ТзВал.Колнка12 = Стр+12;
    ТзВал.Колнка13 = Стр+13;
    ТзВал.Колнка14 = Стр+14;
    ТзВал.Колнка15 = Стр+15;
    ТзВал.Колнка16 = Стр+16;
    ТзВал.Колнка17 = Стр+17;
    ТзВал.Колнка18 = Стр+18;
    ТзВал.Колнка19 = Стр+19;
    ТзВал.Колнка20 = Стр+20;
КонецЦикла;
    
Сообщить("Добавлено строк" + ТзВал.Количествострок());
КонецПроцедуры
120 Злопчинский
 
06.08.19
02:25
вот это убери сч%100000
это очень прожорливая операция, замени на инкремент.
121 Злопчинский
 
06.08.19
02:32
я с ValTable не работал...
.
Номстр = ТзВал.НоваяСтрока();
Если ТзВал.КоличествоСтрок() <> Номстр Тогда

если не срабатывает если - возможно новаястрока() - не добавляет новую строку и возвращает последнюю (успешно добавленную) строку и колвострок получается равно номстр.
попробуй проверять колвострок или номстр в сравнении с колвострок или номстр на предыдущем шаге.
.
правда нихрена не понял, зачем тебе этот код...
122 Franchiser
 
гуру
06.08.19
08:21
(121) этот код чтобы завалить 1С и понять какой работается ошибка out of memory
123 Franchiser
 
гуру
06.08.19
08:22
Работается = обрабатывается
124 Franchiser
 
гуру
06.08.19
08:22
Я это проверяю для ТЗ, ИТЗ, ValTable
125 Franchiser
 
гуру
06.08.19
08:25
(121) так я тоже проверял (с предыдущим шагом) тоже не работает.
Такое ощущение, что для valtable crash идёт в отличие о ТЗ и ИТЗ не на добавлении строки, а на присвоении значений по колонкам.
126 Franchiser
 
гуру
06.08.19
08:28
Может быть есть какой то скрипт, который позволяет определить размер использованной оперативной памяти текущим процессом 1с, чтобы при приближении к границе вылета выдавать ошибку?
127 АгентБезопасной Нацио
 
06.08.19
08:36
(126) ну через WSH можно же попытаться?
128 Arbuz
 
06.08.19
13:43
Да она несколько кривовата, в итоге я отказался от неё и поменял логику процесса. Ошибку отслеживать через 1Spy. И я не указал, данные у меня были достаточно разрежены - очень много одинаковых значений в разных колонках, поэтому у меня так мало использовалось памяти. А я смотрю, ты заполняешь уникальными значениями - так может быть выигрыш очень незначителен.
129 Arbuz
 
06.08.19
13:51
и эта... колонки надо обязательно типизировать. И ты в (0) указываешь "20 числовых колонок", а в (119) - используешь строки.


Синтаксис:
НоваяКолонка(<НазваниеКолонки>, [<ТипКолонки>="Объект"])
Параметры:
<НазваниеКолонки> - имена новых колонок через запятую, м.б. следующего формата:
"ТипКолонки: Колонка1, Колонка2,..., ТипКолонки: КолонкаН,КолонкаН1"
Если опущен и <ТипКолонки> и в во втором варианте не указан тип, тогда
по умолчанию создается колонка типа Объект.
Возвращает
номер новой колонки первой созданной
Типы колонок:
- Строка(String)
- Число(Number) - типа Double
- Целое(Int) - знаковое целое типа Int (4 байта)
- Объект(Object) - сохраняет значения любого типа
- Дата(Date) - тип дата (внутренее хранение данных аналогично типу Целое)
Тип "Строка". Операции сравнения (поиск, сортировка) для данного типа
происходят без учета регистра букв. В колонках данного типа, может сохраняться
строка не в том, регистре, который был присвоен (берется первое присвоение,
остальные - ссылки на первое).
Тип "Объект". Этот тип может хранить любые типы данных. Если в нем сохраняются
значения типа число, тогда по ним можно расчитывать итоги, а все не числовые
значения при расчете итогов будут приведены к числу по представлению. Тем
не менее, несмотря на возможность получения итогов по объектам, числа лучше
хранить в типах, предназначенных для этого - в этом случае это и быстрее
обрабатывается, и меньше занимает памяти.
Тип "Объект". В некоммерческой версии при попытке присвоить значение типа
>= 10, это значение будет сконвертированно в строку.
Пример:
т.НоваяКолонка("кл1");
т.НоваяКолонка("кл1,кл2", "Строка");
т.НоваяКолонка("Строка:кл1,кл2,Число:кл3");
130 StanLee
 
06.08.19
13:58
7.7 еще сырая
131 Franchiser
 
гуру
06.08.19
14:23
(128) Уникальными я заполняю чтобы завалить процесс 1С специально
132 Franchiser
 
гуру
06.08.19
14:27
Подскажите как в индексированной таблице сделать следующее:
Нужно в ИТЗ найти строку поиском по "коду", спозиционрироваться на нее, далее начиная с выбранной строки  продолжать получать строки ИТЗ и позционироваться пока "код предыдущий" = "код".
Начало понятно:
НомерСтр = ИТЗ.НайтиСтроку("ИндКод", СокрЛП(ТаблицаСтрокРН.Код), , 1) //тут я найду первую строку и спозиционируюсь
... //какие то действия со строкой

какой следующий метод применить?
133 Franchiser
 
гуру
06.08.19
14:28
НайтиБлижайшуюБольше м.б. ?
134 Arbuz
 
06.08.19
14:59
(132) индексировать и фильтровать по коду... хотя с твоими объёмами...
135 Arbuz
 
06.08.19
15:05
(131) ну так заполняй числовыми данными и, желательно, их распределение подобрать близко к реальному, а иначе в чём смысл валить 1с?
136 Franchiser
 
гуру
06.08.19
15:07
(135) Валить чтобы понять какой выбрать объект ИТЗ или ValTable
137 Arbuz
 
06.08.19
15:12
да давно бы уже взял 1sqlite, создал локальную базу, сложил всё туда, и потом нормальным sql'ем оттуда всё вытаскивал. если база на диске, то в твоих условиях - считай безлимитная.
138 Злопчинский
 
06.08.19
20:09
(93) не писал
139 Salimbek
 
06.08.19
20:15
(132) На ИТЗ накладываешь фильтр по "коду" и далее полученную выборку просто перебираешь.
140 Djelf
 
06.08.19
20:23
(132) Нам отсюда не видать что ты хочешь сделать, но могу предположить, что поможет метод ЛевоеСоединение http://www.1cpp.ru/docum/icpp/html/IndexedTable.html#leftjoin
141 Franchiser
 
гуру
06.08.19
21:01
(139) да уже получилось 3-мя вариантами: найтистроку() + получитьследующий(), через установитьфильтр() и через Подмножество
142 Franchiser
 
гуру
06.08.19
21:03
(140) мне как бы нужно, чтобы код сильно остался приближен к коду с использованием из, чтобы в случае чего все откатить или перейти на valtable. Инновации пока не нужны.
143 Franchiser
 
гуру
06.08.19
21:07
(137) база сетевая, доступная с большого количества компов. Про sqllite я знаю, но локальный вариант наверно не подходит.
144 Djelf
 
06.08.19
22:02
(143) А что тз, итз, vtable как то глобально умеют работать?
(142) Решается классами или эмуляцией через процедуры.
В любом случае если такой затык по памяти - нужно менять алгоритм, а не пытаться впихнуть невпихуемое ;)
145 andrewalexk
 
07.08.19
07:37
(140) (144) :) джойны тоже имеют свой предел - вылетает примерно на таких же числах - походу предел движка 7.7
146 Arbuz
 
07.08.19
13:43
(143) ты не понял - вместо тз,итз и т.д., куда ты сваливаешь свои биллионы строк - складывай в базу sqlite (локальную одноразовую), а потом уже запросами можешь очень гибко вынимать что хочешь. не думаю, что переписать логику первичного сбора с тз на скулайт будет сложно, в отличие, как я понял, от логики самого сбора и отказа от громадного локального накопления. поверь, 1sqlite - очень легка и быстра, как в освоении, так и в работе - спасибо, надо сказать, _Djelf'у_! и остальным
147 Arbuz
 
07.08.19
14:04
а насчёт valtable - значения хранятся в отдельном дедуплицированном списке (хэшированная таблица, сортированный связный список - я не вникал как), а элементы valtable являются ссылками на этот список. что на большом количестве неуникальных (!) значений даёт выигрыш по памяти, тем больший, чем больше неуникальность значений. следствием такой реализации (не совсем проработанной) как раз и является то, что 'out of memory' происходит не во время добавления строк, а при присвоении значений.
что, собственно, как я вижу, ты со своими тестами не понимаешь катастрофически.
148 Franchiser
 
гуру
07.08.19
16:30
(146) Да уже пофиг на объем памяти, мне нужно чтобы корректно обрабатывалась ошибка "out of memory": чтобы 1с не вылетала и можно было записать ошибку в лог. ТЗ и ValTable к сожалению с этой ошибкой работают криво, а ИТЗ - нормально
(144) Я знаю про классы, кажется Victuan такой писал и выкладывал на проклабе, но проклаб закрыли.
149 Вафель
 
07.08.19
16:33
Напиши обертку декоратор и тогда невежно будет что ты используешь внутри
150 Franchiser
 
гуру
07.08.19
16:37
(146) пока нет необходимости переписывать логику на sqllite (и так работает): это нужно создавать базу, потом она должна быть доступна по сети ото всюду, неизвестно какой будет замедление по сравнению  с ТЗ и т.д.
По какой то причине вылетала на ТЗ ошибка  "out of memory" но при этом строка в ТЗ не было очень много. Надеюсь с использование ИТЗ и увеличении памяти 1с7.7 ошибка больше не будет возникать, а если появится то будет ясно на каком месте кода.
151 Вафель
 
07.08.19
16:39
(150) разве тз доступна везде? так скллайт делай локально
152 Franchiser
 
гуру
07.08.19
16:40
(149) я не могу многие вещи переписать через обертку.
Например такой код:
ТЗ.КоличествоСтрок(КолСтр)
Далее ТЗ.ПолучитьСтрокуПоНомеру()
ИТЗ не может принимать в параметр КоличествоСтрок(). и нет метода ПолучитьСтрокуПономеру()
153 Franchiser
 
гуру
07.08.19
16:41
(151) мне же прелагают базу делать SQLLite, значит нужно обращаться к файлу по пути.
А ТЗ в оперативной памяти.
154 Вафель
 
07.08.19
16:41
(152) ты не понимаешь что такое обертка?
155 Franchiser
 
гуру
07.08.19
16:43
(154) тем более значит не напишу, да и зачем на это время тратить. Универсальное всегда долго писать
156 Franchiser
 
гуру
07.08.19
16:47
(154) обертка это вызов неких функций которые будут выполнять похожий код только методами ИТЗ
157 Arbuz
 
07.08.19
17:15
(153) сейчас у тебя данных почти столько, сколько доступно памяти процессу 1с. допустим, путём беспощадного поедания кактусов ты таки победишь (0). и тут данных станет чуть больше, всё опять встанет? всё насмарку? новая тема на мисте - как положить 10 мультов строк в тз?
158 Обработка
 
07.08.19
17:25
(0) Все не читал.
Не трахай себе мозг и другим просто переходи на 1с83.
159 Обработка
 
07.08.19
17:28
Вот такие вот кулибины не дают умереть 1с77. И как результат приходят клиенты и просят перевести их с самописной базы в 1с 83.
160 Arbuz
 
07.08.19
17:29
(158) и пиши там монстра получающего из оракла несколько гигов, и потом их в циклах перебирающих?
161 Вафель
 
07.08.19
17:29
(159) перевод - слишком дорого, да и гемморойнее в разы для прога. ибо нужно людей переучивать и тд и тп.
слишком много конультантской работы. а оно надо?
162 Arbuz
 
07.08.19
17:32
(159) ты так говоришь, как будто кулибины - это что-то плохое.
(161) таким как он как раз и надо, хлеб его же. бесконечное внедрение, а в 77 он не может.
163 Обработка
 
07.08.19
17:37
(162) Да просто хочется работать с одним инструментом а не со всеми растянутыми в 20 лет.
164 Arbuz
 
07.08.19
17:44
(163) ну мало ли кому чего хочется.
вот вам, понимаю, хочется взять клиентоса давно работающего на клюшках за жирок, выбросить всё, что работает и... пошло-поехало. меняем 1с. меняем парк. меняем ос. меняем ит. меняем бизнес-процессы. и всё это надолго и задорого и без вариантов.
165 Arbuz
 
07.08.19
18:03
(153) ещё раз, медленно. тебе предлагается класть данные из выборок оракла не в тз, а в скулайт. база может быть и в памяти, и в файле, о чём тебе сказали в (75) и (78). понимаешь? другие клиенты 1с, доступ по сети, разворачивание сервера базы - вот это всё не имеет никакого смысла, от слова вообще. скулайт как замена тз. фирштейн? и потом красиво и масштабируемо делаешь выборки. скорее всего, что даже со скулайтом на диске (кэш то всё равно в памяти, плюс индексация) будет быстрее в разы текущего варианта на тз.
надеюсь что импорт из оракла то, хотя бы не через текстовый файл сделано?
166 Djelf
 
07.08.19
18:03
(150) С какой стати база sqlite должна быть доступна всем? тз, итз у тебя всем доступны? Ну и тут тоже так.
Кроме того с sqlite вообще не рекомендуется работать по сетке, это все таки локальная база данных. Ну разве что через OLE DB.
Просадка скорости при работе с файлом будет достаточно большая. И придется слегка пошаманить: https://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite Иначе будет очень грустно.
Зато гарантированно не упадет (если из 10гиговово файла в тз не делать запрос).
В памяти, кстати, типизированная база sqlite должна занять меньше места чем тз и тем более итз, но без ухищрений (дедупликации) видимо больше чем valtable.
Упирается в предел памяти, больше ограничений нет.

P.S. Когда-то рисовал класс-обертку для sqlite, аналог итз. Потом подучил sql и понял что это мне не нужно ;)
P.P.S. Надо бы нарисовать для sqlite guard-dog по памяти, а то вылетает так же как valtable.
167 Franchiser
 
гуру
07.08.19
18:10
(159) 8ка сырая, вот интересно что ты будешь делать с сентября в восьмерке с лицензией проф.
168 Franchiser
 
гуру
07.08.19
18:11
(157) с чего ты это взял?
169 Franchiser
 
гуру
07.08.19
18:12
(161) да я в основном на восьмерке работаю, на семёрке есть несколько баз. Перевод на восьмёрку их не согласован.
170 Franchiser
 
гуру
07.08.19
18:15
(165) нет ole db без текстовых файлов.
Я понимаю что ты хочешь сказать, но я уже все на ИТЗ переписал, пока достаточно.
Я не могу вечно этой задачей заниматься сроки подходят к концу.
171 Сияющий в темноте
 
07.08.19
18:59
может это,рассказать про Vlmфункции или Numa?
очень спасает тех,кто хочеи в 32 бита получить все 32 гига памяти.
но,опять же,влезет ли вся база оракла в память?а тут явно ее туда хотят засунуть.
172 Franchiser
 
гуру
07.08.19
19:59
(171) не надо
173 Franchiser
 
гуру
07.08.19
20:08
Если на то пошло, я мог бы в temp db SQL запихать