Страница 1 из 1

Запустить свой обработчик в акте на сбыт

Добавлено: 12 фев 2019, 11:50
oiko
Галактика 810 не округляет налоги если они выставлены в категорию "ручные". То есть меняю ставку НДС с 20 на 18 она делает налоги ручными пересчитывает, но округлять не хочет. Оператор может забыть вручную округлить. Проще всего подсунуть свой обработчик который это сделает. Оптимально скорее всего его поместить в событие до создания с/ф из акта. Кто располагает исходниками не подскажете alter какого события и где сделать?

Re: Запустить свой обработчик в акте на сбыт

Добавлено: 15 фев 2019, 15:44
zna
Вот доработка для накладных в сбыте для ручного запуска, возможно поправить кое-где потребуется..
Для автоматического запуска возможно на событие закрытия интерфейса EditSopr повешать код из cmValue59.. Как вариант

Код: Выделить всё

Alter interface SoprDoc;    
window EditSopr
HandleEvent   
cmHotKeys:{  // Вызов контекстного меню
  Case CurTable of
    #KatSopr:
      {
        var sDynMenu : string;
        var pExtParam: word; pExtParam := 0; //битовый параметр для доп. пунктов меню
        sDynMenu:='L_SoprDoc::mnuSdRash;Separator;L_SoprDoc::mnuCU;Separator;L_SoprDoc::mnuSDPN;SEPARATOR;L_SoprDoc::mnuSDTXO;Separator;';
        sDynMenu:=sDynMenu+';Separator;L_Soprdoc::MenuMySell;';
        PutHotCommand(RunDynMenu(sDynMenu));
      }
     else inherited::handleEvent(cmHotKeys);
    end;
} 
cmValue59:  //Округлить налоги
{
    if isvalid(#katsopr) {}
    var dSpNalog/*Накопленная ошибка округления в спецификации*/, dNalog/*Ошибка округления в заголовке*/, kNalog: double;
    dSpNalog:= 0;
    kNalog:= 0.1525423728813559;  //Для 18%
    if (getfirst spsopr where((katsopr.nrec == spsopr.csopr))) = tsOk
      and (getfirst spdocnal where((katsopr.vidsopr == spdocnal.tipdoc and spsopr.nrec == spdocnal.cspdoc))) = tsOk
      {
        _loop spsopr where((katsopr.nrec == spsopr.csopr))  //Предполагается, что в настройках "галактики" установлено округление в документах сбыта до 0.01
           {
              dSpNalog:= dSpNalog + spsopr.kolfact * spsopr.price * kNalog - spsopr.sumnds;
              if getfirst spdocnal where((word(201) == spdocnal.tipdoc and spsopr.nrec == spdocnal.cspdoc)) = tsOk {}
           }
      }
    dNalog:= katsopr.summa * kNalog - katsopr.snalogs;
    if message('Накопленная погрешность округления = ' + doubletostr(dSpNalog, '377.88888888') + '; погрешность в заголовке = ' + doubletostr(dNalog, '377.88888888') + chr(13) +
             'Установить новое значение налога в заголовке = ' + doubletostr(SumNds, '666666.88888888') + '?', YesNo) = cmYes {
      katsopr.snalogs := round(katsopr.summa * kNalog, 2);
      katsopr.svnalogs := round(katsopr.summa * kNalog, 2);
      if update current katsopr = tsOk then {}
      RereadRecord(CurTable);
    }
} 
end;
end;
end.

MenuMySell menu
{
  -'Уточнить налоги в заголовке', cmValue59,,,,;
  -'Печать формы Торг12', cmValue60,,,,;
  -'Экспорт в xml', cmValue58,,,,;
}