Имя: Пароль:
1C
1С v8
Запрос по нескольким типам цен
0 prozex
 
02.11.18
20:37
Здравствуйте, уважаемые форумчане.
Прошу помочь советом.
Нужно получить список элементов номенклатуры, у которых цена "Розничная" ниже цены "Закупочная". Хочется сделать это грамотно, одним запросом к базе. В базе несколько десятков тысяч товаров, и использовать запросы в цикле не очень хочется, ввиду того, что скорость работы алгоритма при условии доступа к файлу БД по сети в таком случае будет низкой.
Я понимаю, что мне можно посоветовать поучить матчасть. Но на это нужно время, а его как всегда нет.
Как добиться желаемого одним запросом?
1 anton-rom86
 
02.11.18
20:52
(0) в запросе, из которого достаешь закупочную цену, создаешь  вложенный запрос, в котором находишь цену розничную, связываешь их по номенклатуре и цене с условием, где ЦенаРозничная<ЦенаЗакупочная. Понятно, или подробнее?
2 prozex
 
02.11.18
20:53
(1), признаться, нет, не понятно...
3 anton-rom86
 
02.11.18
21:01
(2)
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакупочная,
    ВложенныйЗапрос.ЦенаРозничная
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &Закупочная) КАК ЦеныНоменклатурыСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &Розничная) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос
        ПО (ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
            И ЦеныНоменклатурыСрезПоследних.Цена > ВложенныйЗапрос.ЦенаРозничная
4 osa1C
 
02.11.18
21:02
(0) а ты прав, читай матчасть, иначе у тебя завтра возникнет другая проблема и ты опять на форумах решения искать будешь. Тебе в (1) всё уже разжевали. Что не понятно?
5 osa1C
 
02.11.18
21:04
(3) сломал систему :)))
6 prozex
 
02.11.18
21:04
(3), спасибо, сейчас буду пробовать.
7 prozex
 
02.11.18
21:06
(4), любой вопрос можно решить, читая матчасть. Тогда и форумы были бы незачем. Вопрос во времени. Когда нужно решить проблему быстро, тогда и приходится обращаться за помощью более опытных.
8 osa1C
 
02.11.18
21:10
(7) надо для этого что-то делать самому. ЗА тебя писать код никто не будет. Если есть проблема, то покажи как ты её начал решать, хоть и с ошибками, вот тогда тебе форум поможет.... Сейчас тебе просто повезло. Но это не будет каждый день, поверь.
9 VKS
 
02.11.18
21:15
Сейчас с пакетами запросов столько можно наворотить
10 osa1C
 
02.11.18
21:17
(9) вопрос только в какую сторону наворотить
11 osa1C
 
02.11.18
21:21
(7) "Когда нужно решить проблему быстро" .... Если будешь вот так вот "быстро" решать не читая матчасть, то за тобой придется много что переделывать. Потому что это заплатки и костыли, которые быстро рвутся и ломаются
12 Fram
 
02.11.18
21:21
(7) интересная позиция
13 Fram
 
02.11.18
21:23
(11) эксплуатировать таких как (3) тоже надо уметь )
14 osa1C
 
02.11.18
21:24
(13) нашелся тут эксплуататор :)))))
15 Fram
 
02.11.18
21:27
(14) ну а че! нафига что либо делать, если можно просто попросить кого то сделать это за тебя, и тот кто то еще будет просто доволен тем фактом, что его знания и умения кому то пригодились.
16 prozex
 
02.11.18
21:29
(11), да читал я Ваши комментарии и темы. Когда помощь самому нужна - риторика разговора совсем иная. В (3) человек четко дал направление, куда искать. Все остальное - пока флуд, разливаемый для самоутверждения.
Я хорошо разбираюсь в Web. Тема 1С мне чужда. И я хорошо знаю, что толковый специалист либо молчит, либо четко отвечает на вопрос, если хочет. А дилетанты на то и дилетанты, чтобы воздух в пустую сотрясать.
17 Fram
 
02.11.18
21:32
(16) sql подобные языки веб разработчикам чужды?
18 Fram
 
02.11.18
21:34
(16) и не надо подменять понятия. направление вам дали в (1), а в (3) готовое решение. есть ведь разница?
19 osa1C
 
02.11.18
22:48
(16) ты никто! человек просящий помощи на форуме показывает какие действия предпринимал он, для решения проблемы... ты же только киксуешь, что мол Web разработчик. Так покажи парочку своих работающих проектов? ...
20 prozex
 
02.11.18
23:01
(19), это ты никто, Сашка.
В (3) человек мне дал нормальную подсказку. И я уже почти разобрался что да как. Ты же гораздо больше времени потратил на жмаканье по клавишам, строча ядовитые посты, прячась за монитором.
21 palsergeich
 
02.11.18
23:11
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакупочная,
    ВложенныйЗапрос.ЦенаРозничная
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Закупочная) КАК ЦеныНоменклатурыСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаРозничная
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная) КАК ЦеныНоменклатурыСрезПоследних) КАК ВложенныйЗапрос
        ПО (ВложенныйЗапрос.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
            И ЦеныНоменклатурыСрезПоследних.Цена > ВложенныйЗапрос.ЦенаРозничная

Я бы так сделал.
Но ни (3) ни мой запрос не оптимальны, план запроса по факту получился один и тот же там по хорошему если этим запросом будут пользоваться часто надо ВидЦены проиндексировать. Если не будут то и пес с ним.
22 palsergeich
 
02.11.18
23:12
Ой не тот запрос вставил
ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследнихЗакупка.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследнихЗакупка.Цена КАК ЦенаЗакупочная
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Закупочная) КАК ЦеныНоменклатурыСрезПоследнихЗакупка
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная) КАК ЦеныНоменклатурыСрезПоследнихРозница
        ПО (ЦеныНоменклатурыСрезПоследнихРозница.Номенклатура = ЦеныНоменклатурыСрезПоследнихЗакупка.Номенклатура
                И ЦеныНоменклатурыСрезПоследнихЗакупка.Цена > ЦеныНоменклатурыСрезПоследнихРозница.Цена)
23 prozex
 
02.11.18
23:14
(21), я понял, спасибо большое. Сейчас еще пытаюсь совместить это с проверкой количества искомого товара на конкретном складе. Думаю, получится все.
А пользоваться будут не часто. 2-4 раза в месяц всего...
24 palsergeich
 
02.11.18
23:16
(23) Если 2-4 раза в месяц то пофиг
25 palsergeich
 
02.11.18
23:17
(23) Тогда не делай индекс по этому полю, выигрыш того не стоит
26 prozex
 
02.11.18
23:18
(25), и не буду. Даже если сделать, тут все равно никто не оценит))
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой