Доброго дня!
Столкнулся с проблемой, как правильно сделать запрос. Сейчас имею вот такой.
Суть какова :
имеем входные данные, примерно такого вида : последняя колонка это количество в поставке
Поставка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
Возможно ли вообще такое провернуть в рамках запроса ?
Столкнулся с проблемой, как правильно сделать запрос. Сейчас имею вот такой.
ВЫБРАТЬ
| Поставка.Ссылка КАК Документ,
| Поставка.Товар КАК Товар,
| Поставка.Товар.Номенклатура КАК Номенклатура,
| СУММА(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
Возможно ли вообще такое провернуть в рамках запроса ?
По теме из базы знаний
- Запрос выдающий данные на каждую дату периода
- Установка цен в 1С:Управление торговлей 11. Произвольный запрос к данным ИБ
- 1с8.2-8.3.Вывод на экран данных запроса с переданными Параметрами из Документа! 8 различных вариантов:от Сообщений, Таблицы и Отчетов до СКД без объекта-отчета
- Как сделать запрос на изменение данных
- Описание расчета вычисляемых цен номенклатуры, формируемых в документах Установка цен номенклатуры и Прайс-лист, произвольным запросом к данным ИБ "Себестоимость с доп. расходами" в УТ 11, КА 2, ERP 2, заложенного стандартным механизмом 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Собери отдельные виртуальные таблицы по каждому показателю, и потом сгруппируй данные в одну, по крайней мере тебе будет более понятно, какие столбцы с какими можно делать в 1 таблице а по каким, нужно отдельно виртуальные таблицы собрать
(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
КОНЕЦ КАК КПроизводству
ПОМЕСТИТЬ ВТ_Потребности
ИЗ
ВТ_промежуточная КАК ВТ_промежуточная
ПоказатьЗапрос с тестовыми данными, все равно не получается посчитать правильно количество в разрезе заказов учитывая так скажем уже затраченное количество...
Короче вроде вот такая штука получилась
ВЫБРАТЬ
"Поставка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 иначе ВТ_ПромПромИтог.КоличествоВПоставке - ВТ_ПромПромИтог.Перемещаем КОНЕЦ КАК Заказываем
ИЗ
ВТ_ПромПромИтог КАК ВТ_ПромПромИтог
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот