Имя: Пароль:
1C
 
перебор всех колонок в выборке
0 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
Ну, выполнить зачем?
ДанныеЭлементаСправочника.Вставить(Колонка.Имя, Строка(Выборка[Колонка.Имя]));
5 Timon1405
 
24.08.18
10:01
БСП же
//    Преобразует таблицу значений в массив.
//    Может использоваться для передачи на клиента данных, полученных
//    на сервере в виде таблицы значений в том случае, если таблица
//    значений содержит только такие значения, которые могут
//  быть переданы на клиента.
//
//    Полученный массив содержит структуры, каждая из которых повторяет
//    структуру колонок таблицы значений.
//
//    Не рекомендуется использовать для преобразования таблиц значений
//    с большим количеством строк.
//
//    Параметры:
//    ТаблицаЗначений - ТаблицаЗначений.
//
//    Возвращаемое значение:
//    Массив
//
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
    
    Массив = Новый Массив();
    СтруктураСтрокой = "";
    НужнаЗапятая = Ложь;
    Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
        Если НужнаЗапятая Тогда
            СтруктураСтрокой = СтруктураСтрокой + ",";
        КонецЕсли;
        СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
        НужнаЗапятая = Истина;
    КонецЦикла;
    Для Каждого Строка Из ТаблицаЗначений Цикл
        НоваяСтрока = Новый Структура(СтруктураСтрокой);
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
        Массив.Добавить(НоваяСтрока);
    КонецЦикла;
    Возврат Массив;

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