Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
Я
   yyyuuu
 
29.10.18 - 02:52
Здравствуйте, уже перепробовал все. Сделал все что можно, и через временное храненилище и через массив да через все что угодно. Не работает все ровно ошибка.

{ВнешняяОбработка.ЗагрузкаЭлектроныхАдресовИзЭксель.Форма.Форма.Форма(64)}: Ошибка при вызове метода контекста (ПрочитатьЛистExcel)
    ТЗ = ПрочитатьЛистExcel(Объект.Поле);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
 
 
   yyyuuu
 
1 - 29.10.18 - 02:53
Файловая база.

Сам код


Функция ПрочитатьЛистExcel(Адрес, ТЗ = Неопределено, НомерЛиста = 1, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
      
      ExcelApplication = Новый COMObject("Excel.Application");
      ФайлЭксель = ExcelApplication.WorkBooks.Open(Адрес);
      ЛистЭксель = ФайлЭксель.Sheets(НомерЛиста);
      
      Если ВсегоСтрок = 0 Тогда
          ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
      КонецЕсли;
      Если ВсегоКолонок = 0 Тогда
          ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
      КонецЕсли;
      Если ТЗ = Неопределено Тогда
          ТЗ =  Новый ТаблицаЗначений;
          Для Счетчик = 1 По ВсегоКолонок Цикл
              ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
          КонецЦикла;
      КонецЕсли;
      
      Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
          НоваяСтрока = ТЗ.Добавить();
      КонецЦикла;
      
      Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
      Данные = Область.Value.Выгрузить();
      
      Для Счетчик = 0 По ВсегоКолонок-1 Цикл
          ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
      КонецЦикла;
      
      ExcelApplication.DisplayAlerts = 0; 
      
      ExcelApplication.Quit();
      ExcelApplication = Неопределено;
      
      //Возврат ТЗ;

      АдресХранилища = ПоместитьВоВременноеХранилище(ТЗ,УникальныйИдентификатор);
      ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища);
      //Возврат ПротоколПереноса;

      //

      Адрес = ПоместитьВоВременноеХранилище(ТЗ ,Новый УникальныйИдентификатор);
      ЭтаФорма.Реквизит1 = Адрес;
      //Возврат 

      ТекстТЗ = ЗначениеВСтрокуВнутр(ТЗ);
      ТаблицаЗначений = ЗначениеИзСтрокиВнутр(ТекстТЗ);
    //

КонецФункции

&НаКлиенте
Процедура ВыборФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    //

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберете excel - файл";
    Диалог.ПолноеИмяФайла = "C:\Users\Nikita.Vasilev\Documents\Эксель электронная почта";
    Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
    //

    Если Диалог.Выбрать() Тогда
        //

        Объект.Поле = Диалог.ПолноеИмяФайла;
        //

    КонецЕсли;
    //

    ТЗ = ПрочитатьЛистExcel(Объект.Поле);
    //

    Данные = ПолучитьИзВременногоХранилища(ЭтаФорма.Реквизит1);
    Сообщить(ЭтаФорма.Реквизит1);
        
КонецПроцедуры
   H A D G E H O G s
 
2 - 29.10.18 - 03:02
Функция ПрочитатьЛистExcel(Адрес, ТЗ = Неопределено, НомерЛиста = 1, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт

заменить на 

Функция ПрочитатьЛистExcel(Адрес, Знач ТЗ = Неопределено, НомерЛиста = 1, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
   yyyuuu
 
3 - 29.10.18 - 03:09
О, немного продвинулся дальше. Спасибо, помогло. Буду теперь дальше разбираться)
   yyyuuu
 
4 - 01.11.18 - 03:07
Поменял на Знач и в Массив. Кому поможет забирайте работает на файловом варианте.

 Массив = Новый Массив();
      СтруктураСтрокой = "";
      НужнаЗапятая = Ложь;
      //

      Для Каждого Колонка Из ТЗ.Колонки Цикл
        //  

        Если НужнаЗапятая Тогда
            //

            СтруктураСтрокой = СтруктураСтрокой + ",";
            //

        КонецЕсли;
        //

        СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
        НужнаЗапятая = Истина;
      //    

      КонецЦикла;
      //

      Для Каждого Строка Из ТЗ Цикл
        //  

        НоваяСтрока = Новый Структура(СтруктураСтрокой);
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
        Массив.Добавить(НоваяСтрока);
        //

    КонецЦикла;
    //

    Возврат Массив;
   H A D G E H O G s
 
5 - 01.11.18 - 04:07
(4) Откройте для себя магию белого.
Блин.
Магию общих модулей типовых конфигураций общего назначения.

ТаблицаЗначенийВМассивСтруктур() вроде функция зовётся.
   hhhh
 
6 - 01.11.18 - 06:04
(5) Достаточно просто сделать реквизит формы типа ТЗ

Это будет массив структур

А РеквизитФормыВЗначение("ТЗ") : это будет таблица значений
   yyyuuu
 
7 - 02.11.18 - 04:00
(5) у меня все пока костылями)))
   yyyuuu
 
8 - 02.11.18 - 04:00
(6)
Ты предлагаешь на форме создать ТЗ и в нее все передать?
   Chameleon1980
 
9 - 02.11.18 - 04:58
(3) а смысл то понял?
   yyyuuu
 
10 - 02.11.18 - 05:30
(9) Таблицу значений передать с сервака на клиент запрщенно. Понял(
 
 Рекламное место пустует
   yyyuuu
 
11 - 02.11.18 - 07:53
А почему такое интересное поведение нет)
   Cyberhawk
 
12 - 02.11.18 - 07:58
Значит не понял
   yyyuuu
 
13 - 02.11.18 - 08:07
Смотря что понять надо было). Я если честно запутался в вопросе.
Я понял что нельзя передавать таблицу значений, ну запрщенно 1с.
Но можно передать массив.
Почему (2). улучшило общую ситуацию не понял
   hhhh
 
14 - 02.11.18 - 08:13
(8) я предлагаю создать реквизит формы ТЗ и ничего никуда не передавать. С этим реквизитом можно спокойно работать и на клиенте и на сервере.
   Cyberhawk
 
15 - 02.11.18 - 09:35
"Почему (2). улучшило общую ситуацию не понял" // Ну так визуально отличия видишь?
   yyyuuu
 
16 - 02.11.18 - 10:07
(14) что создал просто реквизит и он сам понял, что туда тз мою надо пихать)?
   yyyuuu
 
17 - 02.11.18 - 10:10
(15)
Выгружая ТЗ в массив и возращая или массив или строку, да что угодно. Выдавало ошибку, бла бла бла XTDO сервер клиент, шайтан машина отказывалась делать то что ей приказано.
Поставил знач, пошло поехало. И строка возращалась и массив и все шо угодно.
На серверном варианте все работает без присваиваниея "знач". Почему, если какие то обьяснения будут, Я вообще послушаю их с интересом.
   yyyuuu
 
18 - 08.11.18 - 03:43
Если  кто нибудь когда нибудь будет читать мои темы и появятся вопросы пишите
https://t.me/Nikitaje
   H A D G E H O G s
 
19 - 08.11.18 - 03:58
(17) Без ЗНАЧ функция возвращает на Клиент ТаблицуЗначений, созданную тобой на сервере через параметр ТЗ. Если указываем ЗНАЧ - на сервере создается копия переменной ТЗ, с которой работает код на сервере и которая не возвращается на Клиент.
   yyyuuu
 
20 - 08.11.18 - 04:27
(19) Я что то подобное и думал. Ну это так, для общего развития больше)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует