Имя: Пароль:
1C
1С v8
Тонкий клиент, загрузка большого объёма данных (с просмотром и отбором)
,
0 Минона
 
30.11.16
11:42
Подскажите, как правильно написать обработку на тонком клиенте (8.3)
Необходимо брать файл (DBF) загружать большое количество строк (порядка 1000), в которых информация из другой системы по отгрузке товара.
Строки надо загрузить (в таблицу значений?), иметь возможность просмотреть, отфильтровать и уже нажав [ОК] - создать документ(ы).

Отсюда вопросы - как лучше создать объекты, чтобы по минимуму гонять даные "Клиент<- ->Сервер" ?
Загрузка в процедуре "&НаСервереБезКонтекста" ?
Файл скопировать физически на сервер в Temp папку или не надо?
ТаблицуЗначений как реквизит обработки?


Не совсем понятно, как хранятся и передаются данные ТЗ (как реквизита формы) при таком раскладе.
Типовая БП3.0, редактировать (создавать регистры сведений) нежелательно.
1 Альбатрос
 
30.11.16
11:47
"большое количество строк (порядка 1000)" =)
Сделайте все на клиенте, думаю будет быстро.
2 Минона
 
30.11.16
11:50
"Сделайте все на клиенте" - как дать понять приложению, что данные лежат на клиенте и не передаются на сервер? И наоборот.
(я про конкретно описанный выше случай)
3 IlyaSR
 
30.11.16
11:51
Создай Табличную часть, в нее на клиенте загони данные и работай с ними как хочешь...1000 - это совсем немного
4 Минона
 
30.11.16
12:06
"загони данные" - это что?
какой объект использовать и где создавать?
5 shpioleg
 
30.11.16
12:14
(4) Файл лучше сохранять в отдельном справочнике Загруженные файлы и использовать ссылку на элемент справочника, как основание для движений документа. ИМХО, нечего редактировать файл обмена. Нужно добиваться автоматической правильной загрузки.
6 Минона
 
30.11.16
12:18
(5) худший совет.
7 shpioleg
 
30.11.16
12:20
(6) А ну давай, вперед. Посмотрим как будешь,например, биллинг грузить напрямую в документ с редактированием и просмотром в табличной части, а не свои несчастные 1000 строк.
8 Минона
 
30.11.16
12:22
(7) где в (0) написано про биллинг?
Вы свою задачу решаете или мою?
У меня вопрос "как добиться автоматической загрузки" или совсем другое спрашиваю?
9 Альбатрос
 
30.11.16
12:28
(2) Приложение понимает, что работать надо на клиенте через &НаКлиенте.

Я вобщем далеко профи в упр. формах, но делаю так:
- ТЧ как реквизит обработки.
- Заполнить ТЧ можно на сервере, соответственно у вас выбор, где читать данные: если на сервере, то файл должен быть доступен серверу, если на клиенте, то передавать загруженные данные через массив структур на сервер.
- На сервере по полченным данным заполняете ТЧ и возвращаете клиенту.
- Смотрите, редактируете свои строки.
- Жмете кнопку СоздатьДокументы и на сервере их создаете.
10 Альбатрос
 
30.11.16
12:28
(9) далеко не профи =)
11 H A D G E H O G s
 
30.11.16
12:34
Нехер серверу заниматься грязной работой.
На Клиенте читаем dbf в массив структур, передаем на сервер безконтектно по значению (ЗНАЧ), на сервере создает ТЗ, в нее заливаем данные из массива структур и ТЗ помещаем во временные таблицы и одним запросом подбираем ссылки
12 mistеr
 
30.11.16
12:40
Чего только не придумают вместо того, чтобы просто выполнять эту загрузку в толстом клиенте...

А я бы придумал вот что. Файл кинуть на сервер, там загрузить в ТЧ дока и смотри-фильтруй до посинения. После окончания всех манипуляций ТЧ очистить (если места жалко).
13 Минона
 
30.11.16
12:43
(12) ага, первое предложение было - создать ярлык для толстого клиента и не париться с переделкой обработки (уже есть под толстый)
Но не прокатило.

ТЧ дока - их будет несколько.
Т.е. по сути группируем данные и загружаем в виде нескольких док-ов.
Я думаю "ТЧ дока" - не самый лучший вариант, и реквизиты в ней не все, какие есть в данных
14 Минона
 
30.11.16
12:45
(9) ок, это понятно.
Непонятно вот что - "ТЧ как реквизит обработки" это ведь ТаблицаЗначений, так?
Где она будет храниться? В памяти сервера или клиента? Какой объём данных будет бегать между сервером и клиентом при просмотре и отборе в ТабПоле обработки?
15 Минона
 
30.11.16
12:47
(11) Подскажите детали плиз!
"помещаем во временные таблицы" - это что значит? И как потом эти временные таблицы выводить на клиенте в ТабПоле ?
16 shpioleg
 
30.11.16
12:52
(8) Тогда отвечу буквально на твои вопросы.

1. Можно загрузить в этот реквизит простые данные из ДБФ полностью на Клиенте.
2. &НаКлиенте
3. Файл копировать не нужно.
4. Да. Реквизит формы будет иметь тип (ТаблицаЗначений).
5. Как передаются данные этого реквизита платформа сама знает.
17 Wit77
 
30.11.16
12:52
(0) А что мешает порыться в формах типовых обработок, найти с табличной частью, понять как это работает в тонком клиенте, сделать по подобию у себя и прикрутить заполнение из ДБФ прямо на клиенте.
Потом на сервер передать получившуюся табличную часть через хранилище значений например и там создать документы.
Еще, как вариант, сначала почитать книжку про программирование на УФ. Т.к. отличия принципиальные.

Сразу скажу в УФ тоже не силен. Практикуюсь редко.
18 shpioleg
 
30.11.16
12:56
(17) Я тоже написал , что типа можно все сделать на клиенте, но на практике это вряд ли получится.
19 Минона
 
30.11.16
13:00
(16) вот пункт 5 очень важен для понимания.
Заполнив ТЗ с "&НаКлиенте" - мы не будем нагружать канал и данные не пойдут на сервер? Будут крутиться чисто на клиенте? И отборы в ТабПоле будут отрабатывать без использования сервера?
20 Wit77
 
30.11.16
13:01
(18) да ну! табличную часть на форме спокойно можно на клиенте заполнить, а потом ее передать на сервер или через хранилище или как-нибудь "РеквизитФормыВЗначение", а там уже документы создать элементарно. Делал что-то подобное, но давно, а щас на общих формах в основном сижу.
21 mistеr
 
30.11.16
13:02
(13) Я про временный док "Загрузка".
22 Wit77
 
30.11.16
13:04
(19) вы так интересуетесь нагрузкой канала, не попытавшись даже элементарно форму с табличной частью нарисовать. Это действительно так критично? Вы попробуйте сначала сделать простой вариант, если действительно будет проблема с каналом - переделать уже проще.
23 Минона
 
30.11.16
13:07
(22) Нарисовали на основе обработки "для БП2.0", получили проблему "полчаса грузит данные и отрисовывает". Вот и переделываем.
24 shpioleg
 
30.11.16
13:07
(19) Для начала колонки какие планируешь в своей ТЗ на клиенте. Например, будет ли в ней колонки содержащие данные которые можно получить только с сервера или будут только простые типы данных из файла?
25 Минона
 
30.11.16
13:16
(24) при загрузке идёт сопоставление по коду, т.е. в ТЗ прописываются данные из справочников базы 1С.
26 Остап Сулейманович
 
30.11.16
13:17
(20) "а потом ее передать на сервер или через хранилище или как-нибудь". Не нужно ничего никуда передавать.
1. Табличные части вполне ШТАТНО существуют и на сервере и на клиенте. Одновременно. Посмотрите работу с любым документом с табличной частью.
2. Табличная часть обработки ничем не отличается от табличной части документа. Разве что ее нельзя сохранить.
3. В ДБФ всегда приходят простые типы. И вполне себе возможно заполнить табличную часть на клиенте. А потом обработать на сервере. Без никаких никуда передач.
27 shpioleg
 
30.11.16
13:18
(25) То то и оно. Наша идилия с полной загрузкой на Клиенте сразу рушится.
28 Остап Сулейманович
 
30.11.16
13:21
(27) Да просто не нужно вот это вот : "при загрузке идёт сопоставление по коду" выполнять при чтении данных из ДБФ.
Сначала на клиенте прочитали все коды, затем на сервере сопоставили. Опять же все. Не гоняя программу с клиента на сервер для каждой строки ДБФ.
29 shpioleg
 
30.11.16
13:24
(28) Пользователь на клиенте должен видеть что нашлось, а что нет. Они же собираются засадить пользователя, чтобы он вычищал все косяки при обмене.
30 Минона
 
30.11.16
13:28
(29) ну да, грузятся данные, анализируются и группируются, создаются документы
31 Остап Сулейманович
 
30.11.16
13:32
(29) Ну так после "сопоставления" на сервере отдать сразу всю ТЧ на клиента для анализа, синтеза и прочих умных веСЧей.
Короче - не нужно гонять туда сюда построчно и все получится.
32 mistеr
 
30.11.16
13:32
То есть все равно приходим к (12)
33 shpioleg
 
30.11.16
13:38
(31) Судя по (23) похоже, что действительно все построчно делают.
34 shpioleg
 
30.11.16
13:42
(32) Приходим, но только ТС не знает как это сделать.
35 Минона
 
30.11.16
14:44
прикручивать ТЧ документа не хотелось бы
это разве единственный выход?
36 mistеr
 
30.11.16
15:08
(35) Нет, не единственный. Но для ТЧ оптимизирован клиент-серверный трафик - передаются только измененные строки.

Можно еще регистр и дин. список для показа.
37 Минона
 
30.11.16
15:52
(36) регистр - это конфу надо менять, и запись в базу делать. не хотелось бы
38 shpioleg
 
30.11.16
16:07
(37) Так в чем сейчас у тебя ступор? Определились же.
1.Делаешь свою обработку с ТЗ.
2.На сервере заполняешь ее данными из файла и доп. данными.
((11) почитай. Только там нужен , все же, контекстный вызов сервера)
3.После проверки пользователь жмет Сформировать и на сервере формируешь доки по данным отредактированной ТЗ.
39 Минона
 
30.11.16
16:11
ОК, спасибо, в эту сторону и будем двигаться.

Хотелось бы ещё понять, как 1С гоняет данные ТЗ с клиента на сервер при заполнении и просмотре ТабПоля - вот на этот вопрос ответа не видно ((
40 Вафель
 
30.11.16
16:20
(31) все гонять не нужно, можно безконтекстный вызов делать
41 shpioleg
 
30.11.16
16:21
(39) Зачем тебе это знать? Просто на сервере полученную ТЗ нужно конвертнуть в реквизит формы (ЗначениеВРеквизитФормы)
Или серверная функция может возвратить массив структур и его разбирать на клиенте и заполнять твою (ТЗ).