ну, чета захотелось. похмелье штука сложная %-/Вовсе не обязательно тут выкладывать тела пакетов ))
Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на свой домашний экран.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
ну, чета захотелось. похмелье штука сложная %-/Вовсе не обязательно тут выкладывать тела пакетов ))
вчера еще закончилось. но коматозит неподеццкиБухаешь?
курить снова начал. причем много. я завязывал с этим делом на несколько лет.вчера еще закончилось. но коматозит неподеццки
Какие мы ранимые) я прикалолась, что поиск любви, а сортировка по цене. Ищешь проститутку?вот сложнее. хотя тоже простенький :
CREATE OR REPLACE PACKAGE fact.pkg_ws_account_execute_ehi
AS
-- пакет содержит процедуры для работы с веб-сервисом WSAccountExecuteEHI16
/*
-= пример сформированного запроса: =-
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsac="http://WSAccountExecuteEHI16.EQ.CS.ws.alfabank.ru">
<soapenv:Header/>
<soapenv:Body>
<wsac:WSAccountExecuteEHIExecuteFactor>
<inCommonParms>
<userID>WSFR</userID>
<branchNumber>0000</branchNumber>
<externalSystemCode>AFACTOR</externalSystemCode>
<externalUserCode>AF</externalUserCode>
</inCommonParms>
<inParms>
<set>FCT1</set> --- Action set константа FCT1. WSTypeChar4
<erf></erf> --- Референс EHI (не заполняется в реквесте, взовращается в респонсе, подставляется в метод Delete для удаления проводки). WSTypeChar16
<type>M</type> --- Тип операции M - моновалютная, C - конверсионная, R - быстрая корр. WSTypeChar1
<brn>MOCO</brn> --- Отделение ввода операции. WSTypeChar4
<pbr>YR1C</pbr> --- Пользователь операции. WSTypeChar5
<vfr>2018-07-11</vfr> --- Дата учёта операции. WSTypeDate
<eand>47803810400000000743</eand> --- Номер счёта Дт операции. WSTypeChar20
<eanc>47401810400000000352</eanc> --- Номер счёта Кт операции. WSTypeChar20
<amd>100</amd> --- Сумма в валюте счёта Дт операции. WSTypeDecimal150
<amc>100</amc> --- Сумма в валюте счёта Кт операции. WSTypeDecimal150
<amnds>0</amnds> --- Сумма НДС операции. /всегода ноль/ WSTypeDecimal150
<nr>описание проводки</nr> --- Содержание операции. WSTypeChar140
<prft>6Ж8</prft> --- tran.profitcentre WSTypeChar3
<dlid>1354081047</dlid> --- номер сделки WSTypeChar32
<tarc>8A7</tarc> --- Допинфо Тарифный сборник операции. WSTypeChar3
</inParms>
</wsac:WSAccountExecuteEHIExecuteFactor>
</soapenv:Body>
</soapenv:Envelope>
-= ответ: =-
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns3:WSAccountExecuteEHIExecuteFactorResponse xmlns:ns3="http://WSAccountExecuteEHI16.EQ.CS.ws.alfabank.ru" xmlns:ns2="http://WSCommonTypes10.CS.ws.alfabank.ru">
<response>
<outCommonParms>
<outCommonParmsExt>
<name>logUID</name>
<value>eqWS11-181022-151724-08374</value>
</outCommonParmsExt>
</outCommonParms>
<outParms>
<erf>FCT1_MAXOVYA0001</erf> --- Референс EHI (не заполняется в реквесте, взовращается в респонсе, подставляется в метод Delete для удаления проводки). WSTypeChar16
</outParms>
</response>
</ns3:WSAccountExecuteEHIExecuteFactorResponse>
</soapenv:Body>
</soapenv:Envelope>
*/
-- function get_response_code (in_rec_tran in cur_tran%rowtype, in_raise integer := const.raise) return varchar2;
PROCEDURE send_entries(in_to_date date);
END pkg_ws_account_execute_ehi;
/
/******************************************************************************/
/********************** PACKAGE BODY *************************************/
/******************************************************************************/
CREATE OR REPLACE PACKAGE BODY fact.pkg_ws_account_execute_ehi
AS
-- cursor cur_tran is select * from tran where classified = 1355740258;
CURSOR cur_tran(in_to_date date)
IS
SELECT /*+ USE_NL(tmpcls,tran,doc) */
tran.classified,
tran.nazn,
tran.docdate,
tran.accdeb,
tran.acccred,
tran.ssum,
tran.profitcentre,
coalesce (to_char (doc.classified), a_fact_getgdnumbyabs (tran.classified), '') dlid, -- номер сделки
decode (reftran.isprofit, 1,
get_com_service_code (a_fact_getisenergy (doc.agmtid), doc.productid, doc.scaner, psb_fact_isfinance (doc.classified)), '') tarc -- тариф
FROM tran
JOIN reftran ON (tran.typetrans = reftran.classified)
LEFT JOIN doc ON (tran.docid = doc.classified)
WHERE tran.typetrans NOT IN (get_reftran ('#FIN'), get_reftran ('#REST'))
AND NOT (getacccode (tran.accdeb) LIKE '40701%' AND getacccode (tran.acccred) LIKE '47423%' AND tran.typetrans = get_reftran('#UDZ#EXPIRATION'))
-- AND tran.classified = 1355740258
AND tran.docdate >= in_to_date -- to_date ('29.10.2018', 'dd.mm.yyyy')
AND tran.erf is null -- если поле tran.erf заполнено - значит проводка уже в EQ
FOR UPDATE OF tran.state, tran.packnum NOWAIT;
-- -----------------------------------------------------------------------------
-- возвращает блок входных параметров XML-запроса веб-серверу
-- располагающийся между тегами <inParms> </inParms>
-- для последующей вставки в полный SOAP-запрос
-- -----------------------------------------------------------------------------
FUNCTION generate_inparams (in_rec_tran IN cur_tran%ROWTYPE)
RETURN XMLTYPE
IS
l_req XMLTYPE;
BEGIN
SELECT xmlelement ("inParms",
xmlforest ('FCT1' AS "set", --- Action set константа FCT1. WSTypeChar4
'' AS "erf", --- Референс EHI (не заполняется в реквесте, взовращается в респонсе). WSTypeChar16
'M' AS "type", --- Тип операции M - моновалютная, C - конверсионная, R - быстрая корр. WSTypeChar1
'MOCO' AS "brn", --- Отделение ввода операции. WSTypeChar4
'YR1C' AS "pbr", --- Пользователь операции. WSTypeChar5
--to_char (in_rec_tran.docdate, 'yyyy-mm-dd') AS "vfr", --- Дата учёта операции. WSTypeDate
'2018-11-19' AS "vfr",
getacccode (in_rec_tran.accdeb) AS "eand", --- Номер счёта Дт операции. WSTypeChar20
getacccode (in_rec_tran.acccred) AS "eanc", --- Номер счёта Кт операции. WSTypeChar20
to_char (in_rec_tran.ssum * 100) AS "amd", --- Сумма в валюте счёта Дт операции. WSTypeDecimal150
to_char (in_rec_tran.ssum * 100) AS "amc", --- Сумма в валюте счёта Кт операции. WSTypeDecimal150
'0' AS "amnds", --- Сумма НДС операции. WSTypeDecimal150
substr (in_rec_tran.nazn, 1, 140) AS "nr", --- Содержание операции. WSTypeChar140
in_rec_tran.profitcentre AS "prft", --- Профит-центр WSTypeChar3
in_rec_tran.dlid AS "dlid", --- номер сделки WSTypeChar32
in_rec_tran.tarc AS "tarc" --- Доп.инфо 'Тарифный сборник' операции
))
INTO l_req
FROM dual;
pkg_debug.put_line ('из ф-ции generate_inparams:' || l_req.getstringval);
RETURN l_req;
exception
when others then pkg_debug.put_line ('ошибка в ф-ции generate_inparams... ' || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
return (null);
END generate_inparams;
-- --------------------------------------------------------------------------
-- парсит XML-ответ от веб-сервиса
-- если проводка прошла вернется код в тегах <erf>
-- если неудачно - сообщение о причине ошибки в тэгах <faultstring>
-- --------------------------------------------------------------------------
FUNCTION parse_response (in_xml IN SYS.XMLTYPE)
RETURN VARCHAR2
IS
ws_response_error EXCEPTION; -- генерится при отсутствии в респонсе веб-сервиса тэга <erf>
PRAGMA EXCEPTION_INIT (ws_response_error, 100); -- SQLCODE: 100 -SQLERRM- ORA-01403: данные не найдены
l_response_code VARCHAR2 (200); -- tran.erf%type
l_errror_string VARCHAR2 (500)
:= 'ошибка в ф-ции парсинга ответа от веб-сервиса '
|| chr (10)
|| 'pkg_ws_account_execute_ehi.parse_response.'
|| chr (10);
BEGIN
-- pkg_debug.put_line('из ф-ции parse_response: in_xml.getstringval =' || in_xml.getstringval);
SELECT erf INTO l_response_code
FROM xmltable ('//outParms' PASSING (in_xml) COLUMNS erf VARCHAR2 (16) PATH 'erf');
--pkg_debug.put_line('из ф-ции parse_response: l_response_code = ' || l_response_code);
RETURN l_response_code;
EXCEPTION
WHEN ws_response_error THEN
-- в случае ошибки веб-сервис возвращает ответ, содержащий тэг <faultstring> с сообщением о причине ошибки
SELECT faultstring INTO l_response_code
FROM xmltable ('//*:Fault' PASSING (in_xml) COLUMNS faultstring VARCHAR2 (200) PATH 'faultstring');
pkg_debug.put_line ('function parse_response exception: ' || l_response_code);
pkg_debug.put_line (l_errror_string || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
RETURN l_response_code;
WHEN OTHERS THEN
l_errror_string := l_errror_string || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm;
pkg_debug.put_line (l_errror_string);
-- raise_application_error (-20001, l_errror_string);
END parse_response;
--------------------------------------------------------------------------------
-- Возвращает тэг <erf>FCT1_MAXOVYA0001</erf> содержащий код,
-- который можно использовать в запросе для удаления проводки,
-- загрузка которой сгенерировала этот код.
-- В случае ошибки, возвращает код (текст) ошибки
--------------------------------------------------------------------------------
FUNCTION get_response_code (in_rec_tran IN cur_tran%ROWTYPE, in_raise INTEGER := const.raise)
RETURN VARCHAR2
IS
l_params XMLTYPE;
l_response CLOB;
l_response_code VARCHAR2 (200);
BEGIN
l_params := generate_inparams (in_rec_tran);
-- отправляем запрос к веб-сервису и получаем xml-ответ, помещаемый в CLOB
l_response := pkg_ws.send (get_ws_ref ('#WSACCOUNTEXECUTEEHI_EXECUTEFACTOR'), l_params);
-- извлекаем из xml-ответа нужное поле
l_response_code := parse_response (xmltype (l_response));
RETURN l_response_code;
EXCEPTION
WHEN OTHERS
THEN
pkg_debug.put_line ('ошибка в функции get_response_code' || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
-- raise_application_error ( -20002, 'ошибка в функции get_response_code' || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
-- if (in_raise = const.raise)
-- then
-- raise;
-- else
return (null);
-- end if;
END get_response_code;
PROCEDURE send_entries(in_to_date DATE)
IS
rec_tran cur_tran%ROWTYPE;
l_response_code VARCHAR2 (200);
t1 PLS_INTEGER;
t2 PLS_INTEGER;
i PLS_INTEGER := 0;
BEGIN
IF cur_tran%ISOPEN THEN CLOSE cur_tran; END IF;
OPEN cur_tran(in_to_date);
LOOP
FETCH cur_tran INTO rec_tran;
t1 := dbms_utility.get_time ();
l_response_code := get_response_code (rec_tran, const.raise);
pkg_debug.put_line ('rec_tran.classified = ' || rec_tran.classified);
UPDATE tran
SET erf = l_response_code
WHERE classified = rec_tran.classified;
i := i + 1;
t2 := dbms_utility.get_time ();
pkg_debug.put_line ('номер операции: ' || i || '; затраченное время: ' || to_char( (t2 - t1)/100) );
EXIT WHEN cur_tran%NOTFOUND;
END LOOP;
CLOSE cur_tran;
pkg_debug.put_line ('l_response_code = ' || l_response_code);
EXCEPTION
WHEN OTHERS
THEN
CLOSE cur_tran;
pkg_debug.put_line ('ошибка в процедуре send_entries' || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
--raise_application_error (-20003, 'ошибка в процедуре send_entries' || ' SQLCODE: ' || sqlcode || ' -SQLERRM- ' || sqlerrm);
END;
END pkg_ws_account_execute_ehi;
/
Чет хер на ландыш не похож.вчера еще закончилось. но коматозит неподеццки
Классика. Штанга-водка-штанга, знакомо.Вчера со штангой надрывался, а сегодня литр водки в одно рыло.
типа ирония была. все мы товары на брачно-сексуальном рынкеКакие мы ранимые) я прикалолась, что поиск любви, а сортировка по цене. Ищешь проститутку?
Не... так мрачновато))) романтизьма неттипа ирония была. все мы товары на брачно-сексуальном рынке
Романтизм есть. Но он глубоко скрытНе... так мрачновато))) романтизьма нет
Какой план на сегодня/завтра?)Романтизм есть. Но он глубоко скрыт
Коматозить насухую. Послезавтра на работуКакой план на сегодня/завтра?)
Может сорбент какой? Энтеросгель, например. Чего ж так мучаться. Стихи грустные оченьКоматозить насухую. Послезавтра на работу
Регидрон пью и кефир. И тупые сериалы смотрюМожет сорбент какой? Энтеросгель, например. Чего ж так мучаться. Стихи грустные очень
Есть, довольно уютныеВ Москве есть трамваи?
А у нас уже нет. Последние рельсы демонтируютЕсть, довольно уютные
Я тоже не хочу. Но как-то так все время получается. Помню студенческие годы. В кармане 5 рублей. Берешь или две бутылки пива и пакет чипсов или бутылку пива и два пакета чипсов. И часто чипсы перевешивали :)Стандартный набор я последний раз жёстко болела;( не хочу больше
Чаще пользуюсь метро, но на трамвайчике покататься приятноА у нас уже нет. Последние рельсы демонтируют