|
Списание по партиям запросом | ☑ | ||
---|---|---|---|---|
0
BolshoySmal
27.01.20
✎
23:13
|
Доброй ночи Коллеги.
Пытаюсь решить Вот такую задачу Имеются две таблицы. Первая содержит остатки товара на складах: товар, склад, количество. Вторая содержит потребность контрагента в товарах: дата потребности, товар, контрагент, количество. Необходимо запросом получить таблицу, в которой будет распределение количества товара на складах между контрагентами, позволяющее сделать резерв, максимально удовлетворив контрагентов с минимальной датой потребности. Входные параметры для запроса – обе таблицы. Таблица1 Товар1 Склад1 10 Товар2 Склад1 20 Товар2 Склад3 15 Таблица2 01.01.20 Товар1 Контрагент1 12 02.02.20 Товар1 Контрагент2 5 03.01.20 Товар2 Контрагент2 25 Результат Товар1 Контрагент1 Склад1 10 Товар1 Контрагент1 2 Товар1 Контрагент2 5 Товар2 Контрагент2 Склад1 20 Товар2 Контрагент2 Склад3 5 Подскажите,как решить. Таблицы я заружаю. Сводные остатки по партияи (таблица 1 я получаю) А как сделать правильное соединение с таблицей 2 я не знаю. Понимаю, что должно быть соединение таблицы самой с собой и выбор остатка Сумма по партиям (1 таблица) и потребность 2 таблица ,но по каким правлиам мне не совсем понятно. Брал за основу http://catalog.mista.ru/public/270186/,но тут немного не то что у меня. Опыта решения подобных задач нет совсем. Заранее спасибо. |
|||
1
PCcomCat
27.01.20
✎
23:35
|
(0) Думаю, что такое одним запросом не решить. Можно посмотреть алгоритм заполнения документа возврата на основании поступления с учетом остатков, например, в УПП. Нужно нечто подобное. Т.е. соединить все остатки со всеми потребностями, отсортировать по убыванию по дате потребности, а затем регулировать остатками.
|
|||
2
catena
28.01.20
✎
05:48
|
Скажите, плз, почему такое острое желание сделать это именно запросом?
|
|||
3
DEVIce
28.01.20
✎
05:59
|
(2) Так все говорят, что надо одним запросом чтобы все делалось, иначе это плохой стиль программирования. Были бы доступны курсоры скулевые, можно было бы одним запросом. :)
|
|||
4
1ctube
28.01.20
✎
06:07
|
(3) "курсоры скулевые"
Что это? |
|||
5
catena
28.01.20
✎
06:07
|
(3)Кто эти все и где они это говорят?
|
|||
6
DEVIce
28.01.20
✎
06:20
|
(4) Это не важно. В 1С ими все-равно нельзя пользоваться.
|
|||
7
DEVIce
28.01.20
✎
06:21
|
(5) Ты как будто первый день на свете живешь.
|
|||
8
catena
28.01.20
✎
06:32
|
(7)Как раз наоборот, стадию "ТолькоЗапросыТолькоХардкор" я уже пережила) Надо из новичков это выбивать как можно скорее.
|
|||
9
d4rkmesa
28.01.20
✎
08:54
|
(1) Да не, тут, кажется, у ТС задача-челлендж, а не банальное списание по партиям. Как по мне, "назвался груздем...". Какой смысл спрашивать на форуме?
|
|||
10
Ненавижу 1С
гуру
28.01.20
✎
09:03
|
не надо только про не оптимальность использования сервера мне говорить:
ВЫБРАТЬ "Товар1" КАК Товар, "Склад1" КАК Склад, 10 КАК Количество ПОМЕСТИТЬ Остатки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Товар2", "Склад1", 20 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Товар2", "Склад3", 15 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДАТАВРЕМЯ(2020, 1, 1) КАК Дата, "Товар1" КАК Товар, "Контрагент1" КАК Контрагент, 12 КАК Количество ПОМЕСТИТЬ Заказы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2020, 2, 2), "Товар1", "Контрагент2", 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2020, 1, 3), "Товар2", "Контрагент2", 25 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Товар, СУММА(Остатки.Количество) КАК Количество ПОМЕСТИТЬ ОстаткиОбщие ИЗ Остатки КАК Остатки СГРУППИРОВАТЬ ПО Остатки.Товар ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Заказы.Товар, СУММА(Заказы.Количество) КАК Количество ПОМЕСТИТЬ ЗаказыОбщие ИЗ Заказы КАК Заказы СГРУППИРОВАТЬ ПО Заказы.Товар ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказыОбщие.Товар, ЕСТЬNULL(ОстаткиОбщие.Количество, 0) КАК КоличествоОт, ЗаказыОбщие.Количество КАК КоличествоДо ПОМЕСТИТЬ КоридорДефицита ИЗ ЗаказыОбщие КАК ЗаказыОбщие ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиОбщие КАК ОстаткиОбщие ПО ЗаказыОбщие.Товар = ОстаткиОбщие.Товар ГДЕ ЗаказыОбщие.Количество > ЕСТЬNULL(ОстаткиОбщие.Количество, 0) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Заказы.Дата КАК Дата, Заказы.Товар КАК Товар, Заказы.Контрагент КАК Контрагент, ЕСТЬNULL(СУММА(Заказы1.Количество), 0) КАК КоличествоОт, ЕСТЬNULL(СУММА(Заказы1.Количество), 0) + Заказы.Количество КАК КоличествоДо ПОМЕСТИТЬ ЗаказыНарастающе ИЗ Заказы КАК Заказы ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказы1 ПО Заказы.Товар = Заказы1.Товар И (Заказы.Дата > Заказы1.Дата ИЛИ Заказы.Дата = Заказы1.Дата И Заказы.Контрагент > Заказы1.Контрагент) СГРУППИРОВАТЬ ПО Заказы.Контрагент, Заказы.Дата, Заказы.Товар, Заказы.Количество ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Товар КАК Товар, Остатки.Склад КАК Склад, ЕСТЬNULL(СУММА(Остатки1.Количество), 0) КАК КоличествоОт, ЕСТЬNULL(СУММА(Остатки1.Количество), 0) + Остатки.Количество КАК КоличествоДо ПОМЕСТИТЬ ОстаткиНарастающе ИЗ Остатки КАК Остатки ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки1 ПО Остатки.Товар = Остатки1.Товар И Остатки.Склад > Остатки1.Склад СГРУППИРОВАТЬ ПО Остатки.Склад, Остатки.Товар, Остатки.Количество ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КоридорДефицита.Товар, NULL, КоридорДефицита.КоличествоОт, КоридорДефицита.КоличествоДо ИЗ КоридорДефицита КАК КоридорДефицита ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказыНарастающе.Дата КАК Дата, ЗаказыНарастающе.Товар КАК Товар, ЗаказыНарастающе.Контрагент КАК Контрагент, ОстаткиНарастающе.Склад КАК Склад, ВЫБОР КОГДА ЗаказыНарастающе.КоличествоДо < ОстаткиНарастающе.КоличествоДо ТОГДА ЗаказыНарастающе.КоличествоДо ИНАЧЕ ОстаткиНарастающе.КоличествоДо КОНЕЦ - ВЫБОР КОГДА ЗаказыНарастающе.КоличествоОт > ОстаткиНарастающе.КоличествоОт ТОГДА ЗаказыНарастающе.КоличествоОт ИНАЧЕ ОстаткиНарастающе.КоличествоОт КОНЕЦ КАК Количество ИЗ ЗаказыНарастающе КАК ЗаказыНарастающе ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиНарастающе КАК ОстаткиНарастающе ПО ЗаказыНарастающе.Товар = ОстаткиНарастающе.Товар И ЗаказыНарастающе.КоличествоОт < ОстаткиНарастающе.КоличествоДо И ЗаказыНарастающе.КоличествоДо > ОстаткиНарастающе.КоличествоОт |
|||
11
BolshoySmal
28.01.20
✎
10:27
|
Ненавижу 1С - спасибо огромное. Должен буду как земля колхозу !!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |