Установка НДС 20% — различия между версиями
Материал из wiki.standart-n.ru
Agk (обсуждение | вклад) (→Как проверить?) |
Agk (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
+ | ==Как это работает?== | ||
+ | * Клиент до 2019 г. должен прошить ККМ новой версией прошивки; | ||
+ | * 31.12.2018г. или ранее, кассиры должны закрыть смену в обязательном порядке; | ||
+ | * В ночь на 01.01.2019 ККМ автоматически переключит ставки 18% на 20%, при этом номера секций/отделов не изменятся, изменится только ставка для них; | ||
+ | * При открытии смены в 2019 году новые настройки вступят в силу; | ||
+ | * После обновления ПО Стандарт-Н, инструкцию см. ниже, будут запрещены: | ||
+ | ** любые манипуляции с НДС 20%, до НГ 2019; | ||
+ | ** любые манипуляции с НДС 18%, после НГ 2019, кроме корректировок; | ||
+ | * При попытке продать товар с НДС 18% после 01.01.2019 будет создан в фоновом режиме, автоматически, документ корректировки с НДС 18% на НДС 20%, при этом, по необходимости, ставки НДС будут добавлены автоматически, если это не запрещено в программе; | ||
+ | * Аналогично работают все документы расхода; | ||
+ | |||
==Добавить отделы через скрипт или вручную (таблица DEPS)== | ==Добавить отделы через скрипт или вручную (таблица DEPS)== | ||
<pre> | <pre> |
Версия 19:15, 21 декабря 2018
Содержание
Как это работает?
- Клиент до 2019 г. должен прошить ККМ новой версией прошивки;
- 31.12.2018г. или ранее, кассиры должны закрыть смену в обязательном порядке;
- В ночь на 01.01.2019 ККМ автоматически переключит ставки 18% на 20%, при этом номера секций/отделов не изменятся, изменится только ставка для них;
- При открытии смены в 2019 году новые настройки вступят в силу;
- После обновления ПО Стандарт-Н, инструкцию см. ниже, будут запрещены:
- любые манипуляции с НДС 20%, до НГ 2019;
- любые манипуляции с НДС 18%, после НГ 2019, кроме корректировок;
- При попытке продать товар с НДС 18% после 01.01.2019 будет создан в фоновом режиме, автоматически, документ корректировки с НДС 18% на НДС 20%, при этом, по необходимости, ставки НДС будут добавлены автоматически, если это не запрещено в программе;
- Аналогично работают все документы расхода;
Добавить отделы через скрипт или вручную (таблица DEPS)
INSERT INTO DEPS (ID, CAPTION, NDS, NDSR, STATUS) VALUES (9, 'НДС 20%', 20, 20, 0); INSERT INTO DEPS (ID, CAPTION, NDS, NDSR, STATUS) VALUES (10, 'опт 0% розн 20%', 0, 20, 0); INSERT INTO DEPS (ID, CAPTION, NDS, NDSR, STATUS) VALUES (11, 'опт 18% розн 20%', 18, 20, 0); INSERT INTO DEPS (ID, CAPTION, NDS, NDSR, STATUS) VALUES (12, 'опт 10% розн 20%', 10, 20, 0);
Выполнить скрипт
CREATE EXCEPTION EX_NODOC 'Не удалось создать документ корректировки'; CREATE EXCEPTION EX_NODEP 'Не найден отдел'; CREATE EXCEPTION EX_NOPART 'Не удалось добавить партию в корректировку'; CREATE EXCEPTION EX_NDS20 'Запрет установки НДС 20% до 2019'; CREATE EXCEPTION EX_NDS18 'Запрет установки NDS 18% после 2019'; SET TERM ^ ; create or alter procedure PR_HASNDS ( DOC_ID DM_ID, NDSR DM_STATUS) returns ( HASNDS DM_STATUS) as begin hasnds = 0; if ( exists(select first 1 dda.id from doc_detail_active dda left join parts p on dda.part_id = p.id left join deps dep on iif(p.id > 0, p.dep, dda.dep) = dep.id where dda.doc_id = :doc_id and dep.ndsr = :ndsr) ) then hasnds = 1; suspend; end^ SET TERM ; ^ /* Following GRANT statements are generated automatically */ GRANT SELECT ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_HASNDS; GRANT SELECT ON PARTS TO PROCEDURE PR_HASNDS; GRANT SELECT ON DEPS TO PROCEDURE PR_HASNDS; /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE PR_HASNDS TO SYSDBA; SET TERM ^ ; create or alter procedure PR_GET_DEP ( NDS DM_STATUS, NDSR DM_STATUS) returns ( ID DM_ID) as begin select first 1 id from deps where nds = :nds and ndsr = :ndsr into :id; if (id is null) then begin --exception EX_NODEP; id = (select max(id)+1 from deps); insert into deps (id, nds, ndsr) values (:id, :nds, :ndsr); end suspend; end^ SET TERM ; ^ /* Following GRANT statements are generated automatically */ GRANT SELECT,INSERT ON DEPS TO PROCEDURE PR_GET_DEP; /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE PR_GET_DEP TO PROCEDURE PR_AUTO_PART_CORRECT; GRANT EXECUTE ON PROCEDURE PR_GET_DEP TO SYSDBA; SET TERM ^ ; create or alter procedure PR_CORRECTPART_NDS ( DOC_ID type of DM_ID, PART_ID type of DM_ID, QUANT type of DM_DOUBLE, DONTCHECKQUANT DM_STATUS = null) returns ( ID type of DM_ID, MSG DM_TEXT) as declare variable NAC type of DM_DOUBLE; declare variable PARENT_ID type of DM_ID; begin if (QUANT < 0) then QUANT = 0; select ID, MSG from PR_RASHODPART(:DOC_ID, :PART_ID, :QUANT, null, null, :dontcheckquant, null, 1) into :PARENT_ID, :MSG; if (PARENT_ID <= 0) then begin ID = PARENT_ID; suspend; exit; --exception EX_RASHOD_ERROR; end select ID from DOC_DETAIL_ACTIVE where DOC_ID = :DOC_ID and PARENT_ID = :PARENT_ID and PART_ID = 0 into ID; if (ID is null) then begin ID = gen_id(GEN_DOC_DETAIL_ACTIVE_ID, 1); insert into DOC_DETAIL_ACTIVE (ID, PARENT_ID, DOC_ID, PART_ID, QUANT, NAC, KOEF, MOTHERPART_ID) values (:ID, :PARENT_ID, :DOC_ID, :PART_ID, :QUANT, :NAC, 0, :PART_ID); update DOC_DETAIL_ACTIVE set PART_ID = 0 where ID = :ID; insert into GROUP_DETAIL (GROUP_ID, PARENT_ID, GROUPTABLE_ID, GROUPTABLE) select GROUP_ID, 0, :ID, 'DOC_DETAIL_ACTIVE' from GROUP_DETAIL where GROUPTABLE_ID = :PART_ID and GROUPTABLE = 'PARTS'; end else begin update DOC_DETAIL_ACTIVE set QUANT = :QUANT, SUMMA = :QUANT * PRICE, SUMMA_O = :QUANT * PRICE_O, SUM_NDSO = round((:QUANT * PRICE_O) * NDS / (100 + NDS), 2), SUM_NDSR = (:QUANT * PRICE) * (select D.NDSR from DEPS D where D.ID = DEP) / (100 + (select D.NDSR from DEPS D where D.ID = DEP)) where ID = :ID; end suspend; end^ SET TERM ; ^ /* Following GRANT statements are generated automatically */ GRANT EXECUTE ON PROCEDURE PR_RASHODPART TO PROCEDURE PR_CORRECTPART_NDS; GRANT SELECT,INSERT,UPDATE ON DOC_DETAIL_ACTIVE TO PROCEDURE PR_CORRECTPART_NDS; GRANT SELECT,INSERT ON GROUP_DETAIL TO PROCEDURE PR_CORRECTPART_NDS; GRANT SELECT ON DEPS TO PROCEDURE PR_CORRECTPART_NDS; /* Existing privileges on this procedure */ GRANT EXECUTE ON PROCEDURE PR_CORRECTPART_NDS TO PROCEDURE PR_AUTO_PART_CORRECT; GRANT EXECUTE ON PROCEDURE PR_CORRECTPART_NDS TO SYSDBA;
Исправить PR_DOC_COMMIT
перед строкой
if (base_type = 4) then execute procedure pr_doc_virtual_commit(:doc_id);
добавить блок
if ( current_date >= '01.01.2019' and base_type = 2 and (select hasnds from PR_HASNDS(:doc_id, 18)) > 0 ) then execute procedure PR_AUTO_PART_CORRECT(:doc_id, :session_id); if ( base_type <> 3 ) then begin if (current_date < '01.01.2019' and (select hasnds from PR_HASNDS(:doc_id, 20)) > 0 ) then exception EX_NDS20; if (current_date >= '01.01.2019' and (select hasnds from PR_HASNDS(:doc_id, 18)) > 0 ) then exception EX_NDS18; end
ТМС по автоматической настройке отделов (ставим НЕ ВСЕМ, только опционально, ТМС -327)
uses Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Messages, SysUtils, ToolWin, ImgList, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, StdCtrls, unMain,DB, IBQuery, IBDatabase, unDM, DBTables, cfdxUtils, Menus, System, Buttons, ExtCtrls, StdCtrls, cfSelectEdit, Math, DateUtils, gb_table, Grids, ClipBrd, DBGrids, unFrameCustomDict, cfWindows, Mask, shellapi, inifiles; var mainForm: TForm1; qWork: TIBQuery; t_zkassa:string; t_bat, ver:string; File_manager: TextFile; File_bat: TextFile; procedure set_nds_deps; var iq: tibquery; i: integer; Deps: array; ini: tmeminifile; sl: tstringlist; begin sl := tstringlist.create; ini := tmeminifile.Create('tmp.ini'); iq := tibquery.create(nil); try iq.Transaction := CreateWT(CurrDB); iq.Transaction.StartTransaction; Deps := [2, 3, 4, 4, 2, 3, 2, 4, 3, 3, 3]; for i := 0 to 10 do begin iq.SQL.Text := 'select dep_data from deps where id = :id'; iq.Params[0].AsInteger := i + 1; iq.Open; sl.Text := iq.Fields[0].AsString; ini.SetStrings(sl); sl.Clear; ini.WriteInteger('FR' + FR_SerialNumber, 'TaxType', Deps[i]); ini.GetStrings(sl); iq.SQL.Text := 'update deps set dep_data = :data where id = :id'; iq.Params[0].AsString := sl.Text; iq.Params[1].AsInteger := i + 1; iq.ExecSQL; end; iq.Transaction.Commit; finally iq.free; ini.Free; sl.Free; end; end; begin set_nds_deps; end;
Как проверить?
- До 2019 г. любые манипуляции с НДС 20%, например, приход товара, должны быть запрещены;
- После начала 2019 г. любые манипуляции (кроме корректировки) с отделами 18%, должны быть запрещены;
- При "отбитии" чека с НДС 18% с 2019 г. должен создаваться документ корректировки и автоматически корректировать позиции с 18% на 20%.
Чек уже проводить с НДС 20%.