Преобразование таблицы значений в массив структур (структура строкой)

19.02.20

Разработка - Механизмы платформы 1С

Таблица значений в массив структур без перебора коллекции колонок для каждой строки таблицы.

Всем привет. Может быть для большинства это покажется банально, но я для себя недавно открыл новую функцию преобразования таблицы значений в массив структур без перебора коллекции колонок для каждой строки строки таблицы. Вот как выглядит стандартное решение, которое в большинстве случаев есть в интернете и на самом Инфостарте:

&НаСервере
Функция ПреобразоватьТаблицуЗначенийВМассивСтруктур(п_ТЗ) Экспорт
	
	МассивСтруктур = Новый Массив;

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

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

 

А вот более аккуратное и красивое решение этой задачи:

 

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

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

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

Всем удачи. Может, кому пригодится.

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7443    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5942    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    17666    YA_418728146    26    

71

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    11222    dsdred    44    

130

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23757    SeiOkami    48    

135

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    18828    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14730    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4692 19.02.20 11:32 Сейчас в теме
Определённые преимущества и даже быстродействие таки есть.
66. AlexO 135 21.02.20 14:18 Сейчас в теме
(1)откуда быстродействие? 1С сама себя подхлестывать стала?
2. kirillkr 29 19.02.20 11:53 Сейчас в теме
На доли секунды увеличите производительность если уберете условие НужнаЗапятая:
	Для Каждого Колонка Из п_ТЗ.Колонки Цикл
		
		СтруктураСтрокой = СтруктураСтрокой + "," + Колонка.Имя;
		
	КонецЦикла
	СтруктураСтрокой = Сред(СтруктураСтрокой , 2);
acanta; GG_Dots; +2 Ответить
6. GG_Dots 41 19.02.20 12:07 Сейчас в теме
(2)Да, отличное замечание
68. AlexO 135 21.02.20 14:22 Сейчас в теме
(2)это если только "секунды" измеряются во вращениях электрона вокруг протона ))
user717534; +1 Ответить
3. Sashares 35 19.02.20 11:58 Сейчас в теме
СтрСоединить, все такое...
GetNight; maksa2005; BigB; Evg-Lylyk; PowerBoy; rabid_otter; GG_Dots; +7 Ответить
4. GG_Dots 41 19.02.20 12:04 Сейчас в теме
Да, как вариант собрать колонки таблицы значений в массив и через "СтрСоединить" закинуть их в строку. +
5. Yashazz 4790 19.02.20 12:07 Сейчас в теме
Открытие века... Просто прям без комментариев... интересно, теперь каждый новичок, открывший для себя нечто офигительное, что на самом деле сто лет как общеизвестно и относится к базовым навыкам, будет теперь радостно постить на ИС? Типа личный дневничок? Так, что ли? Вообще не понимаю, куда смотрят модераторы и какова ценность подобных, кхм, "публикаций"...
user1878860; ktb; ojiojiowka; AlexO; SerVer1C; BigB; ershuevD; wowik; rabid_otter; +9 8 Ответить
7. GG_Dots 41 19.02.20 12:12 Сейчас в теме
(5)Скажи спасибо что я не сделал обработку за 1 стартмани, которую ты бы купил. На инфостарте сидят не только такие гуру 1с - как ты. Иначе бы от силы здесь было бы только 100 человек, среди которых ты бы и писал такие обработки.

Эта информация не несет никакой коммерческой цели - и если это пропустили модераторы, значит все соответствует правилам. А ты просто очередной нытик, который всем не доволен.

Давай на инфостарте оставим только супер разработки, и я уверен что посещаемость его в разу понизится, что не выгодно владельцам сайта. Как раз такие посты и несут большую часть трафика на сайт.
Serg1701; Yakud3a; user712340_lost-s0u1; voneska7; ivanovkpd; IvanSch; by_1Cnik; Летяга; simuljakr; KilloN; AlexiyNA; Dmitri93; gucci76; avmironov; likov2001; lsnr; user717534; user785225; Santa1; KoC_one; Flok; ДимокШ; jaroslav.h; Anchoret; Ivanov_OM; pavlov_dv; 1serger; json; +28 1 Ответить
8. Yashazz 4790 19.02.20 12:15 Сейчас в теме
(7) Давай тогда так. Инфостарт, по крайней мере когда я сюда пришёл, позиционировался как сообщество профессионалов. Которые делают серьёзные вещи и публикуют их. А не как песочница для начинающих ламеров и нубов, уронивших планку настолько ниже плинтуса, что 1С-ников за программистов не считают. Ты - именно такой "пионэр". Это не публикация, а детский восторг, что баночка с пюре открывается, если крышечку покрутить. И если ты не заметил, то моя претензия касалась позиционирования ИС в наше время, когда в погоне за "трафиком на сайт" сюда пришли те, для кого "Сообщить("Привет, мир");" уже открытие. А ты перешёл на личности. Следовательно, ты не просто начинающий ламер, а ещё и хамло.
altu71; Klainor; FatPanzer; ktb; ojiojiowka; AlexO; maksa2005; Anchoret; SerVer1C; BigB; ershuevD; wowik; rabid_otter; +13 6 Ответить
10. GG_Dots 41 19.02.20 12:23 Сейчас в теме
(8)Согласен - я нахамил тебе лично, сказав что ты "нытик"! Может быть я не прав. Именно так и делают, те, кто ноет что инфстарт уже не тот, а раньше было и лучше и т.д. Может это и так - но ныть об этом не стоит. Ничего от этого не изменится.

Но ты не далеко от меня ушел - если судишь о моих достижениях в 1с, только по одному посту. Это тоже говорит о недалеком твоем разуме.

Ну ладно, в любом случае не хотел тебя задеть. Хорошего дня!
voneska7; simuljakr; AlexiyNA; likov2001; +4 1 Ответить
12. Yashazz 4790 19.02.20 12:25 Сейчас в теме
(10) Принято. А насчёт "судишь" - каков наезд, такова ответка.

Достижения? Ну давай тогда, расскажи мне об особенностях работы "ЗаполнитьЗначенияСвойств", т.к. их дофига.
20. GG_Dots 41 19.02.20 12:33 Сейчас в теме
(12) Ну ты просто по одному моему посту решил, что я "ламер". Ладно то что я хам - это ты сделал правильный вывод. Теперь пытаешься мериться знаниями по особенностями процедур и функций? Я думал мы закрыли эту тему.

Это ни к чему не приведет, как минимум к хорошему.
21. Yashazz 4790 19.02.20 12:34 Сейчас в теме
(20) ну я сам тот ещё хам, не спорю, но... Я не "меряюсь", я предлагаю привнести полезность в эту, мягко говоря, не очень содержательную публикацию.
25. GG_Dots 41 19.02.20 12:40 Сейчас в теме
(21) Если честно я думал о том, что бы не включать комментарии при оформлении этой статьи - ну отхватила бы статья пару сотен минусов и все. Но комментарии оказывается крутая штука).

"Особенности - ЗаполнитьЗначенияСвойств" - уверен если сделать такую публикацию, то найдется так же пул людей, которые напишут что это очередной бред из БСП и будут предлогать внести полезность в неё).
klaus38; 1serger; +2 Ответить
28. Yashazz 4790 19.02.20 12:44 Сейчас в теме
(25) ну вот не надо про "бред из БСП", там в комментарии, процитированном коллегой из БСП, даже оговорено, чего НЕ стоит пихать в ЗаполнитьЗначенияСвойств. А вообще штука это неоднозначная, и многие юзают её, не вполне понимая подводные камни. Если бы у меня было время, написал бы. Как я тогда проспорил и вынужден был написать про баян-баянистый, про таблицу значений)))
82. jaroslav.h 180 25.02.20 10:47 Сейчас в теме
(28) перестань комментарии свои "содержительные" писать и сможешь собрать время на статью по ЗаполнитьЗначенияСвойств. Как ты задолбал своим поносом. Вот же наглая самоуверенная сущность.
likov2001; Santa1; +2 Ответить
96. user655090_metis19 21.01.23 21:34 Сейчас в теме
(28)Я думаю, хотя нет , я уверен, что знания ваши равны нулю, а гавкать вас заставляет пара строчек со знаниями в вашем массиве черепной коробки, не более, жалко вас
9. rabid_otter 134 19.02.20 12:20 Сейчас в теме
ахахаха!
модуль ОбщегоНазначения в ERP:

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

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


даже названия переменных те же...
simuljakr; корум; Razlagutt; Риник; e-9; fixin; ktb; Xershi; ojiojiowka; Albert_2008; BigB; ershuevD; wowik; 1serger; Yashazz; +15 Ответить
11. GG_Dots 41 19.02.20 12:24 Сейчас в теме
(9) Что не так? я же написал, что функция из типовых конфигураций? Код 1с вызывает у тебя смех?
13. rabid_otter 134 19.02.20 12:26 Сейчас в теме
(11) тебе (!!!) больше постить нечего, кроме как куска типовых? это и вызывает смех.
bav123; vano-ekt; ktb; Xershi; BigB; Yashazz; +6 2 Ответить
86. пользователь 18.03.20 08:55
Сообщение было скрыто модератором.
...
88. пользователь 18.03.20 10:50
Сообщение было скрыто модератором.
...
89. пользователь 18.03.20 11:12
Сообщение было скрыто модератором.
...
90. пользователь 18.03.20 12:03
Сообщение было скрыто модератором.
...
84. Xershi 1555 17.03.20 17:51 Сейчас в теме
(11) плюс еще посмотри как красиво код написан?
Зачем было уродовать его заменой названий переменных?
85. пользователь 18.03.20 08:53
Сообщение было скрыто модератором.
...
87. пользователь 18.03.20 09:42
Сообщение было скрыто модератором.
...
92. fixin 4273 20.04.21 21:43 Сейчас в теме
(9)
ОбщегоНазначения в ERP:

Спасибо, прям отсюда и скопипастил себе в продакшн
user717534; +1 Ответить
14. Yashazz 4790 19.02.20 12:26 Сейчас в теме
Код 1С-центральной. а равно и Раруса, уже давно вызывает истерический смех. Они собственные стандарты даже близко не соблюдают.

А что касается публикации, то - не сочтите за наезд, но ещё в 20-лохматом году это было методической рекомендацией разработчикам, лежавшей на сайте ИТС. Так что как бы не припахали плагиат, часом)
wowik; rabid_otter; +2 1 Ответить
16. GG_Dots 41 19.02.20 12:30 Сейчас в теме
(14) С чего все решили, что я выложил это как свою разработку).
Нигде об этом не сказано. В интернете везде лежит типовое решение через перебор колонок для каждой строки. Я решил выложить решение немного оптимальнее, которое нашел у себя в типовой конфигурации. Я уверен что наличие этого решения на этом сайта - увеличит грамотность интернет-населения по 1с.

Давайте, я изменю название функции и переменные, плюс поменяю местами их. Так всем будет лучше?:)
Monte Carlo; +1 Ответить
17. Yashazz 4790 19.02.20 12:31 Сейчас в теме
(16) Да с того, что это принцип публикации на ИС)))

не, ну если с позавчера разрешено постить куски кода типовых конфиг, или материалы ИТС, наплевав на авторские права 1С, то чур я первый, мне есть что выложить)
18. Sashares 35 19.02.20 12:32 Сейчас в теме
(17)Материалы с ИТС давно постят. Особенно по внедрению БСП.
30. GG_Dots 41 19.02.20 12:47 Сейчас в теме
(18) ничего плохого в этом не вижу. За счет этого инфостарт и набирает популярность! И в выдаче в поисковиках их вес увеличивается. Для сайта одни плюсы!
29. GG_Dots 41 19.02.20 12:45 Сейчас в теме
(17) Да я тебе даже плюсану - если смогу это использовать в своих решениях.

Когда программисту нужно что-то сделать, то 90 процентов никогда не полезут смотреть ни типовые решения в конфигурациях, ни в БСП, ни в справку. Они идут в яндекс - и там первая ссылка это никогда не сайт итс с идеальным решением, а куча сайтов и форумов, в том числе которых инфостарт. И даже на нем, не всегда эстетичные решения предоставлены.
ivanovkpd; Sun_Storm; kulcha; likov2001; +4 Ответить
31. пользователь 19.02.20 12:50
Сообщение было скрыто модератором.
...
32. пользователь 19.02.20 12:55
Сообщение было скрыто модератором.
...
15. Yashazz 4790 19.02.20 12:29 Сейчас в теме
Кстати, все другие способы преобразовать таблицу в массив, не связанные с тупым циклом, оказались более времязатратными. В своё время делал xml-сериализацию с обработкой текста (и регулярками, и просто "СтрЗаменить", и через xslt), и увы, всё это думает дольше, иногда в разы дольше, нежели простой перебор по строкам. Печаль)
19. rabid_otter 134 19.02.20 12:33 Сейчас в теме
(15) xslt преобразования используются в типовых. прикольная тема.
кстати, как-то замерял скорость сериализации через значениевстрокувнутр, json, xml.
по скорости получилось
значениевстрокувнутр < json (несильный отрыв) < xml (отрыв почти в 1,5 раза)
23. Yashazz 4790 19.02.20 12:36 Сейчас в теме
(19) Да, да. Тоже играл с этим. Ничего хорошего не вышло. Обратная десериализация жрёт очень много времени...
69. AlexO 135 21.02.20 14:26 Сейчас в теме
(15)
В своё время делал xml-сериализацию с обработкой текста
обработка текста в 1С вообще ниже 0. Т.е. ты еще и должен остаешься.
91. SlavaKron 05.11.20 09:58 Сейчас в теме
(15) Если гнаться за быстродействием, то выгрузка ТЗ в Структуру массивов будет явно быстрее и меньше по объему.
Функция ТаблицаЗначенийВСтруктуруМассивов(ТаблицаЗначений)

	Результат = Новый Структура;
	
	Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		Результат.Вставить(Колонка.Имя, ТаблицаЗначений.ВыгрузитьКолонку(Колонка);
	КонецЦикла;
	
	Возврат Результат
	
КонецФункции
Показать
NeLenin; __MaxImuS__; +2 Ответить
95. GetNight 48 27.05.21 11:19 Сейчас в теме
Автор зарабатывает на комментариях ;) плюс ему в копилку)
(91) наиболее близкое к идеалу решение
П.С. вроде как кто-то из местных выяснил, что цикл, расположенный в одну строку, на больших объёмах даёт некоторое преимущество
Для Каждого К Из ТаблицаЗначений.Колонки Цикл Результат.Вставить(К.Имя, ТаблицаЗначений.ВыгрузитьКолонку(К)) КонецЦикла;
22. ImHunter 327 19.02.20 12:34 Сейчас в теме
(0) (2) Так-то это вообще бяка:
    Для Каждого Колонка Из п_ТЗ.Колонки Цикл
        
        СтруктураСтрокой = СтруктураСтрокой + "," + Колонка.Имя;
        
    КонецЦикла
    СтруктураСтрокой = Сред(СтруктураСтрокой , 2);

Такие штуки через СтрСоединить(...) нужно делать.
GetNight; Sedaiko; ktb; bad_wag; +4 Ответить
24. Yashazz 4790 19.02.20 12:38 Сейчас в теме
(22) Это из тех дремучих времён, когда СтрСоединить ещё не было. БСП не всю актуализируют. А некоторые из неё выдирают, даже не подумав, и копипастят)
37. Ish_2 1112 19.02.20 14:00 Сейчас в теме
(24) Зря ты ввязался в эту тему с нравоучениями.
Каждый должен открыть свою Америку сам.
Все-таки ИС для тех, кого больше.
40. Yashazz 4790 19.02.20 14:33 Сейчас в теме
(37) да тоскливо стало просто...
Понимаешь, мы открывали свою америку сами, и не постили каждую открытую ерундовину на публичные ресурсы. Да и ресурсов таких было в разы меньше - Т1С, ИтЛанд, Миста, Кубань... Хотя на Мисте можно было задать совершенно ламерский вопрос и среди 10 наездов был один конструктивный ответ. А теперь всё превратилось в песочницу. Где можно вот так взять и запостить на уровне, далеком даже от девтрейна. И все будут радоваться...

Тоскливо.
47. Ish_2 1112 19.02.20 15:24 Сейчас в теме
49. GG_Dots 41 19.02.20 15:39 Сейчас в теме
(47) Это называется время. Мой дед говорил - вот раньше все познавали без ваших интернетов. Теперь вы говорите - вот раньше все познавали без всяких ерундовых постов и т.д. Через время я скажу - эх, грустно стало - вот раньше не было такого, что вставил флэшку в голову и все закачалось, все познавалось на форумах и т.д.

Эх, было же время... просто не надо об этом говорить везде, где тебе не нравится что-то, особенно если ничего не можешь изменить.

Кстати странно - я тут нашел очень много постов похожего содержания. Почему-то там не твоих недовольных комментов. Упустил что ли?

Эх, а еще молодежь пошла дерзкая, эх вот бы назад в "Т1С, ИтЛанд, Миста, Кубань..."... Эх, эх, эх....
user717534; graphbuh; ojiojiowka; ДимокШ; Monte Carlo; +5 Ответить
57. Ish_2 1112 19.02.20 16:08 Сейчас в теме
(49)
Кстати странно - я тут нашел очень много постов похожего содержания. Почему-то там не твоих недовольных комментов. Упустил что ли?


Недовольные были всегда. Но не я.
Я -то считаю, что ИС на 95% - народный сайт , т.е непрофессиональный. Это его предназначение и стесняться тут нечего. Я недавно выступал на Митапе. И до меня дошло , что Доржи Цыденов , организуя региональные конференции ( митапы) , "идёт к нам , в народ". Превосходное стратегическое решение .
Конференции ИС относятся к конференциям 1С также , как народные , самодеятельные театры относятся к профессиональным.
ivanovkpd; +1 Ответить
58. GG_Dots 41 19.02.20 16:10 Сейчас в теме
(57) Это было адресовано "моему другу" в посте повыше, ошибся веткой)
77. Yashazz 4790 24.02.20 10:52 Сейчас в теме
(57) Я где-то что-то упустил. В своё время в декларации ИС было написано русским по белому: "сайт профессиональных разработчиков". И когда я в лохматом году пытался опубликовать нечто, содержавшее цитаты из СП и методичек, модераторы просто это не пропустили. Вообще. И фрагменты кода из типовой порезали.
Видимо, такая избирательная "народность", ага.
81. Ish_2 1112 25.02.20 09:47 Сейчас в теме
(77)
:) Конечно, упустил.
:) Там русским по-белому , а я тебе черным по -русскому пишу.
26. bad_wag 51 19.02.20 12:41 Сейчас в теме
(22) Согласен, СтрСоединить в на порядок быстрее работает
70. AlexO 135 21.02.20 14:31 Сейчас в теме
(26)не "на порядок", а в силу того, что СтрСоединить - сразу типизированные аргументы, а в обычной строке - 1С сначала их "разбирает" по типам.
Но в итоге все жутко тормозное хоть так хоть эдак.
Обработайте строчку в миллион символов, или около того (если 1С позволит запихать - в чем я сильно сомневаюсь).
Я вот наелся обработки текста в 1С достаточно, она с обычными то нетекстовыми данными работает через пень вокруг земного шара.
78. Yashazz 4790 24.02.20 10:54 Сейчас в теме
(70) Я тебе больше скажу, 1С и с двоичными до странного медленно работает. Казалось бы - два буфера слить, ан думает прям как над "Войной и миром"...
59. kirillkr 29 19.02.20 16:26 Сейчас в теме
(22)
Прошу прощения, а как получить массив Колонок из Таблица значений? Циклическое добавление название колонки в массив, а мотом передать его в функцию? Чем цикл создание строки сразу будет медленней создания нового массива?
27. Yashazz 4790 19.02.20 12:42 Сейчас в теме
А теперь по-серьёзке давайте. 1С, между прочим, имеет к ресурсу ИС некоторое отношение, поэтому беспредельничать не стоит. И модераторам тоже хорошо бы это помнить.

Есть такая вещь в модулях 1С, процитирую:

// Copyright © 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)

Означенная лицензия вот: https://creativecommons.org/licenses/by/4.0/legalcode.ru

И там есть моменты, касающиеся указания авторства, каковых я тут в явном виде не наблюдаю.

Не говоря уже о том, что публикация на ИС может приносить прибыль, и юридически всё это может трактоваться как попытка извлечения прибыли засчёт чужой интеллектуальной собственности.
33. GG_Dots 41 19.02.20 13:03 Сейчас в теме
(27) Тоже не прочь услышать мнение модераторов по данному вопросу.
34. json 3349 19.02.20 13:19 Сейчас в теме
(27) Правильно тебе написал автор, что ты нытик.
Ты можешь спорить или возмущаться, но это только только доказывает данный факт, нравится тебе это или нет.

Если сомневаешься, то можешь перечитать свои комментарии и посчитать процент нытья в них.
А потом сделать вывод.

Даже докопаться не можешь нормально.

Почитай что ты написал.
Attribution 4.0 International (CC BY 4.0)

Прочитай внимательно лицензию, прежде чем предъявлять претензии модераторам или кому-либо еще.
35. Sashares 35 19.02.20 13:31 Сейчас в теме
(34)Вы по вашей ссылке всю страницу то прочитайте, а не только первый абзац.

При обязательном соблюдении следующих условий:

«Attribution» («Атрибуция») — Вы должны обеспечить соответствующее указание авторства, предоставить ссылку на лицензию, и обозначить изменения, если таковые были сделаны. Вы можете это делать любым разумным способом, но не таким, который подразумевал бы, что лицензиар одобряет вас или ваш способ использования произведения.
36. json 3349 19.02.20 13:43 Сейчас в теме
(35) Ссылка на авторство предоставлена, ссылка на лицензию - нет.
Но ты для начала поди докажи, что данный код имеет отношение к той лицензии, которую предоставил этот "умник".

Просто попытка докопаться на ровном месте.

Там кстати есть еще замечание, дочитай до конца лицензию.
38. Sashares 35 19.02.20 14:08 Сейчас в теме
(36) Замечание читал, но что считать общественным достоянием я хз))
39. json 3349 19.02.20 14:13 Сейчас в теме
(38)
https://creativecommons.org/licenses/by/4.0/deed.ru
или если такое использование вами материала разрешено согласно применимому исключению или ограничению авторских прав

А там написано

Корпорация Creative Commons ("Creative Commons") не является юридической фирмой, не оказывает юридических услуг или консультаций. Распространение публичных лицензий Creative Commons не порождает отношений, аналогичных отношениям между юристом и клиентом, или каких-либо иных отношений. Creative Commons предоставляет доступ к своим лицензиям и всей сопутствующей информации на основе принципа "как есть". Creative Commons не предоставляет каких-либо гарантий в отношении лицензий, любого материала, предоставляемого на условиях таких лицензий, или любой сопутствующей информации.

https://creativecommons.org/licenses/by/4.0/legalcode.ru

То есть получается, что в данном случае
Вы не обязаны действовать согласно условиям лицензии
41. Yashazz 4790 19.02.20 14:37 Сейчас в теме
(34) Думаешь, не читал?)) Я не зря про упоминание авторства сказал.
45. json 3349 19.02.20 15:02 Сейчас в теме
(41) в лицензии сказано
Вы должны обеспечить соответствующее указание авторства, предоставить ссылку на лицензию, и обозначить изменения, если таковые были сделаны. Вы можете это делать любым разумным способом, но не таким, который подразумевал бы, что лицензиар одобряет вас или ваш способ использования произведения

Написал же тебе, прочитай внимательно
Вы можете это делать любым разумным способом


Теперь внимательно читай в публикации
это решение присутствует в типовых конфигурациях


Это ссылка на авторство и лицензию.
Да она не прямая, косвенная.
Но в лицензии сказано, что можно ссылаться любым разумным образом.

То есть упомянутая тобой лицензия не нарушается.
Лицензиар может потребовать явного указания, но ты не лицензиар, а просто нытик, который ищет до чего докопаться.

Так что лучшим для тебя решением было не пытаться раздуть из мухи слона.
Тем более, что в вопросе ты не разбираешься.
Monte Carlo; +1 Ответить
42. Yashazz 4790 19.02.20 14:40 Сейчас в теме
Я не докапываюсь. Я просто не хочу, чтобы с ИС произошло то, что давеча имело место с nginx. Там тоже долгое время всем было благодушно пофигу.
43. GG_Dots 41 19.02.20 14:49 Сейчас в теме
(42) Инфостарт - это не то место, где сидит душевная компания разработчиков и за чашкой чая обсуждает свои супер разработки, до которым начинающим программистам расти и расти. В первую очередь - это серьезный проект, на котором люди зарабатывают деньги. Посещаемость данного ресурса и его стоимость (лично мое мнение) сильно зависит от таких вот простых публикаций, которым по твоему мнению здесь не место. Но владельцы сайта, в том числе и модераторы, считают иначе.

И Если ты видишь вектор развития этого ресурса в другом направлении - то самое время связаться с владельцами сайта и рассказать им свои идеи. Может после этого они заблокируют сотни "бесполезных" публикаций и гуру 1с достанут свои чашечки для чая, и все будет как в старые добрые времена.
44. mifka186 9 19.02.20 14:59 Сейчас в теме
Чем тебе ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений) не угодила?
ojiojiowka; GG_Dots; +2 Ответить
46. GG_Dots 41 19.02.20 15:19 Сейчас в теме
(44) Название не понравилось. Решил с вот таким вот название здесь выложить.
Спасибо за конструктив. Хорошего дня.
user774630; +1 Ответить
48. RocKeR_13 1366 19.02.20 15:38 Сейчас в теме
Достаточно часто приходилось с сервера на клиент передавать данные из таблицы значений, но в голову не приходило гуглить, как это делать: однозначно в виде массива структур. Сначала писал сам, потом перешел на БСПшную функцию. Но чтобы в цикле по строкам каждый раз обходить циклом список колонок ТЗ...я хз, кому это могло в голову прийти.

З.Ы. ждем следующих статей)))
1) Как получить значения нескольких реквизитов объекта
2) Как сравнить Структуры с учетом вложенности
50. GG_Dots 41 19.02.20 15:42 Сейчас в теме
(48) Странно, в яндекс вордстат порядка 1000 запрос в месяц по данной тематике - и большая часть ответов там именно в таких варианте. Повезло что ты не в числе этих тупых людей, а сам все допер через БСП. Рад за тебя.
Хорошего дня.
51. RocKeR_13 1366 19.02.20 15:51 Сейчас в теме
(50) ну у нас же импортозамещение идет, 1С становится все популярнее и растет число жаждущих получить вакансию 1Сника. И в этом направлении, и в традиционных языках программирования есть общая тенденция: народ жаждет уже готовое решение. И зачастую игнорируют готовые библиотеки. В данном конкретном случае вероятно кто-то где-то этот алгоритм нашел или на коленке написал, а радостный народ тут же растиражировал, не задумываясь: ну работает и ладно)
52. GG_Dots 41 19.02.20 15:56 Сейчас в теме
(51) Просто не пойму почему многие видят негатив в этой публикации. Кто надо написал, тут и тут можно подправить и все), а кто-то полез кричать - нафига здесь весь этот бред нужен)
53. RocKeR_13 1366 19.02.20 16:00 Сейчас в теме
(52) ну просто это действительно есть все в составе БСП, по которой есть справка.
Например: https://its.1c.ru/db/bsp311doc#content:405:hdoc
54. Yashazz 4790 19.02.20 16:05 Сейчас в теме
(53) Да кто ж енту справку читает-то, по нонешним временам) Всем разжуй да в рот положи)
56. GG_Dots 41 19.02.20 16:06 Сейчас в теме
55. GG_Dots 41 19.02.20 16:05 Сейчас в теме
(53) Многое что есть на этом прекрасном сайте. Но это не говорит о том, что это нельзя выкладывать здесь. Или это какое-то негласное правило, о котором я не знаю?

Ну ладно согласен - твое мнение - это здесь не нужно, мое мнение - это здесь нужно. Каждый останется при своем мнении. Но итог один - эта публикация будет здесь, и возможно будет в выдаче поисковиков в топе. :) И на данной момент - плюсов больше, чем минусов)
60. Yashazz 4790 19.02.20 17:56 Сейчас в теме
(55) К вопросу о количестве плюсов, минусов, поощрении тупизма и прочая.

Одна гетера сказала Аристотелю: "вот ты годами учишь мальчишек, но стоит мне поманить их пальцем, и они побегут за мной, забыв тебя". Он ответил: "так ведь тебе проще - я веду их вверх, а ты вниз".
GetNight; ojiojiowka; Поручик; +3 Ответить
61. GG_Dots 41 20.02.20 08:40 Сейчас в теме
(60) Нифига тебя как сильно задело))) На самом деле я думал ты будешь умнее - и не полезешь во весь этот срач в переписке: но видимо ты так же не далеко ушел от меня. Приятно было пообщаться. Хорошего дня.
json; Monte Carlo; +2 Ответить
73. AlexO 135 21.02.20 15:49 Сейчас в теме
(48)
Но чтобы в цикле по строкам каждый раз обходить циклом список колонок ТЗ
а БСП что - использует недокументированную СУБД для этих нужд? Или вы думаете, что БСП - она минимум на уровне API ОС работает? Или что она сама себе - СУБД внутри 1С?
76. RocKeR_13 1366 21.02.20 16:03 Сейчас в теме
(73) Это было к тому, что ключи структуры-элемента массива достаточно сформировать один раз перед началом циклом, а не при обработке каждой строки
79. Yashazz 4790 24.02.20 10:59 Сейчас в теме
(48) Ну на самом деле есть некоторые вещи, не обрабатываемые через "ЗаполнитьЗначенияСвойств". Она не падает и не ругается, просто игнорит. Вот их, родимых, приходится тягать напрямую. Это и com'ы, и внешние объекты, и в моксельных макетах бывает, и из xdto чужих сервисов кое-что, словом, есть. Но поскольку тут "народный сайт", а не для профи, то не будем углубляться)
62. BackHand001 23 20.02.20 15:19 Сейчас в теме
Я обхожусь без Если

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

КонецФункции
Показать
63. bad_wag 51 20.02.20 19:30 Сейчас в теме
(62) Клеить строки - моветон

Функция ПреобразоватьТаблицуЗначенийВМассивСтруктур(п_ТЗ) Экспорт 

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

КонецФункции
Показать
64. BackHand001 23 21.02.20 05:21 Сейчас в теме
(63) Спасибо.
Век живи, век учись.
75. AlexO 135 21.02.20 15:51 Сейчас в теме
(64)посмотрите ОМ в типовых, и функции внутри.
Найдете много интересного.
Заодно и БСП подтяните )
74. AlexO 135 21.02.20 15:51 Сейчас в теме
(63)
Клеить строки - моветон
СтрСоединить - это тоже "склейка" строк. Только сразу типизированная.
83. rabid_otter 134 26.02.20 13:14 Сейчас в теме
(74)
СтрСоединить - это тоже "склейка" строк. Только сразу типизированная.


стрсоединить в 19 раз быстрее обычной конкатенации на больших объемах.
65. Csar 21.02.20 09:40 Сейчас в теме
В конфе Бухгалтерии функция находится по адресу ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений). Это мало ли кому пригодится.
67. AlexO 135 21.02.20 14:20 Сейчас в теме
А с чего взяли, что "Преимущество очевидно."?
ЗаполнитьЗначенияСвойств - будут быстрее записи перебором?
А как тогда работают ЗаполнитьЗначенияСвойств? Используют средства какого-то СУБД что ли?
У 1С её же функции - работают примерно одинаково (плюс-минус зависит от типов данных), о чем речь в замене одних одноэсовых функций - на другие?
71. Поручик 4692 21.02.20 15:14 Сейчас в теме
Ура! Вброс удался. Быстродействие таки немного есть, потому что структура колонок получается один раз в начале функции, а не каждый раз в цикле, как в типовой. Много дятлов, автору зачёт.
72. AlexO 135 21.02.20 15:47 Сейчас в теме
(71)
потому что структура колонок получается один раз
заполняется все равно в цикле. А что 1С даже свои колонки даже в своей базе - получает со скрипом (почему и беда если это в цикле), так это каждый раз удивляет разве что тебя.
80. Yashazz 4790 24.02.20 11:05 Сейчас в теме
(72) А как 1С будет кэшировать, если прямо в некоей итерации цикла по строкам вдруг бац - и добавится новая колонка? Поэтому да, со скрипом.
93. KazanKokos 11 17.05.21 10:47 Сейчас в теме
:)))) давайте весь БСП в инфостарт скопируем :)

Ну и обратный процесс забыли:

ОбщегоНазначенияУТ.МассивВТаблицуЗначений(МассивСтруктур)
94. KazanKokos 11 17.05.21 11:20 Сейчас в теме
(93) даже две :)))

ИнтеграцияИС.МассивВТаблицуЗначений(Массив, ТаблицаЗначений);

Тут правда процедура а не функция )

Тут тоже можно поизгаляться:

	ЗаполнениеКолонок = Истина;
	
	Для Каждого Строка Из Массив Цикл
		
		Если ЗаполнениеКолонок Тогда
			ЗаполнениеКолонок = Ложь;
			Для Каждого КлючИЗначение Из Строка Цикл
				ТаблицаЗначений.Колонки.Добавить(КлючИЗначение.Ключ);
			КонецЦикла;
		Иначе
			НоваяСтрока = ТаблицаЗначений.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		КонецЕсли;
	КонецЦикла;
Показать


так короче(не проверял) :):
	
Если Массив.Количество() = 0 Возврат;

        Для Каждого КлючИЗначение Из Массив[0] Цикл
	       ТаблицаЗначений.Колонки.Добавить(КлючИЗначение.Ключ);
	КонецЦикла;

	
	Для Каждого Строка Из Массив Цикл
		НоваяСтрока = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
	КонецЦикла;

Показать
Оставьте свое сообщение