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

17.01.11

Разработка - Универсальные функции

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

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

 

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

 

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2966    Abysswalker    7    

43

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5811    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    47310    dimanich70    83    

167

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7073    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    58806    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8807    ke.92@mail.ru    17    

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

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

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

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

КонецФункции
Показать



из общего модуля "ОбщегоНазначения"
konyashkingn; Babylka; yghmd; Vyacheslide; Voblhned; user745653; abkam; Prad2002; nlvhome; vasilnikol; +10 Ответить
18. Ivon 676 03.03.17 15:10 Сейчас в теме
Вот функция, если кому надо, работает процентов на 30 быстрее. Использую для формирования Json-пакета, так как сразу таблицу запихнуть в Json нельзя.
Функция ВыполнитьЗапросВМассивСтруктур(ЗапросТекст, СтруктураПараметров = Неопределено) Экспорт
	Если СтруктураПараметров = Неопределено Тогда
		СтруктураПараметров = Новый Соответствие;
	КонецЕсли;
    З = Новый Запрос(ЗапросТекст);
    Для каждого Параметр из СтруктураПараметров Цикл
        З.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
    КонецЦикла;
    Результат = З.Выполнить();
    СтрокаСтруктуры = "";
    МассивКолонок = Новый Массив;
    Для каждого Рез из Результат.Колонки Цикл
        Если НЕ СтрокаСтруктуры = "" Тогда
            СтрокаСтруктуры = СтрокаСтруктуры + ", ";
        КонецЕсли;
        СтрокаСтруктуры = СтрокаСтруктуры + Рез.Имя;
        МассивКолонок.Добавить(Рез.Имя);
    КонецЦикла;
    МассивСтрок = Новый Массив;
	Рез = Результат.Выбрать();
    Пока Рез.Следующий() Цикл
        СтруктураСтроки = Новый Структура(СтрокаСтруктуры);
		ЗаполнитьЗначенияСвойств(СтруктураСтроки, Рез);
        МассивСтрок.Добавить(СтруктураСтроки);
    КонецЦикла;
    Возврат МассивСтрок;
КонецФункции
Показать

На вход подается текст запроса и параметры в виде соответствия.
simuljakr; maraton86; user705522_constantin_h; Vyacheslide; rayastar; +5 Ответить
19. tat10 02.03.18 10:13 Сейчас в теме
Большое Спасибо! Мне очень помогло.
20. Vyacheslide 25 21.06.18 13:52 Сейчас в теме
Всем большое спасибо!
21. Sardukar 64 08.09.23 05:17 Сейчас в теме
В ERP есть ОбщегоНазначения.ТаблицаЗначенийВМассив
Для отправки сообщения требуется регистрация/авторизация