Меморандум для Казахстана — различия между версиями
Материал из wiki.standart-n.ru
Agk (обсуждение | вклад) |
Agk (обсуждение | вклад) (→НОВОЕ обновление от 18.08.2023) |
||
(не показано 28 промежуточных версии 2 участников) | |||
Строка 4: | Строка 4: | ||
Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке. | Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке. | ||
− | + | =Как обновлять= | |
− | + | * если одиночная точка, просто выполнить скрипт из вложения | |
+ | * если сеть: | ||
+ | ** на сервере определить с какого профиля у них распространяется справочник <b>select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'</b> | ||
+ | ** на базе этого профиля выполнить скрипт из вложения | ||
− | =Обновления от 20.07.2020= | + | =НОВОЕ обновление от 18.08.2023= |
+ | 6890 записей в справочнике | ||
+ | + [[Файл:Мем 27-05-24 НН.xlsx]] | ||
+ | заполнены ШК 77% [[Файл:Мем 05.24 НН.xlsx]] | ||
+ | !!! Прикрепленный файл [[Файл:OUT$MEMORAND KZ 20230818 -2.txt]] | ||
+ | Исходный файл с ШК от Птушкина [[Файл:Мем 08.23.xlsx]] | ||
+ | Приказ DOC [[Файл:Приказ меморандум авг 2023.docx]] | ||
+ | |||
+ | =старое обновление от 10.01.2023= | ||
+ | 6715 записей в справочнике | ||
+ | !!! Прикрепленный файл от 10.01.2022 [[Файл:OUT$MEMORAND KZ 20230110.txt]] | ||
+ | Исходный файл с ШК от Птушкина [[Файл:Меморандум 2023 !!!.xlsx]] | ||
+ | Приказ PDF [[Файл:2022-159-prikaz-compressed.pdf]] | ||
+ | |||
+ | =старое обновление от 17.01.2022= | ||
+ | 7256 записей в справочнике | ||
+ | !!! Прикрепленный файл от 17.01.2022 [[Файл:OUT$MEMORAND KZ 20220117 new2.txt]] | ||
+ | Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 17-01-2022 от Птушкина.xlsx]] | ||
+ | Приказ PDF [[Файл:2021-138-prikaz-compressed.pdf]] | ||
+ | |||
+ | =старое обновление от 16.09.2021= | ||
+ | 7020 записей в справочнике | ||
+ | !!! Прикрепленный файл от 16.09.2021 [[Файл:OUT$MEMORAND KZ 20210916.txt]] | ||
+ | Исходный файл [[Файл:2021-94-prikaz-compressed.pdf]] | ||
+ | Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 16-09-2021 от Птушкина.xls]] | ||
+ | |||
+ | =старое Обновления от 20.07.2020= | ||
!!! Прикрепленный файл от 20.07.2020 [[Файл:Script OUT$MEMORAND KZ 20-07-2020.txt]] | !!! Прикрепленный файл от 20.07.2020 [[Файл:Script OUT$MEMORAND KZ 20-07-2020.txt]] | ||
Строка 13: | Строка 42: | ||
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-07-2020 от Птушкина.xls]] | Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-07-2020 от Птушкина.xls]] | ||
− | =Обновления от 20.01.2020= | + | =старое Обновления от 20.01.2020= |
!!! Прикрепленный файл от 20.01.2020 [[Файл:Script OUT$MEMORAND KZ 20-01-2020.txt]] | !!! Прикрепленный файл от 20.01.2020 [[Файл:Script OUT$MEMORAND KZ 20-01-2020.txt]] | ||
Исходный файл [[Файл:Предельные цены по закону на 09,01,20.xls]] | Исходный файл [[Файл:Предельные цены по закону на 09,01,20.xls]] | ||
Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-01-2020.xls]] | Исходный файл с ШК от Птушкина [[Файл:Предельные цены с ШК 20-01-2020.xls]] | ||
+ | |||
+ | =старое Обновления от 21.01.2021= | ||
+ | 6531 запись в справочнике | ||
+ | !!! Прикрепленный файл [[Файл:OUT$MEMORAND KZ 20210121.txt]] | ||
+ | Прикрепленный файл [[Файл:Приложение розница.docx]] | ||
+ | Прикрепленный файл [[Файл:Приложение опт.docx]] | ||
=Справочник Меморандумных препаратов= | =Справочник Меморандумных препаратов= | ||
Строка 143: | Строка 178: | ||
global_id in | global_id in | ||
(select global_id from warebase_g w where | (select global_id from warebase_g w where | ||
− | (coalesce((select price from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) | + | (coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) |
and | and | ||
quant > 0) | quant > 0) | ||
Строка 152: | Строка 187: | ||
part_id in | part_id in | ||
(select part_id from warebase w where | (select part_id from warebase w where | ||
− | (coalesce((select price from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) | + | (coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) |
and | and | ||
quant > 0) | quant > 0) | ||
+ | </pre> | ||
+ | |||
+ | =Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)= | ||
+ | <pre> | ||
+ | SET TERM ^ ; | ||
+ | |||
+ | create or alter procedure PR_GET_MEM_ALL | ||
+ | returns ( | ||
+ | SNAME DM_TEXT, | ||
+ | BCODE_IZG DM_TEXT, | ||
+ | PRICE DM_DOUBLE, | ||
+ | PRICE_MEM DM_DOUBLE, | ||
+ | SAPTEKA DM_TEXT) | ||
+ | as | ||
+ | declare variable BARCODE DM_TEXT; | ||
+ | begin | ||
+ | for select price, barcode from out$memorand_kz o where o.barcode <> '-' --and o.barcode='3387080000937' | ||
+ | into price_mem, barcode do | ||
+ | for select sname, BCODE_IZG, price, g.caption from warebase_g w | ||
+ | left join g$profiles g on g.id = w.g$profile_id | ||
+ | where quant > 0 and w.bcode_izg containing :barcode and w.price > :price_mem | ||
+ | into sname, BCODE_IZG, price, SAPTEKA do | ||
+ | suspend; | ||
+ | end^ | ||
+ | |||
+ | SET TERM ; ^ | ||
+ | |||
+ | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
+ | |||
+ | GRANT SELECT ON OUT$MEMORAND_KZ TO PROCEDURE PR_GET_MEM_ALL; | ||
+ | GRANT SELECT ON WAREBASE_G TO PROCEDURE PR_GET_MEM_ALL; | ||
+ | GRANT SELECT ON G$PROFILES TO PROCEDURE PR_GET_MEM_ALL; | ||
+ | |||
+ | /* Существующие привилегии на эту процедуру */ | ||
+ | |||
+ | GRANT EXECUTE ON PROCEDURE PR_GET_MEM_ALL TO SYSDBA; | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | =Общий Заказ= | ||
+ | Проверка меморандумных цен реализована в Общем Заказе согласно ТЗ | ||
+ | [[Файл:ТЗ меморандум в ОЗ 966703.doc]] | ||
+ | |||
+ | |||
+ | =Обновление Справочника через OST= | ||
+ | |||
+ | * В настройках ost нужно указать регион "222222" | ||
+ | |||
+ | * Чтобы отправить клиентам обновление справочника мемерандума | ||
+ | <pre> | ||
+ | Скопировать zip-архив с обновлением в папку \\SUPA\zclientxp\updates | ||
+ | В этой же папке в файле updates222222.ini обновить Caption и Path на актуальные | ||
+ | </pre> | ||
+ | |||
+ | =запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике= | ||
+ | <pre> | ||
+ | delete from group_detail gd | ||
+ | where | ||
+ | gd.group_id = 10022 and | ||
+ | gd.grouptable= 'PARTS.NAME_ID' and | ||
+ | not exists(select id from out$memorand_kz m where m.barcode in (select w.barcode from wares w where char_length(w.barcode)>7 and w.name_id = cast(gd.grouptable_id as DM_UUID))) | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | =запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК= | ||
+ | <pre> | ||
+ | INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) | ||
+ | select distinct 10022 as GROUP_ID, 0 as PARENT_ID, name_id as GROUPTABLE_ID, 'PARTTS.NAME_ID' as GROUPTABLE from wares w where | ||
+ | char_length(w.barcode) >7 and | ||
+ | exists(select id from out$memorand_kz o where o.barcode = w.barcode) and | ||
+ | not exists(select id from group_detail gd where gd.group_id=10022 and gd.grouptable='PARTTS.NAME_ID' and gd.grouptable_id = w.name_id) | ||
</pre> | </pre> |
Текущая версия на 11:16, 27 мая 2024
Содержание
- 1 Общие сведения
- 2 Как обновлять
- 3 НОВОЕ обновление от 18.08.2023
- 4 старое обновление от 10.01.2023
- 5 старое обновление от 17.01.2022
- 6 старое обновление от 16.09.2021
- 7 старое Обновления от 20.07.2020
- 8 старое Обновления от 20.01.2020
- 9 старое Обновления от 21.01.2021
- 10 Справочник Меморандумных препаратов
- 11 Технические требования (для внедрения)
- 12 Работа со справочником
- 13 Проверка препаратов в приходном документе
- 14 Приход товара
- 15 Автоматическое ограничение цены
- 16 Фильтр на превышение цены по меморандуму
- 17 Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)
- 18 Общий Заказ
- 19 Обновление Справочника через OST
- 20 запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике
- 21 запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК
Общие сведения
В 2019 году правительство Казахстана ввело ограничение на цены некоторых препаратов (около 4 тыс. позиций) в республике. Официально список нигде не выложен, но аптечным сетям пришло письмо с вложением (см. ниже) и требованием исполнять данное указание. Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.
Как обновлять
- если одиночная точка, просто выполнить скрипт из вложения
- если сеть:
- на сервере определить с какого профиля у них распространяется справочник select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'
- на базе этого профиля выполнить скрипт из вложения
НОВОЕ обновление от 18.08.2023
6890 записей в справочнике + Файл:Мем 27-05-24 НН.xlsx заполнены ШК 77% Файл:Мем 05.24 НН.xlsx !!! Прикрепленный файл Файл:OUT$MEMORAND KZ 20230818 -2.txt Исходный файл с ШК от Птушкина Файл:Мем 08.23.xlsx Приказ DOC Файл:Приказ меморандум авг 2023.docx
старое обновление от 10.01.2023
6715 записей в справочнике !!! Прикрепленный файл от 10.01.2022 Файл:OUT$MEMORAND KZ 20230110.txt Исходный файл с ШК от Птушкина Файл:Меморандум 2023 !!!.xlsx Приказ PDF Файл:2022-159-prikaz-compressed.pdf
старое обновление от 17.01.2022
7256 записей в справочнике !!! Прикрепленный файл от 17.01.2022 Файл:OUT$MEMORAND KZ 20220117 new2.txt Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 17-01-2022 от Птушкина.xlsx Приказ PDF Файл:2021-138-prikaz-compressed.pdf
старое обновление от 16.09.2021
7020 записей в справочнике !!! Прикрепленный файл от 16.09.2021 Файл:OUT$MEMORAND KZ 20210916.txt Исходный файл Файл:2021-94-prikaz-compressed.pdf Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 16-09-2021 от Птушкина.xls
старое Обновления от 20.07.2020
!!! Прикрепленный файл от 20.07.2020 Файл:Script OUT$MEMORAND KZ 20-07-2020.txt
Исходный файл Файл:Предельные цены по закону на 15,07,2020.pdf Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 20-07-2020 от Птушкина.xls
старое Обновления от 20.01.2020
!!! Прикрепленный файл от 20.01.2020 Файл:Script OUT$MEMORAND KZ 20-01-2020.txt
Исходный файл Файл:Предельные цены по закону на 09,01,20.xls Исходный файл с ШК от Птушкина Файл:Предельные цены с ШК 20-01-2020.xls
старое Обновления от 21.01.2021
6531 запись в справочнике !!! Прикрепленный файл Файл:OUT$MEMORAND KZ 20210121.txt Прикрепленный файл Файл:Приложение розница.docx Прикрепленный файл Файл:Приложение опт.docx
Справочник Меморандумных препаратов
сопоставление товара из файла правительства и аптеки сделано на основании заводского ШК. Мы прогнали файл по названиям и примерно 50% ШК смогли найти, остальное требуется заполнять вручную.
Для создания таблицы можно использовать скрипт Прикрепленный файл Файл:Создание OUT$MEMORAND KZ.txt
Для заполнения справочника требуется выполнить данный скрипт. Прикрепленный файл от 09/08/2019 Файл:Script OUT$MEMORAND KZ 09-08-2019.txt Старый файл до 08/08/2019 Файл:Script.txt
Технические требования (для внедрения)
1. Должна быть настроена двусторонняя синхронизация таблицы OUT$MEMORAND_KZ, с ограничением ведения справочника только в главной точке (аналогично AGENTS);
2. В базе должны быть группа 'Меморандум' (10022) INSERT INTO GROUPS (ID, PARENT_ID, CAPTION, GROUPTABLE, STATUS, INSERTDT, SYSTEMFLAG, DESCRIPTION, IMAGEINDEX, DATA, COLOR, SORTING, BASE_AGENT_ID, SID) VALUES (10022, -8, 'Меморандум', 'PARTS.NAME_ID', 0, '20-AUG-2015 14:19:55', 0, NULL, -1, NULL, 8421631, 0, 0, '10022');
Работа со справочником
Проверка препаратов в приходном документе
В менеджере групп партий, в основной группе, должен быть код.
//Проверка меморандумных препаратов (группа) 20151117 if (infor = '') Then Begin trn:=CREATEIBTRANSACTION; STARTIBTRANSACTION(trn,1); query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1); //AVO 09/08/19 //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос: //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1); if (not IBQUERY_EOF(query)) then If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then Begin //заявка 887094 А.К. 20170913 query:=ExecIBQuery(trn,'INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE, d$uuid, d$srvupddt) VALUES (10022, 0, '''+fieldvalue_s('NAME_ID')+''', ''PARTS.NAME_ID'', UUID_TO_CHAR(GEN_UUID()), ''2000-01-01'');',1); // setstatus(3); // perem :=perem+'bcode_izg=255; 1'#13#10+'SNAME=255; 0'#13#10; // infor := infor+'Товар с ШК '+fieldvalue_s('bcode_izg')+' относится к группе "Меморандум", но группа не проставлена! ШК и наименование отмечено красным{clrf}'; end FREEIBQUERY(query); FREEIBTRANSACTION(trn); End //Проверка меморандумных препаратов (цена) if (infor = '') Then Begin trn:=CREATEIBTRANSACTION; STARTIBTRANSACTION(trn,1); //AVO 08/08/19 //Добавлено дополнительно исключение по цене query:=ExecIBQuery(trn,'select min(price) as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and barcode = '''+fieldvalue_s('bcode_izg')+''' and char_length(barcode)>10',1); //AVO 09/08/19 //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос: //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(fieldvalue_f('price_o'))+' and '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode and char_length(barcode)>10',1); if ((not IBQUERY_EOF(query)) and (IBQUERY_FIELDBYNAME_f(query,'price')>0)) then begin If ((fieldvalue_f('price')- IBQUERY_FIELDBYNAME_f(query,'price'))>0.01) then Begin setstatus(3); perem :=perem+'bcode_izg=10724305; 1'#13#10+'SNAME=10724305; 0'#13#10; infor := infor+'Цена на данный меморандумный препарат должна быть НЕ БОЛЕЕ '+IBQUERY_FIELDBYNAME_s(query,'price')+' тенге! ШК и наименование отмечено красным{clrf}'; end end else If (Pos('Меморандум', fieldvalue_s('mmbsh')) > 0) Then Begin setstatus(3); perem :=perem+'bcode_izg=10724305; 1'#13#10+'SNAME=10724305; 0'#13#10; infor := infor+'Группа "Меморандум" на ШК '+fieldvalue_s('bcode_izg')+' установлена, но не указана цена в справочнике! ШК и наименование отмечено красным{clrf}'; end FREEIBQUERY(query); FREEIBTRANSACTION(trn); End
Приход товара
в приходном документе, если товар относится к группе "Меморандум" (10022), анализируется розничная цена, если она выше, чем в справочнике будет выведено соответствующее сообщение.
Автоматическое ограничение цены
возможно программу настроить так, что при нажатии "Назначить наценку по приходу", в случае превышения, цена будет обрезана до максимально допустимой.
if ((Pos('Меморандум',Trim(mmbsh))) >0) then //Меморандум begin //AVO 08/08/19 //Добавлено дополнительное ограничение по цене query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and barcode = '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' and char_length(barcode)>10',1); //AVO 09/08/19 //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос: //query1:=ExecIBQuery(trn,'select trunc(min(price)/10)*10 as price from OUT$MEMORAND_KZ WHERE price>'+FloatToStr(IBQuery_FieldByName_f(query, 'price_o'))+' and '''+IBQuery_FieldByName_s(query, 'bcode_izg')+''' CONTAINING barcode',1); m_manager.logit(FloatToSTr(IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100))); if ((not IBQUERY_EOF(query1)) and (IBQuery_FieldByName_f(query, 'price_o') <> 0)) Then if IBQuery_FieldByName_f(query, 'price_o')*(1+StrToFloat(nac)/100) > IBQuery_FieldByName_f(query1, 'price') Then begin nac:=FloatToStr( (IBQuery_FieldByName_f(query1, 'price')-IBQuery_FieldByName_f(query, 'price_o'))*100/IBQuery_FieldByName_f(query, 'price_o') ); infor := infor +'Группа товара - '+mmbsh; end; end;
Фильтр на превышение цены по меморандуму
Название "Меморандум: превышение розничной цены"
для Сводника
global_id in (select global_id from warebase_g w where (coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) and quant > 0)
для Менеджера
part_id in (select part_id from warebase w where (coalesce((select min(price) from out$memorand_kz o where w.bcode_izg = o.barcode),w.price) < w.price) and quant > 0)
Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)
SET TERM ^ ; create or alter procedure PR_GET_MEM_ALL returns ( SNAME DM_TEXT, BCODE_IZG DM_TEXT, PRICE DM_DOUBLE, PRICE_MEM DM_DOUBLE, SAPTEKA DM_TEXT) as declare variable BARCODE DM_TEXT; begin for select price, barcode from out$memorand_kz o where o.barcode <> '-' --and o.barcode='3387080000937' into price_mem, barcode do for select sname, BCODE_IZG, price, g.caption from warebase_g w left join g$profiles g on g.id = w.g$profile_id where quant > 0 and w.bcode_izg containing :barcode and w.price > :price_mem into sname, BCODE_IZG, price, SAPTEKA do suspend; end^ SET TERM ; ^ /* Следующие операторы GRANT сгенерированы автоматически */ GRANT SELECT ON OUT$MEMORAND_KZ TO PROCEDURE PR_GET_MEM_ALL; GRANT SELECT ON WAREBASE_G TO PROCEDURE PR_GET_MEM_ALL; GRANT SELECT ON G$PROFILES TO PROCEDURE PR_GET_MEM_ALL; /* Существующие привилегии на эту процедуру */ GRANT EXECUTE ON PROCEDURE PR_GET_MEM_ALL TO SYSDBA;
Общий Заказ
Проверка меморандумных цен реализована в Общем Заказе согласно ТЗ Файл:ТЗ меморандум в ОЗ 966703.doc
Обновление Справочника через OST
- В настройках ost нужно указать регион "222222"
- Чтобы отправить клиентам обновление справочника мемерандума
Скопировать zip-архив с обновлением в папку \\SUPA\zclientxp\updates В этой же папке в файле updates222222.ini обновить Caption и Path на актуальные
запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике
delete from group_detail gd where gd.group_id = 10022 and gd.grouptable= 'PARTS.NAME_ID' and not exists(select id from out$memorand_kz m where m.barcode in (select w.barcode from wares w where char_length(w.barcode)>7 and w.name_id = cast(gd.grouptable_id as DM_UUID)))
запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК
INSERT INTO GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) select distinct 10022 as GROUP_ID, 0 as PARENT_ID, name_id as GROUPTABLE_ID, 'PARTTS.NAME_ID' as GROUPTABLE from wares w where char_length(w.barcode) >7 and exists(select id from out$memorand_kz o where o.barcode = w.barcode) and not exists(select id from group_detail gd where gd.group_id=10022 and gd.grouptable='PARTTS.NAME_ID' and gd.grouptable_id = w.name_id)