Имя: Пароль:
1C
 
Очистка временной таблицы хранимой в переменной
0 Eugeneer
 
23.08.22
16:24
Есть процедурка с запросом.
В этом запросе используется передаваемая ТЗ.

ТЗ передается параметром. Сама ТЗ временная - в нее в свою очередь выгружается ТЧ объекта, так как в запрос ТЧ обработки передать невозможно без выгрузки.

ТЧ может быть огромной - десятки тысяч строк.

Процедурка делает некий запрос, потом там выборка идет и прочее...


Есть смысл очищать ТЗ после выполнения запроса. Дальше она нафиг не нужна. А как я понимаю пока переменная с ТЧ есть в процедуре, то это данные в памяти которые бесполезно висят.
1 Волшебник
 
23.08.22
16:27
Не просто в памяти. Ещё на сервере место на диске занимают.
2 Eugeneer
 
23.08.22
16:30
а как ее лучше очистить. так ТЗ.
или сделать типа

ДанныеПоиска = Неопределено;
3 Конструктор1С
 
23.08.22
16:34
Перестань йухнёй страдать. Тупо обходи ТЧ в цикле и ищи что надо
4 H A D G E H O G s
 
23.08.22
16:35
(3) А вот и спецы программирования подтянулись.
5 bolobol
 
23.08.22
16:35
Надёжнее так:

Масс= новый Массив;
Для каждого СтрТЗ из ТЗ Цикл
   Масс.Добавить(СтрТЗ);
КонецЦикла;
Для каждого ЭлМасс из Масс Цикл
   ТЗ.Удалить(ЭлМасс);
КонецЦикла;
6 СеменовСемен
 
23.08.22
16:36
пока процедура не закончится сборщик все равно не запустится
7 bolobol
 
23.08.22
16:37
Можно ещё добавить, для надёжности: ЗначениеВстрокуВнутр или ХМЛ, а затем - всё удалённое в ЗаписьЖурналаРегистрации
8 Kassern
 
23.08.22
16:37
(0) В запросе можно (а иногда и нужно) уничтожать временные таблицы
9 bolobol
 
23.08.22
16:38
(8) ...УНИЧТОЖИТЬ &ТЗ
10 Fynjy
 
23.08.22
16:39
Евгений! Пора на завод! Слесаря сейчас в цене!
11 Kassern
 
23.08.22
16:39
(0) "так как в запрос ТЧ обработки передать невозможно без выгрузки" - кто вам такое сказал? ТЧ отлично передается во временную таблицу запрос, а вот коллекция формы нет)
12 Конструктор1С
 
23.08.22
16:40
(4) что, тоже любитель понапрягать сервер и БД без надобности?
13 polosov
 
23.08.22
16:49
(0) Бред какой-то.
14 Eugeneer
 
23.08.22
16:49
(8) это не запрос. а таблица для запроса. Я уже писал.

ТЗ в которую выгружается ТЧ для передачи в сам запрос.
15 Конструктор1С
 
23.08.22
16:50
(14) запросом-то чего делаешь?
16 Eugeneer
 
23.08.22
16:50
(11) " ТЧ отлично передается во временную таблицу запрос"

да нунах. И как ты ее передашь? типа Объект.ТабличнаяЧасть?))
17 Eugeneer
 
23.08.22
16:51
(15) а там еще все сложнее. потом с этой ТЗ еще происходят всякие соединения и прочее. которое уже в результат запроса идет.
18 Garykom
 
гуру
23.08.22
16:59
(16) Ты совсем?
Ссылку на объект передай и в запросе используй прямое обращение к ТЧ объекта
19 СеменовСемен
 
23.08.22
17:00
(12) а как еще можно по реквизиту ссылки найти например?
20 Garykom
 
гуру
23.08.22
17:00
(17) Маня у тебя просто запросы кривые...
21 СеменовСемен
 
23.08.22
17:01
(18) там же загрузка из ексель, какие ссылки? это же наверняка тч обработки
22 Kassern
 
23.08.22
17:01
(16) "И как ты ее передашь?" - Легко и просто передам.  
типа Объект.ТабличнаяЧасть?)) - смешно тут только то, что вы не зашли в отладку и не посмотрели какой тип у данной конструкции. А я ведь явно указал, что коллекции форм нельзя передавать в запрос.

Вот пример для ТЧ.
РеквизитФормыВЗначение("Объект").ТЧ - В этом случае тип будет табличная часть.
23 Eugeneer
 
23.08.22
17:02
(18) обьект - обработка)))))
24 СеменовСемен
 
23.08.22
17:02
(22) а сколько памяти съест этот объект?
25 Kassern
 
23.08.22
17:04
(18) Это ТЧ обработки, судя по (0) Данные в ней не хранятся в базе. Поэтому обращение по ссылке тут не в тему.
26 Kassern
 
23.08.22
17:05
(24) здесь вопрос не в памяти, а в утверждении "ТЧ обработки передать невозможно без выгрузки"
27 СеменовСемен
 
23.08.22
17:06
(26) можно то можно, но будет ли выигрыш перед ТЧ.Выгрузить()
28 Конструктор1С
 
23.08.22
17:07
(24) сколько? Мегабайт наберется?
29 Garykom
 
гуру
23.08.22
17:08
(23) Используй СКД
30 Garykom
 
гуру
23.08.22
17:08
(27) Не будет.
31 СеменовСемен
 
23.08.22
17:08
(28) и гигабайт вполне может быть
32 Конструктор1С
 
23.08.22
17:10
(31) чего в объекте обработки может быть на гигабайт?
33 Garykom
 
гуру
23.08.22
17:10
Но ТС изначально пошел по неправильному пути.
Ибо:
1. Запросы в 1С тормозные, особенно передача больших данных снаружи в них
2. Есть другие СУБД (sqlite) в которых запросы быстрые
3. Получить данные из 1С и выкинуть во внешнюю СУБД достаточно быстро
34 СеменовСемен
 
23.08.22
17:10
(332) прайс на несколько сот тысяч позиций
35 Garykom
 
гуру
23.08.22
17:11
(33)+ Поэтому надо переписать на внешнее решение эту МегаХрень
36 Kassern
 
23.08.22
17:11
Блин вопрос о "ТЧ может быть огромной - десятки тысяч строк. " - это ерунда для 1с. Хоть как ты ее пихай.
37 Garykom
 
гуру
23.08.22
17:12
(36) Десятки тысяч фигня
Проблемы когда сотни тысяч и миллионы
38 Kassern
 
23.08.22
17:12
(37) я про тоже, обсуждает сферических коней в вакууме, а у ТС какие-то жалкие десятки тысяч)
39 Kassern
 
23.08.22
17:13
*обсуждаем
40 Eugeneer
 
23.08.22
17:28
(38) да жалки то жалкие)) и обработка то летает даже со скоростью звука)))

На нормальном железе, но есть особо бедные клиенты))) У которых память забивается)))
А глянешь что за сервак - так там железо 10-15 летней давности.

Им каждая копейка памяти ценна.
41 Eugeneer
 
23.08.22
17:30
Но как минимум лишняя чистка ТЧ точно не помешает внутри процедуры. Чем ждать конца ее окончания.

Кстати ТЧ всякие и прочее - забивают прилично память. Я даже не понимаю почему 1С так сильно жрет памяти на таблицах в 100к и более.
42 Eugeneer
 
23.08.22
17:31
у меня там как раз после запроса выборка результата запроса идет. И таблица нафиг не нужна которая в запрос шла.

Поставил короче назначение переменной = Неопределено;
После выполнения запроса.
43 Eugeneer
 
23.08.22
17:55
Хм.....


Короче что сделал. Перенес процедуры в глобальник. В качестве параметра передаю ТЧ (не путать с ТЗ).

И в процедуре глобальника сделал в передачу запроса напрямую переменную параметра.
(убрал временную ТЗ в которую выгружалась ТЧ).....

И нифига не заругалось. Т.е работает без этой лишней таблицы, в которую ранее выгружал.

СТРАННО то - что когда процедура была в модуле обработки - не давало передавать в запрос ТЧ обработки. тупо ругалось.
44 Конструктор1С
 
23.08.22
18:31
(34) у ТЧ ограничение 100 тыщ строк. Но даже сто тыщ это далеко не гигабайт. И полагаешь, те же данные, запакованые в данные формы, будут принципиально меньше весить?
45 Eugeneer
 
23.08.22
18:48
(44) ограничение там на колонку НомерСтроки. не дает больше 99 999.

Но фактически можно пихать сколько угодно. Просто у всех чт о больше будет номер строки 99 999....

1С не понять. 2022 год а они там хурней страдают, не могут нормально сделать.
46 Конструктор1С
 
23.08.22
19:15
(45) тебе точно надо объединится с Г1Сом