| 
    
        
     
     | 
    
  | 
Запрос: как вывести в результат дополнительные строки? | ☑ | ||
|---|---|---|---|---|
| 
    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 мне очень помог, проблема решена.  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |