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

18.10.22

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

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

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

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

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

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

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

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


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

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

 

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

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

 

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

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

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

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

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

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2664    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4595    atdonya    22    

45

Переоткрытие внешних обработок

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

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

30.11.2023    3956    ke.92@mail.ru    16    

61

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

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

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

28.08.2023    8803    YA_418728146    6    

141

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

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

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

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

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

1 стартмани

13.10.2022    16140    133    sapervodichka    112    

129

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

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

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

18.07.2022    7242    quazare    8    

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

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

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

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

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

Зачем пытаться ускорить с помощью 1с, если самый быстрый метод - сцепка элементов массива.
7OH; kamisov; RocKeR_13; ardn; mrChOP93; PowerBoy; +6 Ответить
20. sashapere 157 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 157 18.10.22 18:01 Сейчас в теме
(7) Дело в том что , в обработке используется обычные соединение строк через + , прирост в скорости по сравнению с обычным сложение достигается за счёт разделения строк на фрагменты, которые постепенно укрупняются , чтобы избежать частого добавления "кусочков" к большой строке.
9. sashapere 157 18.10.22 17:57 Сейчас в теме
3. KVIKS 396 18.10.22 13:46 Сейчас в теме
А обычный + уже не работает?
Aphanas; sashapere; +2 Ответить
4. RocKeR_13 1317 18.10.22 13:54 Сейчас в теме
Автора так и не насторожили различные "варианты" написания одного слова? Существенный минус - доступность только на сервере: о каком быстродействии может быть речь, если нужен будет серверный вызов как при добавлении отдельной части, так и для сбора итоговой строки? Собственно, в статье не описан сам подход к конкатенации строк с обоснованием выбранного метода
12. sashapere 157 18.10.22 18:03 Сейчас в теме
(4) По доступности ограничений тут нету, можно использовать как на Сервере так и на Клиенте, так и в Мобильном приложении
13. sashapere 157 18.10.22 18:07 Сейчас в теме
(12) Хотя для клиента, надо взять модуль из обработки и разместить эти процедуры и функции в Клиентской части
10. sashapere 157 18.10.22 17:58 Сейчас в теме
(3) При больших количествах соединений, обычный + довольно медленно отрабатывает
14. sashapere 157 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 1317 19.10.22 09:02 Сейчас в теме
(16) зато сразу получаем ограничение, о котором писал выше: доступность исключительно на сервере. Зачем собственные переменные для конкатенации строк?
19. sashapere 157 19.10.22 22:07 Сейчас в теме
(17) Чтобы отвязаться от сервера, надо руками перенести процедуры и функции из обработки в модуль клиента, должно работать. В обработке есть собственная переменная , которая отвечает за кэш строк, её по сути обработкой и закрываем
21. TMV 14 21.10.22 06:26 Сейчас в теме
18. sashapere 157 19.10.22 22:06 Сейчас в теме
(16) Да, да , именно поэтому!
Оставьте свое сообщение