Ситуация такая:
Есть 1С 8.1.15.14, SQL 2005 SP3 и нетиповой журнал документов в 1С УПП, на который накладывается такой RLS запрос:
#Если &ИспользоватьОграничениеПоКонтрагенты ИЛИ &ИспользоватьОграничениеПоОрганизации \n\t\tИЛИ &ИспользоватьОграничениеПоПодразделения\n\t\tИЛИ &ИспользоватьОграничениеПоСклады #Тогда\n\tТекущаяТаблица\nИЗ\n\t#ТекущаяТаблица КАК ТекущаяТаблица\n\t\tЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ\n\t\t\tСоставГруппы.Ссылка КАК ГруппаПользователей\n\t\tИЗ\n\t\t\tСправочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы\n\t\tГДЕ\n\t\t\tСоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей\n\t\tПО (ИСТИНА)\nГДЕ\n\t(НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL )\n\t\n\tИ (НЕ 1 В\n\t\t\t\t(ВЫБРАТЬ ПЕРВЫЕ 1 \n\t\t\t\t\t 1 \n\t\t\t\tИЗ\n\t\t\t\t\tРегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа \n\t\t\t\t\tЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбъектыДоступаДокументов КАК ОбъектыДоступаДокументов\n\t\t\t\t\t\tПО ОбъектыДоступаДокументов.ДокументСсылка = ТекущаяТаблица.Ссылка\n\t\t\t\t\t\t\tИ ОбъектыДоступаДокументов.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда\n\t\t\t\t\t\tЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты\n\t\t\t\t\t\tПО Контрагенты.Ссылка = ОбъектыДоступаДокументов.ОбъектДоступа\n\t\t\t\t\t\t\tИ НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты) \n\t\t\t\t\t\t#КонецЕсли\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей\n\t\t\t\t\t\tПО НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда\n\t\t\t\t\t\t\t\t\tКОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)\n\t\t\t\t\t\t\t\t\t\tТОГДА ЕСТЬNULL(Контрагенты.ГруппаДоступаКонтрагента, ЗНАЧЕНИЕ(Справочник.ГруппыДоступаКонтрагентов.ПустаяСсылка))\n\t\t\t\t\t\t\t\t\t#КонецЕсли\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоОрганизации #Тогда\n\t\t\t\t\t\t\t\t\tКОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)\n\t\t\t\t\t\t\t\t\t\tТОГДА ТекущаяТаблица.Организация\n\t\t\t\t\t\t\t\t\t#КонецЕсли\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоПодразделения #Тогда\n\t\t\t\t\t\t\t\t\tКОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Подразделения)\n\t\t\t\t\t\t\t\t\t\tТОГДА ТекущаяТаблица.Подразделение\n\t\t\t\t\t\t\t\t\t#КонецЕсли\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tКОГДА ЛОЖЬ\n\t\t\t\t\t\t\t\t\t\tТОГДА NULL\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tИНАЧЕ ОбъектыДоступаДокументов.ОбъектДоступа\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tКОНЕЦ\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tИ НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа\n\t\t\t\t\t\t\t\tИ\n\t\t\t\t\t\t\t\tНастройкиПравДоступаПользователей.ОбластьДанных =\n\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоКонтрагенты #Тогда\n\t\t\t\t\t\t\t\t\tВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)\n\t\t\t\t\t\t\t\t\t\tТОГДА ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.КонтрагентыДанные)\n\t\t\t\t\t\t\t\t\tИНАЧЕ\n\t\t\t\t\t\t\t\t\t\tЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)\n\t\t\t\t\t\t\t\t\tКОНЕЦ\n\t\t\t\t\t\t\t\t#Иначе\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)\n\t\t\t\t\t\t\t\t#КонецЕсли\n\t\t\t\t\t\t\t\tИ НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей\n\t\t\t\tГДЕ\n\t\t\t\t\tНазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей\n\t\t\t\t\tИ (НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (\n\t\t\t\t\t\t\t\t\t\t\t\tЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоОрганизации #Тогда\n\t\t\t\t\t\t\t\t\t\t\t\t, ВЫБОР\n\t\t\t\t\t\t\t\t\t\t\t\tКОГДА (НЕ ТекущаяТаблица.Организация ЕСТЬ NULL )\n\t\t\t\t\t\t\t\t\t\t\t\tТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)\n\t\t\t\t\t\t\t\t\t\t\t\tКОНЕЦ\n\t\t\t\t\t\t\t\t\t\t\t\t#КонецЕсли\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t#Если &ИспользоватьОграничениеПоПодразделения #Тогда\n\t\t\t\t\t\t\t\t\t\t\t\t, ВЫБОР\n\t\t\t\t\t\t\t\t\t\t\t\tКОГДА (НЕ ТекущаяТаблица.Подразделение ЕСТЬ NULL )\n\t\t\t\t\t\t\t\t\t\t\t\tТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Подразделения)\n\t\t\t\t\t\t\t\t\t\t\t\tКОНЕЦ\n\t\t\t\t\t\t\t\t\t\t\t\t#КонецЕсли\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\tИЛИ НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В\n\t\t\t\t\t\t\t(ВЫБРАТЬ\n\t\t\t\t\t\t\t\tРегистрСведений.ОбъектыДоступаДокументов.ВидОбъектаДоступа\n\t\t\t\t\t\t\tИЗ\n\t\t\t\t\t\t\t\tРегистрСведений.ОбъектыДоступаДокументов\n\t\t\t\t\t\t\tГДЕ\n\t\t\t\t\t\t\t\tРегистрСведений.ОбъектыДоступаДокументов.ДокументСсылка = ТекущаяТаблица.Ссылка))\n\t\t\t\t\tИ НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL ))\n#КонецЕсли\n
При попытке записи любого вида документа из входящих в этот журнал видов, с датой отличной от сегодняшней (задним числом), возникает ошибка "У пользователя недостаточно прав на исполнение операций над базой данных", при записи текущим числом все записывается нормально при этом в некоторых (не во всех) задних числах запись происходит то же нормально.
Стал смотреть трассу запроса:
DECLARE @P1 varbinary( 16 )\nDECLARE @P2 numeric( 1 , 0 )\nDECLARE @P3 varbinary( 16 )\nDECLARE @P4 varbinary( 1 )\nDECLARE @P5 datetime\nDECLARE @P6 varbinary( 4 )\nDECLARE @P7 datetime\nSET @P1 = 0x91830017A40E2E7811DF010318D673B1\nSET @P2 = 1 \nSET @P3 = 0x00000000000000000000000000000000\nSET @P4 = 0x08\nSET @P5 = {ts \'2010-10-15 00:00:00\'}\nSET @P6 = 0x0000626F\nSET @P7 = {ts \'2010-10-15 23:59:59\'}\n\n\n\n\n\nSELECT TOP 100 \n_DocumentJournal25510._Date_Time AS f_6,\n_DocumentJournal25510._DocumentTRef AS f_7,\n_DocumentJournal25510._DocumentRRef AS f_8,\nCASE\n WHEN _DocumentJournal25510._Date_Time = _DocumentJournal25510._Date_Time OR\n _DocumentJournal25510._Date_Time IS NULL\n THEN CASE\n WHEN EXISTS(\n SELECT\n CAST( 0 . AS NUMERIC( 1 , 0 )) AS f_4\n FROM\n (\n SELECT\n 0x01 AS _f_1\n ) #V8TblAli1\n LEFT OUTER JOIN (\n SELECT DISTINCT\n _Reference40_VT1046_Q_001_T_001._Reference40_IDRRef AS _Q_001_F_000RRef\n FROM\n _Reference40_VT1046 _Reference40_VT1046_Q_001_T_001 WITH(NOLOCK)\n WHERE\n _Reference40_VT1046_Q_001_T_001._Fld1048RRef = @P1 \n ) #V8TblAli1_Q_000_T_002\n ON 0x01 = 0x01\n WHERE NOT #V8TblAli1_Q_000_T_002._Q_001_F_000RRef IS NULL AND NOT CAST(@P2 AS NUMERIC( 1 , 0 )) \n IN (SELECT TOP 1 \n CAST( 1 AS NUMERIC( 1 , 0 )) AS _Q_002_F_000\n FROM\n _InfoReg22259 _InfoReg22259_Q_002_T_001 WITH(NOLOCK)\n LEFT OUTER JOIN _InfoReg14099 _InfoReg14099_Q_002_T_002 WITH(NOLOCK)\n ON _InfoReg14099_Q_002_T_002._Fld14100_TYPE = 0x08 AND _InfoReg14099_Q_002_T_002._Fld14100_RTRef = _DocumentJournal25510._DocumentTRef AND _InfoReg14099_Q_002_T_002._Fld14100_RRRef = _DocumentJournal25510._DocumentRRef AND \n _InfoReg14099_Q_002_T_002._Fld24029RRef = _InfoReg22259_Q_002_T_001._Fld22261RRef\n LEFT OUTER JOIN _InfoReg22246 _InfoReg22246_Q_002_T_003 WITH(NOLOCK)\n ON _InfoReg22246_Q_002_T_003._Fld22247_TYPE = \n CASE\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x909d005e4caf2e8d472c07d30d9d40af\n THEN CASE\n WHEN _DocumentJournal25510._Fld25515RRef IS NOT NULL\n THEN 0x08\n ELSE NULL\n END\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x9e80a570b3b742fb44770fc3b9c6accd\n THEN CASE\n WHEN _DocumentJournal25510._Fld25516RRef IS NOT NULL\n THEN 0x08\n ELSE NULL\n END\n ELSE CASE\n WHEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE = 0x01 OR\n _InfoReg14099_Q_002_T_002._Fld14101_TYPE = 0x08 AND _InfoReg14099_Q_002_T_002._Fld14101_RTRef IS NOT NULL AND _InfoReg14099_Q_002_T_002._Fld14101_RRRef IS NOT NULL\n THEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE\n ELSE NULL\n END\n END \n AND _InfoReg22246_Q_002_T_003._Fld22247_RTRef = \n CASE\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x909d005e4caf2e8d472c07d30d9d40af\n THEN CASE\n WHEN _DocumentJournal25510._Fld25515RRef IS NOT NULL\n THEN 0x00000069\n ELSE NULL\n END\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x9e80a570b3b742fb44770fc3b9c6accd\n THEN CASE\n WHEN _DocumentJournal25510._Fld25516RRef IS NOT NULL\n THEN 0x00000076\n ELSE NULL\n END\n ELSE CASE\n WHEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE = 0x08\n THEN _InfoReg14099_Q_002_T_002._Fld14101_RTRef\n WHEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE IS NULL OR\n _InfoReg14099_Q_002_T_002._Fld14101_TYPE NOT IN (0x01,0x08)\n THEN NULL\n ELSE 0x00000000\n END\n END \n AND _InfoReg22246_Q_002_T_003._Fld22247_RRRef = \n CASE\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x909d005e4caf2e8d472c07d30d9d40af\n THEN _DocumentJournal25510._Fld25515RRef\n WHEN _InfoReg22259_Q_002_T_001._Fld22261RRef = 0x9e80a570b3b742fb44770fc3b9c6accd\n THEN _DocumentJournal25510._Fld25516RRef\n ELSE CASE\n WHEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE = 0x08\n THEN _InfoReg14099_Q_002_T_002._Fld14101_RRRef\n WHEN _InfoReg14099_Q_002_T_002._Fld14101_TYPE IS NULL OR\n _InfoReg14099_Q_002_T_002._Fld14101_TYPE NOT IN (0x01,0x08)\n THEN NULL\n ELSE 0x00000000000000000000000000000000\n END\n END \n AND _InfoReg22246_Q_002_T_003._Fld22248RRef = _InfoReg22259_Q_002_T_001._Fld22261RRef \n AND _InfoReg22246_Q_002_T_003._Fld22249RRef = 0x00000000000000000000000000000000 \n AND _InfoReg22246_Q_002_T_003._Fld22250RRef = #V8TblAli1_Q_000_T_002._Q_001_F_000RRef\n WHERE _InfoReg22259_Q_002_T_001._Fld22260RRef = #V8TblAli1_Q_000_T_002._Q_001_F_000RRef \n AND (_InfoReg22259_Q_002_T_001._Fld22261RRef = \n CASE\n WHEN NOT _DocumentJournal25510._Fld25515RRef IS NULL\n THEN 0x909d005e4caf2e8d472c07d30d9d40af\n END \n OR\n _InfoReg22259_Q_002_T_001._Fld22261RRef = \n CASE\n WHEN NOT _DocumentJournal25510._Fld25516RRef IS NULL\n THEN 0x9e80a570b3b742fb44770fc3b9c6accd\n END \n OR\n _InfoReg22259_Q_002_T_001._Fld22261RRef IN (@P3) OR\n _InfoReg22259_Q_002_T_001._Fld22261RRef IN (SELECT\n _InfoReg14099_Q_003_T_001._Fld24029RRef AS _Q_003_F_000RRef\n FROM\n _InfoReg14099 _InfoReg14099_Q_003_T_001 WITH(NOLOCK)\n WHERE\n _InfoReg14099_Q_003_T_001._Fld14100_TYPE = @P4 AND _InfoReg14099_Q_003_T_001._Fld14100_RTRef = _DocumentJournal25510._DocumentTRef AND _InfoReg14099_Q_003_T_001._Fld14100_RRRef = _DocumentJournal25510._DocumentRRef)) AND \n _InfoReg22246_Q_002_T_003._Fld22247_RRRef IS NULL AND _InfoReg22246_Q_002_T_003._Fld22247_RTRef IS NULL AND _InfoReg22246_Q_002_T_003._Fld22247_TYPE IS NULL))\n THEN 0 \n ELSE 2000000000 \n END + 2000000000 \n END AS _f_3\nFROM\n_DocumentJournal25510 WITH(NOLOCK)\nWHERE\n(_DocumentJournal25510._Date_Time > @P5 OR\n_DocumentJournal25510._Date_Time = @P5 AND (_DocumentJournal25510._DocumentTRef > @P6 OR\n_DocumentJournal25510._DocumentTRef = @P6 AND _DocumentJournal25510._DocumentRRef > @P3)) AND _DocumentJournal25510._Date_Time <= @P7 AND (_DocumentJournal25510._DocumentTRef <> @P6 OR\n_DocumentJournal25510._DocumentRRef <> @P3)\nORDER BY\n_DocumentJournal25510._Date_Time DESC,\n_DocumentJournal25510._DocumentTRef DESC,\n_DocumentJournal25510._DocumentRRef DESC
Ошибка происходит в этом месте :
THEN 0 \n ELSE 2000000000 \n END + 2000000000 \n
т.е. если EXISTS истина, тогда будет 0+2000000000 и ошибки не возникает, иначе будет 2000000000+2000000000 и возникает ошибка :
Msg 8115, Level 16, State 2, Line 24
Arithmetic overflow error converting expression to data type int.
Как я понял, суть запроса определить время последнего документа в журнале.
Если запись ведеться текущим числом, такой запрос не выполняется.
При этом при обычных запросах и открытии журнала ошибки не возникает, и запрос отрабатывает правильно.
Так же данный точно такой же запрос используются в стандартном журнале из которого в последствии был сделан свой журнал. В стандартном журнале ошибки не возникает.
Нарыл в инете топики с обсуждением такой проблемы
здесь и здесь но в них решения проблемы не описанно, а сам уже себе всю голову сломал не могу понять как обойти проблему.
Если кто либо сталкивался или\\и решал данную проблему буду очень признателен за помощь, так же буду признателен сообществу за ваши мысли по возможным путям решения данной проблемы.