Остатки на складе больше 3 месяцев

429
04 февраля 2017, 11:08

Доброго времени суток. Досталась большая база с данными, и нужно вывести отчет об остатках на складе больше 3 месяцев, не затрагивая структуру таблиц.

  1. Таблица заявок, где nomenclatureid - номенклатура, tip - тип события (7 поступление, 3 перемещение между складами, skadid - id склада, count - количество, skladtoid - id на какой склад было перемещение (при tip = 3).
  2. Таблица отгрузок, где pid - id в таблице поступлений, date - дата поступления.
  3. И таблица поступлений.

К примеру тут отображено, что изначально более 3 месяцев назад поступило товара с id 2121 10 штук, а условно вчера 1 штука, т.е. отчет должен показывать 10 штук, при общем кол-ве в 11шт. Далее было перемещено со склада 1 на склад 30 - 5 штук и еще 6 штук (5 + 1) на склад 32. Т.е. отчет должен показывать, что у нас в остатках 5 штук на складе 30 и еще 5 на складе 32.

Есть примерный код того как оно мне досталось

//получаем резервы и транзиты по всей номенклатуре по которой были совершены действия
    $q = "select nomen.id,
                    nomen.tip,
                    nomen.name,
                    nomen.pid,
                    nomen.quantity_type,
                    sum(rez.count_rezerv_current) as rezerv,
                    sum(rez.count_tranzit_current) as tranzit
                from sup_rezerv_nomen rez
                join sup_nomenclature nomen
                    on nomen.id = rez.id_nomen
                where rez.status = 1
                group by nomen.id";
    $res = $DB->query($q);
    while( $row = $DB->nextRow($res) ) {
        $row['cost'] = 0;
        $row['count_all'] = 0;
        $mas[$row['id']] = $row;
    }
    //получаем все поступления
    $q = 'select nomen.id as id,
                    nomen.tip,
                    nomen.pid,
                    nomen.name,
                    insk.skladid,
                    SUM(insk.count*insk.cost) cost_in,
                    sum(insk.count) count_in
                from sup_sklad_in insk
                join sup_nomenclature nomen
                    on nomen.id = insk.nomenclatureid
                join sup_lst_sklad lst_sk
                    on lst_sk.id = insk.skladid
                    and lst_sk.id_depart in ('.implode(',',$user['departs']).')
                where insk.date<='.$dateto.'
                group by nomen.id, insk.skladid';
    $res = $DB->query($q);
    while ($row=$DB->nextRow($res)) {
        $mas[$row['id']]['id'] = $row['id'];
        $mas[$row['id']]['pid'] = $row['pid'];
        $mas[$row['id']]['name'] = $row['name'];
        $mas[$row['id']]['tip'] = $row['tip'];
        $mas[$row['id']]['cost'] += $row['cost_in'];
        $mas[$row['id']]['sklad'][$row['skladid']]['count'] = $row['count_in'];
        $mas[$row['id']]['count_all'] += $row['count_in'];
        $cost_all += $row['cost_in'];
    }
    //получаем все отгрузки
    $q = 'select insk.nomenclatureid as id,
                        insk.skladid,
                        coalesce(SUM(coalesce(outsk.count*insk.cost)),0) cost_out,
                        coalesce(sum(outsk.count),0) count_out
                from sup_sklad_in insk
                left join sup_sklad_out outsk
                  on outsk.pid = insk.id
                join sup_lst_sklad lst_sk
                    on lst_sk.id = insk.skladid
                    and lst_sk.id_depart in ('.implode(',',$user['departs']).')
                left join sup_order_items oi
                    on oi.id = outsk.or_itemid
                where insk.date<='.$dateto.'
                    AND ( oi.tip <> 3 OR  (oi.tip = 3 AND outsk.date <= '.$dateto.') OR oi.tip IS NULL)
                group by insk.nomenclatureid, insk.skladid';
    $res=$DB->query($q);
    while ($row=$DB->nextRow($res)) {
        $mas[$row['id']]['cost'] -= $row['cost_out'];
        $mas[$row['id']]['sklad'][$row['skladid']]['count'] -= $row['count_out'];
        $mas[$row['id']]['count_all'] -= $row['count_out'];
        $mas[$row['id']]['cost'] = sprintf("%.2f",$mas[$row['id']]['cost']);
        $mas[$row['id']]['count_all'] = sprintf("%.2f",$mas[$row['id']]['count_all']);
        $cost_all -= $row['cost_out'];
    }
READ ALSO
php &amp; nodejs (под задачи, личное мнение)

php & nodejs (под задачи, личное мнение)

Здравствуйте, изучаю php уже пол года, создавал пару сайтов, но всегда меня заносило на создание динамический сайтов, использую для этого ajax + phpТак...

448
Обработать JSON строку по POST запросу

Обработать JSON строку по POST запросу

Из Android приложения делаю POST запрос с JSON строкой на свой сервер(php)Как на сервере мне обработать JSON? Можно какой-то пример или ссылку?!

478
Скидка на товар Битрикс

Скидка на товар Битрикс

Подскажите как реализовать следующие, чтобы зарегистрированный пользователь, который закажет товар в текущем месяце получал скидку 5% на все...

640