Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Объединение повторяющихся строк в Запросе с различным полем

Объединение повторяющихся строк в Запросе с различным полем
Я
   zhukovia
 
20.05.21 - 16:46
Есть ТЗ
Петя|М|12|a|
Маша|Ж|12|a|
Маша|Ж|12|б|
Анна|Ж|12|a|
Необходимо произвести объединение частично повторяющихся строк.

Результат
Петя|М|12|a|
Маша|Ж|12|aб|
Анна|Ж|12|a|

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

т.е. строка сложится не в порядке следования, а в обратном алфавитном. Если без разницы, то гуд.
   zhukovia
 
30 - 22.05.21 - 14:00
(29) Только не надо забывать что остальные строки просто "выкинет", ТОЛЬКО первые 2!

Маша|Ж|12|б|
Маша|Ж|12|у|
Маша|Ж|12|ш|
Маша|Ж|12|к|
Маша|Ж|12|а|
 
 


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.