Запрос к данным

1. SnakePlisskin 3 13.03.25 11:38 Сейчас в теме
Доброго дня!
Столкнулся с проблемой, как правильно сделать запрос. Сейчас имею вот такой.

ВЫБРАТЬ
 | Поставка.Ссылка      КАК Документ,
 | Поставка.Товар              КАК Товар,
 | Поставка.Товар.Номенклатура КАК Номенклатура,
 | СУММА(1)       КАК В_Поставках,
 | МатериалыНаСкладах.КоличествоОстаток           КАК В_Наличии,
 |CASE WHEN МатериалыНаСкладах.КоличествоОстаток >= СУММА(1) THEN
 | СУММА(1) ELSE
 | МатериалыНаСкладах.КоличествоОстаток END                 КАК В_Перемещение,
 |CASE WHEN ЕСТЬNULL(МатериалыНаСкладах.КоличествоОстаток, 0) < СУММА(1) THEN
 | СУММА(1) - ЕСТЬNULL(МатериалыНаСкладах.КоличествоОстаток, 0) END КАК В_Производство
 |ИЗ
 | Документ.Поставка.тчСборочныхЗаданий КАК Поставка
 |ЛЕВОЕ СОЕДИНЕНИЕ
 | РегистрНакопления.МатериалыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Дата,День), Склад = &ВыбСклад ) КАК МатериалыНаСкладах ПО
 | МатериалыНаСкладах.Номенклатура = Поставка.Товар.Номенклатура 
 |ГДЕ
 | Поставка.Ссылка.Проект = &Проект
 |СГРУППИРОВАТЬ ПО
 |   Поставка.Товар, МатериалыНаСкладах.КоличествоОстаток, Поставка.Ссылка
 |ИТОГИ 
 | СУММА(В_Поставках), 
 | СУММА(В_Наличии),
 | СУММА(В_Перемещение),
 | СУММА(В_Производство) 
 |ПО
 | Поставка.Ссылка 
Показать


Суть какова :

имеем входные данные, примерно такого вида : последняя колонка это количество в поставке

Поставка1 Товар1 Номенклатура1 1
Поставка1 Товар2 Номенклатура2 1
Поставка1 Товар3 Номенклатура3 2
Поставка2 Товар1 Номенклатура1 2
Поставка2 Товар3 Номенклатура3 2
Поставка3 Товар2 Номенклатура2 2
Поставка3 Товар4 Номенклатура4 3
Поставка5 Товар1 Номенклатура1 4
Поставка5 Товар4 Номенклатура4 3

Запрос должен отработать таким образом, что бы получилось следующее , на примере Товар2

Поставка1 Товар2 Затребовано1 На складе 2 К Перемещению 1 К Производсту 0

Поставка3 Товар2 Затребовано2 На складе 2 (а фактически уже 1 так как перемещение Поставки1 забрало 1 штуку) К перемещению 1 К Производству 1

Возможно ли вообще такое провернуть в рамках запроса ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Snigse 13.03.25 12:05 Сейчас в теме
Собери отдельные виртуальные таблицы по каждому показателю, и потом сгруппируй данные в одну, по крайней мере тебе будет более понятно, какие столбцы с какими можно делать в 1 таблице а по каким, нужно отдельно виртуальные таблицы собрать
3. SnakePlisskin 3 13.03.25 14:26 Сейчас в теме
(2)

ВЫБРАТЬ
  "Поставка1" КАК Поставка,
  "Товар1" КАК Товар,
  "Номенклатура1" КАК Номенклатура,
  1 КАК КоличествоВПоставке
ПОМЕСТИТЬ ВТ_Поставки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка1",
  "Товар2",
  "Номенклатура2",
  1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка1",
  "Товар3",
  "Номенклатура3",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка2",
  "Товар1",
  "Номенклатура1",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка2",
  "Товар3",
  "Номенклатура3",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка3",
  "Товар2",
  "Номенклатура2",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка3",
  "Товар4",
  "Номенклатура4",
  3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка5",
  "Товар1",
  "Номенклатура1",
  4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка5",
  "Товар4",
  "Номенклатура4",
  3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  "Номенклатура1" КАК Номенклатура,
  10 КАК КоличествоОстаток
ПОМЕСТИТЬ ВТ_ОстаткиНаДату

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Номенклатура2",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Номенклатура4",
  4
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  СводнаяПотребность.Товар КАК Товар,
  СводнаяПотребность.Номенклатура КАК Номенклатура,
  СводнаяПотребность.КоличествоВПоставке КАК Затребовано,
  ЕСТЬNULL(ВТ_ОстаткиНаДату.КоличествоОстаток, 0) КАК НаСкладах,
  СводнаяПотребность.Поставка КАК Поставка
ПОМЕСТИТЬ ВТ_промежуточная
ИЗ
  (ВЫБРАТЬ
    ВТ_Поставки.Товар КАК Товар,
    ВТ_Поставки.Номенклатура КАК Номенклатура,
    СУММА(ВТ_Поставки.КоличествоВПоставке) КАК КоличествоВПоставке,
    ВТ_Поставки.Поставка Как Поставка
  ИЗ
    ВТ_Поставки КАК ВТ_Поставки
  
  СГРУППИРОВАТЬ ПО
    ВТ_Поставки.Товар,
    ВТ_Поставки.Поставка,
    ВТ_Поставки.Номенклатура) КАК СводнаяПотребность
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиНаДату КАК ВТ_ОстаткиНаДату
    ПО (ВТ_ОстаткиНаДату.Номенклатура = СводнаяПотребность.Номенклатура)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  ВТ_промежуточная.Товар КАК Товар,
  ВТ_промежуточная.Номенклатура КАК Номенклатура,
  ВТ_промежуточная.Затребовано КАК Затребовано,
  ВТ_промежуточная.НаСкладах КАК НаСкладах,
  ВТ_промежуточная.Поставка КАК Поставка,
  ВЫБОР
    КОГДА ВТ_промежуточная.НаСкладах > ВТ_промежуточная.Затребовано
      ТОГДА ВТ_промежуточная.Затребовано
    ИНАЧЕ ВТ_промежуточная.НаСкладах
  КОНЕЦ КАК КПеремещению,
  ВЫБОР
    КОГДА ВТ_промежуточная.НаСкладах < ВТ_промежуточная.Затребовано
      ТОГДА ВТ_промежуточная.Затребовано - ВТ_промежуточная.НаСкладах
    ИНАЧЕ 0
  КОНЕЦ КАК КПроизводству
ПОМЕСТИТЬ ВТ_Потребности
ИЗ
  ВТ_промежуточная КАК ВТ_промежуточная
Показать


Запрос с тестовыми данными, все равно не получается посчитать правильно количество в разрезе заказов учитывая так скажем уже затраченное количество...
4. Snigse 13.03.25 15:34 Сейчас в теме
(3) А откуда ты получаешь сколько затребовано?
5. SnakePlisskin 3 13.03.25 15:50 Сейчас в теме
(4) КАК КоличествоВПоставке из первой таблицы
6. SnakePlisskin 3 13.03.25 16:50 Сейчас в теме
Короче вроде вот такая штука получилась

ВЫБРАТЬ
  "Поставка1" КАК Поставка,
  "Товар1" КАК Товар,
  "Номенклатура1" КАК Номенклатура,
  1 КАК КоличествоВПоставке
ПОМЕСТИТЬ ВТ_Поставки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка1",
  "Товар2",
  "Номенклатура2",
  1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка1",
  "Товар3",
  "Номенклатура3",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка2",
  "Товар1",
  "Номенклатура1",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка2",
  "Товар3",
  "Номенклатура3",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка3",
  "Товар2",
  "Номенклатура2",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка3",
  "Товар4",
  "Номенклатура4",
  3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка5",
  "Товар1",
  "Номенклатура1",
  4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Поставка5",
  "Товар4",
  "Номенклатура4",
  3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  "Номенклатура1" КАК Номенклатура,
  10 КАК КоличествоОстаток
ПОМЕСТИТЬ ВТ_ОстаткиНаДату

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Номенклатура2",
  2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
  "Номенклатура4",
  4
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  СводнаяПотребность.Товар КАК Товар,
  СводнаяПотребность.Номенклатура КАК Номенклатура,
  СводнаяПотребность.КоличествоВПоставке КАК Затребовано,
  ЕСТЬNULL(ВТ_ОстаткиНаДату.КоличествоОстаток, 0) КАК НаСкладах
ПОМЕСТИТЬ ВТ_промежуточная
ИЗ
  (ВЫБРАТЬ
    ВТ_Поставки.Товар КАК Товар,
    ВТ_Поставки.Номенклатура КАК Номенклатура,
    СУММА(ВТ_Поставки.КоличествоВПоставке) КАК КоличествоВПоставке
  ИЗ
    ВТ_Поставки КАК ВТ_Поставки
  
  СГРУППИРОВАТЬ ПО
    ВТ_Поставки.Товар,
    ВТ_Поставки.Номенклатура) КАК СводнаяПотребность
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиНаДату КАК ВТ_ОстаткиНаДату
    ПО (ВТ_ОстаткиНаДату.Номенклатура = СводнаяПотребность.Номенклатура)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  ВТ_промежуточная.Товар КАК Товар,
  ВТ_промежуточная.Номенклатура КАК Номенклатура,
  ВТ_промежуточная.Затребовано КАК Затребовано,
  ВТ_промежуточная.НаСкладах КАК НаСкладах,
  ВЫБОР
    КОГДА ВТ_промежуточная.НаСкладах > ВТ_промежуточная.Затребовано
      ТОГДА ВТ_промежуточная.Затребовано
    ИНАЧЕ ВТ_промежуточная.НаСкладах
  КОНЕЦ КАК КПеремещению,
  ВЫБОР
    КОГДА ВТ_промежуточная.НаСкладах < ВТ_промежуточная.Затребовано
      ТОГДА ВТ_промежуточная.Затребовано - ВТ_промежуточная.НаСкладах
    ИНАЧЕ 0
  КОНЕЦ КАК КПроизводству
ПОМЕСТИТЬ ВТ_Потребности
ИЗ
  ВТ_промежуточная КАК ВТ_промежуточная
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  АВТОНОМЕРЗАПИСИ() КАК Автономер,
  ВТ_Поставки.Поставка КАК Поставка,
  ВТ_Поставки.Товар КАК Товар,
  ВТ_Поставки.Номенклатура КАК Номенклатура,
  ВТ_Поставки.КоличествоВПоставке КАК КоличествоВПоставке
ПОМЕСТИТЬ ВТ_Промпоставки
ИЗ
  ВТ_Поставки КАК ВТ_Поставки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  ВТ_Промпоставки.Автономер КАК Автономер,
  ВТ_Промпоставки.Поставка КАК Поставка,
  ВТ_Промпоставки.Товар КАК Товар,
  ВТ_Промпоставки.Номенклатура КАК Номенклатура,
  МИНИМУМ(ВТ_Промпоставки.КоличествоВПоставке) КАК КоличествоВПоставке,
  СУММА(Вложенный.КоличествоВПоставке) КАК КоличествоНарастающее
ПОМЕСТИТЬ ВТ_ПромИтог
ИЗ
  ВТ_Промпоставки КАК ВТ_Промпоставки
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
      ВТ_Промпоставки.Автономер КАК Автономер,
      ВТ_Промпоставки.Поставка КАК Поставка,
      ВТ_Промпоставки.Товар КАК Товар,
      ВТ_Промпоставки.Номенклатура КАК Номенклатура,
      ВТ_Промпоставки.КоличествоВПоставке КАК КоличествоВПоставке
    ИЗ
      ВТ_Промпоставки КАК ВТ_Промпоставки) КАК Вложенный
    ПО ВТ_Промпоставки.Номенклатура = Вложенный.Номенклатура
      И ВТ_Промпоставки.Автономер >= Вложенный.Автономер

СГРУППИРОВАТЬ ПО
  ВТ_Промпоставки.Автономер,
  ВТ_Промпоставки.Поставка,
  ВТ_Промпоставки.Товар,
  ВТ_Промпоставки.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  ВТ_ПромИтог.Поставка КАК Поставка,
  ВТ_ПромИтог.Товар КАК Товар,
  ВТ_ПромИтог.Номенклатура КАК Номенклатура,
  ВТ_ПромИтог.КоличествоВПоставке КАК КоличествоВПоставке,
  ВТ_ПромИтог.КоличествоНарастающее КАК КоличествоНарастающее,
  ВТ_Потребности.НаСкладах КАК НаСкладах,
  ВТ_Потребности.КПеремещению КАК КПеремещению,
  ВТ_Потребности.КПроизводству КАК КПроизводству,
  ВЫБОР
    КОГДА ВТ_Потребности.КПеремещению - (ВТ_ПромИтог.КоличествоНарастающее - ВТ_ПромИтог.КоличествоВПоставке) >= ВТ_ПромИтог.КоличествоВПоставке
      ТОГДА ВТ_ПромИтог.КоличествоВПоставке
    ИНАЧЕ ВТ_Потребности.КПеремещению - (ВТ_ПромИтог.КоличествоНарастающее - ВТ_ПромИтог.КоличествоВПоставке)
  КОНЕЦ КАК Перемещаем
ПОМЕСТИТЬ ВТ_ПромПромИтог
ИЗ
  ВТ_ПромИтог КАК ВТ_ПромИтог
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Потребности КАК ВТ_Потребности
    ПО ВТ_ПромИтог.Номенклатура = ВТ_Потребности.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
  ВТ_ПромПромИтог.Поставка КАК Поставка,
  ВТ_ПромПромИтог.Товар КАК Товар,
  ВТ_ПромПромИтог.Номенклатура КАК Номенклатура,
  ВТ_ПромПромИтог.КоличествоВПоставке КАК КоличествоВПоставке,
  //ВТ_ПромПромИтог.КоличествоНарастающее КАК КоличествоНарастающее,
  ВТ_ПромПромИтог.НаСкладах КАК НаСкладах,
  //ВТ_ПромПромИтог.КПеремещению КАК КПеремещению,
  //ВТ_ПромПромИтог.КПроизводству КАК КПроизводству,
  ВЫБОР КОГДА ВТ_ПромПромИтог.Перемещаем>0 ТОГДА ВТ_ПромПромИтог.Перемещаем ИНАЧЕ 0 КОНЕЦ КАК Перемещаем,
  ВЫБОР КОГДА  ВЫБОР КОГДА ВТ_ПромПромИтог.Перемещаем>0 ТОГДА ВТ_ПромПромИтог.Перемещаем ИНАЧЕ 0 КОНЕЦ >= ВТ_ПромПромИтог.КоличествоВПоставке 
  ТОГДА 0 иначе  ВТ_ПромПромИтог.КоличествоВПоставке - ВТ_ПромПромИтог.Перемещаем КОНЕЦ КАК Заказываем
ИЗ
  ВТ_ПромПромИтог КАК ВТ_ПромПромИтог  
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот