Лабораторно фасовочный журнал
Содержание
- 1 Общие сведения
- 2 Подготовка базы данных для установки
- 3 Импорт подпрограммы инициализации журнала
- 4 Импорт печатной формы журнала
- 5 Импорт сетки отображения
- 6 Запуск журнала
- 7 Первоначальное окно запроса параметров расчета
- 8 Рассчитанные данные
- 9 Печать журнала / ценников (параметры)
- 10 Печать журнала / ценников (примеры печатных форм)
Общие сведения
В соответствии с пунктом 2.8 "Порядка отпуска лекарственных средств", утвержденного Приказом Минздравсоцразвития РФ от 14.12.2005 N 785 (в ред. от 06.08.2007), в исключительных случаях нарушения аптечной организацией вторичной заводской упаковки лекарственное средство должно отпускаться в аптечной упаковке с обязательным указанием наименования, заводской серии, срока годности лекарственного средства, серии и даты по лабораторно-фасовочному журналу.
Подготовка базы данных для установки
Выполните скрипт.
Если полей D$UUID, D$SRVUPDDT нет - исправьте запрос, создавать эти поля не нужно
/******************************************************************************/
/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/
SET SQL DIALECT 3;
/******************************************************************************/
/*** Views ***/
/******************************************************************************/
/* View: VW_LABFAS */
CREATE OR ALTER VIEW VW_LABFAS(
ID,
NAME_ID,
PRICE,
PRICEFAS,
QUANTFAS,
DOC_ID,
SNAME,
COMMITDATE,
VNUM,
DOCNUM,
POST,
SERIA,
NAMEFAS,
QUANT)
AS
select
0,--l.id,
0,--l.name_id,
0,--l.price,
0,--l.pricefas,
0,--l.quantfas,
0,--l.doc_id,
0,--v.svalue,
d.commitdate,
d.vnum,
d.docnum,
a.caption as post,
0,--l.seria,
0,--l.namefas as namefas,
0--l.quant
from docs d join agents a on d.agent_id=a.id
;
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
SET SQL DIALECT 3;
drop procedure OUT$LAB_CEN;
drop procedure PR_LABFAS_PROD;
drop procedure PR_LABFAS;
drop procedure PR_LABFAS_WAREBASE;
drop view VW_LABFAS;
delete from labfas;
drop table LABFAS;
drop table QUANT_FAS;
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE GENERATOR GEN_QUANT_FAS_ID;
CREATE TABLE QUANT_FAS (
ID BIGINT NOT NULL,
NAME_ID DM_UUID_NULL /* DM_UUID_NULL = CHAR(36) */,
QUANTFAS BIGINT,
NAMEFAS DM_TEXT COLLATE PXW_CYRL /* DM_TEXT = VARCHAR(250) */
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE QUANT_FAS ADD CONSTRAINT PK_QUANT_FAS PRIMARY KEY (ID);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: QUANT_FAS_BI0 */
CREATE OR ALTER TRIGGER QUANT_FAS_BI0 FOR QUANT_FAS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.id is null) then
new.id = gen_id(GEN_QUANT_FAS_ID,1);
end
^
SET TERM ; ^
/******************************************************************************/
/*** Generated by IBExpert 24.03.2015 13:20:20 ***/
/******************************************************************************/
/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/
SET SQL DIALECT 3;
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE GENERATOR GEN_LABFAS_ID;
CREATE TABLE LABFAS (
ID DM_ID NOT NULL /* DM_ID = BIGINT */,
NAME_ID DM_UUID /* DM_UUID = CHAR(36) NOT NULL */,
PRICE DM_DOUBLE /* DM_DOUBLE = DOUBLE PRECISION */,
PRICEFAS DM_DOUBLE /* DM_DOUBLE = DOUBLE PRECISION */,
QUANTFAS DM_ID_NULL /* DM_ID_NULL = BIGINT */,
DOC_ID DM_ID /* DM_ID = BIGINT */,
QUANT DM_DOUBLE /* DM_DOUBLE = DOUBLE PRECISION */,
SERIA DM_TEXT COLLATE PXW_CYRL /* DM_TEXT = VARCHAR(250) */,
NAMEFAS DM_TEXT COLLATE PXW_CYRL /* DM_TEXT = VARCHAR(250) */,
PART_ID DM_ID /* DM_ID = BIGINT */,
SERL DM_TEXT /* DM_TEXT = VARCHAR(250) */
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE LABFAS ADD CONSTRAINT PK_LABFAS PRIMARY KEY (ID);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: LABFAS_BI */
CREATE OR ALTER TRIGGER LABFAS_BI FOR LABFAS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id(gen_labfas_id,1);
if (new.quantfas<>0) then
new.pricefas=new.price/new.quantfas;
-- if ((new.namefas is null) or (new.namefas='')) then
select first 1 qf.namefas from quant_fas qf where qf.namefas<>'' and new.name_id=qf.name_id
into new.namefas;
if (new.namefas is null) then
select first 1 v.svalue from vals v where new.name_id=v.id
into new.namefas;
end
^
/* Trigger: LABFAS_BU0 */
CREATE OR ALTER TRIGGER LABFAS_BU0 FOR LABFAS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
if (((new.quantfas<>old.quantfas)
or (new.quantfas is not null and old.quantfas is null )) or ((new.namefas<>old.namefas)
or (new.namefas is not null and old.namefas is null )))
then
begin
if (new.quantfas<>0 and new.quantfas is not null) then
new.pricefas=new.price/new.quantfas;
--if (new.namefas<>'') then
-- new.namefas=
-- if (new.name_id) not in (select name_id from quant_fas) then
update or insert into quant_fas (name_id,quantfas,namefas) values (new.name_id,new.quantfas, new.namefas) matching (name_id);
if (new.quantfas=0 and new.quantfas is not null) then
new.pricefas=0;
end
/* insert into quant_fas
(id,
name_id,
quantfas
)
values
(
new.ID,
new.name_id,
new.quantfas
); */
end
^
SET TERM ; ^
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/*** Following SET SQL DIALECT is just for the Database Comparer ***/
/******************************************************************************/
SET SQL DIALECT 3;
/******************************************************************************/
/*** Views ***/
/******************************************************************************/
/* View: VW_LABFAS */
CREATE OR ALTER VIEW VW_LABFAS(
ID,
NAME_ID,
PRICE,
PRICEFAS,
QUANTFAS,
DOC_ID,
SNAME,
COMMITDATE,
VNUM,
DOCNUM,
POST,
SERIA,
NAMEFAS,
PART_ID,
GODENDO,
QUANT,
SERL)
AS
select
l.id,
l.name_id,
l.price,
l.pricefas,
l.quantfas,
l.doc_id,
v.svalue,
d.commitdate,
d.vnum,
d.docnum,
a.caption as post,
l.seria,
l.namefas as namefas,
l.part_id,
(select p.godendo from parts p where p.id=l.part_id ),
l.quant,
l.serl
from labfas l left join vals v on l.name_id=v.id
left join docs d on l.doc_id=d.id left join agents a on d.agent_id=a.id
;
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
SET TERM ^ ;
create or alter procedure PR_LABFAS (
PERIODBEG DM_DATE,
PERIODEND DM_DATE)
returns (
PART_ID DM_ID,
NAME_ID DM_UUID_NULL,
PRICE DM_DOUBLE,
DOC_ID DM_ID,
QUANT DM_DOUBLE,
SERIA DM_TEXT,
QUANTFAS DM_DOUBLE,
NAMEFAS DM_TEXT)
as
begin
for select dd.name_id, dd.price, dd.doc_id, dd.quant,dd.seria,qf.quantfas, qf.namefas, dd.part_id from vw_doc_detail dd
inner join docs d on d.id=dd.doc_id
left join quant_fas qf on dd.name_id=qf.name_id
where d.doc_type in (1,2,20) and d.status=1 and dd.part_type =0 and dd.mmbsh containing 'делим' and (dd.doc_commitdate between :periodbeg and :periodend)
order by dd.name_id
into :name_id, :price, :doc_id, :quant, :seria, :quantfas, :namefas, :part_id do
begin
insert into labfas (name_id, price, doc_id, quant, seria, quantfas,namefas, part_id) values (:name_id, :price, :doc_id, :quant, :seria, :quantfas,:namefas, :part_id);
end
suspend;
end^
SET TERM ; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT ON VW_DOC_DETAIL TO PROCEDURE PR_LABFAS;
GRANT SELECT ON DOCS TO PROCEDURE PR_LABFAS;
GRANT SELECT ON QUANT_FAS TO PROCEDURE PR_LABFAS;
GRANT INSERT ON LABFAS TO PROCEDURE PR_LABFAS;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE PR_LABFAS TO SYSDBA;
SET TERM ^ ;
create or alter procedure PR_LABFAS_PROD (
PERIODBEG DM_DATE,
PERIODEND DM_DATE)
returns (
NAME_ID DM_UUID_NULL,
PRICE DM_DOUBLE,
DOC_ID DM_ID,
QUANT DM_DOUBLE,
SERIA DM_TEXT,
QUANTFAS DM_DOUBLE,
NAMEFAS DM_TEXT,
PART_ID DM_ID)
as
begin
for select dd.name_id, dd.price, dd.doc_id, dd.quant*(-1) as quant,dd.seria,qf.quantfas, qf.namefas, dd.part_id from vw_doc_detail dd inner join docs d
on d.id=dd.doc_id left join quant_fas qf on dd.name_id=qf.name_id
where d.doc_type in (3,11) and d.status=1 and dd.part_type =0 and mmbsh containing 'делим' and (dd.doc_commitdate between :periodbeg and :periodend)
order by dd.name_id
into :name_id, :price, :doc_id, :quant, :seria, :quantfas, :namefas , :part_id do
begin
insert into labfas (name_id, price, doc_id, quant, seria, quantfas,namefas, part_id ) values (:name_id, :price, :doc_id, :quant, :seria, :quantfas,:namefas, :part_id);
end
suspend;
end^
SET TERM ; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT ON VW_DOC_DETAIL TO PROCEDURE PR_LABFAS_PROD;
GRANT SELECT ON DOCS TO PROCEDURE PR_LABFAS_PROD;
GRANT SELECT ON QUANT_FAS TO PROCEDURE PR_LABFAS_PROD;
GRANT INSERT ON LABFAS TO PROCEDURE PR_LABFAS_PROD;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE PR_LABFAS_PROD TO SYSDBA;
SET TERM ^ ;
create or alter procedure OUT$LAB_CEN (
PART_ID DM_ID,
POVTOR integer)
returns (
ID DM_ID)
as
declare variable I DM_ID;
declare variable QUANTF DM_ID;
declare variable QUANT DM_ID;
begin
for select dd.id, iif(:povtor =1, trunc(dd.quant*dd.quantfas),1) from vw_labfas dd where dd.part_id=:part_id into :id,:quant do
begin
i=1;
while (i<=quant) do
begin
suspend;
i=i+1;
end
end
end^
SET TERM ; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT ON VW_LABFAS TO PROCEDURE OUT$LAB_CEN;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE OUT$LAB_CEN TO SYSDBA;
delete from SP$WDICTS where SID = 'labfas';
INSERT INTO SP$WDICTS (ID, PARENT_ID, CAPTION, DESCRIPTION, SID, STATUS, INSERTDT, INI, BMP, SORTING, FRAMECLASS) VALUES ((select max(id)+1 from SP$WDICTS), 0, 'Лабораторно-фасовочный журнал', NULL, 'labfas', 0, NULL, '
[insertsql]
[deletesql_selected]
[deletesql]
[refreshsql]
select * from vw_labfas where id=:id
[selectsqlwithdeleted]
[selectsql]
select * from vw_labfas order by sname,id
[main]
sourcetablename=LABFAS
returnfieldname=ID
captionfieldname=ID
keyfieldname=ID
ViewID=labfas
RootGroupTableName=
ShowCaption=Лабораторно-фасовочный журнал
GetCaption=
GroupSelect=0
foldergroup=
initfolder_id=
dataset=0
InitTMSGroup_id=-600
[cfSelect]
selectfieldexpression=sname
AllwaysPartial=1
[form_show]
position=1
left=0
Top=0
Width=0
Height=0
MaxWidth=0
MaxHeight=0
MinWidth=0
MinHeight=0
[form_get]
position=1
left=0
Top=0
Width=0
Height=0
MaxWidth=0
MaxHeight=0
MinWidth=0
MinHeight=0
[childs]
bottomdock_units=0
bottomdock_size=0
rightdock_units=0
rightdock_size=0
[TMS_0]
group_id=794
caption=Сформировать
[editfields]
QUANTFAS=default
NAMEFAS=default
', NULL, NULL, NULL);
INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID, D$UUID, D$SRVUPDDT) VALUES (-600, -430, 'Инит лаб фас', 'TMS', 0, '14-NOV-2013 14:17:18', 0, NULL, -1, NULL, NULL, NULL, 0, NULL, '', '30-DEC-2014 15:48:59');
INSERT INTO REPORTS (ID, PARENT_ID, STATUS, REPORTTYPE, SORTING, CAPTION, PARAMS, WDICT_ID, DATA, D$UUID, D$SRVUPDDT) VALUES ((select max(id)+1 from REPORTS), 0, 0, 10, 100, 'Лабораторно-фасовочный журнал', NULL, (select max(id) from SP$WDICTS), NULL, '', '18-FEB-2015 12:09:51');
Импорт подпрограммы инициализации журнала
В таблице GROUPS для записи с ID -600 в поле INI импортируйте Файл:-600 LAB FAS.zip
Импорт печатной формы журнала
В таблице REPORTS для последней записи в поле DATA импортируйте Файл:Lab fas.zip (предварительно разархивируйте)
Импорт сетки отображения
Импортируйте сетку(настройки отображения) в программе менеджер Файл:Лаб фас сетка.zip (предварительно разархивируйте)
Запуск журнала
Программа Менеджер -> Справочники -> Дополнительные возможности -> Лабораторно-фасовочный журнал
Первоначальное окно запроса параметров расчета
Рассчитанные данные
Поля "Наименование фасовки" и "Кол-во частей" доступны для редактирования
Печать журнала / ценников (параметры)
Печать журнала / ценников (примеры печатных форм)
Теги: лабораторно фасовочный журнал, лаб фас, ЛФЖ



