|
Вопрос по основам управляемых форм... | ☑ | ||
---|---|---|---|---|
0
ultrannge89
30.03.15
✎
14:37
|
В общем гружу большой объем данных из exel
На обычном я делал так: Ну понятно, диалог выбора файла, выбор листа, потом данные формируются, и выводится большая тз в которой пользователь что-то делает, нажимает далее, и я обрабатываю и пишу например несколько документов. А как быть с управляемыми? Мне кажется все эти управляемые дают только то что, клиент и сервер будет обмениваться постоянно... А там файлик метров на 20... |
|||
1
ultrannge89
30.03.15
✎
14:38
|
Так же из тз выводить в табличную часть?
|
|||
2
ultrannge89
30.03.15
✎
14:39
|
Просто, основная проблема в том что я бывает по 4 часа трачу, переделываю снова и снова, а потом оказывается что выход был ваще прост...)
|
|||
3
ДенисЧ
30.03.15
✎
14:40
|
ПРидётся гонять.
|
|||
4
Desna
30.03.15
✎
14:40
|
на клиенте все в тз загружаешь
|
|||
5
ultrannge89
30.03.15
✎
14:42
|
А через параметр запроса получить ТЧ тоже можно?
|
|||
6
DrShad
30.03.15
✎
14:45
|
(4) а на клиенте не существует ТЗ
|
|||
7
Desna
30.03.15
✎
14:45
|
+4 сорри, у меня не в тз, а в массив. и массив уже на сервере парсишь.
|
|||
8
Desna
30.03.15
✎
14:47
|
(6) да
|
|||
9
KSN
30.03.15
✎
14:48
|
Я обычно для этого массив структур использую. Заполняю на клиенте и гоню его на сервер для дальнейшей обработки.
|
|||
10
ultrannge89
30.03.15
✎
14:49
|
(9), извращенство какое то, видимо я совсем отстал от жизни, со своими обычными...
|
|||
11
ultrannge89
30.03.15
✎
14:50
|
Видимо придется в цикле для каждой строки таблицы значений, передавать структуру на клиента
|
|||
12
DrShad
30.03.15
✎
14:51
|
(11) нафига? на сервере и заполняй свою ТЗ
|
|||
13
KSN
30.03.15
✎
14:52
|
(11) Так зачем в цикле то??? Массивом все структуры за раз.
|
|||
14
Desna
30.03.15
✎
14:53
|
что откуда передать непонятно
|
|||
15
ultrannge89
30.03.15
✎
14:54
|
(13), Можешь кусок кода привести, а то как то не понимаю, кажется сложно будет создавать такой массив, а потом его на клиенте разбивать...
|
|||
16
DrShad
30.03.15
✎
14:55
|
(14) да что же тут непонятного? на клиенте читаем файл, передаем его на сервант, там преобразуем в ТЗ и выкидываем на форму - все просто
|
|||
17
D_E_S_131
30.03.15
✎
14:55
|
(13) Все надо проделывать на сервере, прекратите распространять "гомосню".
(14) Передаешь файл на сервер, там обрабатываешь и заполняешь ТЗ. Если надо что-то изменить ДО загрузки, то отображаешь ТЗ на форме. |
|||
18
ultrannge89
30.03.15
✎
14:56
|
У меня функция чтения из exel серверная
|
|||
19
D_E_S_131
30.03.15
✎
14:56
|
+ (17) Изменения на форме передаешь обратно на сервер в ТЗ и уже окончательно создаешь документы (или что там у тебя).
|
|||
20
Desna
30.03.15
✎
14:57
|
(17) айяай как некрасиво читать файл на сервере, зачем понимаешь клиент тогда?
|
|||
21
DrShad
30.03.15
✎
14:58
|
(20) ну так ежели на серванте установлен офис :)))
|
|||
22
DrShad
30.03.15
✎
14:59
|
+(21) то это уже вовсе и не сервант, а почти что клиент
|
|||
23
ultrannge89
30.03.15
✎
15:01
|
&НаСервере
Функция ЗагрузитьМетодом_MSADODB(Знач ФайлEXCEL, Знач ИмяЛиста, Знач СтрокаЗаголовка = 1, НачСтрока = 0, КонСтрока = 0, КолвоСтрокExcel, Знач ПодключениеADODB = "MicrosoftJetOLEDB40") Экспорт Перем СonnectionString, ADODBConnection, ADODBRecordset, ТекстЗапроса; Перем КолвоКолонокExcel, Поле, Колонка, ИмяКолонки; Перем НоваяСтрока, НомерСтроки; Перем ТаблицаРезультат; Если ПодключениеADODB = "MicrosoftACEOLEDB12" Тогда СonnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""; Иначе СonnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""; КонецЕсли; Попытка ADODBConnection = Новый COMОбъект("ADODB.Connection"); ADODBConnection.ConnectionString = СonnectionString; ADODBConnection.Open(); ADODBConnection.CursorLocation = 3; // По-умолчанию 2. Исключение Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание); Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений. КонецПопытки; ТекстЗапроса = "SELECT * FROM [" + ИмяЛиста + "$]"; Попытка ADODBRecordset = Новый COMОбъект("ADODB.Recordset"); ADODBRecordset.Open(ТекстЗапроса, ADODBConnection); Если (ADODBRecordset.EOF ИЛИ ADODBRecordset.BOF) Тогда КолвоСтрокExcel = 0; Сообщить(НСтр("ru = '" + ИмяЛиста + ": не содержит данных.'"), СтатусСообщения.Внимание); ADODBRecordset.Close(); ADODBConnection.Close(); ADODBRecordset = Неопределено; ADODBConnection = Неопределено; Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений. КонецЕсли; ADODBRecordset.AbsolutePage = 1; ADODBRecordset.AbsolutePosition = 1; Исключение Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание); Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений. КонецПопытки; КолвоСтрокExcel = ADODBRecordset.RecordCount + 1; // (+1) - учет Строки-Заголовока, которая "съедается". КолвоКолонокExcel = 8; Если КолвоСтрокExcel <= 2 Тогда КолвоСтрокExcel = 0; Сообщить(НСтр("ru = '" + ИмяЛиста + ": не содержит данных.'"), СтатусСообщения.Внимание); ADODBRecordset.Close(); ADODBConnection.Close(); ADODBRecordset = Неопределено; ADODBConnection = Неопределено; Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений. КонецЕсли; ТаблицаРезультат = Новый ТаблицаЗначений; ТаблицаРезультат.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4); ТаблицаРезультат.Колонки.Добавить("Сопоставлено", Новый ОписаниеТипов("Булево"), "Сопоставлено", 1); Для ит = 1 ПО КолвоКолонокExcel Цикл Поле = ADODBRecordset.Fields.Item(ит - 1); ИмяКолонки = "К_" + ит; Колонка = ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, , СокрЛП(СтрЗаменить(Поле.Name, "#", "."))); КонецЦикла; НоваяСтрока = ТаблицаРезультат.Добавить(); НоваяСтрока.НомерСтроки = 1; Для ит = 1 ПО КолвоКолонокExcel Цикл ИмяКолонки = "К_" + ит; Колонка = ТаблицаРезультат.Колонки.Найти(ИмяКолонки); НоваяСтрока[ИмяКолонки] = Колонка.Заголовок; КонецЦикла; НомерСтроки = 1; Пока ADODBRecordset.EOF() = 0 Цикл НомерСтроки = НомерСтроки + 1; Если НомерСтроки < НачСтрока Тогда ADODBRecordset.MoveNext(); Продолжить; КонецЕсли; Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда Прервать; КонецЕсли; НоваяСтрока = ТаблицаРезультат.Добавить(); НоваяСтрока.НомерСтроки = НомерСтроки; Для ит = 1 ПО КолвоКолонокExcel Цикл Поле = ADODBRecordset.Fields.Item(ит - 1); Если Поле.ActualSize = 0 Тогда Продолжить; КонецЕсли; ЗначениеЯчейки = Поле.Value; ИмяКолонки = "К_" + ит; НоваяСтрока[ИмяКолонки] = ЗначениеЯчейки; ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина; ДлинаСтроки = СтрДлина(СокрЛП(ЗначениеЯчейки)); ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки); КонецЦикла; ADODBRecordset.MoveNext(); КонецЦикла; ADODBRecordset.Close(); ADODBConnection.Close(); ADODBRecordset = Неопределено; ADODBConnection = Неопределено; Возврат ТаблицаРезультат; КонецФункции |
|||
24
Krabobor
30.03.15
✎
15:03
|
(0)
1. читаешь файл на клиенте (именно на клиенте, а не на сервере) 2. парсишь файл на сервере. делаешь то что тебе надо. 3. заполняешь реквизит формы с типом ТаблицаЗначений для действий юзера(проставление галочек, удаление лишнего). 4. по кнопке "создать документы" на сервере выгребаешь все из реквизитов формы и вертишь их как хочешь на сервере. |
|||
25
ultrannge89
30.03.15
✎
15:04
|
(24), ок буду переделывать
|
|||
26
D_E_S_131
30.03.15
✎
15:05
|
(20) А кто-то запрещает это делать? Особенно если на клиенте только браузер с возможностью выбора файла.
|
|||
27
ultrannge89
30.03.15
✎
15:09
|
Просто не факт что на клиенте есть драйвер ado, а на сервер я поставил...
|
|||
28
D_E_S_131
30.03.15
✎
16:13
|
(27) Я этим "мастерам управляемых форм" тоже самое пытаюсь объяснить. Но они не слушают и топовой код тоже игнорят...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |