Имя: Пароль:
1C
1С v8
Запрос в документе к самому себе RLS.
0 OnCheck
 
17.08.12
11:48
Добрый день, господа.
Пытаюсь навешать RLS на документы. Делаю в ЗУП, путем дописания стандратного шаблона, использую все типовые объекты. (Кто не вкурсе, РЛС по ПодразделениямОрганизации работает только для вакансий и кандидатов. Пытаюсь навешать их так же на документы.)
Дописал шаблон. При открытии формы списка. документ РЛС успешно фильтрует.
Дает открыть документ, модифицировать и проводить, но... при проведении в запросе к шапке не дает выбрать самого себя, т.е. запрос возвращется пустым. Натолкните на мысль почему запрос к самому себе пустой?
В дополнении скажу, если выполняю запроса в консоли запроса, то документ возвращается, траблы только при обработке проведения. Так же, если убираю поля на которых стоит РЛС, запрос возвращает документ. Нид хелп. Спасибо.
1 Лоботряс
 
17.08.12
11:52
На какие права ставил шаблон?
2 OnCheck
 
17.08.12
11:54
На КадровикРегламентныхДанных, у пользователя права "Пользователь,КадровикРегламентныхДанных"
3 Лоботряс
 
17.08.12
11:54
ну и текст шаблона было бы неплохо наверное
4 Лоботряс
 
17.08.12
11:54
Не, на чтение, изменение?
5 OnCheck
 
17.08.12
11:56
большой :-), сейчас
6 OnCheck
 
17.08.12
11:56
// Шаблон огланичения доступа ОбщееУправлениеДоступом позволяет ограничить доступ к текущей таблице по одному или двум
// объектам ограничения доступа
//
// Параметры:
//  Параметр(1) - Уровень доступа. Возможные значения:    "Чтение", "ЧтениеСписка", "ЧтениеДанныхСГруппами",
//                "Запись", "ЧтениеСГруппами", "ЗаписьСГруппами"
//      "Чтение" -          чтение всей таблицы, кроме справочника ФизическиеЛица для которого чтение всей
//                            таблицы это - "ЧтениеДанныхСГруппами"
//      "ЧтениеСпискаСГруппами" - применяется для справочника ФизическиеЛица - чтение
//                          только тех данных таблицы, которые позволяют отображать список объектов
//      "ЧтениеДанныхСГруппами" - чтение всех данных таблицы без ограничения доступа к группам справочника,
//                          допустимо применение только для справочника ФизическиеЛица
//      "Запись" -          запись данных в таблицу
//      "ЧтениеСГруппами" - чтение таблицы без ограничения доступа к группам справочника, применяется для справочников
//                          с иерархией групп и элементов (например, Сотрудники)
//      "ЗаписьСГруппами" - запись таблицы без ограничения записи групп справочника, применяется для справочников
//                          с иерархией групп и элементов (например, Сотрудники)
//
//  Первый объект доступа:
//  Параметр(2) - Имя объекта доступа (см. перечисление ВидыОбъектовДоступа).
//                Обязательно - непустая строка
//  Параметр(3) - Имя поля таблицы с объектами доступа, содержащего ссылку на группу доступа (пример - ГруппаДоступаФизическогоЛица)
//                Если задана пустая строка, то таблица объектов доступа не содержит такого поля (пример - Организации)
//  Параметр(4) - Имя поля текущей таблицы в котором находится ссылка на объект доступа.
//                Обязательно - непустая строка
//  Параметр(5) - Полное имя вложенной таблицы (табличной части) в которой находится ссылка на объект доступа
//                Полное имя это, например, "Документ.НачислениеЗарплаты.ФизическиеЛица"
//                Если задана пустая строка, то поле из Параметр(4) находится непосредственно в текущей таблице
//
//  Второй объект доступа задается параметрами 6-9. Назначение - такое же, как для параметров 2-5
//  Если Параметр(6) (имя второго объекта доступа) задан как пустая строка, то доступ к текущей таблице ограничивается
//  только по одному объекту доступа. При этом все параметры 6-9 должны быть заданы как пустые строки (иное
//  просто не имеет смылса)
//
//  Параметр(10)- Имя поля со значеним булево, по котому налагается дополнитеьное ограничение
//                Применяется для ограничения по виду учета (регламентированный, управленческий)
//
//  Все десять параметров шаблона должны быть явно заданы.
//
//  Пример использования:
//      <решетка>ОбщееУправлениеДоступом("Чтение",
//      "Организации", "", "Организация", "",
//      "ФизическиеЛица", "ГруппаДоступаФизическогоЛица", "Физлицо", "Документ.НачислениеЗарплаты.ФизическиеЛица",
//      "")
//      Здесь ограничичается доступ на чтение
//      Текущая таблица ограничивается по двум объектам - организациям и физическим лицам
//      При этом ссылка на организацию находится в поле "Организация", а ссылка на физлицо в
//      поле "ФизЛицо" табличной части "РаботникиОрганизации"
//      Ограничения доступа задаются в геристре НастройкиПравДоступаПользователей для групп физических лиц, а не
//      для физических лиц непосредственно. При этом поле справочника физических лиц с группами доступа
//      называется "ГруппаДоступаФизическогоЛица"
//      Ограничение по виду учета не устанавливается
//      
//

//{pack by stas 2012-08-13
//##Если &ИспользоватьОграничениеПо#Параметр(2) ИЛИ &ИспользоватьОграничениеПо#Параметр(6) ##Тогда
##Если &ИспользоватьОграничениеПо#Параметр(2) ИЛИ &ИспользоватьОграничениеПо#Параметр(6) ИЛИ &ИспользоватьОграничениеПо#Параметр(11) ##Тогда
//}
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
       СоставГруппы.Ссылка КАК ГруппаПользователей
   ИЗ
       Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
   ГДЕ
       СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
   ПО (ИСТИНА)
ГДЕ
##Если "#Параметр(1)" = "ЧтениеСГруппами" ИЛИ "#Параметр(1)" = "ЧтениеДанныхСГруппами"  ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ИЛИ "#Параметр(1)" = "ЧтениеСпискаСГруппами" ##Тогда
ТекущаяТаблица.ЭтоГруппа ИЛИ
##КонецЕсли
##Если "#Параметр(10)" <> "" ##Тогда    
ТекущаяТаблица.#Параметр(10) = ИСТИНА И
##КонецЕсли
(НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1 КАК ПолеОтбора
   ИЗ
       РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
   ГДЕ
       НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
       И ВЫБОР
           // без групп доступа, поле доступа в шапке
           ##Если &ИспользоватьОграничениеПо#Параметр(2) И "#Параметр(3)" = "" И ("#Параметр(5)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   (ВЫБРАТЬ
       1 КАК ПолеОтбора
   ) КАК Оптимизация
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.#Параметр(4)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(2)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в шапке
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(2) И (НЕ ("#Параметр(3)" = "")) И ("#Параметр(5)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   Справочник.#Параметр(2) КАК ОбъектыДоступа
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(3)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(2)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
ГДЕ
   ОбъектыДоступа.Ссылка = ТекущаяТаблица.#Параметр(4)
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // без групп доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(2) И "#Параметр(3)" = "" И (НЕ ("#Параметр(5)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(5) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ТабличнаяЧасть.#Параметр(4)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(2)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(2) И (НЕ "#Параметр(3)" = "") И (НЕ ("#Параметр(5)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(5) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.#Параметр(2) КАК ОбъектыДоступа
       ПО
           ОбъектыДоступа.Ссылка = ТабличнаяЧасть.#Параметр(4)
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(3)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(2))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(2)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           ##КонецЕсли

           // без групп доступа, поле доступа в шапке
           ##Если &ИспользоватьОграничениеПо#Параметр(6) И "#Параметр(7)" = "" И ("#Параметр(9)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   (ВЫБРАТЬ
       1 КАК ПолеОтбора
   ) КАК Оптимизация
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.#Параметр(8)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(6)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в шапке
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(6) И (НЕ ("#Параметр(7)" = "")) И ("#Параметр(9)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   Справочник.#Параметр(6) КАК ОбъектыДоступа
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(7)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(6)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
ГДЕ
   ОбъектыДоступа.Ссылка = ТекущаяТаблица.#Параметр(8)
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // без групп доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(6) И "#Параметр(7)" = "" И (НЕ ("#Параметр(9)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(9) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ТабличнаяЧасть.#Параметр(8)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(6)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(6) И (НЕ "#Параметр(7)" = "") И (НЕ ("#Параметр(9)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(9) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.#Параметр(6) КАК ОбъектыДоступа
       ПО
           ОбъектыДоступа.Ссылка = ТабличнаяЧасть.#Параметр(8)
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(7)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(6))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(6)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           ##КонецЕсли

//{pack by stas 2012-08-13
           
           // без групп доступа, поле доступа в шапке
           ##Если &ИспользоватьОграничениеПо#Параметр(11) И "#Параметр(12)" = "" И ("#Параметр(14)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   (ВЫБРАТЬ
       1 КАК ПолеОтбора
   ) КАК Оптимизация
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       //НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.#Параметр(13)
       //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
//pack
   ГДЕ
       ВЫБОР
                       
##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда

   КОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В
   (
   ВЫБРАТЬ ПЕРВЫЕ 1
   
       ВЫБОР
           КОГДА
               ТабличнаяЧасть.ПериодЗавершения > НачалоДня(&ТекущаяДата) ИЛИ ТабличнаяЧасть.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
               ТОГДА ТабличнаяЧасть.ПодразделениеОрганизации
           ИНАЧЕ
               ТабличнаяЧасть.ПодразделениеОрганизацииЗавершения
       КОНЕЦ
       
   ИЗ
       РегистрСведений.РаботникиОрганизаций КАК ТабличнаяЧасть
   ГДЕ
       ТабличнаяЧасть.Период <= НачалоДня(&ТекущаяДата)
       И ТабличнаяЧасть.Сотрудник = ТекущаяТаблица.Ссылка
   УПОРЯДОЧИТЬ ПО
       ТабличнаяЧасть.Период Убыв
   )
   ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ

##Иначе
                       
   КОГДА 1 В
   (
   ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       РегистрСведений.РаботникиОрганизаций КАК ТабличнаяЧасть
   ГДЕ
       ВЫБОР
           КОГДА
               ТабличнаяЧасть.ПериодЗавершения > &ТекущаяДата ИЛИ ТабличнаяЧасть.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
               ТОГДА ТабличнаяЧасть.ПодразделениеОрганизации
           ИНАЧЕ
               ТабличнаяЧасть.ПодразделениеОрганизацииЗавершения
       КОНЕЦ = НастройкиПравДоступаПользователей.ОбъектДоступа
       И ТабличнаяЧасть.Сотрудник = ТекущаяТаблица.Ссылка
   
           
   )
   ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ

##КонецЕсли

   КОНЕЦ

//}

)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в шапке
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И (НЕ ("#Параметр(12)" = "")) И ("#Параметр(14)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   Справочник.#Параметр(11) КАК ОбъектыДоступа
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(12)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
ГДЕ
   ОбъектыДоступа.Ссылка = ТекущаяТаблица.#Параметр(13)
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // без групп доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И "#Параметр(12)" = "" И (НЕ ("#Параметр(14)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(14) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ТабличнаяЧасть.#Параметр(13)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И (НЕ "#Параметр(12)" = "") И (НЕ ("#Параметр(14)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(14) КАК ТабличнаяЧасть
//{pack by stas 2012-08-13
       //ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.#Параметр(11) КАК ОбъектыДоступа
       //ПО
       //    ОбъектыДоступа.Ссылка = ТабличнаяЧасть.#Параметр(13)
//}
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
//{pack by stas 2012-08-13
           НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           //НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(12)
           //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           //##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
           //И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           //##КонецЕсли
//}
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
//{pack by stas 2012-08-13

       И ВЫБОР
       КОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В
       (
       ВЫБРАТЬ ПЕРВЫЕ 1
       
           ВЫБОР
               КОГДА
                   РаботникиОрганизаций.ПериодЗавершения > #Параметр(12) ИЛИ РаботникиОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
                   ТОГДА РаботникиОрганизаций.ПодразделениеОрганизации
               ИНАЧЕ
                   РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения
           КОНЕЦ
           
       ИЗ
           РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       ГДЕ
           РаботникиОрганизаций.Период <= #Параметр(12)
           И РаботникиОрганизаций.Сотрудник = ТабличнаяЧасть.Сотрудник
       УПОРЯДОЧИТЬ ПО
           РаботникиОрганизаций.Период Убыв
       )
       ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
       
       КОНЕЦ

       //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
       ))
//}
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           ##КонецЕсли

//}
           
           ИНАЧЕ ИСТИНА
       КОНЕЦ = ЛОЖЬ))
       И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
##КонецЕсли
7 pumbaEO
 
17.08.12
11:56
(5) Ты в УТ 11 посмотри, вот там большой.
8 OnCheck
 
17.08.12
11:57
впрнципеи важно только это:
9 OnCheck
 
17.08.12
11:58
//{pack by stas 2012-08-13
           
           // без групп доступа, поле доступа в шапке
           ##Если &ИспользоватьОграничениеПо#Параметр(11) И "#Параметр(12)" = "" И ("#Параметр(14)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   (ВЫБРАТЬ
       1 КАК ПолеОтбора
   ) КАК Оптимизация
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       //НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.#Параметр(13)
       //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
//pack
   ГДЕ
       ВЫБОР
                       
##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда

   КОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В
   (
   ВЫБРАТЬ ПЕРВЫЕ 1
   
       ВЫБОР
           КОГДА
               ТабличнаяЧасть.ПериодЗавершения > НачалоДня(&ТекущаяДата) ИЛИ ТабличнаяЧасть.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
               ТОГДА ТабличнаяЧасть.ПодразделениеОрганизации
           ИНАЧЕ
               ТабличнаяЧасть.ПодразделениеОрганизацииЗавершения
       КОНЕЦ
       
   ИЗ
       РегистрСведений.РаботникиОрганизаций КАК ТабличнаяЧасть
   ГДЕ
       ТабличнаяЧасть.Период <= НачалоДня(&ТекущаяДата)
       И ТабличнаяЧасть.Сотрудник = ТекущаяТаблица.Ссылка
   УПОРЯДОЧИТЬ ПО
       ТабличнаяЧасть.Период Убыв
   )
   ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ

##Иначе
                       
   КОГДА 1 В
   (
   ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       РегистрСведений.РаботникиОрганизаций КАК ТабличнаяЧасть
   ГДЕ
       ВЫБОР
           КОГДА
               ТабличнаяЧасть.ПериодЗавершения > &ТекущаяДата ИЛИ ТабличнаяЧасть.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
               ТОГДА ТабличнаяЧасть.ПодразделениеОрганизации
           ИНАЧЕ
               ТабличнаяЧасть.ПодразделениеОрганизацииЗавершения
       КОНЕЦ = НастройкиПравДоступаПользователей.ОбъектДоступа
       И ТабличнаяЧасть.Сотрудник = ТекущаяТаблица.Ссылка
   
           
   )
   ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ

##КонецЕсли

   КОНЕЦ

//}

)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в шапке
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И (НЕ ("#Параметр(12)" = "")) И ("#Параметр(14)" = "") ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
   1
ИЗ
   Справочник.#Параметр(11) КАК ОбъектыДоступа
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
   ПО
       НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(12)
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
       ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
       И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
       ##КонецЕсли
       И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
       ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
       И НастройкиПравДоступаПользователей.Запись = ИСТИНА
       ##КонецЕсли
ГДЕ
   ОбъектыДоступа.Ссылка = ТекущаяТаблица.#Параметр(13)
)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // без групп доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И "#Параметр(12)" = "" И (НЕ ("#Параметр(14)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(14) КАК ТабличнаяЧасть
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
           НастройкиПравДоступаПользователей.ОбъектДоступа = ТабличнаяЧасть.#Параметр(13)
           И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           ##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
           И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           ##КонецЕсли
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
       И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           // с группами доступа, поле доступа в табличной части
           ##ИначеЕсли &ИспользоватьОграничениеПо#Параметр(11) И (НЕ "#Параметр(12)" = "") И (НЕ ("#Параметр(14)" = "")) ##Тогда
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
               ТОГДА
               ВЫБОР
КОГДА (НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1
   ИЗ
       #Параметр(14) КАК ТабличнаяЧасть
//{pack by stas 2012-08-13
       //ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.#Параметр(11) КАК ОбъектыДоступа
       //ПО
       //    ОбъектыДоступа.Ссылка = ТабличнаяЧасть.#Параметр(13)
//}
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
       ПО
//{pack by stas 2012-08-13
           НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           //НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.#Параметр(12)
           //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.#Параметр(11))
           //##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "#Параметр(11)" = "ФизическиеЛица" ##Тогда
           //И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
           //##КонецЕсли
//}
           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
           ##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
           И НастройкиПравДоступаПользователей.Запись = ИСТИНА
           ##КонецЕсли
   ГДЕ
       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
//{pack by stas 2012-08-13

       И ВЫБОР
       КОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В
       (
       ВЫБРАТЬ ПЕРВЫЕ 1
       
           ВЫБОР
               КОГДА
                   РаботникиОрганизаций.ПериодЗавершения > #Параметр(12) ИЛИ РаботникиОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
                   ТОГДА РаботникиОрганизаций.ПодразделениеОрганизации
               ИНАЧЕ
                   РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения
           КОНЕЦ
           
       ИЗ
           РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       ГДЕ
           РаботникиОрганизаций.Период <= #Параметр(12)
           И РаботникиОрганизаций.Сотрудник = ТабличнаяЧасть.Сотрудник
       УПОРЯДОЧИТЬ ПО
           РаботникиОрганизаций.Период Убыв
       )
       ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
       
       КОНЕЦ

       //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL))
       ))
//}
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
               КОНЕЦ
           ##КонецЕсли

//}
10 Лоботряс
 
17.08.12
12:00
офигеть...
11 OnCheck
 
17.08.12
12:01
(10) а куда деваться?
12 OnCheck
 
17.08.12
12:06
Суть в том что на уровне Списка документов работает исправно, но на уровне запроса в обработке проведения нет, почему так может быть?
13 Лоботряс
 
17.08.12
12:09
(12)ну в списке - право просмотр по-моему, а в обработке проведения - чтение.
14 OnCheck
 
17.08.12
12:10
(13) не, опытным путем установил, что список реагирует на право "чтение" :-)
15 Лоботряс
 
17.08.12
12:15
в порядке бреда - нужно через ИЛИ добавить условие, которое проверяет ссылку на текущий документ, если ссылка равна, то истина
16 OnCheck
 
17.08.12
12:16
вот перевод запроса в более читабельную форму
17 OnCheck
 
17.08.12
12:16
ВЫБРАТЬ

   Ссылка
   
ИЗ Документ.ПриемНаРаботуВОрганизацию КАК ТекущаяТаблица
   ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
       СоставГруппы.Ссылка КАК ГруппаПользователей
   ИЗ
       Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
   ГДЕ
       СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
   ПО (ИСТИНА)
ГДЕ
(НЕ 1 В
   (ВЫБРАТЬ ПЕРВЫЕ 1
       1 КАК ПолеОтбора
   ИЗ
       РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
   ГДЕ
       НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
       И ВЫБОР
           
           // с группами доступа, поле доступа в табличной части
           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
               ТОГДА
               ВЫБОР
               КОГДА (НЕ 1 В
                   (ВЫБРАТЬ ПЕРВЫЕ 1
                       1
                   ИЗ
                       Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТабличнаяЧасть
                       //ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ОбъектыДоступа
                       //ПО
                       //    ОбъектыДоступа.Ссылка = ТабличнаяЧасть.ПодразделениеОрганизации
                       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                       ПО
                           //НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.Ссылка
                           //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                           НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций)
                           //##Если "#Параметр(1)" <> "ЧтениеСпискаСГруппами" И "ПодразделенияОрганизаций" = "ФизическиеЛица" ##Тогда
                           //И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ФизическиеЛицаДанные)
                           //##КонецЕсли
                           И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
                           //##Если "#Параметр(1)" = "Запись" ИЛИ "#Параметр(1)" = "ЗаписьСГруппами" ##Тогда
                           //И НастройкиПравДоступаПользователей.Запись = ИСТИНА
                           //##КонецЕсли
                   ГДЕ
                       ТабличнаяЧасть.Ссылка = ТекущаяТаблица.Ссылка
                       
                       И ВЫБОР
                       КОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В
                       (
                       ВЫБРАТЬ ПЕРВЫЕ 1
                       
                           ВЫБОР
                               КОГДА
                                   РаботникиОрганизаций.ПериодЗавершения > ТабличнаяЧасть.ДатаПриема ИЛИ РаботникиОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1,1,1)
                                   ТОГДА РаботникиОрганизаций.ПодразделениеОрганизации
                               ИНАЧЕ
                                   РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения
                           КОНЕЦ
                           
                       ИЗ
                           РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
                       ГДЕ
                           РаботникиОрганизаций.Период <= ТабличнаяЧасть.ДатаПриема
                           И РаботникиОрганизаций.Сотрудник = ТабличнаяЧасть.Сотрудник
                       УПОРЯДОЧИТЬ ПО
                           РаботникиОрганизаций.Период Убыв
                       )
                       ТОГДА ЛОЖЬ
                       ИНАЧЕ ИСТИНА
                       
                       КОНЕЦ
                       //И НастройкиПравДоступаПользователей.ВидОбъектаДоступа ЕСТЬ NULL
                       ))
               ТОГДА ИСТИНА
               ИНАЧЕ ЛОЖЬ
               КОНЕЦ


           
           ИНАЧЕ ИСТИНА
       КОНЕЦ = ЛОЖЬ))
       И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL
18 OnCheck
 
17.08.12
12:17
(15) добавить где?
19 Лоботряс
 
17.08.12
12:21
в шаблон
20 OnCheck
 
17.08.12
12:23
(19) а текущий документ я как передам? только не говори про параметры сеанса :-)
21 OnCheck
 
17.08.12
12:27
убрал слово "разрешенные" из запроса, и соответственно получил "У пользователя недостаточно прав на исполнение операции над базой данных."
22 Лоботряс
 
17.08.12
12:33
(20)молчу:), хз может как-то можно извратиться... вникать в твой огромный шаблон, извини, сил нет:))
23 OnCheck
 
17.08.12
12:36
дык дело то в том запрос правильный, условия все верные, в чем именно извращаться не понимаю. Я уже и ветку в консоли запроса назвал извраты :-)
24 Лоботряс
 
17.08.12
12:50
(20)+(опять же в порядке бреда...), а как параметр из текущей таблицы нельзя передать?
25 OnCheck
 
17.08.12
12:55
тогда вернутся все документы, запись будет равна самой себе.
26 Лоботряс
 
17.08.12
12:56
я просто держу твою ветку на плаву :))
27 OnCheck
 
17.08.12
12:57
я понял :-), полагаю, что не пятницу, самая фигня, что отладчиком туда ни как не влезть.
28 Homer
 
17.08.12
13:02
а если попробовать добавить к списку разрешенных подразделений пустое подразделение!
29 Homer
 
17.08.12
13:03
точнее "пустое значение"
30 OnCheck
 
18.08.12
21:49
в пнд надо будет попробовать, а есть еще варианты?
31 Nexux
 
18.08.12
22:36
офф: парсер лох (с)
32 OnCheck
 
20.08.12
07:07
Тема все еще актуальна, по каким причинам RLS отрабатывает по разном в режиме просмотра списка документов и в режиме проведения документа. В режиме просмотра , доки видный и открываются, а так же проводятся, а в режиме проведения, документ не может получить ссылку на самого себя!?
33 OnCheck
 
20.08.12
12:26
(29) да, ты совершенно прав, в момент проведения , документ непроведен, а доступность документа основывается на результате проведения документа, поэтому нужно вводить дополнительные условия, ОГРОМНОЕ спасибо за подсказку!