|
Запрос: как вывести в результат дополнительные строки? | ☑ | ||
---|---|---|---|---|
0
jyupiter
22.11.17
✎
05:59
|
УТ 10.3, Обычные формы, хотя это, наверное, неважно.
Есть задача: проанализировать ассортимент покупок контрагента за период, вывести его в отчёт. Если ассортимент меньше 4 позиций, тогда вывести дополнительно пустые строки с номером. Если больше/равно, то вывести в отчёт весь ассортимент, без дополнительных строк. Начал писать запрос, и встал в тупик. Как связать таблицу из 4 строк (временная таблица ВТ_4) и таблицу регистра накопления, чтобы левые строки выходили только когда не хватает Кажется, что решение простое и где-то на поверхности, но чё-то не даётся. ВЫБРАТЬ ВЫБОР КОГДА ПОДСТРОКА(Контрагенты.Код, 8, 1) = "1" ТОГДА "1" КОГДА ПОДСТРОКА(Контрагенты.Код, 8, 1) = "2" ТОГДА "2" КОГДА ПОДСТРОКА(Контрагенты.Код, 8, 1) = "3" ТОГДА "3" ИНАЧЕ "4" КОНЕЦ КАК ПустаяНоменклатура ПОМЕСТИТЬ ВТ_4 ИЗ Справочник.Контрагенты КАК Контрагенты ; ///////////////////////// ВЫБРАТЬ Продажи.Номенклатура, Продажи.Контрагент, Продажи.Количество, Продажи.Стоимость ИЗ ВТ_4 КАК ВТ_4, РегистрНакопления.Продажи КАК Продажи |
|||
1
Fram
22.11.17
✎
06:22
|
Интересно что заставляет тебя думать что твоя ВТ_4 состоит из 4 строк?!
|
|||
2
VladZ
22.11.17
✎
06:30
|
(0) Не понял, как связано "Если ассортимент меньше 4 позиций" и "ПОДСТРОКА(Контрагенты.Код, 8, 1) = "1""
|
|||
3
VladZ
22.11.17
✎
06:35
|
(0) Информатика опирается на математические законы. А математика, в свою очередь - точная наука. И здесь "кажется..." неуместно. Либо есть решение, либо его нет.
|
|||
4
Рэйв
22.11.17
✎
06:42
|
(0)СКД?
|
|||
5
jyupiter
22.11.17
✎
07:17
|
(1) У меня там на самом деле "ВЫБРАТЬ РАЗЛИЧНЫЕ", и я точно знаю, что строк там 4 (через консоль запросов)
(2) Подстрока из кода контрагента -- это просто первый пришедший в голову способ получить 4 разных значения (4) Просто запрос для построителя отчёта |
|||
6
VladZ
22.11.17
✎
07:21
|
(5) ну и зачем такие сложности?
Выбрать различные 4... |
|||
7
VladZ
22.11.17
✎
07:22
|
+6 упс: ВЫБРАТЬ ПЕРВЫЕ 4
|
|||
8
jyupiter
22.11.17
✎
07:23
|
(3) Есть разные мнения насчёт того, наука ли математика, или же язык науки. Но программирование -- это не столько наука, сколько ремесло, а местами искусство, и бывают приёмы, которые знают опытные товарищи, но которые не приходят в голову новичку.
Мне здесь уже не раз дарили идеи, отталкиваясь от которых я доходил до нужного результата. Мне КАЖЕТСЯ, что задача эта неединичная, что разные люди могли её решать какими-то способами, и один из них мне подойдёт. (5) Главное, что он даёт таблицу из 4 значений: {"1", "2", "3","4"}. Как её связать с таблицей продаж, чтобы вместо недостающих товаров выходили цифры? |
|||
9
Redkiy
22.11.17
✎
07:28
|
(0) Дичь какая-то.
Как ассортимент покупок клиента за период связан с кодом элемента справочника Контрагенты? |
|||
10
jyupiter
22.11.17
✎
07:36
|
(9) Ассортимент покупок клиента связан с регистром Продажи.
А из кода контрагентов просто набирается временная таблица из 4 значений (этот кусок меня устраивает, непонятка начинается ниже, в итоговом запросе). Я не утверждаю, что это единственно возможный способ и буду рад любой другой идее, как в результате запроса получить дополнительные колонки |
|||
11
Redkiy
22.11.17
✎
07:51
|
Добавь к основной таблице продаж
ВЫБРАТЬ 1 КАК Поле1 ПОМЕСТИТЬ ПустыеСтроки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Продажи.Контрагент, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) КАК Номенкратура ПОМЕСТИТЬ ХеровыеПокупатели ИЗ РегистрНакопления.Продажи.Обороты КАК Продажи СГРУППИРОВАТЬ ПО Продажи.Контрагент ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Номенклатура) < 4 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ NULL КАК Номенклатура, ХеровыеПокупатели.Контрагент, NULL КАК Количество, NULL КАК Стоимость ИЗ ХеровыеПокупатели КАК ХеровыеПокупатели ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПустыеСтроки КАК ПустыеСтроки ПО ХеровыеПокупатели.Сделка <= ПустыеСтроки.Поле1 |
|||
12
Сти
22.11.17
✎
08:11
|
(0) Легко. Даже с нумерацией строк прямо в запросе. Правда на больших объемах работать долго будет )
(8) Таблица из {1..4} чаще получают другим способом: ВЫБРАТЬ 1 КАК Цифра ПОМЕСТИТЬ ВТ_Цифры
Но она тут скорее всего бесполезна, если хочешь добавить строки с отсутствием номенклатуры для каждого контрагента. |
|||
13
Сти
22.11.17
✎
08:30
|
(12) Подтверждение, что легко. Опровержение, что {1..4}бесполезна. Ну и готовый запрос:
ВЫБРАТЬ 1 КАК Цифра ПОМЕСТИТЬ ВТ_Цифры ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4;
|
|||
14
wondkind
22.11.17
✎
08:38
|
Надеюсь ТС будет и дальше мучаться с таким умением программировать
|
|||
15
jyupiter
22.11.17
✎
08:58
|
(14) Спасибо на добром слове. Надеюсь, оно к вам не раз ещё вернётся.
(13) Получилось немного не то. Потому что номер строки нужен был в поле, где пустая номенклатура. Но я переделал ЕСТЬNULL(ВТ_ПронумерованныеКонтрагентыНоменклатура.НомерСтроки, От1до4.Цифра) КАК НомерСтроки, ЕСТЬNULL(ВТ_ПронумерованныеКонтрагентыНоменклатура.Контрагент, От1до4.Контрагент) КАК Контрагент, ВТ_ПронумерованныеКонтрагентыНоменклатура.Номенклатура КАК Номенклатура на ЕСТЬNULL(ВТ_ПронумерованныеКонтрагентыНоменклатура.НомерСтроки, От1до4.Цифра) КАК НомерСтроки, ЕСТЬNULL(ВТ_ПронумерованныеКонтрагентыНоменклатура.Контрагент, От1до4.Контрагент) КАК Контрагент, ЕСТЬNULL(ВТ_ПронумерованныеКонтрагентыНоменклатура.Номенклатура, От1до4.Цифра) КАК Номенклатура и всё срослось. Громадное спасибо. (11) Спасибо, я попробовал, но не получилось, потому что при взятии итогов несколько строк с пустой номенклатурой сворачивались в одну. Мне поэтому и нужны были различные значения для пустых строк. Но 13 мне очень помог, проблема решена. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |