Страница 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,,,,;
}