Имя: Пароль:
1C
 
Преобразование массива структур в Таблицу значений
, ,
0 iznvi
 
08.10.18
12:28
Ребят,появилась проблема,задача состоит в том чтобы Таблицу значений перевести с Клиента на сервере,делаю это через массив структур(Нашел в интернете функции,приложу их в теме) вроде бы делаю все правильно,но все равно выдает ошибку *Ошибка отображения типов:
Отсутствует отображение для типа 'КомандаФормы'*

Так вот "Выберите:" реквизит формы

Код внешней обработки :
&НаКлиенте    
Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные,мсДанные)
    
    мсДанные = Новый Массив;
        
    // Запишем в массив
    Для Каждого СтрокаТЗ Из тзДанные Цикл
        
        стСтрокаТаблицы = Новый Структура;
        Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл
            стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
        КонецЦикла;
        
        мсДанные.Добавить(стСтрокаТаблицы);
        
    КонецЦикла;
    
    Возврат мсДанные;
    
КонецФункции

&НаСервере
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные)
    
    тзДанные = Новый ТаблицаЗначений;
    
    Для Каждого ЭлементМассива Из мсДанные Цикл
        // Рисуем колонки для таблицы
        //Если тзДанные.Колонки.Количество() = 0 Тогда
            Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
                тзДанные.Колонки.Добавить("Отдел",,"Отдел");
                тзДанные.Колонки.Добавить("Сотрудник",,"Фамилия сотрудника");
                тзДанные.Колонки.Добавить("Оклад",,"Оклад");
            КонецЦикла;
        //КонецЕсли;
        
        // Добавляем данные в таблицу
        НоваяСтрока = тзДанные.Добавить();
        Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
            //НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
            НоваяСтрока.Отдел="Отдел 1";
            НоваяСтрока.Сотрудник="Иванов";
            НоваяСтрока.Оклад=5600;

        КонецЦикла;
    КонецЦикла;
    
    Возврат тзДанные;
    
КонецФункции


&НаСервере
Процедура СКлиентаНаСервере(Команда,Массив,Список,МсДанные)
    Если Выберите = "Массив" Тогда
        
        Массив.Добавить("ПередачаМассива");
    Для Каждого Строки из Массив Цикл
        Сообщить(Строки);
    КонецЦикла;
    
ИначеЕсли Выберите = "СписокЗначений" Тогда
    
    Список.Добавить("ПередачаСписка");
    Для Каждого ЭлементСписка из Список Цикл
        Сообщить(ЭлементСписка);    
    КонецЦикла;
    
    ИначеЕсли Выберите="ТаблицаЗначений" Тогда  
        Для Каждого Колонки из МсДанные Цикл
            Сообщить(Колонки);
        КонецЦикла;
        
    КонецЕсли;
1 VladZ
 
08.10.18
12:31
Есть готовое решение. Почему его не используешь?
2 Ник080808
 
08.10.18
12:32
(1) в бсп?
3 hhhh
 
08.10.18
12:33
(0) сделай просто реквизит формы ТаблицаЗначений. Это и есть массив структур

чтобы его перевести в ТЗ делаешь ТвойРеквизит.Выгрузить(); получаешь таблицу значений.
4 VladZ
 
08.10.18
12:35
(2) Да.
5 Ник080808
 
08.10.18
12:37
(4) а какая версия? я в пятницу облазил в поисках не нашел. знаю есть из тз в массив, а обратно не видел(
6 Cyberhawk
 
08.10.18
12:38
(4) Гонишь
7 arsik
 
гуру
08.10.18
12:42
Можно же через значениеВСтроку или сейчас такое не используется?
8 Cyberhawk
 
08.10.18
12:44
(7) Используется. *овнокодерами.
9 VladZ
 
08.10.18
12:45
(6) Не могу пока проверить - база занята.
Возможно гоню. :)

Можно здесь взять готовые:
http://catalog.mista.ru/public/240022/
10 iznvi
 
08.10.18
12:54
(3) Получается что Создаю реквизит формы называю его ТабЗнч и &НаКлиенте
Функция ПредачаТаблицыЗначений()
        
        ТабЗнч.Колонки.Добавить("Отдел",,"Отдел");
        ТабЗнч.Колонки.Добавить("Сотрудник",,"Фамилия сотрудника");
        ТабЗнч.Колонки.Добавить("Оклад",,"Оклад");
        
        ТабЗнч.Отдел="Отдел 1";
        ТабЗнч.Сотрудник="Иванов";
        ТабЗнч.Оклад=5600;

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


&НаСервере
Процедура СКлиентаНаСервере(Команда,Массив,Список)
    Если Выберите = "Массив" Тогда
        
        Массив.Добавить("ПередачаМассива");
    Для Каждого Строки из Массив Цикл
        Сообщить(Строки);
    КонецЦикла;
    
ИначеЕсли Выберите = "СписокЗначений" Тогда
    
    Список.Добавить("ПередачаСписка");
    Для Каждого ЭлементСписка из Список Цикл
        Сообщить(ЭлементСписка);    
    КонецЦикла;
    
    ИначеЕсли Выберите="ТаблицаЗначений" Тогда  
        ТабЗнч.Выгрузить();        
    КонецЕсли;



Всеравно летит ошибка
11 iznvi
 
08.10.18
12:54
(3) Если не понятно,скажи,заредактю:)
12 Йохохо
 
08.10.18
13:14
кажется КомандаФормы не хочет в ТЗ
13 iznvi
 
08.10.18
13:17
(12) ?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой