|
Объединение повторяющихся строк в Запросе с различным полем | ☑ | ||
---|---|---|---|---|
0
zhukovia
20.05.21
✎
16:46
|
Есть ТЗ
Петя|М|12|a| Маша|Ж|12|a| Маша|Ж|12|б| Анна|Ж|12|a| Необходимо произвести объединение частично повторяющихся строк. Результат Петя|М|12|a| Маша|Ж|12|aб| Анна|Ж|12|a| Возможно ли решение поставленной задачи в запросе? |
|||
1
ДенисЧ
20.05.21
✎
16:47
|
В чистом нет
|
|||
2
zhukovia
20.05.21
✎
16:48
|
(1) Только через цикл? Или как то еще?
|
|||
3
ДенисЧ
20.05.21
✎
16:49
|
(2) В СКД, наверное, можно поизвращаться
|
|||
4
zhukovia
20.05.21
✎
16:52
|
(3) В СКД не хочется чего то. Буду тогда циклом перебирать. Спасибо за ответ, не придется голову ломать как в запросе это сделать.
|
|||
5
Ivan_495
20.05.21
✎
16:53
|
через внеш функцию в скд
|
|||
6
zhukovia
20.05.21
✎
16:56
|
(5) С СКД не работал, все делаю на обычных запросах. Поэтому сделаю тогда простым перебором.
|
|||
7
Kassern
20.05.21
✎
17:00
|
(6) Отличный шанс познакомиться с СКД. В будущем пригодится
|
|||
8
Said_We
20.05.21
✎
17:01
|
(0) В 1С тоже такой получится запрос. Но извратный.
|
|||
9
zhukovia
20.05.21
✎
17:07
|
(8) Хотя бы намекните как?
|
|||
10
zhukovia
20.05.21
✎
17:15
|
(7) СКД можно как то вызвать в форме документа программно для каких либо целей? А то все что я видел это только создание отчетов в конфигураторе мышкой.
|
|||
11
Kassern
20.05.21
✎
17:17
|
(10) У вас есть модуль объекта, у которого есть предопределенная процедура "ПриКомпоновке" в которой можно как угодно воротить ваш отчет, указывать программно параметры и вообще внешнюю ТЗ передать в СКД.
|
|||
12
Said_We
20.05.21
✎
17:17
|
https://infostart.ru/1c/articles/407913/
Тут что-то нарисовано, но и в базе знаний на Мисте я встречался. На мисте лучше было описано. |
|||
13
Kassern
20.05.21
✎
17:21
|
(10) Так же в самом СКД можно использовать внешние функции, тут есть немного инфы https://forum.infostart.ru/forum9/topic193220/
|
|||
14
Said_We
20.05.21
✎
17:22
|
Только нумерацию можно делать без внутреннего соединения через АВТОНОМЕРЗАПИСИ(). Так быстрее отрабатывает, но есть ограничения на количество пронумерованных строк, например ВЫБРАТЬ ПЕРВЫЕ 1316134911.
|
|||
15
zhukovia
20.05.21
✎
17:23
|
(12) Спасибо за наводку, буду разбираться.
|
|||
16
zhukovia
20.05.21
✎
17:24
|
(13) Спасибо, попробую поизучать. Может и правда пригодится.
|
|||
17
mikecool
20.05.21
✎
20:45
|
в скд ресурс массив() - сделает спбж
|
|||
18
brainguard
20.05.21
✎
21:50
|
(0) Соединение таблицы с самой собой
|
|||
19
zhukovia
21.05.21
✎
06:42
|
(18) И дальше что?
|
|||
20
Галахад
гуру
21.05.21
✎
07:28
|
(0) "а" и "б" это строки?
|
|||
21
zhukovia
21.05.21
✎
08:59
|
(20) Да
|
|||
22
Галахад
гуру
21.05.21
✎
10:35
|
Если я правильно понял:
Т1 = Новый ТаблицаЗначений; Т1.Колонки.Добавить("Кол1", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); Т1.Колонки.Добавить("Кол2", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); НовСтр = Т1.Добавить(); НовСтр.Кол1 = "Стр1"; НовСтр.Кол2 = "АА"; НовСтр = Т1.Добавить(); НовСтр.Кол1 = "Стр1"; НовСтр.Кол2 = "ВВ"; НовСтр = Т1.Добавить(); НовСтр.Кол1 = "Стр2"; НовСтр.Кол2 = "СС"; НовСтр = Т1.Добавить(); НовСтр.Кол1 = "Стр3"; НовСтр.Кол2 = "ДД"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Т1", Т1); Запрос.Текст = "ВЫБРАТЬ | Т1.Кол1 КАК Кол1, | Т1.Кол2 КАК Кол2 |ПОМЕСТИТЬ Таблица |ИЗ | &Т1 КАК Т1 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таблица.Кол1 КАК Кол1, | МИНИМУМ(Таблица.Кол2 + Таблица1.Кол2) КАК Кол2 |ИЗ | Таблица КАК Таблица | ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Таблица1 | ПО Таблица.Кол1 = Таблица1.Кол1 | И Таблица.Кол2 < Таблица1.Кол2 | |СГРУППИРОВАТЬ ПО | Таблица.Кол1"; Рез = Запрос.Выполнить(); Таблица = Рез.Выгрузить(); |
|||
23
Галахад
гуру
21.05.21
✎
10:45
|
Не, немного не так:
"ВЫБРАТЬ | Т1.Кол1 КАК Кол1, | Т1.Кол2 КАК Кол2 |ПОМЕСТИТЬ Таблица |ИЗ | &Т1 КАК Т1 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таблица.Кол1 КАК Кол1, | ВЫБОР | КОГДА НЕ МИНИМУМ(Таблица.Кол2 + Таблица1.Кол2) ЕСТЬ NULL | ТОГДА МИНИМУМ(Таблица.Кол2 + Таблица1.Кол2) | ИНАЧЕ МИНИМУМ(Таблица.Кол2) | КОНЕЦ КАК Кол2 |ИЗ | Таблица КАК Таблица | ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Таблица1 | ПО Таблица.Кол1 = Таблица1.Кол1 | И Таблица.Кол2 < Таблица1.Кол2 | |СГРУППИРОВАТЬ ПО | Таблица.Кол1"; |
|||
24
zhukovia
21.05.21
✎
11:00
|
(12) Получилось сделать как в указанной ссылке. Спасибо ещё раз за наводку.
|
|||
25
zhukovia
21.05.21
✎
11:05
|
(23) Так тоже получилось, правда только объединяются только 2 строки (у меня как раз всего две). Если одинаковых строк больше 2 то лишние просто стираются, не знаю можно ли это поправить. Но на двух работает, спасибо. Так гораздо короче получилось.
|
|||
26
Said_We
21.05.21
✎
13:08
|
(23) А как сложится такая таблица:
Петя|М|12|a| Маша|Ж|12|б| Маша|Ж|12|а| Маша|Ж|12|б| Маша|Ж|12|у| Маша|Ж|12|ш| Маша|Ж|12|к| Маша|Ж|12|а| Анна|Ж|12|a| Так вариант а): Петя|М|12|a| Маша|Ж|12|бабушка| Анна|Ж|12|a| Или так вариант б): Петя|М|12|a| Маша|Ж|12|абкуш| Анна|Ж|12|a| :-) Повторы не попадают и всегда в алфавитном порядке. Может (0) так и нужно, но есть задачи, когда необходимо всё как в варианте а). |
|||
27
Галахад
гуру
21.05.21
✎
13:14
|
(26) Ну так себе сложится. Только для "бабушек" состоящих из "ба". ;-)
|
|||
28
zhukovia
21.05.21
✎
13:19
|
(26) Если я правильно все сделал то будет:
Петя|М|12|a| Маша|Ж|12|ба| Анна|Ж|12|a| Всё что больше двух повторений сотрётся. |
|||
29
Said_We
21.05.21
✎
14:58
|
(28) А судя по примеру в (0) нужно было:
Петя|М|12|a| Маша|Ж|12|аб| Анна|Ж|12|a| т.е. строка сложится не в порядке следования, а в обратном алфавитном. Если без разницы, то гуд. |
|||
30
zhukovia
22.05.21
✎
14:00
|
(29) Только не надо забывать что остальные строки просто "выкинет", ТОЛЬКО первые 2!
Маша|Ж|12|б| Маша|Ж|12|у| Маша|Ж|12|ш| Маша|Ж|12|к| Маша|Ж|12|а| |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |