Меморандум для Казахстана — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
(Автоматическое ограничение цены)
(Проверка препаратов в приходном документе)
Строка 44: Строка 44:
 
     //AVO 09/08/19
 
     //AVO 09/08/19
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode',1);
+
     //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 (not IBQUERY_EOF(query)) then
 
       If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then
 
       If Pos('Меморандум', fieldvalue_s('mmbsh')) = 0 Then
Строка 68: Строка 68:
 
     //AVO 09/08/19
 
     //AVO 09/08/19
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
 
     //если ШК в базе у клиента составной, т.е. в поле ШК производителя несколько разных ШК, то нужно использовать следующий запрос:
     //query:=ExecIBQuery(trn,'select * from OUT$MEMORAND_KZ WHERE '''+fieldvalue_s('bcode_izg')+''' CONTAINING barcode',1);
+
     //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
 
     if ((not IBQUERY_EOF(query)) and (IBQUERY_FIELDBYNAME_f(query,'price')>0)) then
 
     begin  
 
     begin  

Версия 11:22, 14 августа 2019

Общие сведения

В 2019 году правительство Казахстана ввело ограничение на цены некоторых препаратов (около 4 тыс. позиций) в республике.
Официально список нигде не выложен, но аптечным сетям пришло письмо с вложением (см. ниже) и требованием исполнять данное указание.
Мы настраиваем данный функционал бесплатно, для всех клиентов, кто на технической поддержке.
Прикрепленный файл  Файл:Приложение розница.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;
Код