18.06.2018 (М) ПОДГОТОВКА К ХРОНОЛОГИЧЕСКОЙ ЗАМЕНЕ % НДС — различия между версиями

Материал из Фабиус wiki
Перейти к: навигация, поиск
(Новая страница: «<font size=4> В OnAfterUpdateCondig() уже предусмотрено автозаполнение хронологии NDS_STND/PRVLG при очередно…»)
 
м
Строка 5: Строка 5:
  
  
'''Если вызов из R165, R186, R220, … - где определена CurDate:'''
+
<u>'''Если вызов из R165, R186, R220, … - где определена CurDate:'''</u><br/>
SeekRef(спрк, код, ‘PRODNDS’,…)    -->    ProdNDS(код [,’R11’])   или  ProdNDS(код, спрк)  (спрк = R08, R11, R197)
+
SeekRef(спрк, код, 'PRODNDS',…)    -->    ProdNDS(код [,спрк]), где спрк = R08, R11, R197; умолч.=R11
ProdNDS(код) без изменений
+
ProdNDS(код [, спрк])  без изменений
ProdNDS(код, спрк)  без изменений
+
ProdNDS(код, [спрк], умолч)       -->    ProdNDS(код, [спрк], GetPrm('NDS_...', , , dtdt:=CurDate))   
ProdNDS(код, [спрк], умолч)           -->    ProdNDS(код, [спрк], GetPrm(‘NDS_..., , , dtdt:=CurDate))   
+
:          dtdt, как обычно, необязательно определять
                        (dtdt необязательно определять)
+
 
Если вызов из запросов, п/ф, … - где НЕ определена CurDate:
+
 
ProdNDS(код, [спрк], [умолч], некаяДата)
+
<u>'''Если вызов из запросов, п/ф, … - где НЕ определена CurDate:'''</u><br/>
a_s() = alltrim(str()) с автоматическим отсечением дробной части при её равенстве 0
+
ProdNDS(код, [спрк], , некаяДата)
Получение из ставки НДС цифирьки-субсчёта -1 или -2:
+
:  ProdNDS(код, [спрк], GetPrm('NDS_...', , , dtdt:=некаяДата), некаяДата) - если передаётся пар-р умолчания НДС
min(2, round(n_d_s/10,0))       ИЛИ      max(1, round(n_d_s/10,0))       ИЛИ
+
 
iif(n_d_s=GetPrm(‘NDS_Prvlg’, , , dtdt:=CurDateилиИнаяДата),'1','2')  
+
''a_s() = alltrim(str()) с автоматическим отсечением дробной части при её равенстве 0''
где  n_d_s  может быть как  ProdNDS(код),  
+
 
так и просто R11->PRODNDS: в R11 может стоять и 18, и 20 – всё равно получится -2
+
 
SQL-запросы:
+
<u>'''Получение из ставки НДС цифирьки-субсчёта -1 или -2:'''</u><br/>
Было                       “…,SUM(round(RTH_SUM*(100+R11[R08].PRODNDS)/100,2)) …”
+
:  вариант 1  min(2, round(n_d_s/10,0))
Меняем на:     
+
:  вариант 2  max(1, round(n_d_s/10,0))
Новые переменные      Local  ndsS:=GetPrm('NDS_STND',,,dtdt:=…), ndsP:=GetPrm('NDS_PRVLG',,,dtdt:=…)   
+
:  вариант 3  iif(n_d_s=GetPrm('NDS_Prvlg', , , dtdt:=CurDateилиИнаяДата),'1','2')  
“…, SUM(round(RTH_SUM*(100+iif(R11[R08].PRODNDS=+a_s(ndsP)+,+a_s(ndsS)+,+a_s(ndsS)+))/100,2)) …”
+
где  n_d_s  может быть как  ProdNDS(код),<br/>
Расчёт на то, что 10 %  - неизменная ставка.
+
так и просто R11->PRODNDS: в R11 может стоять и 18, и 20 – всё равно получится -2.
НЕ забываем:  если в запросе просто обращение “…R11.PRODNDS”, после замены пишем эйлиас:
+
 
“…iif(R11.PRODNDS=+a_s(ndsP)+,+a_s(ndsS)+,+a_s(ndsS)+) as PRODNDS”
+
 
Сводные запросы (R239):
+
<u>'''SQL-запросы:'''</u><br/>
«Реквизит»  R11[R08].PRODNDS
+
Было   "…, SUM(round(RTH_SUM*(100+R11[R08].PRODNDS)/100,2)) …"
1) На уровне вызова запроса (R174 или в R266) определить как Global  ndsS, ndsP.  
+
Меняем на:     
Если там же запрос периода, сразу присвоить значения этим ndsS/P.  
+
Новые переменные       
Иначе в «Условии отбора» R238, где уже известен период ArrMY, присвоить   
+
::  Local  ndsS:=GetPrm('NDS_STND',,,dtdt:=…), ndsP:=GetPrm('NDS_PRVLG',,,dtdt:=…)   
ndsS/P:=GetPrm('NDS_...', , , dtdt:= SToD(atr(ArrMY[1,1])))
+
::  "…, SUM(round(RTH_SUM*(100+iif(R11[R08].PRODNDS="+a_s(ndsP)+","+a_s(ndsS)+","+a_s(ndsS)+"))/100,2)) …"
  «Выражение преобразования» {|| “iif(R11.PRODNDS=”+a_s(ndsP)+”,”+a_s(ndsP)+”,”+a_s(ndsS)+”)” }
+
Расчёт на то, что 10 %  - неизменная ставка.
ИЛИ  
+
НЕ забываем:  если в запросе просто обращение “…R11.PRODNDS”, после замены пишем эйлиас:
2«Выражение преобразования» R11[R08].KOD
+
:  "…iif(R11.PRODNDS="+a_s(ndsP)+","+a_s(ndsS)+","+a_s(ndsS)+") '''as PRODNDS'''"
«Выражение отображения»  ProdNDS(val(Value), [‘R08’], , MYToDate(wCurMonth,wCurYear))
+
 
 +
 
 +
<u>'''Колонки Сводных запросов (R239):'''</u><br/>
 +
«Реквизит»  R11[R08].PRODNDS
 +
:  вариант 1  
 +
::  На уровне вызова запроса (R174 или в R266) определить как Global  ndsS, ndsP.  
 +
::  Если там же запрос периода, сразу присвоить значения этим ndsS/P.  
 +
::  Иначе в «Условии отбора» R238, где уже известен период ArrMY, присвоить   
 +
::  ndsS/P:=GetPrm('NDS_...', , , dtdt:= SToD(atr(ArrMY[1,1])))
 +
:: «Выражение преобразования» {|| “iif(R11.PRODNDS=”+a_s(ndsP)+”,”+a_s(ndsP)+”,”+a_s(ndsS)+”)” }
 +
: вариант 2
 +
::  «Выражение преобразования» R11[R08].KOD
 +
::  «Выражение отображения»  ProdNDS(val(Value), [‘R08’], , MYToDate(wCurMonth,wCurYear))

Версия 09:16, 20 июня 2018

В OnAfterUpdateCondig() уже предусмотрено автозаполнение хронологии NDS_STND/PRVLG при очередном обновлении.
При правильно заполненной хронологии параметров в R11 (R08,R197) может стоять и 18%, и 20%.
Доработанная ф-я ProdNDS() вернёт 20%, если 2019 год и 18%, если 2018.


Если вызов из R165, R186, R220, … - где определена CurDate:

SeekRef(спрк, код, 'PRODNDS',…) --> ProdNDS(код [,спрк]), где спрк = R08, R11, R197; умолч.=R11
ProdNDS(код [, спрк]) без изменений
ProdNDS(код, [спрк], умолч) --> ProdNDS(код, [спрк], GetPrm('NDS_...', , , dtdt:=CurDate))
dtdt, как обычно, необязательно определять


Если вызов из запросов, п/ф, … - где НЕ определена CurDate:

ProdNDS(код, [спрк], , некаяДата)
ProdNDS(код, [спрк], GetPrm('NDS_...', , , dtdt:=некаяДата), некаяДата) - если передаётся пар-р умолчания НДС

a_s() = alltrim(str()) с автоматическим отсечением дробной части при её равенстве 0


Получение из ставки НДС цифирьки-субсчёта -1 или -2:

вариант 1 min(2, round(n_d_s/10,0))
вариант 2 max(1, round(n_d_s/10,0))
вариант 3 iif(n_d_s=GetPrm('NDS_Prvlg', , , dtdt:=CurDateилиИнаяДата),'1','2')

где n_d_s может быть как ProdNDS(код),
так и просто R11->PRODNDS: в R11 может стоять и 18, и 20 – всё равно получится -2.


SQL-запросы:

Было "…, SUM(round(RTH_SUM*(100+R11[R08].PRODNDS)/100,2)) …"
Меняем на:
Новые переменные
Local ndsS:=GetPrm('NDS_STND',,,dtdt:=…), ndsP:=GetPrm('NDS_PRVLG',,,dtdt:=…)
"…, SUM(round(RTH_SUM*(100+iif(R11[R08].PRODNDS="+a_s(ndsP)+","+a_s(ndsS)+","+a_s(ndsS)+"))/100,2)) …"
Расчёт на то, что 10 % - неизменная ставка.
НЕ забываем: если в запросе просто обращение “…R11.PRODNDS”, после замены пишем эйлиас:
"…iif(R11.PRODNDS="+a_s(ndsP)+","+a_s(ndsS)+","+a_s(ndsS)+") as PRODNDS"


Колонки Сводных запросов (R239):

«Реквизит» R11[R08].PRODNDS
вариант 1
На уровне вызова запроса (R174 или в R266) определить как Global ndsS, ndsP.
Если там же запрос периода, сразу присвоить значения этим ndsS/P.
Иначе в «Условии отбора» R238, где уже известен период ArrMY, присвоить
ndsS/P:=GetPrm('NDS_...', , , dtdt:= SToD(atr(ArrMY[1,1])))
«Выражение преобразования» {|| “iif(R11.PRODNDS=”+a_s(ndsP)+”,”+a_s(ndsP)+”,”+a_s(ndsS)+”)” }
вариант 2
«Выражение преобразования» R11[R08].KOD
«Выражение отображения» ProdNDS(val(Value), [‘R08’], , MYToDate(wCurMonth,wCurYear))