| 
    
            
         
         | 
    
  | 
Вопрос по основам управляемых форм... | ☑ | ||
|---|---|---|---|---|
| 
    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) Я этим "мастерам управляемых форм" тоже самое пытаюсь объяснить. Но они не слушают и топовой код тоже игнорят...     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |