|
Как запросом склеить текст | ☑ | ||
---|---|---|---|---|
0
m1_1976
03.06.15
✎
11:29
|
Доброго дня
Есть самописный БЭК-ОФИС на 1С 8. Есть АтолФронтол 5 на кассах. Сейчас в БЭК-офисе 80 тыс товаров. Полная выгрузка в Атол-Фронтол методом перебора элементов и для каждого элемента состряпыванивем строки - занимает уйму времени. Процедура редкая, но не быстрая. Даже выкидывание. Части товара - скажем одной группы из 500 элементов - долго. Что хочу. Могу готовую строку выгрузки для Атола хранить скажем в регистре сведений и переформировавыть ее туда при изменении карточки товара, цены добавления штрихкодов и т.д. То есть будет Регистр Сведений в котором у меня всегда будет готовая строка выгрузки для АТОЛ-ФРонтола. Запросом собрал быстренько - но теперь все равно получается бегу по Выборе из результата запроса и добавляю в будущий текст по одной строчке. А не могу я их склеить сразу внутри запроса. Чтобы на выходе была одна стркоа - а в ней весь текст, в которых все строки из регистра сведений разделились символом Конца строки. Чтобы я из выборки получил один элемент и в нем уже был готовый текст. ??? |
|||
1
ДенисЧ
03.06.15
✎
11:31
|
из чего стряпается строка?
|
|||
2
m1_1976
03.06.15
✎
11:33
|
из букв и цифр :)))
|
|||
3
m1_1976
03.06.15
✎
11:33
|
ну и всяких знаков препинания типа точек с запятой
|
|||
4
ДенисЧ
03.06.15
✎
11:34
|
гениально.
Данные откуда берутся? |
|||
5
m1_1976
03.06.15
✎
11:36
|
Вот пример готовой строки
100090;4607076260015;Крупа пшеничная Баралетти;Крупа пшеничная Баралетти;9;;;0,1,1,1,0,0,0,1,1,0,0,0,0,0;7.2;;0;0;;1;;107992;1;;;;;;;;100090;100090;;;;;;;1;0;0;0;1;;;;;;;;;;0;;;; |
|||
6
pessok
03.06.15
✎
11:37
|
уже было про
"конкатенация в запросе - вытягивание гланд через задницу!"? |
|||
7
mikecool
03.06.15
✎
11:38
|
выбрать строка
из регистрсведений.строки |
|||
8
ДенисЧ
03.06.15
✎
11:38
|
выбрать код + ";"+ШтрихКод+";"+наименование+";"+родитель.Наименование
из справочник.номенклатура |
|||
9
чувак
03.06.15
✎
11:40
|
Т.е. Из списка:
"Иванов" "Петров" "Сидоров" хочешь получить "ИвановПетровСидоров"? |
|||
10
НП
03.06.15
✎
11:40
|
(0) Первоначально базы данных были предназначены для хранения, обновления и быстрой выборки структурированных данных. Затем появилась возможность производить одновременно с выборкой некоторые вычисления.
Но превращать всю программу в один большой запрос - путь в никуда. В СКД пошли примерно по такому пути. Но тут есть один нюанс: доказать, что программа правильно работает бывает трудновато. Я бы, получив искомые строки, ни в коем случае не стал бы пытаться их обратно в запрос запихнуть. Склейте сами. Пара лишних операторов никого не утомит. |
|||
11
Timon1405
03.06.15
✎
11:41
|
я может недопонял, но что мешает хранить склеенную строку в том же РС в последней колонке?
|
|||
12
m1_1976
03.06.15
✎
11:42
|
(9) ну почему бы и нет...
только в списке 80 тыс позиций и хочу их еще разделить символом конца строки |
|||
13
Fragster
гуру
03.06.15
✎
11:43
|
(0) замени конкатенацию всех строк на конкатенацию одной строки и запихиванием её в ТекстовыйДокумент
|
|||
14
m1_1976
03.06.15
✎
11:43
|
Строка вида
100090;4607076260015;Крупа пшеничная Баралетти;Крупа пшеничная Баралетти;9;;;0,1,1,1,0,0,0,1,1,0,0,0,0,0;7.2;;0;0;;1;;107992;1;;;;;;;;100090;100090;;;;;;;1;0;0;0;1;;;;;;;;;;0;;;; У меня уже есть. Я ее храню в регситре у которого измерение ТОВАР, а ресурс СТРОКА_ДЛЯ_КММ Запрос по нему отрабатывает отлично. Но мне не хочется потом перебирать результат запроса и клеить все строки в один текст. Который потом записывается в каталог обмена! |
|||
15
ДенисЧ
03.06.15
✎
11:46
|
(14) Возьми СКД )
А вообще - это поиск Тополя для стрельбы по мухам. |
|||
16
чувак
03.06.15
✎
11:47
|
(14) Может СКЛ запрос сможет?
|
|||
17
Fragster
гуру
03.06.15
✎
11:48
|
(13)+ типа
Результат = Новый ТекстовыйДокумент; Пока Выборка.Следующий() Цикл ТМП = "" + Выборка.Поле + ";" + ....; Результат.ДобавитьСтроку(ТМП); КонецЦикла; А если у тебя это в файл выгружается - то вообще ЗаписьТекста без промежуточных склеиваний |
|||
18
m1_1976
03.06.15
✎
11:49
|
(16) вот я про тоже самое... Точно sql же есть... вопрос как?
|
|||
19
Fragster
гуру
03.06.15
✎
11:50
|
(18) забей на sql, если у тебя для выгрузки используется много сложений строк - замени на ТекстовыйДокумент или ЗаписьТекста
|
|||
20
чувак
03.06.15
✎
11:50
|
(18) http://www.sql.ru тебе помощь
|
|||
21
m1_1976
03.06.15
✎
11:51
|
У меня типа вот так
Т = Новый ТекстовыйДокумент; Пока Выборка.Следующий() Цикл Т.ДобавитьСтроку(Выборка.СТРОКА_ДЛЯ_КММ); КонецЦикла; |
|||
22
чувак
03.06.15
✎
11:51
|
(19) Но он же хочет именно в запросе все склеитью
|
|||
23
Fragster
гуру
03.06.15
✎
11:52
|
(21) ну тогда попробуй поменять на записьтекста - должно быть побыстрее. смысла в запросе клеить нет.
|
|||
24
Fragster
гуру
03.06.15
✎
11:52
|
а по замеру именно Т.ДобавитьСтроку(Выборка.СТРОКА_ДЛЯ_КММ); самое медленное место?
|
|||
25
m1_1976
03.06.15
✎
11:53
|
ладно. Пошел в sql читать... поищу смысл клеить в запросе sql
(23) Нужна скорость. (24) нет конечно. Просто их 80 тыс... |
|||
26
GROOVY
03.06.15
✎
11:53
|
Конкатенация в запросе - легко. Но про конкатенация - это операция только для строк, запрос не поддерживает преобразование типов, так что из ссылки строку сделать не получится.
|
|||
27
Fragster
гуру
03.06.15
✎
11:54
|
(25) так если не это самое медленное место, нафига ты туда лезешь? о_О
|
|||
28
m1_1976
03.06.15
✎
11:54
|
(26)
У меня тип СТРОКА как раз. ССЫлок никаких нет! |
|||
29
Fragster
гуру
03.06.15
✎
11:54
|
какое самое медленное место по замеру производительности?
|
|||
30
m1_1976
03.06.15
✎
11:55
|
(27) зачем вам эти данные?
|
|||
31
Fragster
гуру
03.06.15
✎
11:57
|
(30) потому что в (25) (да и в (0)) написано, что на самом деле автор хочет не СКЛЕИТЬ СТРОКИ ЗАПРОСОМ, а БЫСТРО ВЫГРУЗИТЬ ДАННЫЕ
|
|||
32
Fragster
гуру
03.06.15
✎
11:58
|
и в том же (25) написано, что собственно вывод в текстовый документ - не самое медленное место
|
|||
33
m1_1976
03.06.15
✎
11:59
|
(32) Вывод? Уменьшить количество товаров с 80 тыс до 10 тыс??? :)
ОК. Я пойду скажу шефу... :) |
|||
34
чувак
03.06.15
✎
11:59
|
||||
35
GROOVY
03.06.15
✎
11:59
|
(28) Ну тогда
ВЫБРАТЬ Поле1+Поле2 КАК СклееннаяСтрока В чем вопрос?! |
|||
36
m1_1976
03.06.15
✎
12:00
|
(32) - просто я ищу в том числе и такое решение. Думаю. Дергаюсь. Не получиться. Буду дальше думать и дергаться.
|
|||
37
GROOVY
03.06.15
✎
12:00
|
Если тормозит вывод, то значит представление запросом не получено, для каждой строки еще запрос формируется.
|
|||
38
Fragster
гуру
03.06.15
✎
12:01
|
(36) сколько % занимает самая медленная строка в замере? и сколько % кусок из (21)?
|
|||
39
m1_1976
03.06.15
✎
12:03
|
Ладно спасибо. Пойду читать про sql.
Закрываем тему Спасибо. |
|||
40
Ildarovich
03.06.15
✎
12:05
|
Склеить строки в запросе все-таки можно. Вот статья http://catalog.mista.ru/public/200275/ , где показано как это делать.
Однако по-любому размер результирующей строки будет не больше, чем 1024 (или 2048 иногда), что в вашей задаче явно будет мало. Так что запрос здесь принципиально не подойдет. Кроме того, причина замедления у вас - не запрос, а проблемы с конкатенацией строк, причины которых подробно описаны в статье http://catalog.mista.ru/public/163662/. Используйте решение из комментария (23) - и проблема будет решена. |
|||
41
badboychik
03.06.15
✎
12:09
|
Способ 1) Выгрузить колонку результата в массив, применить функцию "СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок"
Способ 2) Применить функцию СКД "ВычислитьВыражениеСГруппировкойМассив" |
|||
42
Ildarovich
03.06.15
✎
12:10
|
+ (40) я имел ввиду комментарий (23) к статье по ссылке, но по случайности и здешний комментарий (23) может помочь, но ЗаписьXML вроде бы быстрее. Она работает как StringBuilder.
|
|||
43
ЧеловекДуши
03.06.15
✎
12:33
|
(0) 80 тыс строк готовых для загрузки, это же пару сек работы на сервере.
...Чет мне подсказывает, что ТС не там замерял время... :) |
|||
44
ЧеловекДуши
03.06.15
✎
12:35
|
+ Думается СКЛ тут не поможет. Дешевле обычным циклом обойтись :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |