Имя: Пароль:
1C
1С v8
Асы написания запросов, помогите, пожалуйста, написать хитрый запрос
🠗 (Волшебник 10.11.2017 13:42)
, ,
0 KindLion
 
10.11.17
13:29
Есть табличная часть с реквизитами:
Номенклатура, Количество, Сумма.

Надо написать заказ таким образом, чтобы в результате запроса было:
Номенклатура, 1, Сумма/Количество

Строк в результате запроса должно быть столько, сколько Количество в табличной части.
1 RomaH
 
naïve
10.11.17
13:32
это реальная задача или на сообразительность?
2 Lexey_
 
10.11.17
13:32
(0) пиши запрос к ТЧ
3 Остап Сулейманович
 
10.11.17
13:33
(0) В чем должна заключаться "хитрость".
Вот такой :

Выбрать
Номенклатура КАК Номенклатура,
1 КАК НереальнаяХрень,
Сумма/Количество КАК НереальнаяХрень2
ИЗ ...

будет достаточно "хитрым"? Или нужно еще "хитрее"?
4 RomaH
 
naïve
10.11.17
13:35
(3) насколько я понял
Есть строка в ТЧ
Сахар-песок 100500 тон 1000000 руб

надо получить 100500 строк на выходе запроса
5 KindLion
 
10.11.17
13:37
(1) Это реальная задача.
Можно, конечно, обработкой, через цикл, но хочется красиво - запросом
(4) Да, именно так.
6 SleepyHead
 
гуру
10.11.17
13:37
(0) Нахрена?
7 Borteg
 
10.11.17
13:37
(0) Проще обычным циклом.
8 KindLion
 
10.11.17
13:38
(3) Товарищ, все было бы классно, но в результате будет одна строка, а мне надо - количество таких строк, равное реквизиту Количество в ТЧ.
9 Basilio
 
10.11.17
13:38
(5) прям интересно стало, зачем такое может понадобиться?
10 KindLion
 
10.11.17
13:39
(7) Это понятно.
Но почему-то подумалось что и запросом не очень сложно, а я  просто туплю
11 patapum
 
10.11.17
13:39
(0) создать временную таблицу Таб, с колонкой Ном
1,
2,
...
максимальное количество
Соединять с ТЧ по ТЧ.Количество <= Таб.Ном, и строка продублируется сколько надо раз.
12 patapum
 
10.11.17
13:41
+(11)
по Таб.Ном <= ТЧ.Количество, а не так как я написал, иначе бяка выйдет )))
13 Волшебник
 
модератор
10.11.17
13:42
(5) Не отвлекайте асов от работы на всякую вашу фигню.
14 KindLion
 
10.11.17
13:43
(12) Спасибо, это уже что-то похожее
15 Лефмихалыч
 
10.11.17
13:44
(0) порождающий запрос
http://catalog.mista.ru/public/90367/

сначала получаешь запросом таблицу просто с номерами строк, потом с ней соединяешь свою ТЧ по условию Номер<=Количество
В результате получаешь нужное произведение таблиц
16 Basilio
 
10.11.17
13:44
(11) не сработает. у него же еще Номенклатура есть. Придется ее во временную таблицу добавлять и для каждой Номенклатуры число строк фигачить. а это уже и есть искомая таблица.
17 KindLion
 
10.11.17
13:44
(13) Если это сарказм, то я не уловил, в чью сторону.

А что, у нас здесь уже от простых смертных вопросы игнорят? Оставляют только вопросы от асов?
18 Волшебник
 
модератор
10.11.17
13:46
(17) да
19 azernot
 
10.11.17
13:54
ВЫБРАТЬ
    0 КАК Ноль,
    1 КАК Единица,
    2 КАК Двойка,
    3 КАК Тройка,
    4 КАК Четверка,
    5 КАК Пятерка,
    6 КАК Шестерка,
    7 КАК Семерка,
    8 КАК Восьмерка,
    9 КАК Девятка
ПОМЕСТИТЬ ЦифрыВСтолбцах
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(Цифра0.Ноль, ЕСТЬNULL(Цифра1.Единица, ЕСТЬNULL(Цифра2.Двойка, ЕСТЬNULL(Цифра3.Тройка, ЕСТЬNULL(Цифра4.Четверка, ЕСТЬNULL(Цифра5.Пятерка, ЕСТЬNULL(Цифра6.Шестерка, ЕСТЬNULL(Цифра7.Семерка, ЕСТЬNULL(Цифра8.Восьмерка, ЕСТЬNULL(Цифра9.Девятка, 0)))))))))) КАК Цифра
ПОМЕСТИТЬ Цифры
ИЗ
    ЦифрыВСтолбцах КАК Цифра0
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра1
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра2
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра3
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра4
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра5
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра6
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра7
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра8
        ПО (ЛОЖЬ)
        ПОЛНОЕ СОЕДИНЕНИЕ ЦифрыВСтолбцах КАК Цифра9
        ПО (ЛОЖЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 + Единицы.Цифра + 10 * ЕСТЬNULL(Десятки.Цифра, 0) + 100 * ЕСТЬNULL(Сотни.Цифра, 0) + 1000 * ЕСТЬNULL(Тысячи.Цифра, 0) + 10000 * ЕСТЬNULL(ДесяткиТысяч.Цифра, 0) + 100000 * ЕСТЬNULL(СотниТысяч.Цифра, 0) + 1000000 * ЕСТЬNULL(Миллионы.Цифра, 0) КАК Число
ПОМЕСТИТЬ МиллионыЧисел
ИЗ
    Цифры КАК Единицы
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Десятки
        ПО (&ВерхнийПредел >= 10)
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Сотни
        ПО (&ВерхнийПредел >= 100)
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
        ПО (&ВерхнийПредел >= 1000)
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
        ПО (&ВерхнийПредел >= 10000)
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК СотниТысяч
        ПО (&ВерхнийПредел >= 100000)
        ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Миллионы
        ПО (&ВерхнийПредел >= 1000000)
ГДЕ
    1 + Единицы.Цифра + 10 * ЕСТЬNULL(Десятки.Цифра, 0) + 100 * ЕСТЬNULL(Сотни.Цифра, 0) + 1000 * ЕСТЬNULL(Тысячи.Цифра, 0) + 10000 * ЕСТЬNULL(ДесяткиТысяч.Цифра, 0) + 100000 * ЕСТЬNULL(СотниТысяч.Цифра, 0) + 1000000 * ЕСТЬNULL(Миллионы.Цифра, 0) <= &ВерхнийПредел
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МиллионыЧисел.Число * Множители.Число КАК Число
ПОМЕСТИТЬ Числа
ИЗ
    МиллионыЧисел КАК МиллионыЧисел
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МиллионыЧисел КАК Множители
        ПО (&ВерхнийПредел >= 10000000
                    И &ВерхнийПредел / 10000000 >= Множители.Число
                ИЛИ Множители.Число = 1)
ГДЕ
    МиллионыЧисел.Число * Множители.Число <= &ВерхнийПредел
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходнаяНакладнаяСостав.Ссылка КАК Документ,
    ПриходнаяНакладнаяСостав.Номенклатура,
    ПриходнаяНакладнаяСостав.Количество,
    ПриходнаяНакладнаяСостав.Сумма / ПриходнаяНакладнаяСостав.Количество КАК Цена
ПОМЕСТИТЬ ТабличнаяЧасть
ИЗ
    Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав
ГДЕ
    НЕ ПриходнаяНакладнаяСостав.Количество = 0
    И НЕ ПриходнаяНакладнаяСостав.Сумма = 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТабличнаяЧасть.Документ КАК Документ,
    ТабличнаяЧасть.Номенклатура,
    ТабличнаяЧасть.Цена,
    1 КАК Количество
ИЗ
    ТабличнаяЧасть КАК ТабличнаяЧасть
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Числа КАК Числа
        ПО ТабличнаяЧасть.Количество >= Числа.Число
ИТОГИ
    СУММА(Количество)
ПО
    Документ


Единственное ограничение запроса - ограничение по максимальному значению поля "Количество"
20 Ненавижу 1С
 
гуру
10.11.17
13:56
Сумма(Сумма)/Сумма(Количество)
21 KindLion
 
10.11.17
14:40
(19) Супер!
Спасибо большое!
Основная теорема систематики: Новые системы плодят новые проблемы.