Малоходовый товар
Материал из wiki.standart-n.ru
Версия от 17:52, 29 апреля 2015; Agk (обсуждение | вклад)
Содержание
Описание
Малоходовым товаром считается товар который:
- 1 не продавался (Чек ККМ, Расход перемещением, Расход оптовый) за последние 3 мес;
- 2 не было прихода (Приход от поставщика, Приход перемещением, Оприходование) за последние 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;
Настроить ежедневное задание
Разархивировать Файл:Malohod.zip и скопировать его в папку с СервисМенеджером (ServiceMngr.exe). Настроить ежедневное задание средствами ОС, импортировав задание Файл:7Расчет малоходового товара.zip или через задачу 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" )#
Внешений вид
На кассе малоходовый товар выделяется желтым цветом (см. Анестезол на скриншоте)
Теги: Малоходовый товар, Малоходовка