Немного теории: Конкатенация (соединение строк). Казалось бы - ну что может быть проще и однозначнее? Ан нет. Выражение T = "А"+"Б"; (если оно не вычислено на этапе компиляции/разбора) требует выделения памяти для "А", памяти для "Б", анализа длин "А" и "Б", выделение памяти для T, копирование первой строки, копирование второй строки. Это медленно, особенно если в цикле дописывается кусочек в конец строки.
В "нормальных" системах, например в .NET от этого можно уйти используя так называемые StringBuilder - это специальный объект, который более эффективно выделяет память (крупными блоками) и не копирует зря строки. По сути это поток (stream) который используется для записи в память, как в файл. А вот в 1С такого нет. Фиг вам товарищи, а не эффективная работа со строками Но фиг только тем у кого хитрости мало, а для остальных есть варианты. ТекстовыйДокумент
Оказывается, что метод ДобавитьСтроку() для типа ТекстовыйДокумент для больших строк работает гораздо эффективнее чем тупая конкатенация. Возможно, это связано с тем, что этот тип - обёртка к текстовому редактору, встроенному в 1С. Кстати, этот редактор для простых текстовых файлов файлов мне нравится гораздо больше, чем например, notepad или редактор Visual Studio - он позволяет бодрее работать с большими текстами, как в длину, так и в ширину.
Но! У этого способа есть недостаток - в 8.0 и 8.1 он не доступен на сервере, т.к. считается "интерфейсным". Обидно. Но это заставляет искать нас более эффективный способ: ЗаписьXML
Опа! А при чём здесь XML? Правильно, XML нам не нужен. Но важно, что тип ЗаписьXML представляет собой как раз обёртку над последовательной записью в поток. А если учесть, что он позволяет формировать результат в память в виде строки, а не только в файл, то это уже готовый кандидат на замену StringBuilder. Осталось только упомянуть, что он позволяет дозаписывать в "XML" всё что угодно при помощи метода ЗаписатьБезОбработки().
Результаты забегов
У меня на тестовой среде получилось примерно следующее время:
1. Конкатенация - 24 секунды
2. Текстовый документ 1,5 секунды
3. ЗаписьXML - около 0,4 секунды
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52 Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получCOM-подключение к базе 7.7 из 8.2 1С 7 Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
НаКлиенте
Процедура Загрузки()
ПутьКБазе=" D: ВашаБаза 1с77 " ;
Пользователь=Excel файл как Внешний источник данных 17 Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" .
https://helpf.pro/uploads/imgGoogle maps : вывод точек на карту и режим панорамы 9 В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панораВ чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 12 Цитата из справки 1С:
" По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевоеПосмотреть все результаты поиска похожих
Функция получить строку на латинском, Транслит 9 Функция Транслит(Вход)
Коды = Новый Соответствие;
Коды.Вставить(" е" ," yo" );
Коды.Вставить(" Ё" ," Yo" );
Нач = КодСимвола(" А" );
Англ = " A" " B" " V" " G" " D" " E" " Zh" " Z" " I" " Y" " K" " L" " M" " N" " O" " P" " R" Функция разбора (разложения) строки в массив, аналог СтрРазделить 5 Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",",
Знач ПропускатьПустыеСтроки = Неопределено)
Результат = Новый Массив;
// для обеспечения обратной совместимости
Если ПропускатьПустыеСтроки = Неопределено Тогда
ПКак убрать из строки лишние символы? 3 Функция УбратьЛишниеСимволы(Строка1) Экспорт
НовСтрока = " " ;
ПравильныеСимволы = " QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю" ;
Для Сч = 1 по СтрДлина(Строка1) Цикл
ТекВыгрузка результата запроса в текстовый файл с разделителями 1 Запрос = Новый Запрос();
Запрос.УстановитьПараметр(" ДатаНач" ,НачалоДня(ДатаНач));
Запрос.УстановитьПараметр(" ДатаКон" ,КонецДня(ДатаКон));
Запрос.УстановитьПараметр(" Организация" ,Организация);
Запрос.Текст = " ВЫБРАТЬ
| ПоступлениеТоваровУКак из строки Представления Документа получить его Номер и Дату? 1 // Функция преобразовывает строку
// вида: " Введен на основании: Счет на оплату № 000415 от 30 июня 2008 г."
// и возвращает массив содержащий название документа, номер и дату
Функция РазбитьСтрокуДокументаНаНомерИДату(Стр)
Симв1 = Найти(Стр,Посмотреть все в категории Работа с Текстом (Строкой)