I have a table in Postgres that looks like this:
CREATE TABLE "Population"
(
"Id" bigint NOT NULL DEFAULT nextval('"population_Id_seq"'::regclass),
"Name" character varying(255) NOT NULL,
"Description" character varying(1024),
"IsVisible" boolean NOT NULL
CONSTRAINT "pk_Population" PRIMARY KEY ("Id")
)
WITH (
OIDS=FALSE
);
And a select function that looks like this:
CREATE OR REPLACE FUNCTION "Population_SelectAll"()
RETURNS SETOF "Population" AS
$BODY$select
"Id",
"Name",
"Description",
"IsVisible"
from "Population";
$BODY$
LANGUAGE 'sql' STABLE
COST 100
Calling the select function returns all the rows in the table as expected.
I have a need to add a couple of columns to the table (both of which are foreign keys to other tables in the database). This gives me a new table def as follows:
CREATE TABLE "Population"
(
"Id" bigint NOT NULL DEFAULT nextval('"population_Id_seq"'::regclass),
"Name" character varying(255) NOT NULL,
"Description" character varying(1024),
"IsVisible" boolean NOT NULL,
"DefaultSpeciesId" bigint NOT NULL,
"DefaultEcotypeId" bigint NOT NULL,
CONSTRAINT "pk_Population" PRIMARY KEY ("Id"),
CONSTRAINT "fk_Population_DefaultEcotypeId" FOREIGN KEY ("DefaultEcotypeId")
REFERENCES "Ecotype" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "fk_Population_DefaultSpeciesId" FOREIGN KEY ("DefaultSpeciesId")
REFERENCES "Species" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
and function:
CREATE OR REPLACE FUNCTION "Population_SelectAll"()
RETURNS SETOF "Population" AS
$BODY$select
"Id",
"Name",
"Description",
"IsVisible",
"DefaultSpeciesId",
"DefaultEcotypeId"
from "Population";
$BODY$
LANGUAGE 'sql' STABLE
COST 100
ROWS 1000;
Calling the function after these changes results in the following error message:
ERROR: could not find attribute 11 in subquery targetlist
SQL state: XX000
What is causing this error and how do I fix it? I have tried to drop and recreate the columns and function — but the same error occurs.
Platform is PostgreSQL 8.4 running on Windows Server. Thanks.
26.11.10 — 15:49
Добрый вечер всем!
1С УПП 8.2 (8.2.12.87) ред. 1.3 (1.3.6.1).
Крутится на PostgreSQL
Когда делаю реализациюТоваровИУслуг и в колонке СпособСписания указываю ИЗ РЕЗЕРВА, вылетает ошибка:
http://narod.ru/disk/375673001/снимок1.png.html
и 1С-ка вылетает. Подскажите как исправить ошибку и в чем дело.
1 — 26.11.10 — 15:51
уточнение: указываю ИЗ РЕЗЕРВА, нажимаю ОК (записать и провести) и тогда вылетает ошибка.
2 — 26.11.10 — 15:51
а если например скажут, что для того чтобы исправить ошибку, нужно сменить сервер БД… сделаешь?
3 — 26.11.10 — 15:53
Текст ошибки кто не может просмотреть скрин:
Ошибка СУБД ERROR: each UNION query must have the same number of columns at character 4478
4 — 26.11.10 — 15:54
(2) Что значит сменить? 🙂 В переставить 🙂
Подскажи если знаешьсчитаешь из-за чего может быть ошибка,, и как исправить.
5 — 26.11.10 — 15:58
(2) 🙂 вопрос не в том смогу или не смогу. вопрос я написал.
6 — 26.11.10 — 15:58
up
7 — 26.11.10 — 15:59
2(4) Сменить — это значит воспользоваться любым другим из еще 3-х возможных…
Например МС СКЛ, ДБ2, Оракл…
ошибка из-за того что движек транслирует 1Совский запрос в СКЛ-запрос такой, который Постгрес считает некорректным. Выходов как обычно три — скорректировать запрос(сделав его нетиповым), попробовав и выбрав другой сервер, если совсем клевый дядька — то уже почесать сам постгрес, вдруг как-то можно сделать чтобы он считал этот запрос годным
8 — 26.11.10 — 16:00
2(5) вопрос ты не написал — в тексте нет ни одного вопросительного знака.. стало быть что именно считать вопросом читатели твоего поста могут сами.
Я интерпретирую вопрос так, что нужно проблему решить, то есть реализацию провести сейчас и в дальнейшем
9 — 26.11.10 — 16:01
(7) неплохо ответил. Буду пробовать.
У кого ещё если мысли пишите. Как исправлю напишу как.
10 — 26.11.10 — 16:02
(8) ? ок.
11 — 26.11.10 — 16:04
Если интересует как именно получить текст запроса который Постгрес посчитал негодным,могу подсказать что нужно настроить Технологический Журнал
12 — 26.11.10 — 16:08
🙂 СП.
13 — 26.11.10 — 16:10
14 — 26.11.10 — 16:19
(13) 🙂 ещё СП.
15 — 29.11.10 — 09:36
//в продолжении темы.
Лог полученного файла:
19:56.2210-0,EXCP,5,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Exception=DataBaseException,Descr=’Ошибка СУБД:
ERROR: each UNION query must have the same number of columns at character 4526
‘,Context=’
ОбщийМодуль.ПроцедурыКонтроляОстатков.Модуль : 4235 : ТоварыВРезервеНаСкладахКонтрольОстатков_Реализация(СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ);
ОбщийМодуль.ПроцедурыКонтроляОстатков.Модуль : 4599 : РезультатЗапроса = Запрос.Выполнить();’
19:56.2211-0,EXCPCNTX,0,ClientComputerName=ois2,ServerComputerName=serv_1c,UserName=Калошин А.Г.,ConnectString=’Srvr=»serv_1c»;Ref=»test»;’
19:56.2212-97,EXCPCNTX,4,SrcName=DBPOSTGRS,OSThread=-471500528,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Trans=1,dbpid=13446,Sql=»SELECT
T1.Q_001_F_001RRef,
T14._IDRRef,
T14._Description,
T15._IDRRef,
T15._Description,
T1.Q_001_F_004RRef,
T1.Q_001_F_004RRef,
T16._Description,
‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea,
‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea,
T17._Description,
T1.Q_001_F_007RRef,
T1.Q_001_F_002RRef,
SUM(CAST((CAST(CAST((T1.Q_001_F_009_ * T1.Q_001_F_006_) AS NUMERIC(38, 8)) / T15._Fld1656 AS NUMERIC(38, 8))) AS NUMERIC(15, 3))),
COALESCE(CAST(MAX(T8.Fld21406Balance_) AS NUMERIC(27, 3)),0)
FROM (SELECT
T2._Document481_IDRRef AS Q_001_F_000RRef,
T2._Fld13110RRef AS Q_001_F_001RRef,
T2._Fld13120RRef AS Q_001_F_002RRef,
T2._Fld13121RRef AS Q_001_F_003RRef,
T2._Fld13134RRef AS Q_001_F_004RRef,
T2._Fld13119RRef AS Q_001_F_005RRef,
T2._Fld13109 AS Q_001_F_006_,
T2._Fld13136RRef AS Q_001_F_007RRef,
T2._Fld13103RRef AS Q_001_F_008RRef,
CAST(T2._Fld13107 AS NUMERIC(30, 6)) AS Q_001_F_009_
FROM _Document481_VT13101 T2
LEFT OUTER JOIN _Reference126 T3
ON T2._Fld13110RRef = T3._IDRRef
WHERE (T2._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea) AND (T3._Fld2122 = FALSE) AND (T2._Fld13121RRef = ‘\272\203\025\316gs\007JC\334\3130BL\3315’::bytea)
UNION ALL SELECT
T4.Q_002_F_000RRef AS Q_002_F_000RRef,
T4.Q_002_F_001RRef AS Q_002_F_001RRef,
T4.Q_002_F_002RRef AS Q_002_F_002RRef,
T4.Q_002_F_003RRef AS Q_002_F_003RRef,
T4.Q_002_F_004RRef AS Q_002_F_004RRef,
T4.Q_002_F_005RRef AS Q_002_F_005RRef,
T4.Q_002_F_006_ AS Q_002_F_006_,
T4.Q_002_F_007RRef AS Q_002_F_007RRef,
T4.Q_002_F_008RRef AS Q_002_F_008RRef,
T4.Q_002_F_009_ AS Q_002_F_009_
FROM (SELECT
T5._Document481_IDRRef AS Q_002_F_000RRef,
T5._Fld13182RRef AS Q_002_F_001RRef,
CASE WHEN (T5._Fld13187RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea) THEN T6._Fld13120RRef ELSE T5._Fld13187RRef END AS Q_002_F_002RRef,
CASE WHEN (T5._Fld13189RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea) THEN T6._Fld13121RRef ELSE T5._Fld13189RRef END AS Q_002_F_003RRef,
T5._Fld13183RRef AS Q_002_F_004RRef,
T5._Fld13184RRef AS Q_002_F_005RRef,
T7._Fld1656 AS Q_002_F_006_,
T6._Fld13136RRef AS Q_002_F_007RRef,
T6._Fld13103RRef AS Q_002_F_008RRef,
(T5._Fld13185 * T6._Fld13107) AS Q_002_F_009_
FROM _Document481_VT13180 T5
LEFT OUTER JOIN _Document481_VT13101 T6
ON ((T6._Fld13138 = T5._Fld13190) AND (T6._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea))
LEFT OUTER JOIN _Reference78 T7
ON T5._Fld13186RRef = T7._IDRRef
WHERE (T5._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea)) T4
WHERE (T4.Q_002_F_003RRef = ‘\272\203\025\316gs\007JC\334\3130BL\3315’::bytea)) T1
LEFT OUTER JOIN (SELECT
T9._Fld21401RRef AS Fld21401RRef,
T9._Fld21402RRef AS Fld21402RRef,
T9._Fld21403RRef AS Fld21403RRef,
T9._Fld21404_TYPE AS Fld21404_TYPE,
T9._Fld21404_RTRef AS Fld21404_RTRef,
T9._Fld21404_RRRef AS Fld21404_RRRef,
T9._Fld21405RRef AS Fld21405RRef,
SUM(T9._Fld21406) AS Fld21406Balance_
FROM _AccumRgT21409 T9
WHERE T9._Period = ‘3999-11-01 00:00:00’::timestamp AND (((T9._Fld21403RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea) AND (T9._Fld21402RRef, T9._Fld21401RRef, CASE WHEN T9._Fld21404_TYPE IN (‘\001’::bytea, ‘\010’::bytea) THEN T9._Fld21404_TYPE END, CASE WHEN T9._Fld21404_TYPE = ‘\010’::bytea THEN T9._Fld21404_RTRef WHEN T9._Fld21404_TYPE IN (‘\001’::bytea) THEN ‘\000\000\000\000’::bytea END, CASE WHEN T9._Fld21404_TYPE = ‘\010’::bytea THEN T9._Fld21404_RRRef WHEN T9._Fld21404_TYPE IN (‘\001’::bytea, ‘\010’::bytea) THEN ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea END) IN
(SELECT
T10._Fld13110RRef AS Q_004_F_000RRef,
T10._Fld13120RRef AS Q_004_F_001RRef,
‘\010’::bytea AS Q_004_F_002_TYPE,
‘\000\000\001/’::bytea AS Q_004_F_002_RTRef,
T10._Fld13136RRef AS Q_004_F_002_RRRef
FROM _Document481_VT13101 T10
LEFT OUTER JOIN _Reference126 T11
ON T10._Fld13110RRef = T11._IDRRef
WHERE (T10._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea) AND (T11._Fld2122 = FALSE) AND (T10._Fld13121RRef = ‘\272\203\025\316gs\007JC\334\3130BL\3315’::bytea) AND (NOT (((T10._Fld13136RRef IN (‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea)))))
UNION ALL SELECT
T12._Fld13182RRef AS Fld13182RRef,
CASE WHEN (T12._Fld13187RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea) THEN T13._Fld13120RRef ELSE T12._Fld13187RRef END,
T13._Fld13136RRef AS Fld13136RRef
FROM _Document481_VT13180 T12
LEFT OUTER JOIN _Document481_VT13101 T13
ON ((T13._Fld13138 = T12._Fld13190) AND (T13._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea))
WHERE (T12._Document481_IDRRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea))))
GROUP BY T9._Fld21401RRef,
T9._Fld21402RRef,
T9._Fld21403RRef,
T9._Fld21404_TYPE,
T9._Fld21404_RTRef,
T9._Fld21404_RRRef,
T9._Fld21405RRef
HAVING (SUM(T9._Fld21406)) <> 0) T8
ON (((((T8.Fld21401RRef = T1.Q_001_F_002RRef) AND (T8.Fld21402RRef = T1.Q_001_F_001RRef)) AND (T8.Fld21404_TYPE = CASE WHEN T1.Q_001_F_007RRef IS NOT NULL THEN ‘\010’::bytea END AND T8.Fld21404_RTRef = CASE WHEN T1.Q_001_F_007RRef IS NOT NULL THEN ‘\000\000\001/’::bytea END AND T8.Fld21404_RRRef = T1.Q_001_F_007RRef)) AND (T8.Fld21403RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea)) AND (T8.Fld21405RRef = ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea))
LEFT OUTER JOIN _Reference126 T14
ON T1.Q_001_F_001RRef = T14._IDRRef
LEFT OUTER JOIN _Reference78 T15
ON T14._Fld2104RRef = T15._IDRRef
LEFT OUTER JOIN _Reference235 T16
ON T1.Q_001_F_004RRef = T16._IDRRef
LEFT OUTER JOIN _Reference179 T17
ON ‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea = T17._IDRRef
WHERE (T14._Fld2122 = FALSE) AND (T1.Q_001_F_000RRef = ‘:\237H[9H\302\215\021\337\373\200\256\356\260\302’::bytea) AND (T1.Q_001_F_003RRef = ‘\272\203\025\316gs\007JC\334\3130BL\3315’::bytea) AND (NOT (((T1.Q_001_F_007RRef IN (‘\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000’::bytea)))))
GROUP BY T1.Q_001_F_001RRef,
T1.Q_001_F_004RRef,
T1.Q_001_F_007RRef,
T1.Q_001_F_002RRef,
T14._IDRRef,
T14._Description,
T15._IDRRef,
T15._Description,
T1.Q_001_F_004RRef,
T16._Description,
T17._Description
HAVING (COALESCE(CAST(MAX(T8.Fld21406Balance_) AS NUMERIC(27, 3)),0) < SUM(CAST((CAST(CAST((T1.Q_001_F_009_ * T1.Q_001_F_006_) AS NUMERIC(38, 8)) / T15._Fld1656 AS NUMERIC(38, 8))) AS NUMERIC(15, 3))))»,Result=PGRES_FATAL_ERROR,dbpid=13446,Sql=ROLLBACK,Result=PGRES_COMMAND_OK
19:56.2213-99,EXCPCNTX,3,SrcName=SDBL,OSThread=-471500528,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Trans=1,Sdbl=’SELECT
Q_000_T_001.Q_001_F_001,
CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).ID, CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Description,
CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).ID, CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).Description,
Q_000_T_001.Q_001_F_004,
CAST(Q_000_T_001.Q_001_F_004 AS REF(Reference235)), CAST(CAST(Q_000_T_001.Q_001_F_004 AS REF(Reference235)) AS REF(Reference235)).Description,
179:00000000000000000000000000000000,
CAST(179:00000000000000000000000000000000 AS REF(Reference179)), CAST(CAST(179:00000000000000000000000000000000 AS REF(Reference179)) AS REF(Reference179)).Description,
Q_000_T_001.Q_001_F_007,
Q_000_T_001.Q_001_F_002,
SUM(CAST(((Q_000_T_001.Q_001_F_009 * Q_000_T_001.Q_001_F_006) / CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).Fld1656) AS NUMERIC(15, 3))),
ISNULL(MAX(Q_000_T_002.Fld21406Balance), 0)
FROM
(SELECT
Q_001_T_001.ID Q_001_F_000,
Q_001_T_001.Fld13110 Q_001_F_001,
Q_001_T_001.Fld13120 Q_001_F_002,
Q_001_T_001.Fld13121 Q_001_F_003,
Q_001_T_001.Fld13134 Q_001_F_004,
Q_001_T_001.Fld13119 Q_001_F_005,
Q_001_T_001.Fld13109 Q_001_F_006,
Q_001_T_001.Fld13136 Q_001_F_007,
Q_001_T_001.Fld13103 Q_001_F_008,
Q_001_T_001.Fld13107 Q_001_F_009
FROM
Document481.VT13101 Q_001_T_001
WHERE
(Q_001_T_001.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2) AND (NOT(CAST(Q_001_T_001.Fld13110 AS REF(Reference126)).Fld2122)) AND (Q_001_T_001.Fld13121 = 932:ba8315ce6773074a43dccb30424cd935)
UNION ALL
SELECT
Q_003_T_001.Q_002_F_000,
Q_003_T_001.Q_002_F_001,
Q_003_T_001.Q_002_F_002,
Q_003_T_001.Q_002_F_003,
Q_003_T_001.Q_002_F_004,
Q_003_T_001.Q_002_F_005,
Q_003_T_001.Q_002_F_006,
Q_003_T_001.Q_002_F_007,
Q_003_T_001.Q_002_F_008,
Q_003_T_001.Q_002_F_009
FROM
(SELECT
Q_002_T_001.ID Q_002_F_000,
Q_002_T_001.Fld13182 Q_002_F_001,
CASE WHEN (Q_002_T_001.Fld13187 = 181:00000000000000000000000000000000) THEN Q_002_T_002.Fld13120 ELSE Q_002_T_001.Fld13187 END Q_002_F_002,
CASE WHEN (Q_002_T_001.Fld13189 = 932:00000000000000000000000000000000) THEN Q_002_T_002.Fld13121 ELSE Q_002_T_001.Fld13189 END Q_002_F_003,
Q_002_T_001.Fld13183 Q_002_F_004,
Q_002_T_001.Fld13184 Q_002_F_005,
CAST(Q_002_T_001.Fld13186 AS REF(Reference78)).Fld1656 Q_002_F_006,
Q_002_T_002.Fld13136 Q_002_F_007,
Q_002_T_002.Fld13103 Q_002_F_008,
(Q_002_T_001.Fld13185 * Q_002_T_002.Fld13107) Q_002_F_009
FROM
Document481.VT13180 Q_002_T_001 LEFT JOIN Document481.VT13101 Q_002_T_002 ON ((Q_002_T_002.Fld13138 = Q_002_T_001.Fld13190) AND (Q_002_T_002.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2))
WHERE
(Q_002_T_001.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2)
) Q_003_T_001
WHERE
(Q_003_T_001.Q_002_F_003 = 932:ba8315ce6773074a43dccb30424cd935)
) Q_000_T_001 LEFT JOIN (SELECT Fld21401, Fld21402, Fld21403, Fld21404, Fld21405, SUM(Fld21406) AS Fld21406Balance FROM AccumRgT21409 WHERE Period = DATETIME(3999,11,1) AND (((Fld21403 = 235:00000000000000000000000000000000) AND (Fld21402, Fld21401, Fld21404) IN (SELECT
Q_004_T_001.Fld13110 Q_004_F_000,
Q_004_T_001.Fld13120 Q_004_F_001,
Q_004_T_001.Fld13136 Q_004_F_002
FROM
Document481.VT13101 Q_004_T_001
WHERE
(Q_004_T_001.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2) AND (NOT(CAST(Q_004_T_001.Fld13110 AS REF(Reference126)).Fld2122)) AND (Q_004_T_001.Fld13121 = 932:ba8315ce6773074a43dccb30424cd935) AND (NOT(Q_004_T_001.Fld13136 IN (UNDEFINED, 303:00000000000000000000000000000000)))
UNION ALL
SELECT
Q_005_T_001.Fld13182,
CASE WHEN (Q_005_T_001.Fld13187 = 181:00000000000000000000000000000000) THEN Q_005_T_002.Fld13120 ELSE Q_005_T_001.Fld13187 END ,
Q_005_T_002.Fld13136
FROM
Document481.VT13180 Q_005_T_001 LEFT JOIN Document481.VT13101 Q_005_T_002 ON ((Q_005_T_002.Fld13138 = Q_005_T_001.Fld13190) AND (Q_005_T_002.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2))
WHERE
(Q_005_T_001.ID = 481:3a9f485b3948c28d11dffb80aeeeb0c2)
))) GROUP BY Fld21401, Fld21402, Fld21403, Fld21404, Fld21405 HAVING Fld21406Balance <> 0 FOR UPDATE) Q_000_T_002 ON (((((Q_000_T_002.Fld21401 = Q_000_T_001.Q_001_F_002) AND (Q_000_T_002.Fld21402 = Q_000_T_001.Q_001_F_001)) AND (Q_000_T_002.Fld21404 = Q_000_T_001.Q_001_F_007)) AND (Q_000_T_002.Fld21403 = 235:00000000000000000000000000000000)) AND (Q_000_T_002.Fld21405 = 179:00000000000000000000000000000000))
WHERE
(NOT(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2122)) AND (Q_000_T_001.Q_001_F_000 = 481:3a9f485b3948c28d11dffb80aeeeb0c2) AND (Q_000_T_001.Q_001_F_003 = 932:ba8315ce6773074a43dccb30424cd935) AND (NOT(Q_000_T_001.Q_001_F_007 IN (UNDEFINED, 303:00000000000000000000000000000000)))
GROUP BY
Q_000_T_001.Q_001_F_001,
Q_000_T_001.Q_001_F_004,
179:00000000000000000000000000000000,
Q_000_T_001.Q_001_F_007,
Q_000_T_001.Q_001_F_002,
CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).ID, CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Description,
CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).ID, CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).Description,
CAST(Q_000_T_001.Q_001_F_004 AS REF(Reference235)), CAST(CAST(Q_000_T_001.Q_001_F_004 AS REF(Reference235)) AS REF(Reference235)).Description,
CAST(179:00000000000000000000000000000000 AS REF(Reference179)), CAST(CAST(179:00000000000000000000000000000000 AS REF(Reference179)) AS REF(Reference179)).Description
HAVING
(ISNULL(MAX(Q_000_T_002.Fld21406Balance), 0) < SUM(CAST(((Q_000_T_001.Q_001_F_009 * Q_000_T_001.Q_001_F_006) / CAST(CAST(Q_000_T_001.Q_001_F_001 AS REF(Reference126)).Fld2104 AS REF(Reference78)).Fld1656) AS NUMERIC(15, 3))))
‘
19:56.2214-259,EXCPCNTX,2,SrcName=CALL,OSThread=-471500528,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.
19:56.2215-9103,EXCPCNTX,2,SrcName=SDBL,OSThread=-471500528,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Trans=0,Func=Transaction
19:56.2216-9105,EXCPCNTX,1,SrcName=SDBL,OSThread=-471500528,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Trans=0,Func=HoldConnection
19:56.2311-0,Context,2,process=rphost,p:processName=test,t:clientID=111,t:applicationName=1CV8,t:computerName=ois2,t:connectID=88,SessionID=70,Usr=Калошин А.Г.,Context=’
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента}/{КоманднаяПанель : ОсновныеДействияФормы}/{ОК}
Документ.РеализацияТоваровУслуг.МодульОбъекта : 5119 : ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоСкидкам, ТаблицаПоТаре,
Документ.РеализацияТоваровУслуг.МодульОбъекта : 3362 : ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента,
Документ.РеализацияТоваровУслуг.МодульОбъекта : 3719 : ПроцедурыКонтроляОстатков.ТоварыВРезервеНаСкладахКонтрольОстатков(«Товары», СтруктураШапкиДокумента, Отказ, Заголовок, РежимПроведения);’
21:21.5550-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
23:33.0720-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
23:33.5320-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
23:33.9820-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
25:58.5890-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
25:59.0490-0,EXCP,0,process=rphost,Exception=LoadComponent(sqlsrvr),Descr=Error loading component sqlsrvr
16 — 29.11.10 — 09:37
Вопрос: можно ли (как) не меняя БД к-либо исправить ошибку, кто подсобит мнением?
17 — 29.11.10 — 09:43
up
18 — 29.11.10 — 10:13
ап
19 — 29.11.10 — 10:18
е
20 — 29.11.10 — 10:19
Для полноты картинки:
версия PostgreSQL ?
патчена?
21 — 29.11.10 — 10:19
Если сервер 1с на Линуксе крутится, то попробовать связку
сервер 1с на винде, а постгрес на линуксе оставить…
22 — 29.11.10 — 11:00
секунду..
23 — 29.11.10 — 11:03
(20) патчена последняя версия..
24 — 29.11.10 — 11:08
А как выглядит 1С-овский запрос?
25 — 29.11.10 — 11:17
(20) 8.4.1 еще есть 8.4.3.. попробую поставить
26 — 29.11.10 — 11:18
(25) Обычно помогает установка дистрибутива и патчей именно от 1С…
27 — 29.11.10 — 11:21
(24) ОбщиеМодули.ПроцедурыКонтроляОстатков.ТоварыНаСкладахКонтрольОстатков.
28 — 29.11.10 — 11:21
Процедура ТоварыНаСкладахКонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения, РежимПроведения) Экспорт
Если РежимПроведения <> РежимПроведенияДокумента.Оперативный Тогда
Возврат;
КонецЕсли;
Если УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровНаСкладе() Тогда
Возврат;
КонецЕсли;
Если глЗначениеПеременной(«ИспользоватьРегистрСвободныеОстатки») Тогда
СвободныеОстаткиКонтрольОстатков(ИмяТабличнойЧасти, СтруктураШапкиДокумента, ОтказПроведения, ЗаголовокСообщения);
Возврат;
КонецЕсли;
ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = Ложь;
Если НЕ СтруктураШапкиДокумента.Свойство(«ИспользоватьУказаниеСерийНоменклатурыПриРезервировании», ИспользоватьУказаниеСерийНоменклатурыПриРезервировании) Тогда
ИспользоватьУказаниеСерийНоменклатурыПриРезервировании = глЗначениеПеременной(«ИспользоватьУказаниеСерийНоменклатурыПриРезервировании»);
КонецЕсли;
ИспользоватьХарактеристикиНоменклатуры = глЗначениеПеременной(«ИспользоватьХарактеристикиНоменклатуры»);
ИспользоватьСерииНоменклатуры = глЗначениеПеременной(«ИспользоватьСерииНоменклатуры»);
Отказ = ОтказПроведения;
Заголовок = ЗаголовокСообщения;
МетаданныеДокумента = СтруктураШапкиДокумента.Ссылка.Метаданные();
ИмяДокумента = МетаданныеДокумента.Имя;
ИмяТаблицы = ИмяДокумента + «.» + СокрЛП(ИмяТабличнойЧасти);
Если ИмяТабличнойЧасти <> «» Тогда
МетаданныеТабЧасти = МетаданныеДокумента.ТабличныеЧасти[ИмяТабличнойЧасти];
КонецЕсли;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить(«МетаданныеДокумента», МетаданныеДокумента);
СтруктураПараметров.Вставить(«ИмяДокумента», ИмяДокумента);
СтруктураПараметров.Вставить(«ИмяТабличнойЧасти», ИмяТабличнойЧасти);
СтруктураПараметров.Вставить(«ИмяТаблицы», ИмяТаблицы);
СтруктураПараметров.Вставить(«ИспользоватьУказаниеСерийНоменклатурыПриРезервировании», ИспользоватьУказаниеСерийНоменклатурыПриРезервировании);
СтруктураПараметров.Вставить(«ИспользоватьХарактеристикиНоменклатуры», ИспользоватьХарактеристикиНоменклатуры);
СтруктураПараметров.Вставить(«ИспользоватьСерииНоменклатуры», ИспользоватьСерииНоменклатуры);
СтруктураПараметров.Вставить(«РегистрОстаткиТоваров», «ТоварыНаСкладах»);
Если СтруктураПараметров.ИмяДокумента = «ПеремещениеТоваров» Тогда
ТоварыНаСкладахКонтрольОстатков_ПеремещениеТоваров(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяДокумента = «РеализацияТоваровУслуг» Тогда
Если СтруктураПараметров.ИмяТабличнойЧасти = «ВозвратнаяТара» Тогда
ТоварыНаСкладахКонтрольОстатков_ЗаказВТабЧасти(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
Иначе
ТоварыНаСкладахКонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
КонецЕсли;
ИначеЕсли СтруктураПараметров.ИмяДокумента = «ОтчетОРозничныхПродажах»
ИЛИ СтруктураПараметров.ИмяДокумента = «ЧекККМ» Тогда
ТоварыНаСкладахКонтрольОстатков_Реализация_ОтчетОРознПродажах_ЧекККМ(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяДокумента = «ВозвратТоваровПоставщику» Тогда
Если СтруктураШапкиДокумента.ВидОперации = Перечисления.ВидыОперацийВозвратТоваровПоставщику.ИзПереработки Тогда
ТоварыНаСкладахКонтрольОстатков_СкладВТабЧасти_ЗаказВШапке(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяТабличнойЧасти = «Оборудование» Тогда
ТоварыНаСкладахКонтрольОстатков_БезЗаказа(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
Иначе
ТоварыНаСкладахКонтрольОстатков_ЗаказВТабЧасти(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
КонецЕсли;
ИначеЕсли СтруктураПараметров.ИмяДокумента = «ТребованиеНакладная»
ИЛИ СтруктураПараметров.ИмяДокумента = «РасходныйОрдерНаТовары»
ИЛИ СтруктураПараметров.ИмяДокумента = «СписаниеТоваров» Тогда
ТоварыНаСкладахКонтрольОстатков_ЗаказВТабЧасти(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяДокумента = «ПередачаТоваров» Тогда
ТоварыНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВШапке(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяДокумента = «КомплектацияНоменклатуры» Тогда
Если СтруктураШапкиДокумента.ВидКомплектации = Перечисления.ВидыКомплектации.Разборка Тогда
//при разукомплектации все берем из шапки
СтруктураПараметров.ИмяТаблицы = СтруктураПараметров.ИмяДокумента;
КонецЕсли;
ТоварыНаСкладахКонтрольОстатков_СкладВШапке_ЗаказВШапке(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
ИначеЕсли СтруктураПараметров.ИмяДокумента = «ПередачаМатериаловВЭксплуатацию»
ИЛИ СтруктураПараметров.ИмяДокумента = «ПередачаОборудованияВМонтаж»
ИЛИ СтруктураПараметров.ИмяДокумента = «КорректировкаСерийИХарактеристикТоваров»
ИЛИ СтруктураПараметров.ИмяДокумента = «КорректировкаКачестваТоваров» Тогда
ТоварыНаСкладахКонтрольОстатков_БезЗаказа(СтруктураШапкиДокумента, СтруктураПараметров, МетаданныеТабЧасти, Заголовок, Отказ);
Иначе
Сообщить(«Для документа вида «»» + СтруктураПараметров.ИмяДокумента + «»» не предусмотрен вызов процедуры контроля остатков (процедура ТоварыНаСкладахКонтрольОстатков)», СтатусСообщения.ОченьВажное);
КонецЕсли;
//вернем обратно признак отказа от проведения документа
ОтказПроведения = Отказ;
ЗаголовокСообщения = Заголовок;
КонецПроцедуры // КонтрольОстатков()
29 — 29.11.10 — 11:21
Танцы с бубном конечно, но может попробовать «Тестирование и исправление»?
30 — 29.11.10 — 11:22
Конечно на копии сначала.
31 — 29.11.10 — 11:23
(26) дистрибов чего 1с ? Она лицензионная купленная на честно заработаные.
32 — 29.11.10 — 11:23
(29) не помогает.
33 — 29.11.10 — 11:25
(31) имел ввиду дистрибутивов PostgreSQL
34 — 29.11.10 — 11:26
Пользователь имеет полные права при проведении?
35 — 29.11.10 — 11:26
Может RLS что то режет?
36 — 29.11.10 — 11:29
2(28) это парнуха а не запрос… интересует именно запорос, который оттранслирован в (15)
который вот этот:
СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ);
ОбщийМодуль.ПроцедурыКонтроляОстатков.Модуль : 4599 : РезультатЗапроса = Запрос.Выполнить();’
интересует Запрос.Текст
37 — 29.11.10 — 11:31
2(35) вообще-то предполагается что документы при проведении должны видеть все, и использовать для этого процедуры привелигерованного модуля… Но так или иначе — как мы можем об этом судить если он нам текст запроса не показывает, и есть ли в нем слово РАЗРЕШЕННЫЕ?
38 — 29.11.10 — 11:33
(37) ошибся.
39 — 29.11.10 — 11:34
Процедура ТоварыВРезервеНаСкладахКонтрольОстатков_Реализация(СтруктураШапкиДокумента, СтруктураПараметров, Заголовок, Отказ)
ЕстьСоставНабора = (СтруктураПараметров.ИмяТабличнойЧасти = «Товары»);
Если СтруктураПараметров.ИмяТабличнойЧасти = «ВозвратнаяТара» Тогда
ЕстьХарактеристика = Ложь;
ЕстьСерия = Ложь;
ЕстьКачество = Ложь;
Иначе
ЕстьХарактеристика = Истина;
ЕстьСерия = СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании И СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей;
ЕстьКачество = Истина;
КонецЕсли;
Если ЕстьСоставНабора Тогда
ТекстЗапросаРеквизитыДокумента = »
| (ВЫБРАТЬ
//Строки ТЧ Товары, в которых номенклатура — не комплект
| Док.Ссылка,
| Док.Номенклатура,
| Док.Склад,
| Док.СпособСписанияОстаткаТоваров,
| Док.ХарактеристикаНоменклатуры,
| Док.СерияНоменклатуры,
| Док.Коэффициент,
| Док.ЗаказПокупателя,
| Док.ЕдиницаИзмерения,
| Док.Количество
| ИЗ
| Документ.» + СтруктураПараметров.ИмяТаблицы + » КАК Док
| ГДЕ
| Док.Ссылка = &ДокументСсылка
| И НЕ Док.Номенклатура.Комплект
| И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
| ОБЪЕДИНИТЬ ВСЕ
|
//Строки ТЧ Состав набора
| ВЫБРАТЬ
| Док.Ссылка,
| Док.Номенклатура,
| Док.Склад,
| Док.СпособСписанияОстаткаТоваров,
| Док.ХарактеристикаНоменклатуры,
| Док.СерияНоменклатуры,
| Док.Коэффициент,
| Док.ЗаказПокупателя,
| Док.ЕдиницаИзмерения,
| Док.Количество
| ИЗ
| (ВЫБРАТЬ
| ДокНаб.Ссылка,
| ДокНаб.Номенклатура,
//Склад может быть указан в целом для набора в строке ТЧ Товары, или для каждого элемента набора в ТЧ СоставНабора
| ВЫБОР
| КОГДА ДокНаб.Склад = &ПустойСклад ТОГДА ДокТов.Склад
| ИНАЧЕ ДокНаб.Склад
| КОНЕЦ КАК Склад,
//СпособСписанияОстатков может быть указан в целом для набора в строке ТЧ Товары, или для каждого элемента набора в ТЧ СоставНабора
| ВЫБОР
| КОГДА ДокНаб.СпособСписанияОстаткаТоваров = &ПустойСпособСписания ТОГДА ДокТов.СпособСписанияОстаткаТоваров
| ИНАЧЕ ДокНаб.СпособСписанияОстаткаТоваров
| КОНЕЦ КАК СпособСписанияОстаткаТоваров,
| ДокНаб.ХарактеристикаНоменклатуры,
| ДокНаб.СерияНоменклатуры,
| ДокНаб.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
| ДокТов.ЗаказПокупателя,
| ДокТов.ЕдиницаИзмерения,
| ДокНаб.Количество * ДокТов.Количество КАК Количество
| ИЗ
| Документ.» + СтруктураПараметров.ИмяДокумента + «.СоставНабора КАК ДокНаб
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.» + СтруктураПараметров.ИмяТаблицы + » КАК ДокТов
| ПО ДокТов.КлючСтроки = ДокНаб.КлючСтроки
| И ДокТов.Ссылка = &ДокументСсылка
| ГДЕ
| ДокНаб.Ссылка = &ДокументСсылка
|
| ) КАК Док
| ГДЕ Док.СпособСписанияОстаткаТоваров = &ИзРезерва
| ) КАК Док
|»;
Иначе
ТекстЗапросаРеквизитыДокумента = »
| Документ.» + СтруктураПараметров.ИмяТаблицы + »
| КАК Док
|»;
КонецЕсли;
// ПОЛУЧИМ УСЛОВИЯ ДЛЯ ВИРТУАЛЬНЫХ ТАБЛИЦ ОСТАТКОВ
ПараметрыУсловий = Новый Структура(
«ПолеСклад,ЕстьХарактеристика,ЕстьКачество,ЕстьСоставНабора,РеквизитДокументРезерва,ДопУсловияТабличнойЧасти»,
«Склад»,
ЕстьХарактеристика,
ЕстьКачество,
ЕстьСоставНабора,
«ЗаказПокупателя»,
» И Док.СпособСписанияОстаткаТоваров = &ИзРезерва И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))»);
ПараметрыУсловий.Вставить(«ИспользоватьХарактеристикиНоменклатуры», СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры);
УсловияТаблицыОстатков = ПолучитьСтруктуруУсловийТаблицыОстатков(
СтруктураПараметров.ИмяДокумента,
СтруктураПараметров.ИмяТаблицы,
Новый Структура(«Резерв»),
ПараметрыУсловий);
Запрос = Новый Запрос;
// Установим параметры запроса
Запрос.УстановитьПараметр(«ДокументСсылка», СтруктураШапкиДокумента.Ссылка);
Запрос.УстановитьПараметр(«ИзРезерва», Перечисления.СпособыСписанияОстаткаТоваров.ИзРезерва);
Запрос.УстановитьПараметр(«ПустойСпособСписания», Перечисления.СпособыСписанияОстаткаТоваров.ПустаяСсылка());
Запрос.УстановитьПараметр(«ПустойСклад», Справочники.Склады.ПустаяСсылка());
Запрос.УстановитьПараметр(«ПустаяХарактеристика», Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
Запрос.УстановитьПараметр(«ПустаяСерия», Справочники.СерииНоменклатуры.ПустаяСсылка());
МассивПустыхСсылок = Новый Массив;
МассивПустыхСсылок.Добавить(Неопределено);
МассивПустыхСсылок.Добавить(Документы.ЗаказПокупателя.ПустаяСсылка());
Запрос.УстановитьПараметр(«МассивПустыхСсылок», МассивПустыхСсылок);
ТекстЗапроса = »
|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
| Док.Номенклатура КАК Номенклатура,
| Док.Номенклатура.Представление КАК НоменклатураПредставление,
| Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
| %ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) КАК ХарактеристикаНоменклатурыПредставление,
| %ПОЛЕ_Док_Серия% КАК СерияНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) КАК СерияНоменклатурыПредставление,
| Док.ЗаказПокупателя КАК ДокументРезерва,
| Док.Склад КАК Склад,
| %ПОЛЕ_Док_Количество% КАК ДокументКоличество,
| ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) КАК РезервыКоличество
|ИЗ
| «+ ТекстЗапросаРеквизитыДокумента + »
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,» + УсловияТаблицыОстатков.Резерв + «) КАК Резервы
|ПО
| Резервы.Склад = Док.Склад
| И Резервы.Номенклатура = Док.Номенклатура
| И Резервы.ДокументРезерва = Док.ЗаказПокупателя
| И Резервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
| И Резервы.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
|ГДЕ
| Не Док.Номенклатура.Комплект
| И Док.Ссылка = &ДокументСсылка
| И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
| И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))
|СГРУППИРОВАТЬ ПО
|
| Док.Номенклатура,
| %ПОЛЕ_Док_Характеристика%,
| %ПОЛЕ_Док_Серия%,
| Док.ЗаказПокупателя,
| Док.Склад
|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
|»;
УчитыватьСерии = ложь;
//По умолчанию отбор по пустой характеристике
СОЕДИНЕНИЕ_Характеристика_Остатки = «ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)»;
//По умолчанию отбор по пустой серии, т.к. для тары и договоров без ОУ резервы выполняются без серии
СОЕДИНЕНИЕ_Серия_Остатки = «ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка)»;
Если СтруктураПараметров.ИмяТабличнойЧасти = «ВозвратнаяТара» Тогда
//нет серии, характеристики, единицы измерения и коэффициента
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Количество%»,»Сумма(Док.Количество)»);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Характеристика%»,»&ПустаяХарактеристика»);
Иначе
//есть характеристика, единица измерения и коэффициент.
//Наличие серии зависит от того, ведется ли по договору обособленный учет.
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Количество%»,»Сумма(ВЫРАЗИТЬ(Док.Количество * Док.Коэффициент / Док.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Число(15,3)))»);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Характеристика%»,»Док.ХарактеристикаНоменклатуры»);
Если СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры Тогда
СОЕДИНЕНИЕ_Характеристика_Остатки = «Док.ХарактеристикаНоменклатуры»;
КонецЕсли;
Если СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании Тогда
//считаем что договор в заказах соответствует договору в шапке документа.
Если СтруктураШапкиДокумента.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
УчитыватьСерии = истина;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Серия%»,»Док.СерияНоменклатуры»);
Если СтруктураПараметров.ИспользоватьСерииНоменклатуры Тогда
СОЕДИНЕНИЕ_Серия_Остатки = «Док.СерияНоменклатуры»;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если не УчитыватьСерии Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%ПОЛЕ_Док_Серия%»,»&ПустаяСерия»);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%СОЕДИНЕНИЕ_Характеристика_Остатки%», СОЕДИНЕНИЕ_Характеристика_Остатки);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»%СОЕДИНЕНИЕ_Серия_Остатки%», СОЕДИНЕНИЕ_Серия_Остатки);
Если глЗначениеПеременной(«ИспользоватьБлокировкуДанных») Тогда
Запрос.Текст =
«ВЫБРАТЬ Склад, Номенклатура, ЗаказПокупателя» + ?(ЕстьХарактеристика, «, ХарактеристикаНоменклатуры», «») + »
|ИЗ » + ТекстЗапросаРеквизитыДокумента + »
|ГДЕ
| Не Док.Номенклатура.Комплект
| И Док.Ссылка = &ДокументСсылка
| И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
| И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))»;
РезультатЗапросаДляБлокировки = Запрос.Выполнить();
Если НЕ РезультатЗапросаДляБлокировки.Пустой() Тогда
СтруктураПараметровБлокировки = Новый Структура(
«ТипТаблицы,ИмяТаблицы,ИсточникДанных»
,»РегистрНакопления»
,»ТоварыВРезервеНаСкладах»
,РезультатЗапросаДляБлокировки);
СтруктураИсточникаДанных = Новый Структура(
«Склад,Номенклатура,ДокументРезерва»
,»Склад»
,»Номенклатура»
,»ЗаказПокупателя»);
Если ЕстьХарактеристика И СтруктураПараметров.ИспользоватьХарактеристикиНоменклатуры Тогда
СтруктураИсточникаДанных.Вставить(«ХарактеристикаНоменклатуры»,»ХарактеристикаНоменклатуры»);
КонецЕсли;
ОбщегоНазначения.УстановитьУправляемуюБлокировку(СтруктураПараметровБлокировки,,СтруктураИсточникаДанных, Отказ, Заголовок);
КонецЕсли;
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаСообщения = «Остатка резерва » +
УправлениеЗапасами.ПредставлениеНоменклатуры(Выборка.НоменклатураПредставление,
?(СтруктураПараметров.ИмяТабличнойЧасти <> «ВозвратнаяТара», » «+Выборка.ХарактеристикаНоменклатурыПредставление, «»),
?(УчитыватьСерии, » «+Выборка.СерияНоменклатурыПредставление, «»)) +
» на складе «»» + СокрЛП(Выборка.Склад) + «»» по документу «»» + СокрЛП(Выборка.ДокументРезерва) +
«»» недостаточно.»;
УправлениеЗапасами.ОшибкаНетОстатка(СтрокаСообщения, Выборка.РезервыКоличество, Выборка.ДокументКоличество,
Выборка.ЕдиницаХраненияОстатковПредставление, Отказ, Заголовок);
КонецЦикла;
КонецПроцедуры //КонтрольОстатков_Реализация()
40 — 29.11.10 — 11:38
(34) полные.
41 — 29.11.10 — 11:38
2(39) дядька… Ты можешь словить этот текст запроса отладчиком? Слови пожалуйста… Потому что то что ты будешь делать ближайшие пару часов — это видоизменять этот запрос и пытаться выполнять его в консоли запросов… До тех пор пока не сделайшь такой, при котором 1С не валится.. А уж потом ты попытаешься изменить код
42 — 29.11.10 — 11:41
2 (41) в том-то и дело (почему я бросил лог postgre),
у меня KUBUNTU стоит и wine при запуске отладчика падает. Сейчас версию postgre меняю на 8 4 1..
43 — 29.11.10 — 11:41
Кстати под windoй ошибка таже.
44 — 29.11.10 — 11:42
+(43) в смысле ошибка СУБД.
45 — 29.11.10 — 11:42
(41) сейчас виндовый комп найду и словлю отладчиком..
46 — 29.11.10 — 11:43
ну короче, тут все ясно…
47 — 29.11.10 — 11:44
(46) что-то не так?
48 — 29.11.10 — 11:51
думаю да.. Потому что либо вы не будете пользоваться резервированием в УПП… либо не будете пользоваться нынешним Постгресом в Линуксе..
49 — 29.11.10 — 11:52
(48) поясни пож.
50 — 29.11.10 — 11:54
(48) всё же есть надежда поправить к-либо запрос.
51 — 29.11.10 — 11:54
2(49) что тут пояснять еще? у тебя запрос не выполняется, а ты даже не можешь отладчик запустить чтобы выцепить его текст. И как ты теперь собираешься в таких условиях работать?
52 — 29.11.10 — 11:56
(45)
53 — 29.11.10 — 11:57
2(52) и что, каждый раз так будешь делать? отличный план
54 — 29.11.10 — 11:58
на след. неделе комп новый будет. там будет винд.
55 — 29.11.10 — 12:00
Понятно.
56 — 30.11.10 — 14:15
ап.
57 — 30.11.10 — 14:15
ТекстЗапроса = »
|ВЫБРАТЬ // Запрос, контролирующий остатки на складах
| Док.Номенклатура КАК Номенклатура,
| Док.Номенклатура.Представление КАК НоменклатураПредставление,
| Док.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаХраненияОстатковПредставление,
| %ПОЛЕ_Док_Характеристика% КАК ХарактеристикаНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Характеристика%) КАК ХарактеристикаНоменклатурыПредставление,
| %ПОЛЕ_Док_Серия% КАК СерияНоменклатуры,
| ПРЕДСТАВЛЕНИЕ(%ПОЛЕ_Док_Серия%) КАК СерияНоменклатурыПредставление,
| Док.ЗаказПокупателя КАК ДокументРезерва,
| Док.Склад КАК Склад,
| %ПОЛЕ_Док_Количество% КАК ДокументКоличество,
| ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) КАК РезервыКоличество
|ИЗ
| «+ ТекстЗапросаРеквизитыДокумента + »
|
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(,» + УсловияТаблицыОстатков.Резерв + «) КАК Резервы
|ПО
| Резервы.Склад = Док.Склад
| И Резервы.Номенклатура = Док.Номенклатура
| И Резервы.ДокументРезерва = Док.ЗаказПокупателя
| И Резервы.ХарактеристикаНоменклатуры = %СОЕДИНЕНИЕ_Характеристика_Остатки%
| И Резервы.СерияНоменклатуры = %СОЕДИНЕНИЕ_Серия_Остатки%
|ГДЕ
| Не Док.Номенклатура.Комплект
| И Док.Ссылка = &ДокументСсылка
| И Док.СпособСписанияОстаткаТоваров = &ИзРезерва
| И (НЕ Док.ЗаказПокупателя В (&МассивПустыхСсылок))
|СГРУППИРОВАТЬ ПО
|
| Док.Номенклатура,
| %ПОЛЕ_Док_Характеристика%,
| %ПОЛЕ_Док_Серия%,
| Док.ЗаказПокупателя,
| Док.Склад
|ИМЕЮЩИЕ ЕСТЬNULL(МАКСИМУМ(Резервы.КоличествоОстаток), 0) < %ПОЛЕ_Док_Количество%
|ДЛЯ ИЗМЕНЕНИЯ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки // Блокирующие чтение таблицы остатков регистра для разрешения коллизий многопользовательской работы
|»;
58 — 30.11.10 — 14:16
на нем вылетает ошибка. (0)(1)
59 — 30.11.10 — 14:18
аp
60 — 30.11.10 — 14:24
э… Док.ЗаказПокупателя , Док.Склад — какого типа?
и опять же — а это что за лажа: «| «+ ТекстЗапросаРеквизитыДокумента + «»?
Выполни этот запрос в консоли.

61 — 30.11.10 — 14:26
ап-=
andrejip
62 — 13.12.10 — 09:38
Finding out why Foreign key creation fail
When MySQL is unable to create a Foreign Key, it throws out this generic error message:
ERROR 1215 (HY000): Cannot add foreign key constraint
– The most useful error message ever.
Fortunately, MySQL has this useful command that can give the actual reason about why it could not create the Foreign Key.
mysql> SHOW ENGINE INNODB STATUS;
That will print out lots of output but the part we are interested in is under the heading ‘LATEST FOREIGN KEY ERROR’:
------------------------ LATEST FOREIGN KEY ERROR ------------------------ 2020-08-29 13:40:56 0x7f3cb452e700 Error in foreign key constraint of table test_database/my_table: there is no index in referenced table which would contain the columns as the first columns, or the data types in the referenced table do not match the ones in table. Constraint: , CONSTRAINTidx_nameFOREIGN KEY (employee_id) REFERENCESemployees(id) The index in the foreign key in table isidx_namePlease refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
This output could give you some clue about the actual reason why MySQL could not create your Foreign Key
Reason #1 – Missing unique index on the referenced table
This is probably the most common reason why MySQL won’t create your Foreign Key constraint. Let’s look at an example with a new database and new tables:
In the all below examples, we’ll use a simple ‘Employee to Department” relationship:
mysql> CREATE DATABASE foreign_key_1;
Query OK, 1 row affected (0.00 sec)
mysql> USE foreign_key_1;
Database changed
mysql> CREATE TABLE employees(
-> id int,
-> name varchar(20),
-> department_id int
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> CREATE TABLE departments(
-> id int,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.07 sec)
As you may have noticed, we have not created the table with PRIMARY KEY or unique indexes. Now let’s try to create Foreign Key constraint between employees.department_id column and departments.id column:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
ERROR 1215 (HY000): Cannot add foreign key constraint
Let’s look at the detailed error:
mysql> SHOW ENGINE INNODB STATUS;
------------------------ LATEST FOREIGN KEY ERROR ------------------------ 2020-08-31 09:25:13 0x7fddc805f700 Error in foreign key constraint of table foreign_key_1/#sql-5ed_49b: FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id): Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types in the table and the referenced table do not match for constraint. Note that the internal storage type of ENUM and SET changed in tables created with >= InnoDB-4.1.12, and such columns in old tables cannot be referenced by such columns in new tables. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
This is because we don’t have any unique index on the referenced table i.e. departments. We have two ways of fixing this:
Option 1: Primary Keys
Let’s fix this by adding a primary key departments.id
mysql> ALTER TABLE departments ADD PRIMARY KEY (id);
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
Option 2: Unique Index
mysql> CREATE UNIQUE INDEX idx_department_id ON departments(id);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0
Reason #2 – Different data types on the columns
MySQL requires the columns involved in the foreign key to be of the same data types.
mysql> CREATE DATABASE foreign_key_1;
Query OK, 1 row affected (0.00 sec)
mysql> USE foreign_key_1;
Database changed
mysql> CREATE TABLE employees(
-> id int,
-> name varchar(20),
-> department_id int,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE departments(
-> id char(20),
-> name varchar(20),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.07 sec)
You may have noticed that employees.department_id is int while departments.id is char(20). Let’s try to create a foreign key now:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
ERROR 1215 (HY000): Cannot add foreign key constraint
Let’s fix the type of departments.id and try to create the foreign key again:
mysql> ALTER TABLE departments MODIFY id INT;
Query OK, 0 rows affected (0.18 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 0 rows affected (0.26 sec)
Records: 0 Duplicates: 0 Warnings: 0
It works now!
Reason #3 – Different collation/charset type on the table
This is a surprising reason and hard to find out. Let’s create two tables with different collation (or also called charset):
Let’s start from scratch to explain this scenario:
mysql> CREATE DATABASE foreign_key_1; Query OK, 1 row affected (0.00 sec)
mysql> USE foreign_key_1; Database changed
mysql> CREATE TABLE employees(
-> id int,
-> name varchar(20),
-> department_id int,
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB CHARACTER SET=utf8;
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE departments(
-> id int,
-> name varchar(20),
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB CHARACTER SET=latin1;
Query OK, 0 rows affected (0.08 sec)
You may notice that we are using a different character set (utf8 and latin1` for both these tables. Let’s try to create the foreign key:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
ERROR 1215 (HY000): Cannot add foreign key constraint
It failed because of different character sets. Let’s fix that.
mysql> SET foreign_key_checks = 0; ALTER TABLE departments CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.18 sec)
Records: 0 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
If you have many tables with a different collation/character set, use this script to generate a list of commands to fix all tables at once:
mysql --database=your_database -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}'
Reason #4 – Different collation types on the columns
This is a rare reason, similar to reason #3 above but at a column level.
Let’s try to reproduce this from scratch:
mysql> CREATE DATABASE foreign_key_1; Query OK, 1 row affected (0.00 sec)
mysql> USE foreign_key_1; Database changed
mysql> CREATE TABLE employees(
-> id int,
-> name varchar(20),
-> department_id char(26) CHARACTER SET utf8,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE TABLE departments(
-> id char(26) CHARACTER SET latin1,
-> name varchar(20),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.08 sec)
We are using a different character set for employees.department_id and departments.id (utf8 and latin1). Let’s check if the Foreign Key can be created:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
ERROR 1215 (HY000): Cannot add foreign key constraint
Nope, as expected. Let’s fix that by changing the character set of departments.id to match with employees.department_id:
mysql> ALTER TABLE departments MODIFY id CHAR(26) CHARACTER SET utf8;
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
It works now!
Reason #5 -Inconsistent data
This would be the most obvious reason. A foreign key is to ensure that your data remains consistent between the parent and the child table. So when you are creating the foreign key, the existing data is expected to be already consistent.
Let’s setup some inconsistent data to reproduce this problem:
mysql> CREATE DATABASE foreign_key_1; Query OK, 1 row affected (0.00 sec)
mysql> USE foreign_key_1; Database changed
mysql> CREATE TABLE employees(
-> id int,
-> name varchar(20),
-> department_id int,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE departments(
-> id int,
-> name varchar(20),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.08 sec)
Let’s insert a department_id in employees table that will not exist in departments.id:
mysql> INSERT INTO employees VALUES (1, 'Amber', 145);
Query OK, 1 row affected (0.01 sec)
Let’s create a foreign key now and see if it works:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`foreign_key_1`.`#sql-5ed_49b`, CONSTRAINT `fk_department_id` FOREIGN KEY (`department_id`) REFERENCES `departments` (`id`))
This error message is atleast more useful. We can fix this in two ways. Either by adding the missing department in departments table or by deleting all the employees with the missing department. We’ll do the first option now:
mysql> INSERT INTO departments VALUES (145, 'HR');
Query OK, 1 row affected (0.00 sec)
Let’s try to create the Foreign Key again:
mysql> ALTER TABLE employees ADD CONSTRAINT fk_department_id FOREIGN KEY idx_employees_department_id (department_id) REFERENCES departments(id);
Query OK, 1 row affected (0.24 sec)
Records: 1 Duplicates: 0 Warnings: 0
It worked this time.
So we have seen 5 different ways a Foreign Key creation can fail and possible solutions of how we can fix them. If you have encountered a reason not listed above, add them in the comments.
If you are using MySQL 8.x, the error message will be a little different:
SQLSTATE[HY000]: General error: 3780 Referencing column 'column' and referenced column 'id' in foreign key constraint 'idx_column_id' are incompatible.