Ошибка при обновлении с версии 9.1.4.4 на 10.0.0.13
Добавлено: Ср Фев 07, 2018 12:00
Здравствуйте!
Оплатили лицензию на 10.1, но прямого дистрибутива найти не смог, только патч. Поэтому решил обновить сначала на 10.0.0.13 (не знаю правда правильно ли это). Однако при обновлении возникла очередная проблема:
invalid request BLR at offset 875
function DM_TEXTTOCURRENCY is not defined
module name or entrypoint could not be found
Error while parsing procedure DM_GET_COPYPARAMPOSITION's BLR
C:\Users\HARITO~1\AppData\Local\Temp\SQL\10.0\_pte.sql
ALTER PROCEDURE DM_GET_COPYPARAMPOSITION (
IDUSER INTEGER,
IDPOS INTEGER,
IDPRICE INTEGER,
ROW INTEGER)
RETURNS (
TAB VARCHAR(42),
ALTTAB VARCHAR(250),
IDNAME INTEGER,
IDEDIZM INTEGER,
BB DOUBLE PRECISION,
BB_ORIGINAL DOUBLE PRECISION)
AS
declare variable POSITIONNAME varchar(510);
declare variable POSITIONCOST VARCHAR(255);
declare variable NAMEBLOB BLOB;
declare variable NAMEBLOB1 BLOB;
declare variable POSITIONEDIZM VARCHAR(100);
declare variable SUPPLIERNAME varchar(252);
declare variable IDEDIZMGROUP integer;
declare variable ID_BLOB_GEN integer;
declare variable NDSVALUE double precision;
declare variable BWITHNDS integer;
begin
-- IDNAME = 'Наименование позиции по прайсу';
execute procedure dm_getpriceposname(ABS(:IDPOS)) returning_values OSITIONNAME;
NAMEBLOB1 = copyvarchartoblob (substring (:POSITIONNAME from 1 for 500));
ID_BLOB_GEN = gen_id(B_GEN_TEMP, 1);
insert into B_TEMP_BLOB(ID, BLOB1) values (:ID_BLOB_GEN, :NAMEBLOB1);
select BLOB1 from B_TEMP_BLOB where ID = :ID_BLOB_GEN into :NAMEBLOB1;
delete from B_TEMP_BLOB where ID = :ID_BLOB_GEN;
execute procedure B_WRITE_NAIMENOVANIE(IDUSER, -1, null, NAMEBLOB1) returning_values :IDNAME, :NAMEBLOB;
--Обоснование
TAB = 'По прайсу'; -- CQ[12585] TAB = 'Позиция по прайсу № '||:ROW;
--Альтернативное обоснование
NDSVALUE = 0;
SUPPLIERNAME = '';
BWITHNDS = 0;
select PS.FNAME, PP.ndsvalue, PP.bwithnds from PM_PRICES PP
join PM_SUPPLIERS PS on PS.ID = PP.IDSUPPLIER
where PP.ID = :IDPRICE
into :SUPPLIERNAME, :NDSVALUE, :BWITHNDS;
-- CQ[12585] -->
-- if (STRLEN(:SUPPLIERNAME) > 200) then --Не паримся с вычислением общей длины а просто обрезаем до 200 символов
-- begin
-- SUPPLIERNAME = substring (:SUPPLIERNAME from 1 for 200)||'...';
-- end
-- CQ[12585] ALTTAB = 'Поставщик: '''||:SUPPLIERNAME||'''. Позиция по прайсу № '||:ROW;
-- ALTTAB = 'По прайсу ('||:SUPPLIERNAME||')'; -- CQ[12585]
ALTTAB = 'По прайсу'; -- csMonitoringAltTab
-- CQ[12585] <--
--Цена
for select LCKTRIMVARCHAR(substring (p.DATAIDENT from 1 for 255)) from pm_priceposareas p
join pm_areas a on a.id = p.idarea
where p.IDPOS = ABS(:IDPOS) and a.areatype = 3 into OSITIONCOST do -- BB = 'Значение цены позиции по прайсу';
begin
if (POSITIONCOST is not null) then
begin
BB = dm_texttocurrency (POSITIONCOST);
BB_ORIGINAL = BB; -- MK CQ[11629]
if (BWITHNDS = 1) then BB = BB/(1 + NDSVALUE / 100); --CQ[7773]
BB = LROUNDN(:BB, 2);
BB_ORIGINAL = LROUNDN(:BB_ORIGINAL, 2); -- MK CQ[11629]
end
end
--Единица измерения
IDEDIZM = null;
POSITIONEDIZM = null;
--Есть ли в прайсе единица измерения заданная ручками с галочкой на разметке прайса
select UserEdIzm from PM_PRICES PP where (PP.ID = :IDPRICE) and (PP.USEREDIZMUSED <> 0)
into OSITIONEDIZM;
if (POSITIONEDIZM is null) then
begin
select LCKTRIMVARCHAR(substring (P.DATAIDENT from 1 for 100)) from pm_priceposareas p
join pm_areas a on a.id = p.idarea
where p.IDPOS = ABS(:IDPOS) and a.areatype = 6 into OSITIONEDIZM;
end
--поиск в B_EDIZM
execute procedure B_FIND_EDIZM(:IDUSER, OSITIONEDIZM,'') returning_values :IDEDIZM ;
if (IDEDIZM is null) then -- не нашли - добавляем
begin
--ищем группу "Единицы измерения по прайсу" если не нашли - добавлем
execute procedure DM_ADD_EDIZMGROUP ('Единицы измерения по прайсу') returning_values :IDEDIZMGROUP;
execute procedure B_ADD_EDIZM (:IDUSER, :IDEDIZMGROUP,:POSITIONEDIZM, OSITIONEDIZM, 1) returning_values :IDEDIZM;
end
suspend;
end
---
Поиск по pte.sql дал ссылку на post117989.html, но эта тема закрыта для меня.
Windows 10 Pro, 64 bit.
Оплатили лицензию на 10.1, но прямого дистрибутива найти не смог, только патч. Поэтому решил обновить сначала на 10.0.0.13 (не знаю правда правильно ли это). Однако при обновлении возникла очередная проблема:
invalid request BLR at offset 875
function DM_TEXTTOCURRENCY is not defined
module name or entrypoint could not be found
Error while parsing procedure DM_GET_COPYPARAMPOSITION's BLR
C:\Users\HARITO~1\AppData\Local\Temp\SQL\10.0\_pte.sql
ALTER PROCEDURE DM_GET_COPYPARAMPOSITION (
IDUSER INTEGER,
IDPOS INTEGER,
IDPRICE INTEGER,
ROW INTEGER)
RETURNS (
TAB VARCHAR(42),
ALTTAB VARCHAR(250),
IDNAME INTEGER,
IDEDIZM INTEGER,
BB DOUBLE PRECISION,
BB_ORIGINAL DOUBLE PRECISION)
AS
declare variable POSITIONNAME varchar(510);
declare variable POSITIONCOST VARCHAR(255);
declare variable NAMEBLOB BLOB;
declare variable NAMEBLOB1 BLOB;
declare variable POSITIONEDIZM VARCHAR(100);
declare variable SUPPLIERNAME varchar(252);
declare variable IDEDIZMGROUP integer;
declare variable ID_BLOB_GEN integer;
declare variable NDSVALUE double precision;
declare variable BWITHNDS integer;
begin
-- IDNAME = 'Наименование позиции по прайсу';
execute procedure dm_getpriceposname(ABS(:IDPOS)) returning_values OSITIONNAME;
NAMEBLOB1 = copyvarchartoblob (substring (:POSITIONNAME from 1 for 500));
ID_BLOB_GEN = gen_id(B_GEN_TEMP, 1);
insert into B_TEMP_BLOB(ID, BLOB1) values (:ID_BLOB_GEN, :NAMEBLOB1);
select BLOB1 from B_TEMP_BLOB where ID = :ID_BLOB_GEN into :NAMEBLOB1;
delete from B_TEMP_BLOB where ID = :ID_BLOB_GEN;
execute procedure B_WRITE_NAIMENOVANIE(IDUSER, -1, null, NAMEBLOB1) returning_values :IDNAME, :NAMEBLOB;
--Обоснование
TAB = 'По прайсу'; -- CQ[12585] TAB = 'Позиция по прайсу № '||:ROW;
--Альтернативное обоснование
NDSVALUE = 0;
SUPPLIERNAME = '';
BWITHNDS = 0;
select PS.FNAME, PP.ndsvalue, PP.bwithnds from PM_PRICES PP
join PM_SUPPLIERS PS on PS.ID = PP.IDSUPPLIER
where PP.ID = :IDPRICE
into :SUPPLIERNAME, :NDSVALUE, :BWITHNDS;
-- CQ[12585] -->
-- if (STRLEN(:SUPPLIERNAME) > 200) then --Не паримся с вычислением общей длины а просто обрезаем до 200 символов
-- begin
-- SUPPLIERNAME = substring (:SUPPLIERNAME from 1 for 200)||'...';
-- end
-- CQ[12585] ALTTAB = 'Поставщик: '''||:SUPPLIERNAME||'''. Позиция по прайсу № '||:ROW;
-- ALTTAB = 'По прайсу ('||:SUPPLIERNAME||')'; -- CQ[12585]
ALTTAB = 'По прайсу'; -- csMonitoringAltTab
-- CQ[12585] <--
--Цена
for select LCKTRIMVARCHAR(substring (p.DATAIDENT from 1 for 255)) from pm_priceposareas p
join pm_areas a on a.id = p.idarea
where p.IDPOS = ABS(:IDPOS) and a.areatype = 3 into OSITIONCOST do -- BB = 'Значение цены позиции по прайсу';
begin
if (POSITIONCOST is not null) then
begin
BB = dm_texttocurrency (POSITIONCOST);
BB_ORIGINAL = BB; -- MK CQ[11629]
if (BWITHNDS = 1) then BB = BB/(1 + NDSVALUE / 100); --CQ[7773]
BB = LROUNDN(:BB, 2);
BB_ORIGINAL = LROUNDN(:BB_ORIGINAL, 2); -- MK CQ[11629]
end
end
--Единица измерения
IDEDIZM = null;
POSITIONEDIZM = null;
--Есть ли в прайсе единица измерения заданная ручками с галочкой на разметке прайса
select UserEdIzm from PM_PRICES PP where (PP.ID = :IDPRICE) and (PP.USEREDIZMUSED <> 0)
into OSITIONEDIZM;
if (POSITIONEDIZM is null) then
begin
select LCKTRIMVARCHAR(substring (P.DATAIDENT from 1 for 100)) from pm_priceposareas p
join pm_areas a on a.id = p.idarea
where p.IDPOS = ABS(:IDPOS) and a.areatype = 6 into OSITIONEDIZM;
end
--поиск в B_EDIZM
execute procedure B_FIND_EDIZM(:IDUSER, OSITIONEDIZM,'') returning_values :IDEDIZM ;
if (IDEDIZM is null) then -- не нашли - добавляем
begin
--ищем группу "Единицы измерения по прайсу" если не нашли - добавлем
execute procedure DM_ADD_EDIZMGROUP ('Единицы измерения по прайсу') returning_values :IDEDIZMGROUP;
execute procedure B_ADD_EDIZM (:IDUSER, :IDEDIZMGROUP,:POSITIONEDIZM, OSITIONEDIZM, 1) returning_values :IDEDIZM;
end
suspend;
end
---
Поиск по pte.sql дал ссылку на post117989.html, но эта тема закрыта для меня.
Windows 10 Pro, 64 bit.