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

18.10.22

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

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

Скачать файл

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

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

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

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

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

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


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

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

 

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

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

 

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

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

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

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

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

См. также

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

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

21.05.2024    20252    dimanich70    81    

145

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

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

1 стартмани

18.03.2024    4100    3    John_d    11    

57

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

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

12.02.2024    18218    atdonya    24    

57

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

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

30.11.2023    5511    ke.92@mail.ru    16    

65

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

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

28.08.2023    14779    YA_418728146    7    

166

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

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

2 стартмани

22.08.2023    3596    57    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    18501    171    sapervodichka    112    

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

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

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

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

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

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