Имя: Пароль:
1C
1С v8
Распределение позиций накладной по остаткам на складах запросом.
0 live in sky dreams
 
02.12.17
19:53
Имеем несколько складов.
Склад1, Склад2, Склад3.

Имеем товар "Номенклатура1", "Номенклатура2".
имеем таблицу остатков

________________________
Склад1|Номенклатура1| 5|
Склад2|Номенклатура1| 6|
Склад3|Номенклатура1|-2|
Склад1|Номенклатура2| 4|
Склад2|Номенклатура2| 1|


Имеем накладную

Номенклатура1|8
Номенклатура2|6

Задача:
1) Распределить накладную по остаткам (с какого склада сколько списать)
2) В случае если товара не достаточно - узнать какого товара и сколько нехватает.

решаема ли задача с помощью запроса?
По FIFO в запросе я читал, использовал в предыдущих задачах, но здесь:
1) Не от чего оттолкнуться в сравнении (наименование и код - повторяющиеся в строках поля)
2) Присутствуют отрицательные остатки на одном из складов (распровели перемещение и забыли, бывает)
3) Нужно понять чего и сколько нехватает

Без решения первого пункта, я так понимаю, в дальнейших пунктах решения не найти.
начнем с него..
Я максимум "умного" придумал получать в отдельном поле по группировочным полям результат конкатенации этих строк.
....Склад.Код+"|"+"Номенклатура.Код" КАК Индекс

А в дальнейшем соединить получившуюся таблицу с ней же и работать по примеру: Книга знаний: Нумерация строк в запросе

Но как то это решение кажется мне кривым. Возможно есть более изящный способ?
В общем, буду благодарен за любую помощь по задаче, если кому не лень в субботу,..
1 Ildarovich
 
03.12.17
12:11
Вот в этой статье приведено решение данной задачи http://catalog.mista.ru/public/568299/ . Рекомендую взять решение из комментария 37. Оно свободно от ограничений целочисленности. Вот, собственно, решение: ВЫБРАТЬ
    Ячейки.Ячейка,
    СУММА(Слева.Количество) - МИНИМУМ(Ячейки.Количество) КАК КоличествоОт,
    СУММА(Слева.Количество) КАК КоличествоДо
ПОМЕСТИТЬ ЛинейкаЯчеек
ИЗ
    Ячейки КАК Ячейки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Ячейки КАК Слева
        ПО (Слева.Ячейка <= Ячейки.Ячейка)

СГРУППИРОВАТЬ ПО
    Ячейки.Ячейка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Товары.Товар,
    СУММА(Слева.Количество) - МИНИМУМ(Товары.Количество) КАК КоличествоОт,
    СУММА(Слева.Количество) КАК КоличествоДо
ПОМЕСТИТЬ ЛинейкаТоваров
ИЗ
    Товары КАК Товары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Товары КАК Слева
        ПО (Слева.Товар <= Товары.Товар)

СГРУППИРОВАТЬ ПО
    Товары.Товар
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Ячейки.Ячейка КАК Ячейка,
    Товары.Товар КАК Товар,
    ВЫБОР
        КОГДА Товары.КоличествоДо < Ячейки.КоличествоДо
            ТОГДА Товары.КоличествоДо
        ИНАЧЕ Ячейки.КоличествоДо
    КОНЕЦ - ВЫБОР
        КОГДА Товары.КоличествоОт > Ячейки.КоличествоОт
            ТОГДА Товары.КоличествоОт
        ИНАЧЕ Ячейки.КоличествоОт
    КОНЕЦ КАК Количество
ИЗ
    ЛинейкаЯчеек КАК Ячейки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЛинейкаТоваров КАК Товары
        ПО Ячейки.КоличествоОт < Товары.КоличествоДо
            И Ячейки.КоличествоДо > Товары.КоличествоОт
Думаю, "ячейки" на склады заментить будет нетрудно.
2 Ildarovich
 
03.12.17
12:17
+(1) Если бы задали вопрос прямо на Инфостарте, получили бы ответ быстрее и выглядел бы он наряднее. Тут, например, ни грамматическую ошибку исправить нельзя, ни картинку к ответу приложить.
3 organizm
 
03.12.17
12:20
решение есть, но не вздумайте распределение делать запросом!
4 Смотрящий
 
03.12.17
12:36
(2) там нет 37 комментария
5 Ildarovich
 
03.12.17
14:00
(4) Посмотрите внимательнее - все-таки есть: http://forum.infostart.ru/forum9/topic164079/message1719985/#message1719985 Видимо, у вас вид представления комментариев - "дерево". Если упорядочить по дате, находить легче.
6 Ildarovich
 
03.12.17
14:11
(3) Не соглашусь в данном случае. Тут распределяется ОДНА строка номенклатуры на относительно небольшое количество складов с остатками (думаю, не больше десятка-двух). В этом случае квадратичная зависимость времени работы запроса от числа строк, на которые идет распределение, отсутствует (одна строка конкретной номенклатуры! х несколько складов). Даже если строк несколько, их все равно меньше сотни, с чего начинается резкий рост. Поэтому к данному конкретному случаю обычно высказываемое предостережение не относится.
7 breezee
 
03.12.17
14:18
(0) Зачем запросом? Просто для интереса - думайте сами) Если есть необходимость, на пример вы отчет на СКД делаете - укажите.
Если можно кодом - лучше кодом. Задача "классическая". Это как решать возведение в степень через циклы, когда есть функция "pow".