Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 4
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> 3. Настройка и использование подсистем при разработке конфигурации , Часть 2. 1С:Предприятия 8.2          
Batchir Подменю пользователя
сообщение 17.05.10, 12:32
Сообщение #1

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3482
Из: Одесса
Спасибо сказали: 1337 раз
Рейтинг: 985.3

Часть 2

3.17. Печать
Подсистема «Печать» предназначена для формирования печатных форм объектов на основе табличных макетов (формат MXL) или макетов офисных документов в форматах Microsoft Word и OpenOffice.org Writer.

Настройка подсистемы «Печать» для конкретного объекта (справочника, документа) заметно отличается в зависимости от использования табличных макетов или макетов офисных документов. В случае с печатными формами офисных документов основная логика по формированию печатной формы выполняется на клиенте, для печатных форм табличных документов вся логика формирования печатной формы выполняется на сервере.

Создание команды печати для формирования табличных печатных форм

Разработка команды печати сводится к созданию в дереве метаданных команды печати и к разработке процедуры Печать в модуле менеджера объекта. Например, в документе Реализация товаров может быть создано несколько команд печати, а в модуле менеджера документа реализована процедура Печать.

Для создания команды печати для объекта необходимо выполнить следующее:

1. Создать общую команду или команду в любом из объектов метаданных. Объект, в котором создается команда, может не совпадать с объектом, для которого будет выполняться печать. Для этой команды задать следующие свойства:

● тип параметра команды – включить ссылку на нужный объект;

● режим использования параметра – Множественный;

● группа – группа команд Печать.

2. В модуле команды реализовать обработчик выполнения команды (см. описание ниже).

3. В модуле менеджера объекта реализовать экспортную процедуру Печать (см. описание далее).

В простейшем случае обработчик команды, открывающий форму печати документов, может выглядеть следующим образом:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
   УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.СчетФактураВыданный",
     "СчетФактура283", ПараметрКоманды, ПараметрыВыполненияКоманды, Неопределено);
КонецПроцедуры

В процедуру УправлениеПечатьюКлиент.ВыполнитьКомандуПечати передаются следующие параметры:

Параметр
Описание

ИмяМенеджераПечати
Имя объекта, в модуле менеджера которого располагается процедура Печать, формирующая табличные документы для этой команды.

Пример: Документ.СчетФактураВыданный

ИменаМакетов
Имена макетов, для которых должны быть сформированы табличные документы. Имена макетов задаются через запятую. Если для какого-то табличного документа нужно установить количество копий печати больше одного, то имя соответствующего макета записывается столько раз, сколько должно быть установлено копий.

Пример: Накладная,Накладная,ТОРГ12 – в результате будет сформировано два табличных документа, причем у табличного документа, сформированного на основе макета Накладная, будет установлено КоличествоЭкземпляров равным 2

ПараметрКоманды
Ссылка или массив ссылок на объекты, которые нужно распечатать

ВладелецФормы
Форма-владелец для открывающейся формы печати документов

ПараметрыПечати
Дополнительные параметры печати, которые передаются в обработчик печати.

Необходимость передачи дополнительных параметров может возникнуть, если при нажатии кнопки печати у пользователя нужно запросить дополнительные данные. Например, может открыться форма, в которой нужно заполнить некоторые данные.

Основное требование к этому параметру – его значение должно допускать передачу с клиента на сервер


Для команды быстрой печати используется процедура ВыполнитьКомандуПечатиНаПринтер, у которой, в отличие от ВыполнитьКомандуПечати, отсутствует четвертый параметр:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
   УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер("Документ.СчетНаОплатуПокупателю",
     "СчетЗаказ", ПараметрКоманды, Неопределено);
КонецПроцедуры


Изменения в модуле менеджера объекта

В модуле менеджера объекта должна быть реализована экспортная процедура Печать со следующими параметрами:

Параметр
Описание

МассивОбъектов
Массив ссылок на объекты, для которых нужно сформировать табличные документы

ПараметрыПечати
Дополнительные параметры печати, переданные из модуля команды

КоллекцияПечатныхФорм
Служебная таблица значений. Через нее передаются имена макетов, для которых должны быть сформированы табличные документы. Возвращаются синонимы макетов (представление), сформированные табличные документы с указанием количества экземпляров, картинка для отображения на закладке соответствующего табличного документа в форме печати документов.

ОбъектыПечати
Список значений, в котором обработчик печати устанавливает соответствие между объектами и именами областей печати табличного документа: значение – Объект, представление – имя области, в которой был выведен объект

ПараметрыВывода
Структура с предопределенными ключами, через которую обработчик печати может вернуть параметры:

- ДоступнаПечатьПоКомплектно – доступна или нет печать покомплектно,

- ПолучательЭлектронногоПисьма – адрес, на который отправлять электронным письмом табличные документы,

- ОтправительЭлектронногоПисьма – учетная запись электронной почты, с которой отправлять письмом табличные документы




Процедура Печать может формировать один или несколько табличных документов за один вызов. Процедура может быть реализована следующим образом:

● Если необходимо, устанавливаются параметры вывода. Например, если доступна печать покомплектно, то устанавливается: ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина.

● Если формируется больше одного табличного документа, то желательно получить необходимые данные до формирования табличных документов. Если же для каждого табличного документа данные получаются разными запросами, то желательно, чтобы документы упорядочивались одинаково.

Для каждого макета, для которого в обработчике предусмотрено формирование табличного документа, проверить, нужно ли формировать табличный документ. Проверка осуществляется вызовом функции УправлениеПечатью.НужноПечататьМакет с параметрами.

Сформированный табличный документ добавляется в коллекцию вызовом процедуры УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию с параметрами.

Пример реализации процедуры Печать:


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм,
           ОбъектыПечати, ПараметрыВывода) Экспорт

     // Устанавливаем признак доступности печати покомплектно.
     ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

     // Проверяем, нужно ли для макета СчетЗаказа формировать табличный документ.
     Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетЗаказ") Тогда

         // Формируем табличный документ и добавляем его в коллекцию печатных форм.
         УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
             "СчетЗаказ", "Счет заказ", ПечатьСчетаЗаказ(МассивОбъектов, ОбъектыПечати));

     КонецЕсли;
КонецПроцедуры

Пример реализации функции, формирующей табличный документ:

Функция ПечатьСчетаЗаказ(МассивОбъектов, ОбъектыПечати)
   // Создаем табличный документ и устанавливаем имя параметров печати.
   ТабличныйДокумент = Новый ТабличныйДокумент;
   ТабличныйДокумент.ИмяПараметровПечати = "ПараметрыПечати_СчетЗаказ";

   // Получаем запросом необходимые данные.
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ
   |  СчетНаОплатуПокупателю.Ссылка КАК Ссылка,
   ......................
   |ГДЕ
   |  СчетНаОплатуПокупателю.Ссылка В(&МассивОбъектов)
   ......................
   |";
   Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
   Шапка = Запрос.Выполнить().Выбрать();

   ПервыйДокумент = Истина;

   Пока Шапка.Следующий() Цикл
     Если Не ПервыйДокумент Тогда
       // Все документы нужно выводить на разных страницах.
       ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
     КонецЕсли;
     ПервыйДокумент = Ложь;
     // Запомним номер строки, с которой начали выводить текущий документ.
     НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

     ......................

     // В табличном документе зададим имя области, в которую был
     // выведен объект. Нужно для возможности печати покомплектно.
     УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
       НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);

   КонецЦикла;
   Возврат ТабличныйДокумент;
КонецФункции


Создание команды печати для формирования печатных форм в формате офисных документов

Разработка команды печати сводится к созданию в дереве метаданных команды печати, разработке одной экспортной процедуры в модуле менеджера объекта и к размещению в конфигурации макета, созданного в офисном приложении (Microsoft Word или OpenOffice.org Writer).

Команда печати, процедура формирования данных печати и макет печатной формы могут размещаться в произвольных объектах метаданных – как в самом объекте, выводимом на печать, так и например, в обработке.

Для создания команды печати для объекта необходимо выполнить следующее:

1. Создать общую команду или команду в любом из объектов метаданных. Объект, в котором создается команда, может не совпадать с объектом, для которого будет выполняться печать. Для этой команды задать следующие свойства:

● тип параметра команды – включить ссылку на нужный объект;

● режим использования параметра – Множественный;

● группа – группа команд Печать.

2. В модуле команды разместить код для формирования печатной формы на основе шаблона:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

// Используется для получения макета.
ИмяМакета = <Идентификатор макета>;

// Получаем всю необходимую информацию из модуля менеджера
// объекта: данные объекта, описание секций, данные макетов.

МакетИДанныеОбъекта =
  УправлениеПечатью.
   ПолучитьМакетыИДанныеОбъектов(
          <Путь к модулю менеджера объекта метаданных>,
          ИмяМакета,
          ПараметрКоманды);

ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета];

Для Каждого ДокументСсылка Из ПараметрКоманды Цикл
  ДвоичныеДанныеМакетов
    = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;

  Области= МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;

  ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];

  Попытка
    ПечатнаяФорма =
  УправлениеПечатьюКлиент
    .ИнициализироватьПечатнуюФорму(ТипМакета);
    Макет = УправлениеПечатьюКлиент
    .ИнициализироватьМакет(ДвоичныеДанныеМакетов[ИмяМакета],
            ТипМакета);

...   // Здесь должен быть код получения областей из макета,
  // их вывода и заполнения в печатной форме.

УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма);
  Исключение
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
    ОбщегоНазначенияКлиентСервер
      .ПолучитьПредставлениеОписанияОшибки(
        ИнформацияОбОшибке()));
  УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма);
  УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
  Возврат;
КонецПопытки;

  УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, Ложь);
  УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
КонецЦикла;

КонецПроцедуры

Пример реализации команды печати можно посмотреть в демонстрационной конфигурации, в модуле команды СчетНаОплатуMSWord документа _ДемоСчетНаОплатуПокупателю, а также в модуле команды СписаниеТоваровMSWord обработки _ДемоПечатнаяФорма.

Функция подготовки данных для печати

Прежде всего, необходимо принять решение по поводу объекта метаданных, в котором будет размещена функция получения данных для печати. В простейшем случае таким объектом может быть тот же объект, где была создана команда печати. В модуле менеджера выбранного объекта метаданных необходимо реализовать экспортную функцию ПолучитьДанныеПечати, которая возвращает данные информационной базы для вывода на печать, двоичные данные макетов офисных документов и описание областей макетов.

Параметр функции
Описание

МассивДокументов
Массив ссылок на объекты, для которых запрашиваются данные для печати

МассивИменМакетов
Массив имен макетов, в которые подставляются данные для печати

ДополнительныеПараметры
Структура с дополнительными параметрами


Возвращаемое значение функции – соответствие с двумя ключами Данные и Макеты. В ключе Данные находится соответствие в формате:

● ключ – ссылка на объект информационной базы;

● значение – структура, где ключ – имя макета, а значение – структура с данными объекта (формат выбирается самостоятельно).

В ключе Макеты находится структура с тремя ключами – ОписаниеОбластей,ТипыМакетов и ДвоичныеДанныеМакетов. В ключе ОписаниеОбластей содержится структура, в которой в качестве ключа выступает имя макета, а значением является структура, содержащая описание области макета, формируемая с помощью вспомогательной функции ДобавитьОписаниеОбласти.



В ключе ДвоичныеДанныеМакетов находится соответствие, в котором ключом является имя макета, а значение содержит двоичные данные макета офисного документа.

Пример кода для реализации процедуры ПолучитьДанныеПечати можно найти в демонстрационной конфигурации, в модуле менеджера объекта _ДемоСчетНаОплатуПокупателю (документ) и в модуле менеджера объекта _ДемоПечатнаяФорма (обработка).

Разработка макета печатной формы

Макет печатной формы может быть подготовлен в одном из форматов – Microsoft Word или OpenOffice.org Writer. Макет представляет собой обычный офисный документ, состоящий из одной или нескольких областей следующих типов:

● СтрокаТаблицы – используется для вывода множества строк;

● Список – используется для вывода множества строк;

● Общая – используется однократно.

Области выделяются при помощи разделителей специального вида:

{v8 Область.<Имя области>}
...
{/v8 Область.<Имя области>}

Каждая область может содержать в себе маркеры параметров для подстановки значений из информационной базы:


{v8 <Имя параметра>}

Также параметры могут размещаться в колонтитулах документа. Области, соответствующие колонтитулам, называются ВерхнийКолонтитул и НижнийКолонтитул.

Для заполнения структуры описания областей макета используется вызов функции УправлениеПечатью.ДобавитьОписаниеОбласти, при этом первым параметром выступает структура с описанием областей, вторым – имя области, как она задана в макете, третьим – тип области (про типы областей см. ниже).

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Печать» следует использовать роль, указанную ниже.

№ Роли и их назначение

1. УправлениеМакетамиПечатныхФорм
Редактирование макетов печатных форм


Пример настройки прав доступа пользователей:

№ Группа пользователей и ее функции
Состав ролей

1. Ответственный за поддержку макетов печатных форм
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»),
● УправлениеМакетамиПечатныхФорм

2. Пользователь, которому разрешено получать и формировать печатные формы
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»),
● ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»),
● БазовыеПрава (из подсистемы «Базовая функциональность»)

3.18. Полнотекстовый поиск
Подсистема «Полнотекстовый поиск» предназначена для включения в конфигурации возможности полнотекстового поиска данных. Индексация данных для полнотекстового поиска может проводиться как регламентными заданиями СлияниеИндексаППД и ОбновлениеИндексаППД, так и пользователем с использованием обработки УправлениеПолнотекстовымПоиском.

Настройка

Для использования подсистемы в конфигурации необходимо разместить в командном интерфейсе обработки ПоискВДанных и УправлениеПолнотекстовымПоиском

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Полнотекстовый поиск» следует использовать роли:

№ Роли и их назначение

1. БазовыеПрава (из подсистемы «Базовая функциональность»)
Использование возможностей полнотекстового поиска. Обновление и слияние индекса ППД

2. ПолныеПрава (из подсистемы «Базовая функциональность»)
Включение и отключение полнотекстового поиска. Обновление и слияние индекса ППД


3.19. Получение файлов из Интернета
Подсистема «Получение файлов из Интернет» добавляет в конфигурацию программный интерфейс для получения файлов из сети Интернет по протоколам HTTP, HTTPS и FTP и сохранения полученных файлов на клиенте, сервере или во временном хранилище.

Настройка
Для использования подсистемы в конфигурации необходимо:

1. Разместить в форме настроек информационной базы (для администратора информационной базы) команду настройки прокси-сервера для доступа к Интернету с сервера «1С:Предприятия». Код команды:

ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера");


2. Разместить в форме персональных настроек работы с информационной базой (для пользователя информационной базы) команду настройки прокси-сервера для доступа к Интернету с клиентского места. Код команды:

ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", Новый Структура("НастройкаПроксиНаКлиенте", Истина));


Настройка прав доступа пользователей

Для настройки прав доступа пользователей к данным подсистемы «Получение файлов из Интернет» следует использовать роли:

№ Роли и их назначение

1. БазовыеПрава (из подсистемы «Базовая функциональность»)
Получение файлов из Интернета, настройка параметров прокси-сервера на стороне клиентского приложения

2. ПолныеПрава (из подсистемы «Базовая функциональность»)
Настройка параметров прокси-сервера для сервера 1С:Предприятие


Пример настройки прав доступа пользователей:

№ Группа пользователей и ее функции
Состав ролей

1. Администратор
ПолныеПрава (из подсистемы «Базовая функциональность»)

2. Пользователь, которому разрешено получать файлы из Интернета:
● Загрузка курсов валют
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»),
● ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»),
● ПолучениеФайловИзИнтернет


Использование при разработке конфигурации

Программный интерфейс подсистемы доступен через экспортные функции общих модулей:

● ПолучениеФайловИзИнтернет,
● ПолучениеФайловИзИнтернетКлиент.

3.20. Пользователи
Подсистема «Пользователи» предназначена для просмотра и редактирования списка пользователей системы (элементы справочника Пользователи), который синхронизируется со списком пользователей информационной базы.

Настройка
Для использования подсистемы в конфигурации необходимо:
● Разместить в командном интерфейсе конфигурации справочник Пользователи.
● Разместить в командном интерфейсе конфигурации обработку ИзменениеПароляПользователяИБ.

Для работы совместно с подсистемой «Управление доступом» требуется вписать реализацию в экспортные функции переопределяемого модуля «ПользователиПереопределяемый».

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Пользователи» следует использовать роли, указанные ниже.

№ Роли и их назначение

1. ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Чтение пользователей. Изменение пароля текущего пользователя

2. ПолныеПрава (из подсистемы «Базовая функциональность»)

Добавление и изменение пользователей. Изменение пароля любого пользователя. Удаление помеченных на удаление объектов подсистемы

3.21. Префиксация объектов

Подсистема «Префиксация объектов» предназначена для автоматического назначения префиксов объектам с учетом настроек программы. Префиксация объектов ведется в разрезах информационных баз и элементов справочника Организации.

Настройка

Настройка подсистемы «Префиксация объектов» зависит от наличия встроенной подсистемы «Организации» в конфигурации и использования РИБ-обмена. Поэтому настройка будет разной в каждом из перечисленных случаев:

● Подсистема «Организации» встроена, используется РИБ-обмен (рекомендуется).

● Встроена только подсистема «Организации».

● Используется РИБ-обмен, без подсистемы «Организации».

● Подсистема «Организации» не встроена, РИБ-обмен не используется (не имеет смысла, однако приводить к ошибкам в работе конфигурации не будет).

Перечисленные случаи с точки зрения настройки подсистемы различаются только созданием необходимых подписок на события. Дополнительные настройки конфигурации для использования подсистемы при РИБ-обмене описаны в конце этой главы.

Настройка подсистемы префиксации объектов сводится к созданию подписок на события. В рамках данной подсистемы подписки на события делятся на две категории: подписки для задания номера или кода объекта и подписки для очистки номера или кода объекта.

Создание подписок на события первой категории

Подписки первой категории предназначены для задания номера или кода объекта при его записи, если номер или код не заполнены.

Следует создать необходимое количество подписок на события. Значения свойств подписок задать согласно таблице.

Имя свойства
Описание

Имя
Имя следует задавать для удобства визуального восприятия подписки и с учетом ограничений, налагаемых на имена объектов метаданных, например, ПриУстановкеНовогоНомераДокумента

Источник
Источниками событий подписки могут быть только объекты типов: Документы, Справочники, Планы видов характеристик, Бизнес-процессы. В качестве источников для одной подписки могут быть использованы объекты только одного типа

Событие
ПриУстановкеНовогоКода или ПриУстановкеНовогоНомера

Обработчик
В качестве процедур-обработчиков подписок следует выбирать экспортные процедуры общего модуля ПрефиксацияОбъектовСобытия


Важно! Для объектов Задача префикс номеров устанавливается подсистемой «Бизнес-процессы и задачи». Использование подсистемы префиксации для объектов Задача будет вызывать ошибки в работе конфигурации.

В общем модуле ПрефиксацияОбъектовСобытия предусмотрено три процедуры-обработчика подписок, каждую из которых необходимо использовать исходя из их назначения и наличия подсистемы «Организации» и использования РИБ-обмена:

● УстановитьПрефиксОрганизации – следует использовать в том случае, если требуется выполнять префиксацию объектов только в разрезе организаций.

● УстановитьПрефиксИнформационнойБазы – следует использовать в том случае, если используется РИБ-обмен, а префиксацию объектов в разрезе организаций выполнять не требуется. К таким типам объектов в основном относятся справочники и планы видов характеристик.

● УстановитьПрефиксИнформационнойБазыИОрганизации – следует использовать в том случае, если требуется выполнять префиксацию объектов в разрезе информационных баз и организаций одновременно. К таким типам объектов в основном относятся документы.

Разработчик может выбирать процедуры-обработчики в зависимости от требуемой бизнес-логики.

Создание подписок на события второй категории

Подписки второй категории предназначены для очистки номера или кода объекта при изменении даты или значения реквизита Организация в шапке объекта. После очистки объекту будет назначен новый код или номер.

Следует создать необходимое количество подписок на события. Значения свойств подписок задать согласно таблице:

Имя свойства
Описание

Имя
Имя следует задавать для удобства визуального восприятия подписки и с учетом ограничений, налагаемых на имена объектов метаданных, например, ПередЗаписьюДокументаПроверкаНомераПоДатеИОрганизации

Источник
Источниками событий подписки могут быть только объекты типов: Документы, Справочники, Планы видов характеристик, Бизнес-процессы. В качестве источников для одной подписки могут быть использованы объекты только одного типа

Событие
ПередЗаписью

Обработчик
В качестве процедур-обработчиков подписок следует выбирать экспортные процедуры общего модуля ПрефиксацияОбъектовСобытия


В общем модуле ПрефиксацияОбъектовСобытия предусмотрено пять процедур-обработчиков подписок, каждую из которых необходимо использовать исходя из типа объектов-источников подписок и наличия реквизита Организация в шапке этих объектов:

● ПроверитьКодСправочникаПоОрганизации – следует использовать для справочников, у которых нумерация кодов выполняется в разрезе справочника Организации.

● ПроверитьНомерБизнесПроцессаПоДате – следует использовать для бизнес-процессов, у которых нумерация выполняется только в пределах заданной периодичности.

● ПроверитьНомерБизнесПроцессаПоДатеИОрганизации – следует использовать для бизнес-процессов, у которых нумерация выполняется в пределах заданной периодичности и в разрезе справочника Организации.

● ПроверитьНомерДокументаПоДате – следует использовать для документов, у которых нумерация выполняется только в пределах заданной периодичности

● ПроверитьНомерДокументаПоДатеИОрганизации – следует использовать для документов, у которых нумерация выполняется в пределах заданной периодичности и в разрезе справочника Организации.

В большинстве случаев в конфигурации требуется создание только трех подписок – две для назначения префиксов справочникам и документам и одна для очистки номеров документов. Пример для создания таких подписок представлен в таблице.

Имя подписки
Обработчик

ПриУстановкеНовогоКодаСправочникаПоИнформационнойБазе
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы

ПриУстановкеНовогоНомераДокументаПоИнформационнойБазеИОрганизации
ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации

ПередЗаписьюДокументаПроверкаНомераПоДатеИОрганизации
ПрефиксацияОбъектовСобытия.ПроверитьНомерДокументаПоДатеИОрганизации




Если объекту требуется устанавливать префикс организации, то в составе реквизитов шапки объекта должен присутствовать реквизит Организация. Обязательные значения свойств реквизита указаны в таблице.

Свойство
Значение

Имя
Организация

Тип
СправочникСсылка.Организации




Если в конфигурации требуется сценарий создания распределенной информационной базы (РИБ-обмен), то для возможности префиксации объектов префиксом информационной базы следует создать следующие объекты метаданных:

● константа ПрефиксИнформационнойБазы – Строка, длина 2, переменной длины;

● функциональная опция Префикс­Информационной­Базы – доступ к значению константы ПрефиксИнформационнойБазы.

Настройка прав доступа пользователей
Настройка прав доступа пользователей к данным подсистемы «Префиксация объектов» не требуется.

Использование при разработке конфигурации

Формат префиксов и логика их установки объектам

Назначение префикса номеру или коду объекта происходит в момент первой записи объекта, если код или номер не были назначены вручную. Назначение префикса также происходит, если номер или код объекта были очищены перед его записью.

Префикс формируется по шаблону:

«ОР» + «ИБ» + «-»

где ОР – 2 символа префикса справочника Организации; ИБ – 2 символа префикса информационной базы; «-» (дефис) – разделитель префикса. Таким образом, максимальная длина префикса составляет 5 символов.

Для конфигураций, в которых используется подсистема префиксации, длину номеров документов и кодов справочников рекомендуется устанавливать не менее 11 символов.

Если префикс информационной базы или префикс организации не указан, то считается, что такой префикс отсутствует, и он не используется для получения итогового префикса объекта.

Программный интерфейс
Программный интерфейс подсистемы доступен через экспортные процедуры-обработчики общего модуля ПрефиксацияОбъектовСобытия.

Дополнительные возможности по настройке формата префиксов
Подсистема предоставляет возможность добавлять к префиксу произвольную последовательность символов, например, дополнительный префикс «А» для документов Счет-фактура на аванс. Для этого в модуле объекта, в обработчике ПриУстановкеНовогоНомера, следует задать значение переменной Префикс.

Пример номера документа с установленным префиксом: ФРГЛ-А001234 – документ № 1234 с пользовательским префиксом «А», заведенный на организацию «ФР», созданный в информационной базе «ГЛ».

3.22. Работа с почтовыми сообщениями
Подсистема «Работа с почтовыми сообщениями» добавляет в конфигурацию программный интерфейс по отправке, получению сообщений и работе с учетными записями электронной почты.

Настройка
Для использования подсистемы необходимо разместить справочник УчетныеЗаписиЭлектроннойПочты в командном интерфейсе.

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Работа с почтовыми сообщениями» следует использовать роли:

№ Роли и их назначение

1. БазовыеПрава (из подсистемы «Базовая функциональность»)
Чтение учетных записей электронной почты, возможность компоновать и отправлять сообщения электронной почты

2. ДобавлениеИзменениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Добавление и изменение учетных записей электронной почты

3. ПолныеПрава (из подсистемы «Базовая функциональность»)
Удаление помеченных на удаление объектов подсистемы



Пример настройки прав доступа пользователей:

№ Группа пользователей и ее функции
Состав ролей

1. Непривилегированный пользователь системы:
● Чтение учетных записей электронной почты, отправка электронного сообщения, получение электронного сообщения по учетной записи
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»),
● БазовыеПрава (из подсистемы «Базовая функциональность»)

2. Ответственный за поддержку НСИ
● Чтение и просмотр учетных записей электронной почты.
● Добавление новых и изменение существующих записей электронной почты.
● Отправка и получение электронного сообщения по учетной записи
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»),
● ДобавлениеИзменениеБазовойНСИ (из подсистемы «Базовая функциональность»)


Использование при разработке конфигурации
Программный интерфейс подсистемы доступен через экспортные функции общего модуля РаботаСПочтовымиСообщениями.

3.23. Работа с файлами
Подсистема «Работа с файлами» предназначена для ведения учета файлов произвольного формата, прикрепляемых к объектам конфигурации. Объектами-владельцами файлов могут быть любые объекты ссылочного типа.

Настройка
При встраивании подсистемы в конфигурацию необходимо предусмотреть интерфейс для настройки этой подсистемы. Например, если есть общая форма настройки прикладной конфигурации, то на ней можно сделать закладку Работа с файлами и разместить поля для редактирования:

● константы МаксимальныйРазмерФайла,

● константы ИзвлекатьТекстыФайловНаСервере,

● константы ТипХраненияФайлов.

Также следует предусмотреть в командном интерфейсе конфигурации вызов общей формы ПерсональныеНастройкиРаботыСФайлами для редактирования персональных настроек пользователя или обеспечить возможность редактирования персональных настроек работы пользователя с файлами в другой, более общей, форме персональных настроек.

Настройка объектов-владельцев файлов
Необходимо выполнить настройку объектов, работающих с файлами:

1. Определить состав объектов, которые будут использовать работу с файлами (составить список объектов с файлами).

2. Задать составной тип реквизита ВладелецФайла справочника Файлы, поместив туда ссылки на объекты с файлами.

3. Задать такой же тип, как и на шаге 2, для параметра ВладелецФайла формы элемента справочника Файлы.

4. Задать такой же тип, как и на шаге 2, для свойства Тип параметра команды общей команды ПрисоединенныеФайлы.

Если необходимо перед закрытием формы проверять наличие занятых текущим пользователем файлов, то нужно вставить в обработчике формы ПередЗакрытием примерно следующий код:


&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   Количество = РаботаСФайлами.КоличествоЗанятыхФайлов(Объект.Ссылка);
   Если Количество <> 0 Тогда
     Результат = Вопрос(
       "Внимание!"
       + Символы.ПС
       + "Один или несколько файлов заняты Вами для редактирования. Продолжить?",
       РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
     Если Результат = КодВозвратаДиалога.Нет Тогда
       Отказ = Истина;
     КонецЕсли;
   КонецЕсли;
КонецПроцедуры

В конкретной реализации этот код может содержать и предложение автоматически закончить редактирование для всех занятых файлов, например, так:


Для Каждого Элемент Из ЗанятыеФайлы Цикл
  РаботаСФайламиКлиент.ЗакончитьРедактирование(Элемент.Ссылка, УникальныйИдентификатор,
    Элемент.ХранитьВерсии, Элемент.РедактируетТекущийПользователь, Элемент.Редактирует);
КонецЦикла;


Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Работа с файлами» следует использовать роли:

№ Роли и их назначение

1. <РаботаСПапкамиФайлов>
Чтение папок файлов по праву чтения элементов данных «Папка». Настройка своей работы с файлами (например, смотри _ДемоРаботаСПапкамиФайлов)

2. <ЧтениеФайлов>
Ограниченное чтение файлов, прикрепленных к объектам. Настройка своей работы с файлами

3. <ДобавлениеИзменениеФайлов>
Ограниченное добавление/изменение файлов, прикрепленных к объектам. Настройка своей работы с файлами

4. ПолныеПрава (из подсистемы «Базовая функциональность»)
Настройка внешнего размещения файлов. Удаление помеченных на удаление объектов подсистемы


Использование при разработке конфигурации
Кроме возможности прикрепления файлов к тем или иным объектам ссылочного типа, подсистема предоставляет следующие дополнительные возможности.

Добавление реквизита типа «СправочникСсылка.Файлы» к объектам конфигурации
При необходимости можно добавить к произвольному объекту ссылочного типа реквизиты типа СправочникСсылка.Файлы. Например, реквизит ПрисоединенныйФайл или Фотография в справочнике физических лиц. Использование этого реквизита в пользовательском интерфейсе определяется по месту и может быть, например, таким:

● Поле ввода и кнопки рядом с ним (Открыть, Занять и пр.).

● Поле картинки в режиме гиперссылки, при нажатии на которую открывается карточка файла.

● Гиперссылка в форме объекта, при нажатии на которую открывается карточка файла или сам файл.

После добавления реквизита типа СправочникСсылка.Файлы к объекту метаданных (объекту с файлом) необходимо также:

● Добавить ссылку на объект с файлом к составному типу реквизита ВладелецФайла справочника Файлы.

● Добавить ссылку на объект с файлом к составному типу параметра ВладелецФайла формы элемента справочника Файлы.

3.24. Регламентные задания

Подсистема «Регламентные задания» позволяет редактировать состав и расписание регламентных заданий, просматривать историю выполнения регламентных и фоновых заданий, а также анализировать ошибки при их выполнении. Если система развернута в клиент-файловом режиме, администратор имеет возможность настроить выполнение регламентных заданий с помощью команды Настройка обработки регламентных заданий обработки Консоль регламентных заданий.

Настройка

Для использования подсистемы в конфигурации необходимо разместить в командном интерфейсе обработку Консоль регламентных заданий.

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Регламентные задания» следует использовать роль, указанную ниже.

№ Роли и их назначение


1. ПолныеПрава (из подсистемы «Базовая функциональность»)
Добавление и изменение регламентных заданий. Настройка обработки регламентных заданий. Просмотр фоновых заданий


3.25. Свойства

Подсистема «Свойства» позволяет создавать и редактировать в режиме 1С:Предприятие дополнительные свойства произвольных объектов конфигурации. Объектами со свойствами могут быть любые объекты ссылочного типа. Подсистема позволяет реализовать как один набор дополнительных свойств для всех экземпляров объектов одного типа, так и несколько наборов свойств для объектов одного типа.

Дополнительные свойства объектов делятся на две категории:

● дополнительные реквизиты,

● дополнительные сведения.

Дополнительные реквизиты – это свойства, которые хранятся в самом объекте (в специализированной табличной части). Дополнительные реквизиты будут создаваться администраторами при внедрении для реализации таких свойств, которые являются неотъемлемой частью объекта, вводятся при его редактировании и доступны для редактирования тем же пользователям, которым доступен и сам объект со свойствами.

Дополнительные сведения будут создаваться администраторами при внедрении для реализации таких свойств, которые являются сведениями об объекте, а не его неотъемлемыми свойствами. Дополнительные сведения, как правило, доступны для редактирования тем пользователям, которые не имеют доступа к самому объекту.

Настройка объекта со свойствами

В описанной ниже методике рассмотрены три подхода к использованию подсистемы свойств:

● когда создается единый набор свойств для каждого экземпляра объекта со свойствами;

● когда разные экземпляры объектов имеют разные наборы дополнительных свойств и при этом для конкретного экземпляра объекта выбирается один из наборов;

● когда разные экземпляры объектов имеют разные наборы дополнительных свойств и при этом для конкретного экземпляра объекта такие наборы свойств могут объединяться.

Ниже приведена как общая последовательность настройки объекта со свойствами, так и действия, которые необходимо выполнить в каждом из перечисленных случаев.

Общие действия для всех объектов конфигурации со свойствами

1. Создать табличную часть ДополнительныеРеквизиты с реквизитами:

● Свойство типа ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения;

● Значение типа Характеристика.ДополнительныеРеквизитыИСведения.

2. В модуле формы каждого объекта со свойствами необходимо реализовать процедуры:


////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ

&НаКлиенте
Процедура РедактироватьСоставСвойств(Команда)
   УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка);

КонецПроцедуры

3. В форме объекта рекомендуется создать специальную группу полей или страницу с наименованием ГруппаДополнительныеРеквизиты для размещения элементов управления, редактирующих свойства объекта.

4. В обработчике события ПриСозданииНаСервере формы объекта необходимо выполнить вызов:

// Обработчик подсистемы "Свойства"
УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "ГруппаДополнительныеРеквизиты");

где ГруппаДополнительныеРеквизиты – имя созданной на шаге 3 группы полей, в которой будут располагаться поля формы, предназначенные для редактирования свойств. Если третьим параметром указать пустую строку, то элементы управления для редактирования свойств будут размещаться в нижней части формы.

5. В обработчике события ОбработкаОповещения добавить код:

// Подсистема "Свойства"
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
   ОбновитьЭлементыДополнительныхРеквизитов();
КонецЕсли;


&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
   УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма,
     РеквизитФормыВЗначение("Объект"));

КонецПроцедуры

6. В обработчике события ПередЗаписьюНаСервере добавить код:

// Обработчик подсистемы "Свойства"
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);

7. В список команд формы добавить команду РедактироватьСоставСвойств и установить значения ее реквизитов.

Свойство
Значение

Заголовок
Изменить дополнительные реквизиты

Картинка
НастройкаСписка

Подсказка
Редактировать состав дополнительных реквизитов

Действие
РедактироватьСоставСвойств

Функциональные опции
ФункциональнаяОпция.ИспользоватьСвойства


8. Поместить эту команду на командную панель формы. После этого установить для свойства команды ТолькоВоВсехДействиях значение Да.

Настройка объекта конфигурации для использования одного набора свойств
В справочнике НаборыСвойств создать предопределенный элемент с именем Справочник_<ИмяОбъекта>, если объект – справочник; Документ_<ИмяОбъекта>, если объект – документ и т. д. Например: Справочник_Сотрудники, Документ_АвансовыйОтчет, БизнесПроцесс_Продажа.

Настройка объекта конфигурации для использования нескольких наборов свойств, исключающих друг друга для конкретного экземпляра объекта
При этом подходе набор свойств, применяемый для конкретного экземпляра объекта, определяется по значению того или иного реквизита объекта. В демонстрационной конфигурации этот вариант применения свойств проиллюстрирован на справочнике _ДемоНоменклатура. В каждом элементе справочника применяется тот или иной набор свойств в зависимости от вида номенклатуры. Справочник имеет реквизит ВидНоменклатуры, и в зависимости от его значения элемент справочника получает тот или иной набор дополнительных свойств.

1. Создать справочник, значения которого соответствуют разным наборам свойств объекта со свойствами. Например, для справочника _ДемоНоменклатура демонстрационной конфигурации – это справочник _ДемоВидыНоменклатуры.

2. В этом справочнике добавить реквизит НаборСвойств типа СправочникСсылка.НаборыСвойств.

3. В обработчике ПередЗаписью модуля этого справочника выполнить вызов УправлениеСвойствами.ПриЗаписиВидаОбъекта и передать туда в качестве параметров записываемый объект и имя набора свойств, например:


// Подсистема Свойства
УправлениеСвойствами.ПередЗаписьюВидаОбъекта(ЭтотОбъект, "Справочник__ДемоНоменклатура");

4. В объекте-владельце свойств создать реквизит, значения которого определяют применение того или иного набора свойств для конкретного экземпляра объекта. Для справочника _ДемоНоменклатура – это реквизит ВидНоменклатуры типа СправочникСсылка._ДемоВидыНоменклатуры.

5. В модуле формы объекта реализовать обработчик ПриИзменении для элемента формы, редактирующего этот реквизит. Для справочника _ДемоНоменклатура это обработчик:

&НаКлиенте
Процедура ВидНоменклатурыПриИзменении(Элемент)
   ОбновитьЭлементыДополнительныхРеквизитов();

КонецПроцедуры

6. В функции УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта прописать ветку, возвращающую имя этого реквизита. Например, для _ДемоНоменклатура это такая ветка:

Копировать в буфер обмена
ИначеЕсли ТипЗнч(Ссылка) = Тип("СправочникСсылка._ДемоНоменклатура") Тогда
Возврат "ВидНоменклатуры";
КонецЕсли;
7. В справочнике НаборыСвойств создать предопределенную группу с именем Справочник_<ИмяОбъекта>, если объект – справочник, Документ_<ИмяОбъекта>, если объект – документ и т. д. Например, для справочника _ДемоНоменклатура создана предопределенная группа Справочник__ДемоНоменклатура.

Настройка объекта конфигурации для использования нескольких наборов свойств, объединяемых для конкретного экземпляра объекта
При этом подходе справочник имеет один предопределенный набор свойств для всех экземпляров объектов, а также несколько предопределенных наборов свойств, которые могут применяться к экземплярам данного объекта по тем или иным условиям. Наборы свойств при этом могут объединяться в зависимости от тех или иных реквизитов объекта. Для этого принимается решение, какие именно реквизиты объекта определяют применение того или иного набора свойств.

В демонстрационной конфигурации этот вариант применения свойств проиллюстрирован на справочнике _ДемоПартнеры. В справочнике введены реквизиты Клиент, Поставщик, Конкурент, ПрочиеОтношения типа Булево, которые и определяют применение одного (если значение Истина установлено для одного реквизита) или сразу нескольких наборов свойств.

Последовательность настройки такого объекта:

1. Принять решение по поводу наборов свойств объекта. Например, для справочника _ДемоПартнеры демонстрационной конфигурации – это четыре набора свойства: реквизиты Клиент, Поставщик, Конкурент, ПрочиеОтношения.

2. Выявить реквизиты объекта, значения которых определяют применение того или иного набора свойств для конкретного экземпляра объекта. Например, для справочника _ДемоПартнеры демонстрационной конфигурации – это реквизиты Клиент, Поставщик, Конкурент, ПрочиеОтношения.

3. В справочнике НаборыСвойств создать предопределенную группу с именем Справочник_<ИмяОбъекта>, если объект – справочник; Документ_<ИмяОбъекта>, если объект – документ и т. д. Например: Справочник_Контрагенты.

4. В этой предопределенной группе для каждого из наборов свойств создать предопределенный элемент с именами Справочник_<ИмяОбъекта>_<ИмяНабораСвойств>, например: Справочник_Партнеры_Клиенты.

5. В этой предопределенной группе создать предопределенный элемент с именем Справочник_<ИмяОбъекта>_Общие для обслуживания свойств общих для всех экземпляров объектов.

6. В общем модуле УправлениеСвойствамиПереопределяемый необходимо в функции ПолучитьДоступныеНаборыСвойствПоСсылке прописать ветку для данного объекта-владельца свойств. Для справочника _ДемоПартнеры Библиотеки стандартных подсистем это код вида:

Если ТипЗначения = Тип("СправочникСсылка._ДемоПартнеры") ИЛИ 
   ТипЗначения = Тип("СправочникОбъект._ДемоПартнеры")Тогда
   Возврат ПолучитьДоступныеНаборыСвойствПартнера(Объект);

где функция ПолучитьДоступныеНаборыСвойствПартнера возвращает наборы свойств объектов для данного экземпляра объекта на основании анализа его свойств. Для _ДемоПартнеры это просто проверка значений реквизитов справочника Клиент, Поставщик, Конкурент, ПрочиеОтношения и формирование соответствующего списка значений со ссылками на наборы свойств.

7. В форме объекта необходимо реализовать обработчики ПриИзменении для тех реквизитов, которые определят состав наборов свойств, применяемых для данного экземпляра объекта. Например, для формы справочника _ДемоПартнеры это обработчик:

&НаКлиенте
Процедура ФлагПризнакПартнераПриИзменении(Элемент)
   ОбновитьЭлементыДополнительныхРеквизитов();
КонецПроцедуры


Настройка прав доступа пользователей

Для настройки прав доступа пользователей к данным подсистемы «Свойства» следует использовать роли:

№ Роли и их назначение

1. ЧтениеДополнительныхСведений
Чтение дополнительных сведений. Чтение списка свойств, возможных наборов свойств, возможных значений свойств

2. ДобавлениеИзменениеДополнительныхСведений
Добавление и изменение дополнительных сведений. Чтение списка свойств, возможных наборов свойств, возможных значений свойств

3. ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Чтение списка свойств, возможных наборов свойств, возможных значений свойств

4. ДобавлениеИзменениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Добавление и изменение: свойств объектов, наборов свойств, возможных значений свойств, дополнительных сведений. Чтение списка свойств

5. ПолныеПрава (из подсистемы «Базовая функциональность»)
Включение и отключение использования свойств. Удаление помеченных на удаление объектов подсистемы


Использование при разработке конфигурации
Для использования дополнительных свойств в отчетах системы компоновки данных (СКД) можно применять ключевое слово встроенного языка запросов ХАРАКТЕРИСТИКИ. Пример использования можно посмотреть в демонстрационной конфигурации, в отчете _ДемоОтчетПоДокументамАрхива.

3.26. Структура подчиненности
Подсистема «Структура подчиненности» предоставляет возможность вывода из формы документа отчета о родительских и дочерних документах текущего документа, а также об их взаимосвязях.

Настройка

Прежде всего необходимо принять решение по поводу списка документов, для которых требуется выводить отчет «Структура подчиненности». Затем задать список типов документов в типах параметра общей команды СтруктураПодчиненности.

Для настройки связи между родительскими и дочерними документами, выводимыми в отчет «Структура подчиненности», необходимо настроить критерий отбора СвязанныеДокументы. В свойстве Тип требуется указать возможные типы родительских документов, а в свойстве Состав – указать реквизиты подчиненных документов, в которых будет происходить поиск родительских документов.

Настройка прав доступа пользователей
Настройка прав доступа пользователей к данным подсистемы «Структура подчиненности» не требуется.

3.27. Управление доступом

Подсистема «Управление доступом» позволяет настраивать права пользователей для произвольных элементов данных информационной базы (элементов справочников, документов, записей регистров, бизнес-процессов, задач и т. д.). Возможно ограничение прав как для отдельных типов объектов метаданных, так и на уровне записей одного типа объекта. Для отдельных объектов информационной базы возможна индивидуальная настройка прав доступа подобно папкам файлов операционной системы.

Подсистема опирается на использование объектов метаданных Роли (редактируются в конфигураторе), Пользователи информационной базы (редактируется в конфигураторе и режиме предприятия) и объектов метаданных подсистемы «Пользователи»: справочник Пользователи и параметр сеанса ТекущийПользователь.

Группы доступа пользователей и их профили

Для настройки прав и ограничений предназначен справочник Группы доступа. Группа доступа объединяет список пользователей, доступ которых определяется профилем (совокупностью прав с логикой ограничений на уровне записей) и списком разрешенных и запрещенных значений доступа, например, организаций, групп партнеров, складов, групп номенклатуры и т.д.

Профиль групп доступа представляет собой совокупность ролей (разрешенных действий) и видов доступа (в разрезе которых ограничивается доступ к данным информационной базы).

Вид доступа – это тип (или типы) объектов информационной базы, в разрезе которых ограничиваются права доступа к данным информационной базы. Например, право чтения документов информационной базы может быть ограничено в разрезе определенных организаций, разрешенных или запрещенных для пользователя. В простейшем случае, если право чтения ограничено по виду доступа Организации, то будут прочитаны только те документы (элементы данных), у которых в поле Организация указана организация из списка разрешенных (или не запрещенных) организаций. Если же в группе доступа не задано никаких разрешенных или запрещенных организаций, то могут быть прочитаны все документы (как будто задан пустой список запрещенных организаций).

Значение доступа – это значение поля элемента данных, разрешенность которого проверяется в условии ограничения права по виду доступа.

Если все значения элемента данных, проверяемые по условию ограничения права, разрешены (не запрещены) хотя бы в одной группе доступа, в которую входит пользователь, тогда у пользователя есть право на элемент данных.


Настройка прав к отдельным объектам информационной базы

Для отдельных объектов информационной базы возможна индивидуальная настройка прав доступа подобно папкам файлов операционной системы. Таким объектам ставится в соответствие специальный вид доступа, а права доступа назначаются через отдельную роль (см. далее раздел «Настройка»).

Например, вид доступа Папки файлов позволяет ограничивать доступ пользователей к отдельным папкам (элементам справочника Папки файлов), а также содержащихся в них дочерним папкам и файлам (элементам справочника Файлы). При этом индивидуальная настройка прав доступа к папкам возможна только для тех пользователей, которые входят в группу доступа пользователей со специальной ролью Работа с папками файлов и видом доступа Папки файлов.


Приведем пример настройки групп доступа пользователей:

● профиль «Пользователь, работающий с файлами» содержит:

● роль «Работа с папками файлов», которая предоставляет доступ к справочникам Папки файлов и Файлы, а также содержит ограничения доступа по виду доступа Папки файлов

● вид доступа Папки файлов.

● группа доступа «Пользователи, работающие с файлами» содержит:

● профиль «Пользователь, работающий с файлами»,

● список разрешенных и запрещенных папок не задан.

Рекомендуется использовать одну группу доступа для всех пользователей с одним видом доступа. Тогда сочетание с другими группами доступа будет просто представить, т. к. в группе будут все права на папки, файлы и другие таблицы, доступ к которым настраивается от папок файлов. А управление правами доступа к папкам файлов можно будет выполнять только через дополнительный интерфейс.

Следует учитывать, что для любого профиля предполагающего работу с файлами, например, профиля с ролью «Добавление и изменение входящих документов», требуется в состав видов доступа включить вид доступа «Папки файлов». Иначе по папкам файлов ограничения не будет и все файлы, которые относятся к папкам файлов, а не к входящим документам, станут доступны пользователю группы доступа с таким профилем. (Предполагается, что ограничение прав чтения, добавления, изменения файлов в роли «Добавление и изменение входящих документов» есть и оно одинаковое для всех ролей по соответствующим правам).

Настройка

Для работы совместно с подсистемой «Управление доступом» требуется вписать реализацию в экспортные функции переопределяемого модуля ПользователиПереопределяемый.

Общий порядок работ

1. Проектирование ролей и профилей групп доступа.
2. Проектирование логики ограничений прав и требуемых видов доступа.
3. Разработка видов доступа. Добавление дополнительных метаданных и размещение некоторых из них на формах интерфейса пользователя.
4. Разработка ролей и профилей групп доступа.
5. Разработка ограничений прав доступа с использованием стандартных шаблонов.
6. Разработка процедур «Заполнить наборы значений доступа» и создание описаний профилей для начального заполнения информационной базы.
7. Проверка работы логики ограничений прав, добавление константы «Ограничивать доступ на уровне записей» в интерфейс, индексирование полей элементов данных, содержащих значения доступа.

Определить состав ролей и профилей групп доступа в конфигурации
Методические рекомендации по проектированию состава ролей конфигурации изложены в разделе Базовая функциональность.

Описать логику ограничений прав и составить список требуемых видов доступа
При разработке ограничений доступа в ролях следует учитывать важную технологическую особенность платформы 1С:Предприятие:

● логика ограничения прав доступа к одним и тем же объектам метаданных следует задавать одинаковыми в различных ролях;

● при обращению к объекту от лица пользователя, которому назначены такие роли, платформа объединяет тексты ограничений прав доступа, которые заданы в ролях. И если эти ограничения различаются, возможно заметное падение производительности системы;

Это обстоятельство является определяющим для разделения вопросов проектирования состава ролей и проектирования ограничений доступа к данным на два независимых вопроса.

Логика ограничения прав доступа описывается для каждого объекта метаданных в виде отдельных требований:

● «Разрешить (запретить) определенное право для всех ролей»

● «Разрешить (запретить) определенное право, если определенный реквизит объекта содержит ссылку на разрешенный (запрещенный) объект или группу объектов»

● «Разрешить (запретить) определенное право, если все (хотя бы один из) определенные реквизиты объекта содержат ссылку на разрешенные (запрещенные) объекты или группу объектов»

Например, опишем логику ограничения доступа к документу Перемещение товаров, ответив на вопрос «Как нужно ограничить доступ к документу?» следующим образом:

● Разрешить чтение документа пользователю, если ему разрешена указанная в документе организация и один из складов, указанный в табличной части документа.

● Разрешить добавление и изменение документа пользователю, если ему разрешена организация и каждый из складов.

● Удаление всегда запрещено, кроме пользователя с ролью ПолныеПрава.

Из этого описания следует, что доступ к документу должен ограничиваться в разрезе элементов справочников Организации и Склады. Следовательно, в список видов доступа нам надо включить такие виды доступа Организации и Склады.

Разработка видов доступа

Для добавления в конфигурацию нового вида доступа требуется:

● Создать предопределенный элемент в плане видов характеристик Виды доступа (указав список всех типов значений доступа, которые будут задаваться пользователю как разрешенные/запрещенные непосредственно, и список всех типов групп значений доступа, которые будут задаваться косвенно).

● Добавить параметр сеанса с именем ОграничиватьДоступПоВиду< имя вида доступа > с типом переменная Строка(50). Этот параметр автоматически настраивается в универсальной процедуре подсистемы «Управление доступом», вызываемой при установке параметров сеанса и автоматически используется в стандартных шаблонах ограничений доступа. Параметр сеанса не используется прикладным разработчиком и пользователем.

● Добавить в процедуру УправлениеДоступомПереопределяемый.СвойстваВидаДоступа(…) описания свойств вида доступа как часть условия на встроенном языке, например, когда добавляются виды доступа «Организации», «Склады», «Папки файлов»:

Функция СвойстваВидаДоступа(Знач ВидДоступа) Экспорт

Свойства = Новый Структура;
Свойства.Вставить("ИменаТаблиц", Новый Массив);
Свойства.Вставить("ВидДоступаБезГруппЗначенияДоступа");
Свойства.Вставить("ВидДоступаСОднойГруппойЗначенияДоступа");
Свойства.Вставить("ВидДоступаЕдинственныйДляТипаЗначенияДоступа");
Свойства.Вставить("ВидДоступаЧерезПраваПоЗначениямДоступа", Ложь);

Если ВидДоступа =
  ПланыВидовХарактеристик.ВидыДоступа.Пользователи Тогда

  Свойства.ИменаТаблиц.Добавить("Справочник.Пользователи");
  Свойства.ВидДоступаБезГруппЗначенияДоступа = Истина;
  Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа =Истина;

// НАЧАЛО ВСТАВКИ ОПИСАНИЯ ВИДОВ ДОСТУПА
// "Организации", "Склады", "Папки файлов"


ИначеЕсли ВидДоступа =
  ПланыВидовХарактеристик.ВидыДоступа.Организации Тогда

Свойства.ИменаТаблиц.Добавить("Справочник.Организации");
Свойства.ВидДоступаБезГруппЗначенияДоступа            = Истина;
Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = Истина;

ИначеЕсли ВидДоступа
  = ПланыВидовХарактеристик.ВидыДоступа.Склады Тогда
  Свойства.ИменаТаблиц.Добавить("Справочник.Склады");
  Свойства.ВидДоступаБезГруппЗначенияДоступа           = Истина;
  Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа= Истина;

ИначеЕсли ВидДоступа
  = ПланыВидовХарактеристик.ВидыДоступа.ПапкиФайлов Тогда
  Свойства.ИменаТаблиц.Добавить("Справочник.ПапкиФайлов");
  Свойства. ВидДоступаЧерезПраваПоЗначениямДоступа = Истина;

// ОКОНЧАНИЕ ВСТАВКИ ОПИСАНИЯ ВИДОВ ДОСТУПА
// "Организации", "Склады", "Папки файлов"

КонецЕсли;

  Возврат Свойства;

КонецФункции // СвойстваВидаДоступа()


Из примера видно, что для вида доступа устанавливаются пять свойств:

● Состав таблиц (типов), значения которых являются значениями доступа по виду доступа.

● Свойство Вид доступа единственный для типа значения доступа, описывающее, что таблица (тип) этого вида доступа не используется в других видах доступа. В связи с этим:

● Для уточнения, к каким видам доступа принадлежит конкретное значение, не нужно добавлять в таблицы значений доступа реквизит ВидДоступа<имя вида доступа> типа Булево и выносить его в форму элемента данных, например, реквизит ВидДоступаПокупатели с синонимом Покупатель и реквизит ВидДоступаПоставщики с синонимом Поставщик.

● При значении Ложь свойства Вид доступа без групп значения доступа не нужно использовать вместо одного реквизита ГруппаДоступа или табличной части ГруппыДоступа несколько (по количеству видов доступа) реквизитов ГруппаДоступа<имя вида доступа> или табличных частей ГруппыДоступа<имя вида доступа> с реквизитом ГруппаДоступа<имя вида доступа>.

● Свойство Вид доступа без групп значения доступа, описывающее, что все типы значений доступа по этому виду доступа указываются в группе доступа пользователей явно, а не через группы значений. В связи с этим:

● Не нужно добавлять в таблицы значений доступа реквизит Группа доступа типа СправочникСсылка.ГруппыДоступа<имя вида доступа>, содержащий группу значений доступа, и не нужно включать тип этого реквизита в состав типов измерения ГруппаДоступа регистра сведений Группы значений доступа, а сам реквизит выносить в форму элемента данных.

● Не нужен Справочник.ГруппыДоступа<имя вида доступа>, который бы содержал группы значений доступа. Также не нужно размещать этот справочник в интерфейсе пользователя рядом со справочником значений доступа (например «Партнеры»), использующим эти группы доступа (например «Группы доступа партнеров»).

● Для записи соответствия значения доступа и группы доступа не нужно включать все типы значений доступа этого вида доступа в подписку на событие Записать группы и виды доступа и в измерение ЗначениеДоступа регистра сведений Группы значений доступа.

● Свойство Вид доступа с одной группой значения доступа имеет смысл при значении Ложь у свойства Вид доступа без групп значений доступа. Оно описывает, что у значения доступа может быть только одна группа доступа. В связи с этим:

● При значении Истина свойства Вид доступа единственный для типа значения доступа не нужно добавлять табличную часть ГруппыДоступа с реквизитом ГруппаДоступа типа СправочникСсылка.ГруппыДоступа< имя вида доступа> в таблицы значений доступа. Также не нужно выносить эту табличную часть в форму элемента данных, например, табличную часть ГруппыДоступаПартнеры с синонимом Группы доступа партнеров и реквизитом ГруппаДоступаПартнеры с синонимом Группа доступа партнера.

● При значении Ложь свойства Вид доступа единственный для типа значения доступа не нужно добавлять табличные части ГруппыДоступа<имя вида доступа> с реквизитом ГруппаДоступа<имя вида доступа> в таблицы значений доступа. Также не нужно выносить такие табличные части в форму элемента данных, например, табличные части ГруппыДоступаПокупатели с синонимом Группы доступа покупателей и ГруппыДоступаПоставщики с синонимом Группы доступа поставщиков и реквизитами ГруппаДоступаПокупатели с синонимом Группа доступа покупателей, ГруппаДоступаПоставщики с синонимом Группа доступа поставщиков.

● Свойство Вид доступа через права по значениям доступа описывает особый случай доступа, когда пользователи и права группы доступа вторично ограничиваются по настройкам, сделанным по значениям доступа, например, по папкам файлов. Остальные свойства вида доступа определять не требуется, но нужно сделать следующее:

● В модуле УправлениеДоступом для каждого типа значений этого вида доступа определить функцию ВозможныеПраваПоЗначениямДоступа, данные которой применяются для автоматического создания формы дополнительного интерфейса.


Функция ВозможныеПраваПоЗначениямДоступа(ТаблицаЗначенийДоступа = Неопределено) Экспорт

  ВозможныеПрава = Новый ТаблицаЗначений();
  ВозможныеПрава.Колонки.Добавить("ВладелецПрав",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
  ВозможныеПрава.Колонки.Добавить("Имя",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(60)));
  ВозможныеПрава.Колонки.Добавить("Синоним",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
  ВозможныеПрава.Колонки.Добавить("Сокращение",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)));
  ВозможныеПрава.Колонки.Добавить("ТребуемыеПрава",
Новый ОписаниеТипов("Массив"));
  ВозможныеПрава.Колонки.Добавить("ТребуемаяРоль",
Новый ОписаниеТипов("Массив"));
  ВозможныеПрава.Колонки.Добавить("ЧтениеВТаблицах",
Новый ОписаниеТипов("Массив"));
  ВозможныеПрава.Колонки.Добавить("ДобавлениеВТаблицах",
Новый ОписаниеТипов("Массив"));
  ВозможныеПрава.Колонки.Добавить("ИзменениеВТаблицах",
Новый ОписаниеТипов("Массив"));
  ВозможныеПрава.Колонки.Добавить("УдалениеВТаблицах",
Новый ОписаниеТипов("Массив"));

// НАЧАЛО ВСТАВКИ ОПИСАНИЯ ПРАВ
  Если ТаблицаЗначенийДоступа = "Справочник.ПапкиФайлов" ИЛИ ТаблицаЗначенийДоступа = Неопределено Тогда

    Право = ВозможныеПрава.Добавить();
    Право.ВладелецПрав  = "Справочник.ПапкиФайлов";
    Право.Имя           = "ЧтениеПапокИФайлов";
    Право.Синоним       = НСтр("ru = 'Чтение папок и файлов'");
    Право.Сокращение    = НСтр("ru = 'Чтение'");
    // Требуемая роль (одна из указанных).
    Право.ТребуемаяРоль.Добавить("_ДемоРаботаСПапкамиФайлов");
    // Права для шаблонов ограничений доступа.
    Право.ЧтениеВТаблицах.Добавить("Справочник.ПапкиФайлов");
    Право.ЧтениеВТаблицах.Добавить("Справочник.Файлы");

    Право = ВозможныеПрава.Добавить();
    Право.ВладелецПрав  = "Справочник.ПапкиФайлов";
    Право.Имя           = "ДобавлениеПапокИФайлов";
    Право.Синоним       = НСтр("ru = 'Добавление папок и файлов'");
    Право.Сокращение    = НСтр("ru = 'Добавление'");
    // Права, требуемые для этого права.
    Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов");
    Право.ТребуемыеПрава.Добавить("ИзменениеПапокИФайлов");
    // Требуемая роль (одна из указанных).
    Право.ТребуемаяРоль.Добавить("_ДемоРаботаСПапкамиФайлов");
    // Права для шаблонов ограничений доступа.
    Право.ДобавлениеВТаблицах.Добавить("Справочник.ПапкиФайлов");
    Право.ДобавлениеВТаблицах.Добавить("Справочник.Файлы");

    Право = ВозможныеПрава.Добавить();
    Право.ВладелецПрав  = "Справочник.ПапкиФайлов";
    Право.Имя           = "ИзменениеПапокИФайлов";
    Право.Синоним       = НСтр("ru = 'Изменение папок и файлов'");
    Право.Сокращение    = НСтр("ru = 'Изменение'");
    // Требуемая роль (одна из указанных).
    Право.ТребуемаяРоль.Добавить("_ДемоРаботаСПапкамиФайлов");
    Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов");
    // Права для шаблонов ограничений доступа.
    Право.ИзменениеВТаблицах.Добавить("Справочник.ПапкиФайлов");
    Право.ИзменениеВТаблицах.Добавить("Справочник.Файлы");

    Право = ВозможныеПрава.Добавить();
    Право.ВладелецПрав  = "Справочник.ПапкиФайлов";
    Право.Имя           = "ПометкаУдаленияПапокИФайлов";
    Право.Синоним       = НСтр("ru = 'Пометка удаления папок и файлов'");
    Право.Сокращение    = НСтр("ru = 'Пометка удаления'");
    // Права, требуемые для этого права.
    Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов");
    Право.ТребуемыеПрава.Добавить("ИзменениеПапокИФайлов");
    // Требуемая роль (одна из указанных).
    Право.ТребуемаяРоль.Добавить("_ДемоРаботаСПапкамиФайлов");

    Право = ВозможныеПрава.Добавить();
    Право.ВладелецПрав  = "Справочник.ПапкиФайлов";
    Право.Имя           = "УправлениеПравами";
    Право.Синоним       = НСтр("ru = 'Управление правами папок файлов'");
    Право.Сокращение    = НСтр("ru = 'Управление правами'");
    // Права, требуемые для этого права.
    Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов");
    // Требуемая роль (одна из указанных)
    Право.ТребуемаяРоль.Добавить("_ДемоРаботаСПапкамиФайлов");

  //ИначеЕсли ТаблицаЗначенийДоступа = "Справочник.ПапкиВнутреннихДокументов" ИЛИ ТаблицаЗначенийДоступа = Неопределено Тогда
  //
  КонецЕсли;
// ОКОНЧАНИЕ ВСТАВКИ ОПИСАНИЯ ПРАВ

  Если ТаблицаЗначенийДоступа <> Неопределено Тогда
    ВозможныеПрава.Колонки.Удалить(0); // Удаление колонки "ВладелецПрав".
  КонецЕсли;

  Возврат ВозможныеПрава;

КонецФункции // ВозможныеПраваПоЗначениямДоступа()


Изменение имен прав, которые уже применялись для настройки, требует разработки процедуры обновления информационной базы, а именно обновления имен прав в измерении Право регистра сведений Права по значениям доступа.

● Определить состав типов в общей команде ПраваПоЗначениюДоступа как состав таблиц в функции ВозможныеПраваПоЗначениямДоступа.

● Использовать в модуле «Управление доступом» функцию ЕстьПравоПоЗначениюДоступа для получения пользователем разрешения на права и функцию РазрешеноУправлениеПравамиПоЗначениямДоступа для получения разрешения управления правами. Не рекомендуется использовать функцию ЕстьПравоПоЗначениюДоступа как аналог, т. к. имя права УправлениеПравами предопределяется в функции РазрешеноУправлениеПравамиПоЗначениямДоступа, а не в ЕстьПравоПоЗначениюДоступа.

Если в конфигурации не будет ни одного вида доступа со свойством Вид доступа через права по значениям доступа, тогда в общей команде ПраваПользователяПоЗначениямДоступа нужно сбросить состав типов (СправочникСсылка.Пользователи, СправочникСсылка.ГруппыПользователей). Если этого не сделать, тогда для указанных справочников останется неработоспособная команда Права доступа.

Поставляемый в библиотеке вид доступа Пользователи необязателен, но при использовании следует иметь в виду, что состав разрешенных значений по этому виду доступа всегда расширяется значением Текущий пользователь.

Разработка ролей и профилей групп доступа

Для каждой спроектированной роли:

● добавить в конфигурацию объект метаданных «роль», установить имя и синоним; снять флажок Устанавливать права для новых объектов; установить флажок Устанавливать права для реквизитов и табличных частей по умолчанию;

● установить флажки напротив требуемых прав по каждому объекту метаданных конфигурации;

● для каждого права каждого объекта метаданных задать тексты ограничений доступа с использованием стандартных шаблонов; стандартные шаблоны следует предварительно скопировать в разрабатываемую роль из роли ДобавлениеИзменениеПользователейИГруппДоступа.

Затем в режиме 1С:Предприятие необходимо создать требуемое количество профилей групп доступа пользователей, заполнив их ролями и видами доступа, созданными на предыдущем шаге.

Затем вписать в процедуру УправлениеДоступомПереопределяемый.ОписанияНачальногоЗаполнения­ПрофилейГруппДос
тупа код по созданию профилей групп доступа пользователей при начальном заполнении информационной базы. Для автоматического формирования текста этой процедуры следует применять обработку УправлениеДоступомИнструментыРазработчика.epf из демонстрационной конфигурации, которая формирует код на основании профилей групп доступа, существующих в информационной базе.

Разработка ограничений прав доступа
Для установки текстов ограничений прав доступа используется один из четырых стандартных шаблонов:


  #ПоЗначениям(…)
   #ПоНаборамЗначений(…)
   #ПоЗначениямРасширенный(…)
   #ПоЗначениямИНаборамРасширенный(…)

Примечание. Подробное описание назначения и параметров шаблонов приведено в комментариях в начале текстов самих шаблонов. Рекомендуется изучить это описание перед прочтением дальнейшего материала.

Наличие сразу нескольких шаблонов объясняется необходимостью решать различные задачи. Так, шаблоны #ПоЗначениям и #ПоНаборамЗначений позволяют решить большую часть простых задач.

Шаблон #ПоЗначениям

Шаблон #ПоЗначениям позволяет сделать проверку разрешения значений доступа в полях таблицы по указанным видам доступа. Например, текст ограничение доступа вида :

#ПоЗначениям("Документ.ОприходованиеТоваров", "Чтение", "", "Организации", "Организация", "Склады", "Склад", …).

ограничивает чтение таким образом, что пользователь увидит в списке документов Оприходование товаров только те документы, у которых в реквизите Организация есть значение, разрешенное пользователю по виду доступа Организации, и в реквизите Склад есть значение, разрешенное по виду доступа Склады. Причем значения должны быть разрешены в группе доступа пользователей одновременно, а профиль групп доступа пользователей должен включать роль с правом чтения документов Оприходование товаров.

В шаблон возможно передать максимум 16 полей.

Этот и другие шаблоны поддерживают передачу условия на языке запросов. Для этого вместо имени вида доступа нужно указать пустую строку, а вместо имени поля – текст на языке запросов. Например:

#ПоЗначениям("Документ.ОприходованиеТоваров", "Чтение", "", "Организации", "Организация", "Склады", "Склад", "", "Т.ХозяйственнаяОперация = Значение(Перечисление.Хозяйвствен-ныеОперации.Инветаризация) ", …),

В этом примере добавляется условие: документ доступен только при хозяйственной операции Инвентаризация. Из этого следует, что при другой хозяйственной операции, например, Прочее, документ не будет доступен ни одному пользователю, кроме пользователей с ролью Полные права.

Шаблон #ПоНаборамЗначений

В первую очередь, шаблон #ПоНаборамЗначений предназначен для ограничения чтения журналов документов, у которых документы имеют различные ограничения чтения, например по составу реквизитов. Обычно для журнала приходится делать анализ типа документа, а затем применять те же проверки, что и для документа соответствующего типа, т. е. повторять логику ограничений всех документов в каждом журнале, в которые входят документы. Как правило, этот способ очень «дорогой» в плане производительности и трудоемок с точки зрения разработки и сопровождения. Поэтому целесообразно предварительно записывать значения доступа объектных элементов данных, необходимые для работы логики ограничения доступа, в специальный регистр – НаборыЗначенийДоступа. Такие данные называются наборами значений доступа.

Например, если для документа Оприходование товаров в регистре НаборыЗначенийДоступа имеются две записи:

<Документ1>, , "Организации", "Организация1"

<Документ1>, , "Склады", "Склад1";

то текст ограничения права чтения журнала, содержащего этот документ, может быть таким:

#ПоНаборамЗначений("ЖурналДокументов.СкладскиеДокументы", "Чтение", "", "Ссылка"),

где Ссылка – имя стандартного реквизита журнала.

В этом случае логика работы шаблона #ПоНаборамЗначений такова: по переданному значению стандартного реквизита Ссылка строки журнала в регистре Наборы значений доступа будут найдены все пары (Вид доступа, Значение доступа) и выполнена проверка, что все найденные значения по указанным видам разрешены текущему пользователю.

Помимо журналов документов, шаблон #ПоНаборамЗначений может применяться для реализации логики ограничения доступа и к другим объектам метаданных. При этом использование заранее подготовленных наборов значений позволяет избежать те ограничения, которые накладываются языком запросом. Применение шаблона #ПоНаборамЗначений требует дополнительной настройки объекта метаданных. К объекту метаданных необходимо добавить табличную часть Наборы значений доступа с реквизитами, совпадающими с измерениями регистра сведений Наборы значений доступа. В тексте ограничения доступа в качестве четвертого параметра шаблона шаблон #ПоНаборамЗначений указывается пустая строка.

Шаблон #ПоЗначениямРасширенный

В некоторых случаях возможностей шаблонов #ПоЗначеним и #ПоНаборамЗначений бывает недостаточно. Например, требуется ограничить документ Перемещение товаров так, чтобы чтение документа было доступно пользователю, исходя из разрешенности Организации и СкладаПолучателя или СкладаОтправителя, а запись документа была доступна только при разрешенности всех трех: Организации, СкладаПолучателя и СкладаОтправителя. В этом случае право Запись можно ограничить, применив шаблон #ПоЗначениям, а право Чтение – нет.

Для ограничений, предполагающих логику с ИЛИ, предусмотрены расширенные шаблоны, в частности #ПоЗначениямРасширенный. Например, ограничение для права Чтения выглядит следующим образом:


#ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "Чтение", "", "", "", "Организации", "Т.Организация", "И(","Склады", "Т.СкладОтправитель", "ИЛИ", "Склады", "Т.СкладПолучатель", ")", …)

Требуется явно указывать псевдоним текущей таблицы «Т.» перед полем.

Кроме реализации логики ИЛИ, расширенные шаблоны могут использоваться для проверки реквизитов табличных частей, через присоединяемые таблицы. Для того чтобы к основной таблице присоединить табличную часть, в четвертый параметр шаблона нужно передать текст на языке запросов, например:


"внутреннее соединение Документ.ПеремещениеТоваров.Номенклатура
КАК Т2 по Т.Ссылка = Т2.Ссылка",

Затем добавить три параметра в шаблон, например,

"ГруппыНоменклатуры", "Т2.Номенклатура", "".

Для шаблона основная таблица как бы расширяется полями табличной части, а за счет явного применения псевдонимов их можно указывать, подобно полям основной таблицы. В результате получится такое ограничение:


#ПоЗначениямРасширенный("Документ.ПеремещениеТоваров", "Чтение", "", "внутреннее соединение Документ.ПеремещениеТоваров.Номенклатура КАК Т2 по Т.Ссылка = Т2.Ссылка", "", "Организации", "Т.Организация", "И(","Склады", "Т.СкладОтправитель", "ИЛИ", "Склады", "Т.СкладПолучатель", ")И",  "ГруппыНоменклатуры", "Т2.Номенклатура", "", …)

Присоединение табличной части может привести к проверке нескольких строк (табличная часть многострочная). В этом случае документ будет доступен, если доступна хотя бы одна «расширенная» строка, т. е. для строк присоединенных таблиц применяется логика ИЛИ, и такую логику можно назвать «вертикальной», в то время как логику объединения результатов проверки значений доступа в полях можно назвать «горизонтальной». «Вертикальная» логика И не поддерживается.

Шаблон #ПоЗначениямИНаборамРасширенный

Для решения задачи ограничения доступа к объектам метаданных в зависимости от ограничений к другим объекта может использоваться шаблон #ПоЗначениямИНаборамРасширенный.

Например, файл (элемент справочника Файлы), прикрепленный к документу Поступление товаров и услуг, должен быть доступен пользователю при тех же условиях, что и сам документ.

Такая задача могла бы быть решена «повтором» логики ограничения документа Поступление товаров и услуг в ограничении справочника Файлы. Однако на практике, это привело бы к необходимости синхронно изменять логику ограничения документов и файлов. Кроме того, поскольку элементы справочника Файлы могут «прикрепляться» к произвольному числу объектов метаданных (например, к папкам файлов, документам Заказ, Расходная накладная и т. п.), то задача реализации логики ограничения доступа к файлам сравнима по сложности с ограничением доступа к журналу документов, который содержит все виды документов конфигурации.

Поэтому для решения такой задачи подсистема «Управление доступом» предоставляет специальный вид доступа По объекту доступа. При использовании этого вида доступа в шаблоне следует указывать в качестве имени вида доступа символ «пробел». Вид доступа По объекту доступа предполагает, что в поле находится значение, которое является ссылкой на объект данных, например, документ. А в регистре Наборы значений доступа, как и для шаблона #ПоНаборамЗначений, записаны наборы значений для этого объекта, которые следует проверить.

Тогда, используя шаблон #ПоЗначениямИНаборамРасширенный, возможно проверить не одно значение доступа, а набор значений, подготовленный по документу, ссылка на который находится в реквизите, например, Владелец элемента справочника Файлы.


#ПоЗначениямИНаборамРасширенный("Справочник.Файлы", "Чтение", "", "", "",  
" ", "Т.Владелец" , "", …)

Наборы значений элементов справочника Файлы требуют связанного обновления при изменении, например, наборов значений доступа документа-владельца файлов – Поступление товаров и услуг.

Структура регистра Наборы значений доступа поддерживает логику ИЛИ для значений доступа и различные наборы по правам доступа. Для реализации логики ИЛИ добавлено измерение Номер набора типа Число, а для наборов по правам добавлено четыре ресурса – Чтение, Добавление, Изменение, Удаление типа Булево.

Сложную логику ИЛИ записать в регистр «напрямую» не получится. Номер набора позволяет сделать для одного ссылочного элемента данных (например, документа) несколько наборов значений, по которым проверяется доступность документа. Причем достаточно, чтобы значения хотя бы одного набора значений были доступны одновременно. Точнее результаты проверки значений доступа по видам доступа в пределах набора с одним номером объединяются по И, а результаты проверки целых наборов объединяются по ИЛИ. Например, для документа Перемещение товаров регистр Наборы значений доступа будет содержать записи для логики права Чтения:

<Документ2>, 0, "Организации", "Организация1"

<Документ2>, 0, "Склады", "Склад1";

<Документ2>, 1, "Организации", "Организация1"

<Документ2>, 1, "Склады", "Склад2";

Видно, что хотя значений доступа три: Организация1, Склад1, Склад2, записей в регистре – четыре. Это связано с раскрытием скобок в логическом выражении О1 и (С1 или С2), что приводит к логическому выражению суммы произведений О1 и С1 или О1 и С2.

Действие раскрытия скобок первичного логического выражения, объединяющего результаты проверки значений доступа, необходимо для заполнения наборов записей для регистра сведений Наборы значений доступа.

Записи для логики прав Добавление, Изменение, Удаление:

<Документ2>, 0, "Организации", "Организация1"

<Документ2>, 0, "Склады", "Склад1";

<Документ2>, 0, "Склады", "Склад2";

Пример процедуры заполнения приведен ниже.

Шаблон #ПоЗначениямИНаборамРасширенный отличается от шаблона #ПоЗначениямРасширенный только поддержкой специального вида доступа По объекту доступа. Для использования этого вида доступа необходимо передать пробел в качестве имени.

Для быстрого выбора шаблона можно использовать схему-алгоритм.


Разработка процедур «Заполнить наборы значений доступа»

При использовании стандартных шаблонов #ПоНаборамЗначений или #ПоЗначениямИНаборамЗначений с видом доступа По объекту доступа потребуется записать в регистр Наборы значений доступа сведения, требуемые для их работы.

Запись наборов значений доступа выполняется при записи объектов, например, документов. Перед записью вызывается пользовательская процедура заполнения наборов значений доступа.

Процедура заполнения помещается в модуль объекта и его тип включается в подписку на события Записать наборы значений доступа и в состав типов измерения Объект регистра сведений Наборы значений доступа.

При заполнении можно использовать только три измерения и четыре ресурса:

● Номер набора (если набор один, то заполнять не нужно);

● Вид доступа (назначить явно);

● Значение доступа (назначить явно);

● Чтение, Добавление, Изменение, Удаление (если у всех значение Ложь, значит всем установить значение Истина).

Количество заполненных записей должно быть больше нуля, иначе будет вызвано исключение. Это важно, т. к. процедура заполнения наборов значений доступа после включения режима Ограничивать доступ на уровне записей вызывается из регламентного Заполнение данных для ограничения доступа для тех объектов, которые имеют пустой набор записей в регистре Наборы значений доступа. При выключении режима Ограничивать доступ на уровне записей производится запись пустого набора. Следовательно, при включении режима выполнится заполнение очищенных наборов (или полное заполнение). Регламентное задание вызывается многократно и отрабатывает порцию заполнения. Очищение наборов происходит «по ходу» перезаписи объектов.

Технология порционного заполнения/очистки использует пустой набор записей как флаг состояния. Когда нужно записать заведомо «недоступный набор», записывается не пустой набор, а следующий:


Строка =  Таблица.Добавить();
Строка.ВидДоступа =
  ПланыВидовХарактеристик.ВидыДоступа.Пользователи;
Строка.ЗначениеДоступа = Справочники.Пользователи.ПустаяСсылка();

Когда нужно записать заведомо «доступный набор», записывается не пустой набор, а следующий:

Строка =  Таблица.Добавить();
Строка.ВидДоступа =
  ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка();
Строка.ЗначениеДоступа = Неопределено;

Пример процедуры:

ЗаполнитьНаборыЗначенийДоступа в модуле объекта (тип объекта включается в подписку на событие ЗаписатьНаборыЗначенийДоступа);

Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт

  Строка = Таблица.Добавить();
  Строка.Добавление      = Истина;
  Строка.Изменение       = Истина;
  Строка.Удаление        = Истина;
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Организации;
  Строка.ЗначениеДоступа = Организация1;

  Строка = Таблица.Добавить();
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Склады;
  Строка.ЗначениеДоступа = Склад1;

  Строка = Таблица.Добавить();
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Склады;
  Строка.ЗначениеДоступа = Склад2;


  Строка = Таблица.Добавить();
  Строка.НомерНабора     = 1;
  Строка.Чтение          = Истина;
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Организации;
  Строка.ЗначениеДоступа = Организация1;

  Строка = Таблица.Добавить();
  Строка.НомерНабора     = 1;
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Склады;
  Строка.ЗначениеДоступа = Склад1;

  Строка = Таблица.Добавить();
  Строка.НомерНабора     = 2;
  Строка.Чтение          = Истина;
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Организации;
  Строка.ЗначениеДоступа = Организация1;

  Строка = Таблица.Добавить();
  Строка.НомерНабора     = 2;
  Строка.ВидДоступа      = ПланыВидовХарактеристик.ВидыДоступа.Склады;
  Строка.ЗначениеДоступа = Склад2;

КонецПроцедуры // ЗаполнитьНаборыЗначенийДоступа()


Если в процедуре заполнения не задан номер набора, то считается, что добавлен один набор с номером 0. Если в пределах набора с одним номером не указано ни одно из прав Чтение, Добавление, Изменение или Удаление, то считается, что набор относится ко всем правам. Рекомендуется использовать повторяющиеся наборы для различных прав, чтобы сократить запись в регистр.

В наборе допускается только одна запись с уникальной комбинацией Вид доступа и Значение доступа, дубли удаляются автоматически.

Создание описаний профилей для начального заполнения информационной базы

Для начального заполнения профилей информационной базы и возможности последующего восстановления профилей, измененных администратором системы, используется процедура ОписанияНачальногоЗаполненияПрофилейГруппДоступа в модуле УправлениеДоступомПереопределяемый.

Для создания кода описания на встроенном языке рекомендуется применять обработку в демонстрационной конфигурации «Библиотека стандартных подсистем» _ДемоУправлениеДоступомИнструментыРазработчика.


Функция ОписанияНачальногоЗаполненияПрофилейГруппДоступа() Экспорт

  ОписанияПрофилей = Новый Массив;

  // Начало. Программный код для начального заполнения профилей.

  // _Демо начало примера

  // Описание для заполнения профиля
    "Демо: Пользователь папок файлов".
  ОписаниеПрофиля =
    УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа();
  ОписаниеПрофиля.Идентификатор =
    "a8f63f6c-ced9-11de-862f-001d600d9ad2";
  ОписаниеПрофиля.Наименование  =
    "Демо: Пользователь папок файлов";
  ОписаниеПрофиля.Роли.Добавить
     (  "БазовыеПрава"                  );
  ОписаниеПрофиля.Роли.Добавить
     (  "ЗапускТонкогоКлиента"          );
  ОписаниеПрофиля.Роли.Добавить
     (  "_ДемоРаботаСПапкамиФайлов"     );
  ОписаниеПрофиля.ВидыДоступа.Добавить
    (      "Пользователи"              );
  ОписаниеПрофиля.ВидыДоступа.Добавить
    (      "_ДемоПапкиФайлов"          );
  ОписанияПрофилей.Добавить(ОписаниеПрофиля);

  // Описание для заполнения профиля
    "Демо: Пользователь".
  ОписаниеПрофиля =
    УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа();
  ОписаниеПрофиля.Идентификатор =
    "09e56dbf-90a0-11de-862c-001d600d9ad2";
  ОписаниеПрофиля.Наименование  =
    "Демо: Пользователь демо-БСП";
  ОписаниеПрофиля.Роли.Добавить
    (  "БазовыеПрава"                  );
  ОписаниеПрофиля.Роли.Добавить
    (  "ЗапускТонкогоКлиента"          );
  ОписаниеПрофиля.Роли.Добавить
    (  "ЧтениеБазовойНСИ"              );
  ОписаниеПрофиля.Роли.Добавить
    (  "_ДемоИспользованиеБСП"         );
  ОписаниеПрофиля.ВидыДоступа.Добавить
    (      "Пользователи"              );
  ОписаниеПрофиля.ВидыДоступа.Добавить
    (      "_ДемоОрганизации"          );
  ОписанияПрофилей.Добавить(ОписаниеПрофиля);

  // _Демо окончание примера

  // Окончание. Программный код для начального заполнения профилей.

  Возврат(ОписанияПрофилей);

КонецФункции // ОписанияНачальногоЗаполненияПрофилейГруппДоступа()


Добавление константы «Ограничивать доступ на уровне записей» в интерфейс

Для включения/отключения режима ограничения на уровне записей нужно добавить константу Ограничивать доступ на уровне записей в форму констант для настройки системы. Важно сделать предупреждения, как в общей форме _ДемоНастройкаСистемы.

Проверка работы логики ограничений прав

Ошибка доступа к данным связана либо с недостаточным, либо избыточным доступом к данным информационной базы. В общем виде подобные нештатные ситуации могут возникать по причинам, перечисленным ниже.

● Возможная ошибка при администрировании доступа пользователей (в компетенции администратора пользователей):

● некорректная настройка состава пользователей или групп пользователей группы доступа; необходимо включить пользователя или группу пользователей в группы доступа или исключить его из них;

● некорректный профиль группы доступа; выбрать другой профиль групп доступа, создать дополнительный профиль или скорректировать имеющийся профиль;

● некорректная настройка ограничений доступа в группе доступа (списков разрешенных значений, например, организаций, групп партнеров, складов); необходимо добавить или исключить значений доступа из группы доступа.

● Возможная ошибка при разработке или доработке конфигурации на внедрении (в компетенции разработчика конфигурации):

● некорректная настройка состава ролей в профиле;

● некорректная настройка состава видов доступа в профиле.

● Ошибки разработчика конфигурации:

● ошибка в параметрах стандартного шаблона;

● ошибка в составе типов подписок на события;

● ошибка в процедуре заполнения наборов значений доступа;

● ошибка в описании свойств вида доступа.

● Ошибки разработчика этой подсистемы:

● ошибка в стандартном шаблоне;

● ошибка особенностей работы СУБД;

● ошибка в общих модулях подсистемы.

Для диагностики ошибок доступа к данным можно воспользоваться следующими средствами:

● Убедиться, что содержимое регистра сведений Наборы значений доступа содержит наборы значений доступа, которые записаны таким образом, что наборы с одинаковыми номерами для одного объекта соответствуют логике ограничения доступа по условию И, а затем наборы с разными номерами «складываются» по условию ИЛИ;

● если по интересующему нас объекту в регистре сведений нет записей, то объект не будет доступен для всех пользователей;

● если по интересующему нас объекту нет ни одного набора, относящегося к конкретному праву доступа, значит, то для всех пользователей нет этого права на объект;

● Убедиться, что указаны корректные имена таблиц в параметрах шаблонов в текстах ограничения доступа. Нужно иметь виду, что параметр Имя таблицы не может быть проверен в языке запросов.

● Если в параметре Имя таблицы содержится имя несуществующей таблицы, то к интересующему нас объекту информационной базы не будет доступа у всех пользователей.

● Если в параметре Имя таблицы ошибочно указано имя другой существующей таблицы, то логика ограничения прав доступа к интересующему нас объекту будет «взята» от другого объекта.

● Убедиться, что в функции СвойстваВидаДоступа переопределяемого модуля УправлениеДоступомПереопределяемый заданы корректные свойства для реализованных в конфигурации видов доступа.

● Если свойства заданы некорректно, то это может привести к сложно определяемой ошибке, когда логика ограничения прав доступа работает неправильно, но не наблюдается очевидных сообщений об ошибках при работе с программой.

Настройка прав доступа пользователей

Для настройки прав доступа пользователей к данным подсистемы «Управление доступом» следует использовать следующие роли:

№ Роли и их назначение

1. ДобавлениеИзменениеПользователейИГруппДоступа
Добавление и изменение групп доступа пользователей. Чтение пользователей и профилей групп доступа. Изменение пароля текущего пользователя

2. ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Чтение пользователей, ограниченное чтение групп доступа пользователей, ограниченное чтение профилей групп доступа

3. ПолныеПрава (из подсистемы «Базовая функциональность»)
Включение и отключение ограничений прав доступа на уровне записей. Ручной запуск регламентного задания Заполнение данных для ограничения доступа. Удаление помеченных на удаление объектов подсистемы


Пример настройки прав доступа пользователей:

№ Группа пользователей и ее функции
Состав ролей

1. Администратор пользователей:
● Настройка доступа пользователей, администраторов пользователей (кроме полноправных пользователей)
● ЗапускТонкогоКлиента (из подсистемы «Базовая функциональность»)
● БазовыеПрава (из подсистемы «Базовая функциональность»)
● ДобавлениеИзменениеПользователейИГруппДоступа
● ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»)

Использование при разработке конфигурации

Программный интерфейс подсистемы доступен через экспортные функции общего модуля УправлениеДоступом.

3.28. Физические лица

Подсистема «Физические лица» предназначена для унификации имен объектов метаданных, общих для типовых конфигураций. Содержит только определения объектов метаданных и их базовую реализацию.

К объектам метаданных подсистемы допускается добавлять любые реквизиты, формы, макеты и пр., а также изменять любые свойства, включая синоним. Не допускается изменять только имена объектов метаданных.

Настройка прав доступа пользователей
Для настройки прав доступа пользователей к данным подсистемы «Физические лица» следует использовать следующие роли:

№ Роли и их назначение

1. ЧтениеБазовойНСИ (из подсистемы «Базовая функциональность»)
Чтение физических лиц (без персональных данных)

2. ДобавлениеИзменениеФизическихЛиц

Добавление и изменение физических лиц (без персональных данных)

3. ЧтениеПерсональныхДанныхФизическихЛиц
Чтение персональных данных и физических лиц

4. ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц
Изменение физических лиц. Добавление и изменение персональных данных физических лиц

5. ПолныеПрава (из подсистемы «Базовая функциональность»)
Удаление объектов подсистемы, помеченных на удаление

Спасибо сказали: Kiber, Mike_,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.11.19, 17:48
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!