Имя: Пароль:
1C
 
Вывод результата запроса в одну строку
0 ОМЭЗ
 
21.01.25
15:45
Есть примитивный запрос:
ВЫБРАТЬ
    ПродажиН.Сделка,
    ПродажиН.Регистратор.ВидДопСоглашения
ИЗ
    РегистрНакопления.ПродажиН.Обороты(, &ДатаОтчета, Авто, ) КАК ПродажиН
ГДЕ
    ПродажиН.Регистратор ССЫЛКА Документ.ДС

Подскажите как-то можно вывести данные ВидДопСоглашения в одну строку например

Сделка №1 | Скидка1 Скидка2 Скидка3 |
Сделка №2 | Скидка1 Скидка2|

Спасибо!
1 alexela
 
21.01.25
15:49
(0) в запросе "ВидДопСоглашения", в строке "Скидка"...куда смотреть?
2 ОМЭЗ
 
21.01.25
15:56
Колонки : Сделка    | ВидДопСоглашения
Строки  : Сделка №1    Скидка1 Скидка2 Скидка3
          Сделка №2    Скидка1 Скидка2

Стандартно оно выводит так:
          Сделка №1    Скидка1
          Сделка №1    Скидка2
          Сделка №1    Скидка3
          Сделка №2    Скидка1
          Сделка №2    Скидка2
3 craxx
 
21.01.25
15:57
(0) с помощью СКД элементарно
4 Игорь_МММ
 
21.01.25
16:02
ИТОГИ По Сделка
5 ОМЭЗ
 
21.01.25
16:09
(3) Ватсон Как с помощью СКД ?
(4) Не работает
6 Garykom
 
21.01.25
16:12
(0) Не зная заранее максимальное кол-во колонок?
7 Garykom
 
21.01.25
16:12
Поищи уже было неоднократно
8 ОМЭЗ
 
21.01.25
16:14
(6) к сожалению не зная
9 ОМЭЗ
 
21.01.25
16:14
(7) Да тут как - бы и не понятно как искать :)
10 zenik
 
21.01.25
16:21
(9) ВычислитьВыражениеСГруппировкойМассив
11 alexela
 
21.01.25
16:24
(0) ответ в (4) и пару строк кода
12 ОМЭЗ
 
21.01.25
16:34
(10) функция хороша , но мне бы готовый результат поместить во временную таблицу
(11) Открой тайну
13 Fedor-1971
 
21.01.25
16:47
(8) По факту, кодом формируешь текст запроса
примерно так:
инф = новый Запрос;
инф.МенеджерВременныхТаблиц = новый МенеджерВременнныхТаблиц;
инф.Текст =
"ВЫБРАТЬ
    ПродажиН.Сделка как Сделка,
    ПродажиН.Регистратор.ВидДопСоглашения как Скидка
поместить таб
ИЗ
    РегистрНакопления.ПродажиН.Обороты(, &ДатаОтчета, Авто, ) КАК ПродажиН
ГДЕ
    ПродажиН.Регистратор ССЫЛКА Документ.ДС
;
Выбрать Различные таб.Скидка из таб"

выб = выб.выполнить()Выбрать();

текст = "";
текстСоединений = "";
кол = 1;
Пока выб.Следующий() цикл
  стрНомер = "Скидка" + Строка(кол); // замени на Формат если точно известно, что количество скидок может быть больше 1000
  текст = текст+" IsNull(таб"+стрНомер+".Скидка, Неопределено) как "+ стрНомер + ",";
  
  текстСоединений = текстСоединений + " Левое Соединение таб как таб" + стрНомер+ " по ТБ.Сделка = таб" + стрНомер+ ".Сделка И "таб" + стрНомер+ ".Скидка = &"+ стрНомер;

  инф.УстановитьПараметр(стрНомер, выб.Скидка);
КонецЦикла;

дальше зачищаешь лишнюю "," в Текст
текстЗапроса =
"Выбрать
ТБ.Сделка как Сделка," + Текст + " ИЗ таб как ТБ " + текстСоединений;

Поиграйся, тут будет вопрос, что нужно отобрать сделки иначе будут двоиться строки
14 alexela
 
21.01.25
16:53
(12) как-то так, дальше думаю разберешься
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    ПродажиН.Сделка,
    ПродажиН.Регистратор.ВидДопСоглашения
ИЗ
    РегистрНакопления.ПродажиН.Обороты(, &ДатаОтчета, Авто, ) КАК ПродажиН
ГДЕ
    ПродажиН.Регистратор ССЫЛКА Документ.ДС
ИТОГИ ПО ПродажиН.Сделка"

Результат = Запрос.Выполнить();
ВыборкаПоСделкам = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаПоСделкам.Следующий() Цикл
Выборка = ВыборкаПоСделкам.Выбрать;
СтрокаСкидок = "";
Пока Выборка.Следующий() Цикл
СтрокаСкидок = СтрокаСкидок + Выборка.Скидка;
КонецЦикла;
ИтоговаяСтрока = "" + ВыборкаПоСделкам.Сделка + "|" + СтрокаСкидок + "|"
КонецЦикла;
15 ОМЭЗ
 
21.01.25
16:52
(13) (14) Спасибо конечно , а все в запросе нельзя это сделать ? без лишнего кода?
16 Fedor-1971
 
21.01.25
16:57
(11) не такая уж и пара строк
идея такая:
1. Создаём схему компоновки данных
2. Приклеиваем оной запрос
3. Делаем настройку отчёта в виде таблицы с колонками Скидка

п.п. 1-3 дешевле сделать отдельным отчётом

4. вклиниваемся в формирование отчёта после получения табличного документа (до того есть только выборка как в (0))
5. Жуём оный как мыши кактус
17 Fedor-1971
 
21.01.25
17:06
(14) ТС нужно получить поля во временной таблице запроса, а не для печатной формы
(15) Нет, у тебя неизвестно количество Скидок, сиречь, сколько колонок тебе надо под скидки?
И каждая скидка должна стать в свою колонку
18 arsik
 
21.01.25
17:00
(17) Так можно сначала посчитать запросом количество различных вариантов скидок. И создать запрос на основании выборки с нужным количеством столбцов.
19 Fedor-1971
 
21.01.25
17:09
(18) Я в (13) расписал алгоритм, надо чуть поправить напильником
20 Garykom
 
21.01.25
17:22
(0) основа нумерация строк с разными ВидДопСоглашения внутри группировки Сделка
https://forum.infostart.ru/forum9/topic299837/
21 Garykom
 
21.01.25
17:25
(20)+ вот мастер класс от Ильдаровича
https://infostart.ru/1c/articles/200275/
22 Fedor-1971
 
21.01.25
17:33
(20) А сможет потом использовать АвтоНомер при соединении таблиц?
Тут больше проблема в том, что нам неизвестно количество колонок для Скидок
23 Asmody
 
21.01.25
17:28
(0) СКД, Массив() в выражении ресурса
24 PR
 
21.01.25
18:17
(22) Проблема тут не в этом, а в том, что нихрена непонятно, к чему так остро нужен сабж именно в запросе
25 Garykom
 
21.01.25
20:01
(24) Банально быстродействие
Как это ни странно но чем кодом большую ТЗ обрабатывать - быстрее ее передать в запрос как ВТ и фигачить там запросом
Уже неоднократно тесты были
Даже с учетом затрат на передачу
26 PR
 
21.01.25
20:22
(25) Ой, да ладно, пофигу, где обрабатывать 100 записей
27 Garykom
 
21.01.25
20:29
(26) Где увидел что записей 100?
А не 100 000?
28 PR
 
21.01.25
20:40
(27) А ты где увидел, что 100 000, а не 100, любитель домыслить?
Я же ТС по сути спросил, нахрена ему это, а не тебя, к чему мне твои фантазии
29 Garykom
 
21.01.25
21:42
(28) А другим зачем твои фантазии про "100 записей" ?
И в (26) ты на мой пост (25) хрень написал, не на пост ТС
30 PR
 
21.01.25
22:34
(29) Ну так ты просто не писал бы (25) и не было бы вообще никаких ничьих фантазий
31 Garykom
 
21.01.25
23:38
(30) Ты спросил зачем нужно
Я ответил зачем - для быстродействия например
Что не так?
32 PR
 
22.01.25
02:04
(31) То, что я спросил не тебя и твои например меня не интересуют
Как пример я и так понимаю, что быстродействие может быть причиной, но вообще, учитывая (15), причина скорее всего в том, что ТС просто впадлу что-то писать
Поэтому я его и спросил, но нет, нужно было влезть тебе, ага
33 Fedor-1971
 
22.01.25
09:12
(24) Например, ТС делает отчёт на макете с подвижным количеством колонок. Можно кодом с танцами и бубном (сначала формируем заголовок, потом каждую строку с контролем пропуска колонок), а можно запросом - малость пошаманить с кодом составления запроса и имеем счастье в виде линейного вывода информации

(32) что уж, прямо так уж. Походу, ТС всё понял после (17) и отправился работать (я надеюсь)