gifts2017

Конвертация ТаблицыЗначений В Массив

Опубликовал Тимофей Синичкин (TimofeySin) в раздел Программирование - Практика программирования

Начал программировать в 8.2 и столкнулся с постоянной проблемой передачи "таблицы значений" в Управляемую форму ну и написал маленькую функцию конвертации ТЗ в Массив с вложенной структурой.

Начал программировать в 8.2 и столкнулся с постоянной проблемой передачи "таблицы значений" в Управляемую форму ну и написал маленькую функцию конвертации ТЗ в Массив с вложенной структурой.

 

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

 

Может кому и сохранит 10 минут жизни :)

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Окулов (PowerBoy) 17.01.11 13:22
Ждем функцию МассивВТабЗнач(Массив) :D
smartem; bulpi; Alias; +3 Ответить
2. Владислав Мороз (vlad.frost) 17.01.11 13:26
А в таблице значений много строк? Стоит задуматься, о правильной организации обмена клиент-сервер, ибо может получиться так, что в веб-клиенте ваше приложение будет отчаянно тормозить, если данных передаётся много, или количество обменов клиент-сервер не оптимально.
cool.vlad4; +1 Ответить 1
3. Ийон Тихий (cool.vlad4) 17.01.11 13:34
(2) Конечно, надо передавать только то, что надо. Если использовать решение автора, то надо будет в каких-то случаях наверное таблицы значений дробить.
4. Тимофей Синичкин (TimofeySin) 17.01.11 14:18
А вот мне нравиться моя функция, еще добавил поддержку вложенных ТЗ, чтоб прям в запросе писать:
Возврат(ТабЗначВМассив(Запрос.Выполнить().Выгрузить()));
5. Владислав Мороз (vlad.frost) 17.01.11 14:49
(4) Зачем результат запроса передавать на клиента, если можно обработать его на сервере?
6. Тимофей Синичкин (TimofeySin) 17.01.11 15:09
Ну а если его не надо обрабатывать, а требуется заполнить реквизиты формы?
7. Василий Демидов (Душелов) 17.01.11 15:30
Так и заполнять реквизты формы надо на сервере
8. VVV (V_V_V) 17.01.11 16:11
Когда только начинал писать для тонкого клиента 8.2, какой только фигни я не городил для перегонки ТЗ туда/обратно, включая массивы. А ведь имеются функции типа ПоместитьВоВременноеХранилище, РеквизитФормыВЗначение, ДанныеФормыВЗначение и им противоположные...
AndrewVVS; RomanUzmov; frc; athlete; Rustig; BigB; +6 Ответить
9. Тимофей Синичкин (TimofeySin) 17.01.11 16:12
А как насчет ТекущихДанных таблиц?

Хотя конечно понимаю, что это надо редко :).

Но у меня есть случаи когда я заполняю ТекущуюСтроку в таб поле по данным запроса.
10. Михаил Ражиков (tango) 17.01.11 16:42
Иш-3: создадим себе проблему и решим ее
11. Василий Демидов (Душелов) 17.01.11 17:43
(9) текущую строку надо заполнять по идентификатору элемента реквизита формы
12. Эстер Коган (e.kogan) 20.01.11 11:23
А зачем структуру создавать каждый раз? Пройти по колонкам таблицы, создать структуру, потом цикл по строкам -
Мас.Добавить(СтруктураКолонок); 
ЗаполнитьЗначенияСвойств(Мас[Мас.Количество()-1],СтрокаТаблицы)

Ускорит здорово.
Так что минус - неоптимально и неинтересно.
Светлый ум; cool.vlad4; Rustig; +3 Ответить
13. Александр Горлов (gavlexx) 20.01.11 20:32
Разработчики придумали новый механизм работы, а мы продолжаем писать по старинке - зачем? А потом сами пеняем на бухгалтеров, которым 7.7 нравится и они ни в какую на 8 переходить не хотят...
Автору минус. Хоть бы предупредил читателей, что его код в новой платформе неоптимальный и неэффективный, а лишь "костыль" для временной работы по старинке.
Душелов; +1 Ответить 1
14. Александр Милютин (sanfoto) 24.07.12 10:01
(13) gavlexx, поддерживаю , тк. ТОНКИЙ Клиент для того и разрабатывался чтобы ВСЕ вычисления делались на Сервере.
а использование кода ТС - ну например при работе ч/з Интернет .... гоняя большие массивы данных... короче авторам подобного учить мат. часть! ))
15. Ak A (frc) 24.07.12 10:23
(14) sanfoto,
а форма должна заполняться и обрабатываться на клиенте!
а не через пятую точку.
16. {ÐƦǑƝȊ} mx (dour-dead) 08.06.15 14:19
//	Преобразует таблицу значений в массив.
//	Может использоваться для передачи на клиента данных, полученных
//	на сервере в виде таблицы значений в том случае, если таблица
//	значений содержит только такие значения, которые могут
//  быть переданы на клиента.
//
//	Полученный массив содержит структуры, каждая из которых повторяет
//	структуру колонок таблицы значений.
//
//	Не рекомендуется использовать для преобразования таблиц значений
//	с большим количеством строк.
//
//	Параметры: 
//    ТаблицаЗначений - ТаблицаЗначений
//
//	Возвращаемое значение: 
//    Массив
//
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
	
	Массив = Новый Массив();
	СтруктураСтрокой = "";
	НужнаЗапятая = Ложь;
	Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		Если НужнаЗапятая Тогда
			СтруктураСтрокой = СтруктураСтрокой + ",";
		КонецЕсли;
		СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
		НужнаЗапятая = Истина;
	КонецЦикла;
	Для Каждого Строка Из ТаблицаЗначений Цикл
		НоваяСтрока = Новый Структура(СтруктураСтрокой);
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		Массив.Добавить(НоваяСтрока);
	КонецЦикла;
	Возврат Массив;

КонецФункции
...Показать Скрыть



из общего модуля "ОбщегоНазначения"
nlvhome; vasilnikol; +2 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа