Имя: Пароль:
1C
1С v8
Распределить по количеству в запросе
0 location
 
naïve
23.05.22
14:54
Добрый день.
Подскажите пож-та, можно ли как то распределить позиции по количеству в запросе, например по 100, но если количество самой позиции больше 100 она должна войти в отдельное собрание
Например
Номенклатура1 50
Номенклатура2 50
Номенулатура3 120
Номенклатура4 70
Номенклатура5 110
в итоге должно выйти так
Номенклатура1 50 сбор1
Номенклатура2 50 сбор1
Номенклатура3 120 сбор2
Номенклатура4 70 сбор3
Номенклатура5 110 сбор4
1 Ryzeman
 
23.05.22
14:58
ВЫБОР КОГДА КОЛИЧЕСТВО(ТвояТаблица.Номенклатура) > 100 ТОГДА "сбор2" ИНАЧЕ "сбор1" КОНЕЦ КАК Сбор? Какой бы ты смысл в это слово ни вкладывал, а потом уже разделяй как хочешь
2 RomanYS
 
23.05.22
15:00
(0) в теории можно. На практитке в этом нет смысла.
Немного похожая тема по идеям: Помогите с запросом
3 lodger
 
23.05.22
15:08
смотри какую наркоманию я изобрел.
может наведет на мысль

ВЫБРАТЬ ПЕРВЫЕ 300
    КурсыВалют.Курс КАК Курс,
    КурсыВалют.Период КАК Период
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    РегистрСведений.КурсыВалют КАК КурсыВалют

УПОРЯДОЧИТЬ ПО
    Курс УБЫВ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(ВременнаяТаблица.Курс КАК ЧИСЛО(10, 0)) КАК Курс,
    АВТОНОМЕРЗАПИСИ() КАК Поле1
ПОМЕСТИТЬ ВременнаяТаблица1
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ВременнаяТаблица.Курс КАК ЧИСЛО(10, 0))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВременнаяТаблица.Курс КАК Курс,
    ВременнаяТаблица1.Поле1 КАК ЦелыеЧисла,
    ВременнаяТаблица.Период КАК Период
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблица1 КАК ВременнаяТаблица1
        ПО ((ВЫРАЗИТЬ(ВременнаяТаблица.Курс КАК ЧИСЛО(10, 0))) = ВременнаяТаблица1.Курс)

УПОРЯДОЧИТЬ ПО
    ЦелыеЧисла,
    Период
4 RomanYS
 
23.05.22
15:23
(3) похоже задачу не понял. Ему нужно объединить в группы, а не округлить значения
5 location
 
naïve
23.05.22
15:25
(4) получается проще обойти все в цикле и проверять попадает под условия с наращиванием итога?
6 RomanYS
 
23.05.22
15:26
(5) безусловно проще
7 lodger
 
23.05.22
15:57
(6) так оно и собрано в группы, через округление. главное сам механизм, а не конкретное решение.
8 Said_We
 
23.05.22
16:09
(7) Сгруппировать текущую таблицу можно без соединений. Ответ в (1).
Но в (0) не понятно что спросил. Поэтому решение может есть, а может что-то другое надо.
9 Джинн
 
23.05.22
16:25
(0) Эмуляция процедурной обработки в запросах - еще тот геморрой. Почему процедурно не обработать? А при необходимости обратно ТЗ в запрос отдать.
10 SuperMario
 
24.05.22
09:31
(9) ну да. Заколхозить всегда проще. Голову включать не надо.
11 lodger
 
24.05.22
10:05
(8) завтра поступит 200+ штук. запрос переписывать будешь?
через неделю поступит 500+штук. запрос переписывать будешь?
через месяц поступит 1000+ штук. запрос переписывать будешь?
12 Джинн
 
24.05.22
10:11
(10) "Включение головы" часто приводит с непредсказуемым результатам. Как-то долго бился с запросом, включающим 12 временных таблиц. Схожая задача - выполнение расчета по бюджетной модели с имитацией процедурной обработки. Вроде как все правильно. Вроде даже красиво, запросом. Но рвет данные и все. Пару дней танцы с бубном, отладка по кускам. В итоге оказалось, что мой супер-пупер правильный запрос движок как-то по своему оптимизировал дополнительно и обрезал один из наборов данных. Конечно потом две недели переписки с 1С в стиле "моя твоя не понимай" и "обновите релиз конфигурации (вроде бы какое отношение к движку)" и "мы передадим ошибку в отдел разработки". Сделал бы нормально - сэкономил бы массу времени. И т.к. мы тут ремеслом занимаемся, а не искусством, то и денег.
13 RomanYS
 
24.05.22
10:18
(10) В данном случае с точки зрения прода заколхозить как раз решить задачу запросом. Кстати со спортивной точки зрения задачка реально интересная, попробуй предложить решение.
14 Ryzeman
 
24.05.22
10:45
(11) ВЫБОР ВЫРАЗИТЬ(КОЛИЧЕСТВО(ТвояТаблица.Номенклатура) / 100) КАК ЧИСЛО(3, 0)) КАК НомерСбора

Вот красиво в строчку собрать уже не выйдет
15 СвинТуз
 
24.05.22
11:30
(0) Можно. Одним запросом.
16 СвинТуз
 
24.05.22
11:31
без циклов.
17 СвинТуз
 
24.05.22
11:33
Дебиторку по банковским дням (не по календарным) одним запросом без циклов можно.
Посчитать число дней просрочки.
Без циклов.
18 СвинТуз
 
24.05.22
11:36
Запрос не сложный и скучный )))
19 Said_We
 
24.05.22
11:45
(11) А что параметры у запроса уже отменили?
20 Said_We
 
24.05.22
11:46
(13) Не уверен я, что понял условия в (0) правильно. Автор выйдет если, то может пояснит детали, что он хотел-то.
21 RomanYS
 
24.05.22
11:52
(18) Попробуй. Возможно ты неправильно понял задачу.
Задача раскидать по ФИФО в упаковки фиксированного объема.
22 Said_We
 
24.05.22
13:00
(21) В (0) нет слова ФИФО и даже намёка на то, что надо что-то куда-то раскидать.
Есть слово "распределить", которое можно понять и как сгруппировать.
"если количество самой позиции больше 100 она должна войти в отдельное собрание" - войти в какую-то отдельную группу. Не написано что в следующую.
А в примере вообще "Номенклатура4 70 сбор3" меньше 100 и группа отдельная.
23 RomanYS
 
24.05.22
13:20
(22) однако нумерация сборов в примере идёт по фифо и начальный порядок строк не нарушен

>>А в примере вообще "Номенклатура4 70 сбор3" меньше 100 и группа отдельная.
Так к ней и нечего положить, особенно если учесть порядок
24 Said_We
 
24.05.22
16:28
Что такое "сбор"?
Номенклатуры разные в примере. Их вместе можно мешать? Нормально задача в (0) не поставлена. Может быть что угодно.
25 Лирик
 
24.05.22
16:52
(17) Можно, и работает
26 SuperMario
 
24.05.22
17:47
(12) причем тут задача в (0) и Ваш не совсем удачный опыт написания запросов по бюджетной модели с имитацией?

Обжегся на молоке, дует на воду.