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

1С:Предприятие ::

Метки: 

перебор всех колонок в выборке

Я
   golem14
 
24.08.18 - 09:43
Нужно перебрать все колонки в выборке. Получилось такое:

    РезультатЗапроса = Запрос.Выполнить();
    НаборКолонок = РезультатЗапроса.Колонки;
    Выборка = РезультатЗапроса.Выбрать();
    
    // сформируем массив для отправки

    МассивОбъектовНедвижимости = Новый Массив; 
    
    Пока Выборка.Следующий() Цикл
        ДанныеЭлементаСправочника = Новый Структура; 
        Для каждого Колонка Из НаборКолонок Цикл
            Строка = "Строка = Выборка." + Колонка.Имя;
            Выполнить(Строка);
            ДанныеЭлементаСправочника.Вставить(Колонка.Имя, Строка(Строка));
        КонецЦикла; 
        МассивОбъектовНедвижимости.Добавить(ДанныеЭлементаСправочника); 
    КонецЦикла;
    
    //2. сериализуем МассивОбъектовНедвижимости в JSON 

    ЗаписьJSON = Новый ЗаписьJSON; 
    ЗаписьJSON.УстановитьСтроку(); 
    ЗаписатьJSON(ЗаписьJSON, МассивОбъектовНедвижимости); 

Может кто предложит как сделать попроще?
 
 
   Вася Теркин
 
1 - 24.08.18 - 09:49
Функция СтрокаТЗ2Структуру(cтрокаТЗ)  
    структураНовая = новый Структура;
    ТЗ = cтрокаТЗ.Владелец();// ТЗ - владелец  данной строки

    номерСтроки = 1;
    номКолонки  = 1; 
    // цикл по коллекции колонок

    Для НомКол=0 по ТЗ.Колонки.Количество() - 1 Цикл
        имяКолонки = ТЗ.Колонки[НомКол].Имя;        
        значение = cтрокаТЗ[имяКолонки];
        структураНовая.Вставить(имяКолонки,значение);        
        номКолонки = номКолонки + 1;        
    КонецЦикла;
    возврат структураНовая;
КонецФункции

Функция GetSelect(TextSelect,StringJSON)
    //Попытка

        Запрос = Новый Запрос;
        Запрос.Текст = TextSelect;
        //РезультатЗапроса = Запрос.Выполнить();

        //Ответ = РезультатЗапроса.Выгрузить();

        ОтветМассив = Новый Массив;
        МассивРезультатов = Запрос.ВыполнитьПакет();
        Для а = 0 по МассивРезультатов.Количество() - 1 Цикл
            Ответ = МассивРезультатов[а].Выбрать();
            Пока Ответ.Следующий() Цикл
                ОтветМассив.Добавить(СтрокаТЗ2Структуру(Ответ));
            КонецЦикла;
        КонецЦикла;
    //Исключение

    //    ОтветМассив = "Запрос не выполнен." + ОписаниеОшибки();

    //КонецПопытки;

    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, ОтветМассив);
    StringJSON = Запись.Закрыть();
    Возврат StringJSON; 
КонецФункции
   Вася Теркин
 
2 - 24.08.18 - 09:50
Вот вебсервис, выполняет любой запрос
   Вася Теркин
 
3 - 24.08.18 - 09:52
Там с текстом запроса надо аккурантее, если будет попадаться NULL то JSON загрузить не удастся.
   Ботаник Гарден Меран
 
4 - 24.08.18 - 09:53
Ну, выполнить зачем?
ДанныеЭлементаСправочника.Вставить(Колонка.Имя, Строка(Выборка[Колонка.Имя]));
   Timon1405
 
5 - 24.08.18 - 10:01
БСП же
//    Преобразует таблицу значений в массив.

//    Может использоваться для передачи на клиента данных, полученных
//    на сервере в виде таблицы значений в том случае, если таблица

//    значений содержит только такие значения, которые могут
//  быть переданы на клиента.

//
//    Полученный массив содержит структуры, каждая из которых повторяет

//    структуру колонок таблицы значений.
//

//    Не рекомендуется использовать для преобразования таблиц значений
//    с большим количеством строк.

//
//    Параметры: 

//    ТаблицаЗначений - ТаблицаЗначений.
//

//    Возвращаемое значение: 
//    Массив

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

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


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