Меморандум для Казахстана — различия между версиями
Материал из wiki.standart-n.ru
								
												
				Agk  (обсуждение | вклад)  | 
				Agk  (обсуждение | вклад)   | 
				||
| (не показана одна промежуточная версия 4 участников) | |||
| Строка 4: | Строка 4: | ||
  Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.  |   Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.  | ||
| + | =Как обновлять=  | ||
| + | * если одиночная точка, просто выполнить скрипт из вложения  | ||
| + | * если сеть:  | ||
| + | ** на сервере определить с какого профиля у них распространяется справочник <b>select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'</b>  | ||
| + | ** на базе этого профиля выполнить скрипт из вложения  | ||
| + | |||
| + | =НОВОЕ от 01.08.2025=  | ||
| + |  4994 записи в справочнике  | ||
| + |  заполнены ШК для 69% позиций  | ||
| + | * скрипт для клиентов [[Файл:OUT$MEMORAND KZ 20250801.txt]]  | ||
| + | * изначальный приказ [[Файл:2025-470-prikaz-compressed.pdf]]  | ||
| + | * обработанный приказ с ШК [[Файл:Меморандум авг 2025 -2.xlsx]]  | ||
| + | * файл от Птушкина с доп. ШК [[Файл:Меморандум авг 2025 от Птушкина.xlsx]]  | ||
| + | |||
| + | |||
| + | =старое обновление от 25.02.2025=  | ||
| + |  5952 записи в справочнике  | ||
| + |  заполнены ШК для 74% позиций  | ||
| + | * скрипт для клиентов [[Файл:OUT$MEMORAND KZ 20250225.txt]]  | ||
| + | * изначальный приказ [[Файл:ПЦ 2025.pdf]]  | ||
| + | * обработанный приказ с ШК [[Файл:Меморандум 2025.xlsx]]  | ||
| + | * файл от Птушкина с доп. ШК [[Файл:Меморандум 2025 2.xlsx]]  | ||
| + | |||
| + | =старое обновление от 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]]    | ||
  Прикрепленный файл  [[Файл:Приложение опт.docx]]  |   Прикрепленный файл  [[Файл:Приложение опт.docx]]  | ||
| Строка 10: | Строка 74: | ||
  сопоставление товара из файла правительства и аптеки сделано на основании заводского ШК.  |   сопоставление товара из файла правительства и аптеки сделано на основании заводского ШК.  | ||
  Мы прогнали файл по названиям и примерно 50% ШК смогли найти, остальное требуется заполнять вручную.  |   Мы прогнали файл по названиям и примерно 50% ШК смогли найти, остальное требуется заполнять вручную.  | ||
| − | |||
| − |   Прикрепленный файл  [[Файл:Script.txt]]  | + |  Для создания таблицы можно использовать скрипт  | 
| + |   Прикрепленный файл [[Файл:Создание_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);  | ||
| + | <pre>  | ||
| + |  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');  | ||
| + | </pre>  | ||
=Работа со справочником=  | =Работа со справочником=  | ||
| Строка 21: | Строка 98: | ||
=Проверка препаратов в приходном документе=  | =Проверка препаратов в приходном документе=  | ||
| + | В менеджере групп партий, в основной группе, должен быть код.   | ||
| + | <pre>  | ||
| + |   //Проверка меморандумных препаратов (группа) 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  | ||
| + | |||
| + | </pre>  | ||
| + | |||
| + | |||
| + | [[Файл:Меморандум 3.png|center|Код]]  | ||
| + | |||
| + | [[Файл:Меморандум 4.png|center|Код]]  | ||
| + | |||
| + | =Приход товара=  | ||
| + |  в приходном документе, если товар относится к группе "Меморандум" (10022), анализируется розничная цена, если она выше, чем в справочнике будет выведено соответствующее сообщение.  | ||
| + | |||
| + | [[Файл:Меморандум 5.png|center|Код]]  | ||
| + | |||
| + | =Автоматическое ограничение цены=  | ||
| + |  возможно программу настроить так, что при нажатии "Назначить наценку по приходу", в случае превышения, цена будет обрезана до максимально допустимой.   | ||
| + | <pre>  | ||
| + |       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;  | ||
| + | </pre>  | ||
| + | |||
| + | [[Файл:Меморандум 6.png|center|Код]]  | ||
| + | |||
| + | =Фильтр на превышение цены по меморандуму=  | ||
| + | Название "Меморандум: превышение розничной цены"  | ||
| + | |||
| + | для Сводника  | ||
| + | <pre>  | ||
| + | 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)  | ||
| + | </pre>  | ||
| + | |||
| + | для Менеджера  | ||
| + | <pre>  | ||
| + | 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)  | ||
| + | </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>  | ||
Текущая версия на 17:24, 1 августа 2025
Содержание
- 1 Общие сведения
 - 2 Как обновлять
 - 3 НОВОЕ от 01.08.2025
 - 4 старое обновление от 25.02.2025
 - 5 старое обновление от 18.08.2023
 - 6 старое обновление от 10.01.2023
 - 7 старое обновление от 17.01.2022
 - 8 старое обновление от 16.09.2021
 - 9 старое Обновления от 20.07.2020
 - 10 старое Обновления от 20.01.2020
 - 11 старое Обновления от 21.01.2021
 - 12 Справочник Меморандумных препаратов
 - 13 Технические требования (для внедрения)
 - 14 Работа со справочником
 - 15 Проверка препаратов в приходном документе
 - 16 Приход товара
 - 17 Автоматическое ограничение цены
 - 18 Фильтр на превышение цены по меморандуму
 - 19 Неточный поиск по ШК, для выявление превышений в своднике (ТОРМОЗИТ!!!)
 - 20 Общий Заказ
 - 21 Обновление Справочника через OST
 - 22 запрос для чистки старых связок группы Меморандум, которых больше нет в справочнике
 - 23 запрос для добавления в группу Меморандум всех товаров, которые подходят по ШК
 
Общие сведения
В 2019 году правительство Казахстана ввело ограничение на цены некоторых препаратов (около 4 тыс. позиций) в республике. Официально список нигде не выложен, но аптечным сетям пришло письмо с вложением (см. ниже) и требованием исполнять данное указание. Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.
Как обновлять
- если одиночная точка, просто выполнить скрипт из вложения
 -  если сеть:
- на сервере определить с какого профиля у них распространяется справочник select FROM_PROFILE_ID from g$distribute where tablename = 'OUT$MEMORAND_KZ'
 - на базе этого профиля выполнить скрипт из вложения
 
 
НОВОЕ от 01.08.2025
4994 записи в справочнике заполнены ШК для 69% позиций
- скрипт для клиентов Файл:OUT$MEMORAND KZ 20250801.txt
 - изначальный приказ Файл:2025-470-prikaz-compressed.pdf
 - обработанный приказ с ШК Файл:Меморандум авг 2025 -2.xlsx
 - файл от Птушкина с доп. ШК Файл:Меморандум авг 2025 от Птушкина.xlsx
 
старое обновление от 25.02.2025
5952 записи в справочнике заполнены ШК для 74% позиций
- скрипт для клиентов Файл:OUT$MEMORAND KZ 20250225.txt
 - изначальный приказ Файл:ПЦ 2025.pdf
 - обработанный приказ с ШК Файл:Меморандум 2025.xlsx
 - файл от Птушкина с доп. ШК Файл:Меморандум 2025 2.xlsx
 
старое обновление от 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)





