Задача 102.125651

Задача :102.125651

2013-12-24 15:52:15
Краткое описание :
Реализация механизма прямого SQL в ТХО
Описание :
Предложения по новой функциональности модуля "Хозоперации"
Что измененно :

Реализация механизма прямого SQL в ТХО.
АЗ во вложении.
Как измененно :

SQLTXO - Формирование проводок по SQL запросу из шаблона ТХО.
Алгоритм "SQLTXO" позволяет формировать проводки на основании SQL запроса. SQL запрос задается в интерфейсе, который открывается после нажатия кнопки "SQL алгоритм" в шаблоне настройки ТХО.
На закладке "SQL запрос" задается тело запроса. Длина одной строки при написании запроса не должна превышать 255 символов.
Закладка "Информация" содержит описание возможностей алгоритма.
В нижней панели интерфейса расположены кнопки "Продолжить",
"Отмена" и "Проверить". При нажатии "Продолжить" в поле "Алгоритм в
НДЕ" автоматически подставляется "&Vip[Obj:"SQLTXO"]". Этот алгоритм будет признаком того, что в шаблоне используется прямой SQL. При нажатии кнопки "Проверить" запрос отправляется на выполнение. В случае, если запрос не верен, выдается код ошибки выполнения. С помощью сиволов "!"(задается с начала строки), "//", "/*...*/" можно создавать комментарии для пояснения при написании запроса.

В качестве параметров в запросе можно указывать
все переменные, которые передаются в TXO API:
:CurSoprDoc (тип comp)- ссылка на документ,
:CurSoprHoz (тип comp)- журнал хозопераций,
:CurTiDk (тип word)- тип документа,
:CurHozOper (тип comp)- ТХО,
:CurHozObor (тип comp)- ссылка на шаблон ТХО,
:CurPlansSch(тип comp)- регистр учета,
:CurKodReg (тип word)- код регистра учета,
:CurDatOb (тип date)- дата проводки,
:CurValut (тип comp)- валюта проводки,
:CurBeginFp (тип date)- начало периода документа,
:CurEndFp (тип date)- Конец периода документа,

а также произвольные:

:Par1-:Par6 (тип comp)- произвольные параметры (задаются в параметрах
идентификатора SQLTXO),
:Date1-:Date6(тип date)- произвольные параметры даты (задаются в параметрах идентификатора SQLTXO).

Алгоритм циклически обрабатывает следующие поля
возвращаемые запросом:

DatOb - дата проводки,
SchDt - счет дебета проводки,
SubDt - субсчет дебета проводки,
Dt1-Dt6 - 6 уровней аналитики по дебету проводки по номерам,
PDt - подразделение дебета проводки,

SchKt - счет кредита проводки,
SubKt - субсчет кредита проводки,
Kt1-Kt6 - 6 уровней аналитики по кредиту проводки,
PKt - подразделение кредита проводки,

Sum - сумма НДЕ проводки,
SumV - сумма в валюте,
cVal - валюта проводки,
Kol - Количество проводки

Аналитика заполняется в режиме указанном в шаблоне ТХО. Рекомендуется использовать пользовательские режимы формирования Режим 0 - Режим 9, т.к. при использовании режима "Авто - аналитика" возможны конфликты с внутренними механизмами заполнения аналитики.

В качестве примера можно рассмотреть TXOAPI идентификатор &Vip_[Obj:"TXOSOPUSL"], который формирует проводки по сопутствующим услугам накладной на прием МЦ пропорционально количеству или суммам МЦ в зависимости от признака услуги ("Процент к стоимости документа(%)", "Сумма к стоимости документа(С)" или "Для распределенная по количеству(К)").

Его можно заменить следующим запросом:

SELECT
KatSopr.VhodNal,
SpSoprUsl.prMC,
SpSoprUsl.cParty AS cPartyUsl,
SpSoprMC.cParty AS cPartyMC,
(SpSoprUsl.Price * SpSoprUsl.KolOpl) AS UslSum,
(SpSoprMC.Price * SpSoprMC.KolOpl) AS MCSum,
!Здесь идет заполнение аналитики
SpSoprUsl.cMcUsl AS Dt2, //Заполняется аналитика "Услуги" по дебету на втором уровне в указанном в настройке ТХО режиме
SpSoprMC.cMcUsl AS Dt1, //Заполняется аналитика "МЦ" по дебету на первом уровне
KatPartyUsl.cGroupParty AS Dt3,/*Заполняется аналитика "МЦ" по дебету на первом уровне */
KatPartyMC.cGroupParty AS Dt4,//Заполняется аналитика "Группы партий МЦ"
KatMC.cGroupMC AS Kt1, //Заполняется аналитика "Группы МЦ" по кредиту проводки на первом уровне
KatUsl.cGroupUsl AS Kt2,// Заполняется аналитика "Группы услуг" по кредиту проводки на втором уровне
KatSopr.cPodrTo AS Pdt,// Заполняется подразделение по дебету проводки
KatSopr.cMolTo AS Dt5, // Занести аналитику "МОЛ" на пятый уровень дебета проводки
!Расcчет суммы проводки
CASE
WHEN SpSoprUsl.prMC = 7 THEN
Case
WHEN KatSopr.VhodNal = 1 THEN
SpSoprMC.KolOpl * (SpSoprUsl.Price * SpSoprUsl.KolOpl)
ELSE
SpSoprMC.KolOpl * (SpSoprUsl.Price * SpSoprUsl.KolOpl + SpSoprUsl.SumNDS)
END
ELSE
CASE
WHEN KatSopr.VhodNal = 1 THEN
(SpSoprMC.Price * SpSoprMC.KolOpl) * (SpSoprUsl.Price * SpSoprUsl.KolOpl)
ELSE
(SpSoprMC.Price * SpSoprMC.KolOpl + SpSoprMC.SumNDS) * (SpSoprUsl.Price * SpSoprUsl.KolOpl + SpSoprUsl.SumNDS)
END
END
/
( SELECT
CASE
WHEN SpSoprUsl.prMC = 7 THEN
SUM(SpSoprMC.KolOpl)
WHEN (SpSoprUsl.prMC = 3 OR SpSoprUsl.prMC = 4) THEN
CASE
WHEN KatSopr.VhodNal = 1 THEN
SUM(SpSoprMC.Price * SpSoprMC.KolOpl)
ELSE
SUM(SpSoprMC.Price * SpSoprMC.KolOpl + SpSoprMC.SumNDS)
END
END
FROM
SpSopr SpSoprMC
WHERE
KatSopr.Nrec = :CurSoprDoc /*Этот параметр выдает Nrec текущего документа. Значение подставляется автоматически во время разноски. */ AND
SpSoprMC.prMC = 1 AND
SpSoprMc.cSopr = :CurSoprDoc
) AS Sum

FROM
KatSopr,
SpSopr SpSoprUsl,
SpSopr SpSoprMC,
KatMC,
KatUsl

LEFT JOIN KatParty KatPartyUsl ON KatPartyUsl.NRec = cPartyUsl
LEFT JOIN KatParty KatPartyMC ON KatPartyMC.NRec = cPartyMC

WHERE
KatSopr.Nrec = :CurSoprDoc AND
SpSoprUsl.cSopr = :CurSoprDoc AND
SpSoprMC.cSopr = :CurSoprDoc AND
(SpSoprUsl.prMC = 3 OR SpSoprUsl.prMC = 4 OR SpSoprUsl.prMC = 7) AND
SpSoprMC.prMC = 1 AND

KatUsl.NRec = SpSoprUsl.cMcUsl AND
KatMC.NRec = SpSoprMC.cMcUsl

Название продукта Название компонента Тип Последняя версия Дата выхода
F_TXOF_TXORES9.1.7.02013-12-24 15:52:15
F_TXOF_TXORES9.1.007.0