Быстрое объединение строк в одну

18.10.22

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

Хочу предложить ещё одно быстрое объединение большого количества строк в одну классическим способом без использования платформозависимых функций СтрСоединить, ЗаписьXML и т.д.

Скачать файлы

Наименование Файл Версия Размер
Быстрое объединение строк в одну:
.epf 4,69Kb
20
.epf 4,69Kb 20 Скачать бесплатно

     Большинство способов быстрого объединения строк подразумевают использование продвинутых функций платформы, таких как: СтрСоединить, ЗаписьXML и т.д.

     Мне захотелось попробовать собрать быструю конкатенацию строк, используя лишь обычные классические действия со строками и массивами, которые будут работать на всех платформах 8 серии.

     Сам агригатор строк выполнен в виде обработки, которая должна быть добавлена в конфигурацию. 

      Основные этапы использования: 


	СтрАгригатор = Обработки.АгригаторСтрок.Создать();

	СтрАгригатор.Добавить_Строку( строка 1) );
    . . . 
	СтрАгригатор.Добавить_Строку( строка N );
	
	ИтоговаяСтрока =  СтрАгригатор.Получить_Всю_Строку();
	

 

Вот реальный пример применения АгрегатораСтрок:

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

 

Похожие публикации:

Формирование строки большой длины

Варианты конкатенации строк в 1С и замеры производительности

Скорость сложения строк большой длины в 1С разными методами (конкатенация строк)

конкатенация строк сложение быстрая быстрое

См. также

Печать любых непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать любые печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

3480 руб.

22.08.2023    1217    1    4    

3

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    5480    YA_418728146    6    

119

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    14425    112    sapervodichka    106    

123

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    6660    quazare    8    

107

Хитрости СКД. Часть 3

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

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    8250    milkers    11    

91

Базовые принципы работы с регламентными заданиями подсистем БСП

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

В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем

22.05.2022    14750    quazare    25    

59
Отзывы
5. SlavaKron 18.10.22 15:32 Сейчас в теме
(2) Такой замер:
&НаКлиенте
Перем МассивСлов;

&НаКлиенте
Процедура ТекстПриИзменении(Элемент)
	МассивСлов = СтрРазделить(Текст, " ", Ложь);
КонецПроцедуры

&НаКлиенте
Процедура СпособАвтора(Команда)
	
	ТекстРезультат = "";
	
	ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
	СпособАвтораНаСервере(МассивСлов);
	ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
	Сообщить("Время выполнения (способ автора): " + ВремяВыполнения + " мс");
	
КонецПроцедуры

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

&НаКлиенте
Процедура СпособСтрСоединить(Команда)
	
	ТекстРезультат = "";
	
	ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
	ТекстРезультат = СтрСоединить(МассивСлов, " ");
	ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
	Сообщить("Время выполнения (способ СтрСоединить): " + ВремяВыполнения + " мс");
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ubnkfl; user1203706; RocKeR_13; ixijixi; 0ct0ber; sashapere; tolyan_ekb; +7 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 729 18.10.22 12:07 Сейчас в теме
"Агригатор" - уже настораживает о фальсификате.

Зачем пытаться ускорить с помощью 1с, если самый быстрый метод - сцепка элементов массива.
7OH; kamisov; RocKeR_13; ardn; mrChOP93; PowerBoy; +6 Ответить
20. sashapere 155 19.10.22 22:20 Сейчас в теме
(1) Попытка ускорить не ускоряемое)
2. tolyan_ekb 104 18.10.22 12:37 Сейчас в теме
А где замеры и сравнение с другими способами?
kamisov; t278; ardn; mrChOP93; +4 Ответить
5. SlavaKron 18.10.22 15:32 Сейчас в теме
(2) Такой замер:
&НаКлиенте
Перем МассивСлов;

&НаКлиенте
Процедура ТекстПриИзменении(Элемент)
	МассивСлов = СтрРазделить(Текст, " ", Ложь);
КонецПроцедуры

&НаКлиенте
Процедура СпособАвтора(Команда)
	
	ТекстРезультат = "";
	
	ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
	СпособАвтораНаСервере(МассивСлов);
	ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
	Сообщить("Время выполнения (способ автора): " + ВремяВыполнения + " мс");
	
КонецПроцедуры

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

&НаКлиенте
Процедура СпособСтрСоединить(Команда)
	
	ТекстРезультат = "";
	
	ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
	ТекстРезультат = СтрСоединить(МассивСлов, " ");
	ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - ВремяНачала;
	Сообщить("Время выполнения (способ СтрСоединить): " + ВремяВыполнения + " мс");
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ubnkfl; user1203706; RocKeR_13; ixijixi; 0ct0ber; sashapere; tolyan_ekb; +7 Ответить
6. tolyan_ekb 104 18.10.22 15:39 Сейчас в теме
(5) весьма недурственно
7. SlavaKron 18.10.22 15:44 Сейчас в теме
(6) Надеюсь, ирония. В среднем, способ автора в 1000 раз медленнее СтрСоединить, зато платформонезависимо.
8. tolyan_ekb 104 18.10.22 15:44 Сейчас в теме
(7) Конечно, ирония. Спасибо за тест.
11. sashapere 155 18.10.22 18:01 Сейчас в теме
(7) Дело в том что , в обработке используется обычные соединение строк через + , прирост в скорости по сравнению с обычным сложение достигается за счёт разделения строк на фрагменты, которые постепенно укрупняются , чтобы избежать частого добавления "кусочков" к большой строке.
9. sashapere 155 18.10.22 17:57 Сейчас в теме
(5) Бро, спасибо за тест
3. KVIKS 378 18.10.22 13:46 Сейчас в теме
А обычный + уже не работает?
Aphanas; sashapere; +2 Ответить
4. RocKeR_13 1046 18.10.22 13:54 Сейчас в теме
Автора так и не насторожили различные "варианты" написания одного слова? Существенный минус - доступность только на сервере: о каком быстродействии может быть речь, если нужен будет серверный вызов как при добавлении отдельной части, так и для сбора итоговой строки? Собственно, в статье не описан сам подход к конкатенации строк с обоснованием выбранного метода
12. sashapere 155 18.10.22 18:03 Сейчас в теме
(4) По доступности ограничений тут нету, можно использовать как на Сервере так и на Клиенте, так и в Мобильном приложении
13. sashapere 155 18.10.22 18:07 Сейчас в теме
(12) Хотя для клиента, надо взять модуль из обработки и разместить эти процедуры и функции в Клиентской части
10. sashapere 155 18.10.22 17:58 Сейчас в теме
(3) При больших количествах соединений, обычный + довольно медленно отрабатывает
14. sashapere 155 18.10.22 18:08 Сейчас в теме
Модуль открыт, (т)дерзайте!
15. TMV 14 18.10.22 20:44 Сейчас в теме
Зачем обработка, когда лучше Общий модуль?
16. Ветер в поле 3 19.10.22 08:59 Сейчас в теме
(15)
Потому что обработка имеет собственные переменные, это некий заменитель класса. А Общий модуль один на всех и нет гарантии, что во время конкатенации строк сразу несколько алгоритмов не будут одновременно формировать строку.
sashapere; +1 Ответить
17. RocKeR_13 1046 19.10.22 09:02 Сейчас в теме
(16) зато сразу получаем ограничение, о котором писал выше: доступность исключительно на сервере. Зачем собственные переменные для конкатенации строк?
19. sashapere 155 19.10.22 22:07 Сейчас в теме
(17) Чтобы отвязаться от сервера, надо руками перенести процедуры и функции из обработки в модуль клиента, должно работать. В обработке есть собственная переменная , которая отвечает за кэш строк, её по сути обработкой и закрываем
21. TMV 14 21.10.22 06:26 Сейчас в теме
18. sashapere 155 19.10.22 22:06 Сейчас в теме
(16) Да, да , именно поэтому!
Оставьте свое сообщение