Имя: Пароль:
1C
1С v8
НаКлиенте или НаСервере?
,
0 Nicole
 
25.04.19
10:28
Пишу обычную обработку: загрузка данных из файла Excel и формирование на основе этих данных документов ОперацияБух.
Какие действия правильно выполнять на клиенте, а какие - на сервере?
Например, у меня процедура ЗагрузитьДанные(Команда). Это на клиенте.
В этой процедуре проверка заполненных полей:
Если НЕ ЗначениеЗаполнено(Объект.ИмяФайлаДанных) Тогда
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Нстр("ru = 'Не указан файл данных для загрузки'"));
    Возврат;
КонецЕсли;
Далее: где лучше выполнить чтение файла Excel и загрузку прочитанных данных в таблицу значений? На клиенте?
1 ДенисЧ
 
25.04.19
10:30
Загрузить файл в ХЗ, передать на сервер, там читать и заполнять
2 toypaul
 
гуру
25.04.19
10:31
"где лучше выполнить чтение файла Excel" этот файл может быть не доступен на сервере

если данных в файле не шибко много, можно прочитать в ТЗ (реквизит формы) на клиенте
3 elCust
 
25.04.19
10:33
(1) >> Загрузить файл в ХЗ, передать на сервер

Перед этим проверить, что на сервере есть Excel.
4 sqr4
 
25.04.19
10:33
(3) можно 1сными средствами попробовать
5 Eg0rkas
 
25.04.19
10:44
(0) думаю, что правильнее в модуле объекта основные операции делать.
файл Excel через временное хранилище на сервер, потом можно в ТабличныйДокумент загрузить Excel и уже работать с ним.
6 MyNick
 
25.04.19
11:26
(0) надо начать с того, что на клиенте нет таблицы значений
7 MyNick
 
25.04.19
11:29
А вообще все просто. Если мы автоматизируем ручной ввод данных на форме у отдельного пользователя, то однозначно на клиенте. Если мы грузим какие-то данные "за кадром пользователя" (т.е. не требуется дополнительная визуальная проверка и прочее участие пользователя), которую вообще лучше делать отдельным регламентным заданием и т.п. - то на сервере. Контекст выбирается исходя из логики процесса.
8 Nicole
 
25.04.19
11:41
(7) Поняла, спасибо
9 Evgenchik
 
25.04.19
11:43
Последние загрузки из Excel делал так. Чтение файла через ADO на стороне клиента, сохраняется все на ТЗ на форме (ДанныеФормыКоллекция), потом перехожу на сервер и загружаю данные из этой ТЗ. А все потому, что к серверу доступа не было, и там нереально было настроить чтение файла. А с клиента читалось очень быстро. Долгая передача больших данных на сервер, но это терпимо было.
Примерно такое соотношение, чтение com-соединением файла из 60000 строк проходило за 30 минут, ADO-соединением за 2 минуты.
10 Вафель
 
25.04.19
11:44
из ексель можно и без самого екселя читать. 1с вроде давно умеет
11 Rema Dan
 
25.04.19
11:44
(0) На клиенте читаем файл через Новый ДвоичныеДанные(ИмяФайла). Помещаем двоичные данные во временное хранилище и отправляем на сервер адрес временного хранилища. На сервере получаем двоичные данные по адресу, записываем их во временный каталог и открываем записанное через ТабличныйДокумент.Прочитать(). Удаляем временный файл, парсим получившийся ТабличныйДокумент. Собираем по полученным данным документ и записываем его. Возвращаемся на клиент и открываем пользователю получившийся документ/документы.
12 Вафель
 
25.04.19
11:46
(11)  правильно делать так
https://gist.github.com/a-sitnikov/6bd195061cd0c3911b1fd03910f0db10
13 Evgenchik
 
25.04.19
11:54
(11) Хороший вариант, надо попробовать
14 ptiz
 
25.04.19
11:55
(12) Господи...насколько же проще в ОФ было.
15 Rema Dan
 
25.04.19
11:59
(12) Какой-то уж слишком правильный вариант. НачатьПомещениеФайла делает то же самое, что и чтение через ДвоичныеДанные, только с кучей асинхронных вызовов. При такой конструкции форма по прежнему будет лагать ожидая завершения серверного вызова или нет?
На счёт чтения из потока. При чтении старых xls файлов из потока платформа периодически отказывается воспринимать их как корректные файлы. При чтении из файлов таких проблем нет.
16 fisher
 
25.04.19
12:00
(11) Не знаю, как сейчас, но когда я тестил загрузку через табдок - работало более криво и менее гибко, чем через ADO. Т.е. для каких-то файлов - ок, а для каких-то и не ок. Все мечтаю переписать на прямой парсинг, но руки не доходят...
17 fisher
 
25.04.19
12:05
(15) Если не путаю, то основная фишка в том, что "НачатьПомещениеФайла" нативно работает в браузерах.
18 Nicole
 
25.04.19
13:02
Хорошо, а в какой момент и где лучше провести проверку реквизитов? У меня именно реквизиты обработки, не формы. В типовой конфигурации видела метод ПроверитьЗаполнение(), инициирующий запуск ОбработкиПроверкиЗаполнения().
19 vi0
 
25.04.19
13:06
(0) раз у тебя будет запись в БД, то если ничего не мешает делать это на сервере то делай на сервере
20 Evgenchik
 
25.04.19
13:09
Проверку реквизитов на Клиенте
21 Nicole
 
25.04.19
13:10
(19) Я имею в виду, что в обработке, помимо имени файла, необходимо указать еще ряд реквизитов: подразделение организации, дату формирования документов и т.д и т.п
22 Nicole
 
25.04.19
13:14
И еще вопрос: я знаю как обратиться к экспортной процедуре типовой обработки - "Обработки.ЗагрузкаДанныхИзЗУП.ЗагрузитьДанныеВИБ"
А к экспортной процедуре внешней обработки?
23 Evgenchik
 
25.04.19
13:17
ВнешняяОбработка = РеквизитФормыВЗначение("Объект");
ВнешняяОбработка.ТвояПроцедура();
24 Nicole
 
25.04.19
13:19
Это я знаю. А если я, к примеру, хочу воспользоваться ДлительныеОперации.ЗапуститьВыполнениеВФоне()? Там вторым параметром строка - имя экспортной процедуры "Обработки.ЗагрузкаДанныхИзЗУП.ЗагрузитьДанныеВИБ".
25 Evgenchik
 
25.04.19
13:30
Насколько я знаю, фоновые процедуры надо использовать только те, что встроены в конфигурацию.
26 vi0
 
25.04.19
14:08
(21) я ответил на твой вопрос: "где лучше выполнить чтение файла Excel и загрузку прочитанных данных в таблицу значений? На клиенте?"
а проверку полей можно переложить на платформу - в реквизитах установить свойство "Проверка заполнения" = "Выдавать ошибку"
27 vi0
 
25.04.19
14:10
кстати не забывай, что нельзя работать работа с ТЗ не поддерживается тонким клиентом
28 Nicole
 
25.04.19
14:32
Всем спасибо, все прочитала .
Ну до кучи еще вопрос: вот добавила я свою дополнительную обработку в справочник. А дальше? В разделе "Продажи" в Сервисе есть команда "Дополнительные обработки". Но там открывается пустой список.
29 Evgenchik
 
25.04.19
14:38
Так там же где добавляла - там есть каким пользователям включить доступность этой обработки
30 Nicole
 
25.04.19
14:41
(29) .... там вроде ничего похожего нет...
31 Evgenchik
 
25.04.19
14:42
а конфигурация-то какая?
32 Nicole
 
25.04.19
14:42
Нашла! Вот слепандя...
33 Вафель
 
25.04.19
14:45
(24) лови пример загрузки в фоне
http://catalog.mista.ru/public/943888/
34 Nicole
 
25.04.19
15:04
(33) Спасибо!
35 Eiffil123
 
26.04.19
10:41
А если тонкий клиент? Там же уже нельзя будет создавать COMОбъект.
Думаю, что кошернее на сервере проводить операции работы с excel.
36 D_E_S_131
 
26.04.19
11:16
(33) Какая-то "шляпа". Фраза "в БСП объем вспомогательного кода достаточно велик" можно читать как "Я не знаю как это работает в БСП и мне влом разбираться. Поэтому ловите мой «велосипед»".
37 Evgenchik
 
26.04.19
12:56
(35) COM-объект можно создавать и на тонком клиенте