Малоходовый товар

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск

Описание

Малоходовым товаром считается товар который:

  • не продавался (Чек ККМ, Расход перемещением, Расход оптовый) за последние 3 мес;
  • не было прихода (Приход от поставщика, Приход перемещением, Оприходование) за последние 6 мес.

Услуги и новые партии товара (младше 3х мес) из выборки исключаются.

Выполнить скрипт

/******************************************************************************/
/***               Generated by IBExpert 29.04.2015 13:38:01                ***/
/******************************************************************************/

/******************************************************************************/
/***      Following SET SQL DIALECT is just for the Database Comparer       ***/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/



CREATE TABLE MALOHOD (
    PART_ID   DM_ID NOT NULL /* DM_ID = BIGINT */,
    MALOHOD   DM_STATUS /* DM_STATUS = INTEGER */,
    INSERTDT  DM_DATETIME /* DM_DATETIME = TIMESTAMP */
);




/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE MALOHOD ADD CONSTRAINT PK_MALOHOD PRIMARY KEY (PART_ID);


/******************************************************************************/
/***                                Indices                                 ***/
/******************************************************************************/

CREATE DESCENDING INDEX MALOHOD_IDX1 ON MALOHOD (PART_ID);


/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/***                          Triggers for tables                           ***/
/******************************************************************************/



/* Trigger: MALOHOD_BIU0 */
CREATE OR ALTER TRIGGER MALOHOD_BIU0 FOR MALOHOD
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
  new.insertdt = 'now';
end
^


SET TERM ; ^



/******************************************************************************/
/***                               Privileges                               ***/
/******************************************************************************/


SET TERM ^ ;

create or alter procedure PR_GET_MALOHOD (
    PART_ID bigint)
returns (
    MALOHOD smallint)
as
declare variable ROWCOUNT bigint;
begin
   select 0 from rdb$database into :MALOHOD;

  --Для услуг расчет не производим
   if ((select part_type from parts where id = :part_id) = 1 ) Then
   begin
     suspend;
     exit;
   end


  --по партии определяем был ли приход(Приход от поставщика, приход перемещением, оприходование) за последние 3 мес?
  --Если был или партия младше 3х мес - дальше не анализируем
   select COUNT(*) from doc_detail dd
   inner join docs d on d.id=dd.doc_id
   inner join parts p on p.id=dd.part_id
   inner join (select PART_ID_OUT from PR_GET_ALL_MOTHERPART (:part_id)) pp on pp.PART_ID_OUT = p.id
   where (dd.doc_commitdate between dateadd (-3 month to current_date) and current_date
          or cast(p.INSERTDT as dm_date) >= dateadd (-3 month to current_date) )
          and d.doc_type in (1,2,20) --Приход от поставщика, приход перемещением, оприходование
   into :RowCount;

   if (:RowCount > 0) then
   begin
     suspend;
     exit;
   end

  --по партии определяем продавался ли (Чек ККМ, Расход перемещением, Расход оптовый) этот товар за последние 3 мес?
  select COUNT(*) from doc_detail dd
  inner join docs d on d.id=dd.doc_id
  inner join (select PART_ID_OUT from PR_GET_ALL_MOTHERPART (:part_id)) pp on pp.PART_ID_OUT = dd.part_id
  where dd.doc_commitdate between dateadd (-3 month to current_date) and current_date
        and d.doc_type in (3,6,11)  --Чек ККМ, Расход перемещением, Расход оптовый
  into :RowCount;

   --Если не продавался, то товар является малоходовым (MALOHOD=1)
   if (:RowCount = 0) then
   begin
     select 1 from rdb$database into :MALOHOD;
     suspend;
     exit;
   end

   --по партии определяем был ли приход за последение 6 мес?
   select COUNT(*) from doc_detail dd
   inner join docs d on d.id=dd.doc_id
   inner join (select PART_ID_OUT from PR_GET_ALL_MOTHERPART (:part_id)) pp on pp.PART_ID_OUT = dd.part_id
   where dd.doc_commitdate between dateadd (-6 month to current_date) and current_date
         and d.doc_type in (1,2,20)  --Приход от поставщика, приход перемещением, оприходование
   into :RowCount;

   --Если прихода за посл. 6 мес не было - то тоже подсвечиваем наименование желтым цветом
   if (:RowCount = 0) then
   begin
     select 1 from rdb$database into :MALOHOD;
     suspend;
     exit;
   end

   suspend;
end^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

GRANT SELECT ON PARTS TO PROCEDURE PR_GET_MALOHOD;
GRANT SELECT ON DOC_DETAIL TO PROCEDURE PR_GET_MALOHOD;
GRANT SELECT ON DOCS TO PROCEDURE PR_GET_MALOHOD;
GRANT EXECUTE ON PROCEDURE PR_GET_ALL_MOTHERPART TO PROCEDURE PR_GET_MALOHOD;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PR_GET_MALOHOD TO SYSDBA;

SET TERM ^ ;

create or alter procedure PR_FILL_MALOHOD
as
declare variable ROWCOUNT bigint;
begin
   delete from MALOHOD;

   insert into MALOHOD(part_id, MALOHOD)
   select distinct w.part_id, (select MALOHOD from PR_GET_MALOHOD(w.part_id)) from warebase w;
   suspend;
end^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

GRANT SELECT,INSERT,DELETE ON MALOHOD TO PROCEDURE PR_FILL_MALOHOD;
GRANT EXECUTE ON PROCEDURE PR_GET_MALOHOD TO PROCEDURE PR_FILL_MALOHOD;
GRANT SELECT ON WAREBASE TO PROCEDURE PR_FILL_MALOHOD;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PR_FILL_MALOHOD TO SYSDBA;
 

Добавить/заменить поле MALOHOD в представлении VW_WAREBASE_KASSA

  MALOHOD
источник
  m.MALOHOD
где, m
  left join MALOHOD m on m.part_id = w.part_id
 

Добавить в кассире на событие 311 "После прорисовки ячейки сетки" код

uses
  Graphics, Controls, Forms, Dialogs, StdCtrls,
  ComCtrls, ExtCtrls, ibquery, DB, ChequeList, FR,
  ScriptRes, Barcode, ZKassa, StrUtils, Windows, Classes,
  IBDatabase, dxTL, dxDBTL, dxDBCtrl, dxDBGrid, Graphics;

begin
    if (Global['cell_gridname'] = 'dxbase') and
       (Pos('SNAME', TdxDBTreeListColumn(Global['cell_column']).FieldName) > 0) and
       (Global['cell_node'].Values[TdxDBGrid(Global['cell_node'].Owner).ColumnByFieldName('MALOHOD').Index] = 1)
    Then
       Global['cell_color'] := $00D7FF;
end;          
 

Настроить ежедневное задание

или через задачу nnCron

#( Расчет_Малоходовки
Time: 5 20 * * * *
Action:
StartIn: "C:\Standart-N\ServiceMngr" 
ShowNormal   NormalPriority
START-APP: C:\Standart-N\ServiceMngr\ServiceMngr.exe execSQLs "C:\Standart-N\ServiceMngr\malohod.sql"
)#
 

Внешений вид

На кассе малоходовый товар выделяется желтым цветом (см. Анестезол на скриншоте)

Малоходовый товар


Теги: Малоходовый товар, Малоходовка