Имя: Пароль:
1C
 
Как лучше передать большу таблицу значение с формы в фоновое задание?
0 toypaul
 
гуру
30.03.26
13:09
Можно сказать первый раз пришлось столкнуться с загрузкой больших объемов на постоянной основе. Соот-но делаю через ФЗ.
Таблица значений (большая) на форме, в которой пользователь будет заполнять какие-то поля по умолчанию.

Далее эту таблицу можно передать
- Т.Выгрузить() напрямую параметров в ФЗ
- РеквизитФормыВЗначение тоже напрямую (так, например, делается в типовой загрузке из файла)
- Положить ТЗ во временное хранилище

Есть также таблица, которую не нужно показывать пользователю. Ее сразу планирую положить в ХЗ и передавать адресом.
1 Chai Nic
 
30.03.26
13:16
А что вам даст помещение таблицы во временное хранилище в плане её обработки фоновым заданием? Как ФЗ её вытащит?
2 toypaul
 
гуру
30.03.26
13:20
(2) я почем знаю? я ж не разработчик платформы. методы передачи разные. потому и спрашиваю какой из них предпочтительней.
3 toypaul
 
гуру
30.03.26
13:24
Насчет "большого" размер. Сейчас максимально файл экселя 400 тыс строк. Размер самого файла 88 Мб.

Не все из этого попадает в таблицу на форму - только новые артикулы. Но может быть тоже несколько сотен тысяч.

Вот и вопрос РеквизитФормыВЗначение как делается в типовых это быстро, но может быть затратно по памяти?

А через хранилище, например, может быть медленней, но менее затратно по памяти. Никуда гонять эту таблицу больше не нужно будет. Обработка в одном ФЗ. Ну может несколько потоков (и то не факт).

Может не загоняться и сделать как в типовой через РеквизитФормыВЗначение?
4 Мультук
 
гуру
30.03.26
13:35
(0)

А зачем здесь РеквизитФормыВЗначение ?

&НаСервере

Процедура ПослатьНаТаблицуЗначений()

    тз = ОченьБольшаяТаблицаНаформе;

    //Что-то делаем  

КонецПроцедуры

5 toypaul
 
гуру
30.03.26
13:38
(4) потому что таблица на форме. коллекцию я же не могу передать в ФЗ
6 Мультук
 
гуру
30.03.26
14:05
(5)
&НаСервере

Процедура ПослатьДалекоТаблицуЗначений()
    //Затупил немного
    //!тзКакОбычнаяТаблицаЗначений = ОченьБольшаяТаблицаНаформеКотораяКакКоллекция.Скопировать();
    тзКакОбычнаяТаблицаЗначений = ОченьБольшаяТаблицаНаформеКотораяКакКоллекция.Выгрузить();

    //Лень смотреть
    Сообщить(Строка(типЗнч(ОченьБольшаяТаблицаНаформеКотораяКакКоллекция)));
    Сообщить(Строка(типЗнч(тзКакОбычнаяТаблицаЗначений )));

    //Что-то делаем  

КонецПроцедуры
7 Garykom
 
гуру
30.03.26
13:53
(0) Если таблицы очень большие - лучше хранить в БД
Если с БД никак (нельзя РС или еще что добавить) можно в СУБД во временных таблицах (в фоновом крутится на МВТ)
Передавать только изменения чтобы не таскать все
8 RomanYS
 
30.03.26
13:58
(6) скорее всего ошибка будет)
Выгрузить() - чтобы получить ТЗ
9 toypaul
 
гуру
30.03.26
14:00
(7) не. это изврат какой-то. не для этой задачи.
10 Garykom
 
гуру
30.03.26
14:04
(9) Тогда передавать через .Выгрузить() и смириться с тормозами
11 H A D G E H O G s
 
30.03.26
14:14
1. Потестировать ТЗ.
2. Если чет подозрительно - писать в РС с отбором по первому Измерению - УникальномуИдентификатору, которое генерится под каждую ТЗ и потом по нему считывать ТЗ в Фоновом и чистишь. Еще в РС можно писать Дату и иногда удалять записи, у которых дата прошлая, так как это мертвые фз.
12 toypaul
 
гуру
30.03.26
14:25
(11) Понял. Находил какую-то древнюю тему 14го года с обсуждением этой темы. Там было про 12 млн строк.

Тут гораздо меньше. Я думаю остановится передачу ТЗ параметром. Тут же нет сериализации? А при помещении во врем. хранилище как я понял есть?

Получается плохо помещать большие ТЗ во врем. хранилище что ли? У меня там вторая таблица еще больше. Она не для пользователя и чтобы при переходах туда-сюда ее не гонять (а там интерфейс с переходом Вперед-Назад) я ее помещаю.
13 SleepyHead
 
гуру
30.03.26
14:30
(0) Помести исходный файл на сервер и работай с ним оттуда.
14 toypaul
 
гуру
30.03.26
14:33
(13) Так я вроде объяснил что есть часть файла, с которой пользователь должен работать. И вообще сначала анализируем файл (для чего его приходится целиком читать на клиенте), потом пользователь на этом основании производит настройки. И только потом загрузка. Нет автономности. Иначе не было бы таких вопросов.
15 Fish
 
гуру
30.03.26
14:33
(13) Всё равно надо на клиент передавать и обратно, чтобы пользователи могли с ней работать.
16 Garykom
 
гуру
30.03.26
15:15
Иногда хочется чтобы реквизиты и ТЧ обработок были доступны на сервере через язык запросов
Теоретически такое в платформе можно реализовать, как раз через временные таблицы в СУБД
Живущие пока открыта обработка и сеанс
17 AlexKimp
 
30.03.26
15:21
(16) Хм. Зачем тогда всю таблицу отправлять в ФЗ? Почему не отправить деревом структур только отредактированные строки? "400 тыс." Ну, допустим. Навряд ли пользователь за раз тыщ 100 обработает (это если я правильно проэкстрасенсил, чего там происходит с этими строками). Почему не организовать постраничную передачу данных на клиента? Странная история. Ресурсы надо экономить и грамотно балансировать между рантаймом и БД
18 Мультук
 
гуру
30.03.26
15:45
(17)

Объясните пожалуйста, зачем в этой задаче дерево ?
Зачем в этой задаче массив структур ?

И главное, зачем таблицу значений из (допустим) 100 тыс строк
превращать в массив структур ?

Какова цель и в каком месте будет экономия (и на чём) ?
19 AlexKimp
 
30.03.26
15:48
(18) Так и не надо 100 тыс. Я пытаюсь понять, зачем вообще всё это нужно. Мне стало очень нехорошо уже на стадии ответа про 400 тыс строк. Каков смысл задачи? Если пазл в моей голове сошелся верно, то предлагается загрузить на форму файл экселя с диким количеством строк, пользователь чего-то там тыкает, вся таблица отправляется на сервер для помещения в ФЗ для обработки.
20 Fedor-1971
 
30.03.26
15:51
(14) Тогда нет смысла использовать фоновое задание.
Пользователь вчитал файлик, проанализировал и задал некие настройки - посидит 5 минут пока грузится файл (чаю успеет попить).
Если очень надо - запустит параллельно ещё одну 1С и будет работать
21 Fedor-1971
 
30.03.26
15:56
20+ А так, то для ФЗ (7) прав, загоняем в менеджер временных таблиц нужные строки и отправляем его в ФЗ
Получим, временную таблицу SQL и работаем в фоне с оной

На запись в РС время нужно, но если строк замного, тогда имеет смысл поработать с ним
22 ДенисСмирнов
 
30.03.26
15:55
(19) что там за оператор, который работает с ТЧ в "несколько сот тысяч строк". не просто жмет "ок, отправь всю эту хрень дальше", а что-то смотрит и видит
23 Fedor-1971
 
30.03.26
15:57
(22) Например, отбирает пустое подразделение и заполняет оное в строках
24 maxab72
 
30.03.26
15:59
(23) одно для всех пустых или вдумчиво изучат каждую строку?
25 Мультук
 
гуру
30.03.26
16:03
P.S.
Я в детстве ненавидел игру "испорченный телефон".
А похоже зря
26 toypaul
 
гуру
30.03.26
16:27
(19) Поскольку доступ к телу заказчика ограничен, то тут смысла я не вижу всю чепуху рассказывать которую придумали. Тут аналитики еще не с такой дичью приходят. А выпендриваться и учить уму разуму чужих аналитиков - время не то.

Пытаемся найти компромисс. Пользователи еще не с такой дичью приходят. Например, им файл этот в 400 тыс. ни жить ни быть нужен обратной с колонокой с результатами обработки. Никого не интересует, что смотреть это вряд ли кто-то будет. Надо и все тут.

Я же написал, что это будет файл с новыми артикулами. Там будет присваиваться обязательно вид номенклатуры, и еще пара необязательных. Как они это собираются делать - мне не докладывали и не собираются. Поэтому моя задача - сделать, аналитика - запустить, пользователя в случае чего придти и попросить переделать. Или оставить как есть.
27 Конструктор1С
 
30.03.26
19:33
(0) а зачем нужно ФЗ? Если не веб-клиент, то можно и так сделать. Ну покурят десять секунд, вместо двадцати секунд наблюденмя длительного кота
28 Garykom
 
гуру
30.03.26
19:58
(27) ФЗ нужно для параллельной обработки в несколько потоков
29 craxx
 
30.03.26
20:04
(20) "запустит параллельно ещё одну 1С и будет работать"
А лицензии на это ты ему купишь?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.