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

18.10.22

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

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

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Быстрое объединение строк в одну:
.epf 4,69Kb
29 Скачать бесплатно

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

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

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

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


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

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

 

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

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

 

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

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

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

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

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

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

См. также

SALE! %

Мастера заполнения Поиск данных База данных Инструментарий разработчика Корректировка данных Универсальные функции Механизмы платформы 1С Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 4000 руб.

25.02.2026    1611    9    1    

11

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

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

30.10.2025    4293    Abysswalker    11    

46

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

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

14.05.2025    7971    DeerCven    15    

62

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

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

21.05.2024    53902    dimanich70    84    

174

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

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

1 стартмани

18.03.2024    7747    7    John_d    13    

59

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

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

12.02.2024    68428    atdonya    31    

72

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

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

30.11.2023    9715    ke.92@mail.ru    17    

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

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

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

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

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

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