Содержание
Страницы: ← Предыдущая 1 2
В случае, если интеграция производится с нетиповой конфигурацией «1С:Документооборот КОРП», релизы файлов отличаются или производится интеграция в новую версию «1С:Документооборот КОРП», необходимо выполнить объединение в ручном режиме. Примерный объем работы ~ 2 часа.
Для выполнения такого объединения, выберите в меню «Конфигурация» пункт «Сравнить, объединить с конфигурацией из файла…» и выберите cf-файл поставки модуля (располагается на DVD диске и/или на сайте технической поддержки https://support.analitica.ru).
В открывшемся окне сначала снимите все флажки со всех объектов, а затем в его верхней части нажмите кнопку «Действия» и выберите пункт «Отметить по подсистемам файла».
Отметьте только один флажок «КП_КорпоративныеПроцессы». Пример показан на рисунке ниже.
Дополнительно включите подсистему «КП_КорпоративныеПроцессы» в разделе «Общие», а также предопределенные элементы справочников «ПредметыИнструкций» и «НаборыДополнительныхРеквизитовИСведений». Далее нажмите кнопку «Выполнить» и дождитесь окончания процедуры объединения.
Убедитесь, что подсистема «КП_КорпоративныеПроцессы» включена в разделе «Общие». Далее нажмите в верхней части формы кнопку «Действия» и выберите первый пункт «Установить режим для всех». Установите режим объединения «Объединить с приоритетом основной конфигурации» и порядок объектов «Из основной конфигурации».
Дополнительно установите флажок для предопределенных элементов справочников «Предметы инструкций» и «НаборыДополнительныхРеквизитовИСведений». Пример показан на рисунке ниже.
Далее нажмите кнопку «Выполнить» и дождитесь окончания процедуры объединения. После завершения процедуры объединения объектов можно переходит к ручной настройке объектов и редактированию текстов модулей.
После объединения метаданных настройте командный интерфейс конфигурации. Для этого нажмите правой кнопкой мышки на корневом элементе структуры метаданных («ДокументооборотКОРП») и выберите пункт «Открыть командный интерфейс конфигурации»), выберите пункт «Корпоративные процессы» и переместите его в нужное место, например выше, чем подсистема «Настройка и администрирование» как показано на рисунке ниже.
Для переноса программного кода откройте в отдельном окне «Конфигуратор» с Модулем «Корпоративные процессы» из которого будет копироваться программный код.
Изменения в программном коде, необходимые для корректной работы Модуля «Корпоративные процессы» для «1С:Документооборот КОРП» отмечены тегами analitica.ru (тег является адресом основного веб-сайта разработчика, адрес сайта с продуктом https://документооборот.net).
Если в программном коде изменена одна строка, то она отмечена комментарием //analitica.ru
Если же в программном коде изменен блок строк, то он отмечен следующим образом:
//{analitica.ru
…новые или измененные строки
//analitica.ru}
Обратите внимание, в некоторых случаях строки типового модуля были закомментированы, в таком случае они также включаются в блок отмеченный тегами analitica.ru
Ниже приводится списки объектов метаданных и программных модулей, в которые необходимо внести изменения:
Объект метаданных | Место | Описание |
ОбщаяФорма.Редактирование ПредметаЗаполнения | Реквизит.ТочкаМаршрута | Добавлен тип Справочник.КП_ТипТочкиДействие |
План видов характеристик ДополнительныеРеквизитыИСведения | Тип значений характеристик | Добавлен БизнесПроцесс.КП_Процесс |
ОпределяемыеТипы | ВладелецФайлов | Добавлен тип БизнесПроцесс.КП_Процес |
Подписки на события ПраваДоступаПриЗаписиБизнесПроцессов и ПраваДоступаПередЗаписьюБизнес Процессов | Добавить объект «КП_Процессы» | |
Обработка.НастройкаПрограммы.Форма | ОсновнаяФорма — модуль и реквизиты формы | Добавлена команда КП_КорпоративныеПроцессы и процедура в код |
Регистр сведений ПравилаАвтоматического ЗапускаБизнесПроцессов | Измерение ШаблонБизнесПроцесса | Добавить ссылку на справочник КП_ВидыПроцессов |
Общая форма СозданиеБизнесПроцесса | Изменен тип реквизита в форме | ДеревоШаблонов \ Шаблон ссылка добавлен вид «Справочник.КП_ВидыПроцессов» |
Программный модуль | Место | Описание |
МодульУправляемогоПриложения | ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы | Добавлен программный код |
ОбщийМодуль.ОтсутствияКлиент | ПолучитьИсполнителей БизнесПроцесса |
Добавлен программный код |
ОбщийМодуль.СтартПроцессовСервер | ПроцессПриЗаписи | Добавлен программный код |
ОбщийМодуль.СтартПроцессовСервер | СтартоватьПроцесс | Добавлен программный код |
ОбщийМодуль.РаботаСИнструкциями Переопределяемый | СоответствияФормИ ПредметовИнструкций |
Добавлен программный код |
ОбщийМодуль.Мультипредметность | Тексты функций и процедур | Добавлен программный код, обратите внимание на закомментированные строки |
ОбщийМодуль.Мультипредметность Переопределяемый |
Тексты функций и процедур | Добавлен программный код |
ОбщийМодуль. РаботаСБизнес ПроцессамиВызовСервера |
ДобавитьПроцессыИ ПодчиненныеЗадачи |
Добавлен код |
ОбщийМодуль. ПраваДоступаНаБизнес Процессы |
ПолучитьТаблицу УчастниковПроцесса |
Добавлен программный код |
РегистрСведений.Настройка ПовторенияБизнесПроцессов |
ФормаЗаписи.Бизнес ПроцессНачалоВыбора |
Добавлен программный код |
ОбщаяФорма.Редактирование ПредметаЗаполнения |
ПриСозданииНаСервере | Добавлен программный код, обратите внимание на закомментированные строки |
ОбщаяКоманда.ОткрытьСписокПроцессов | Текст модуля команды | Заменено имя формы списка, обратите внимание на закомментированные строки |
Общий модуль ОбменСМобильнымиDMX ФормированиеXMLСервер | Текст модуля | Добавлен программный код |
ОбщийМодуль. ОбновлениеИнформационной БазыПереопределяемый | ПослеОбновления ИнформационнойБазы | Добавлен программный код |
ЗадачаИсполнителя. Форма.ЗадачиМне | ПолучитьСписокАктивныхЗадач | Добавлен программный код |
БизнесПроцесс. РешениеВопросовВыполненияЗадач. ФормаРассмотренияПереносаСрока | ПродолжениеВыполненияЗадачи ПеренестиПослеВыбора ФактическогоИсполнителя | Добавлен программный код |
Общий модуль БизнесСобытияВызовСервера | Текст модуля | Добавлен программный код |
Общий модуль СрокиИсполненияПроцессовКОРП | Текст модуля | Добавлен программный код |
Общая форма СозданиеБизнесПроцесса | Текст модуля | Добавлен программный код |
ОбщийМодуль. ОбработкаЗапросовXDTOБизнесПроцессыИЗадачи | Текст модуля | Добавлен программный код |
При копировании элементов форм из конфигурации в конфигурацию обращайте внимание на то, что при копировании у кнопок может сбиться привязка к командам, в таком случае её нужно поправить вручную.
Во всех формах задач (в каждом бизнес-процессе) необходимо в разделе «Командный интерфейс», пункт «Перейти» снять флажки у объектов «Задачи точек действий схемы» и «Состояние задач документооборота» (данные флажки включаются платформой «1С» автоматически, при добавлении нового регистра сведений с типом измерения «ЗадачаИсполнителя»).
Пример показан на рисунке ниже.
После добавления новых объектов у них включено право «ИнтерактивноеУдаление» для роли «ПолныеПрава». Данное право необходимо отключить на объектах подсистемы «Корпоративные процессы», сделать это можно либо в каждом добавленном объекте, либо открыв роль «Полные права» в разделе «Роли» и сняв права «Интерактивное удаление», а также «Интерактивная пометка на удаление предопределенных», «Интерактивное снятие пометки удаления предопределенных», «Интерактивное удаление помеченных предопределенных» на объектах «Справочники» и «Бизнес-процессы». Пример показан на рисунке ниже.
Далее необходимо установить корректные права доступа на объекты подсистемы. Для этого сохраните сделанные изменения и снова в меню «Конфигурация» выберите пункт «Сравнить, объединить с конфигурацией из файла» и выберите cf-файл поставки.
Нажмите кнопку «Действия \ Установить режим для всех» в нижней части формы и установите режим объединения «Объединить с приоритетом основной конфигурации» и порядок объектов «Из основной конфигурации».
Отметьте следующие роли в ветви «Общие \ Роли»:
ИзменениеВыполнениеЗадач
КонтрольЗадачИБизнесПроцессов
РаботаСЗадачамиИБизнесПроцессами
УправлениеБизнесПроцессами
Пример показан на рисунке ниже.
После отметки ролей нажмите кнопку «Выполнить».
Проверьте корректность модулей объединенной конфигурации, для этого перейдите в меню «Конфигурация» и выполните команду «Проверка модулей». В результате проверки не должно быть ни каких сообщений, относящихся к объектам с префиксом «КП_», а также других, кроме относящихся к тестовому центру фирмы «1С» (переменным «ТЦСервер», «ТЦКлиент» и «ТЦОбщий»).
После внесения изменений можно переходить к сохранению конфигурации и первому запуску. Выберите в меню «Сервис» пункт «1С:Предприятие» и утвердительно ответьте на вопросы, примите изменения и дождитесь окончания процесса.
Страницы: ← Предыдущая 1 2
Управление доступом
Программа позволяет настроить доступ пользователей к различным функциям, спискам и документам. Предусмотрены предопределенные наборы ролей. Кроме этого, имеется возможность самостоятельной настройки доступа. Для управления доступом необходима роль Полные права.
Для ведения списка пользователей и настройки их прав предназначены списки Пользователи и Группы доступа (раздел Администрирование – Настройка пользователей и прав). Группа доступа определяет совокупность действий с данными программы, которые могут выполнять участники этой группы. Как правило, группы доступа соответствуют различным должностным обязанностям (или видам деятельности) пользователей программы. Пользователь может входить одновременно в одну или несколько групп доступа, которые в совокупности образуют его персональные настройки прав доступа.
Примечание: для настройки прав доступа следует использовать только пользовательский режим 1С:Предприятия.
Настройка программы
Для того чтобы максимально гибко настраивать права доступа пользователей, необходимо включить режим ограничения прав доступа пользователей на уровне записей. Для этого необходимо включить флажок Ограничивать доступ на уровне записей в разделе Администрирование – Настройки пользователей и прав – Группы доступа. Включить этот режим рекомендуется в тех случаях, когда он действительно востребован (например, с программой работает много пользователей), т.к. это в значительной степени повлияет на производительности системы.
В этом случае становятся доступными следующие возможности:
- Флаг «Группы доступа контрагентов» – разрешить настройку доступа к данным по группам контрагентов, в этом случае становится доступной команда:
- Группы доступа контрагентов – создание групп партнеров для разграничения доступа к справочникам, документам и другим данным.
- Флаг «Группы доступа мест хранения» – включите флажок, для того чтобы разрешить настройку доступа к данным по группам мест хранения. После этого становится доступной команда:
- Группы доступа мест хранения – создание дополнительных групп доступа мест хранения для разграничения доступа к данным.
- Флаг «Группы доступа категорий базы знаний» – включите флажок, для того чтобы разрешить настройку доступа к категориям базы знаний. После этого становится доступной команда:
- Группы доступа категорий базы знаний – создание дополнительных групп категорий базы знаний для разграничения доступа к категориям статей базы знаний.
Например, в карточке места хранения после включения флажка «Группы доступа мест хранения» появится обязательный к заполнению реквизит «Группа доступа».
Включение режима ограничения прав доступа пользователей на уровне записей может занять длительное время в зависимости от объема данных, введенных в программу. Если в программу до включения этого режима был введен большой объем данных, программа выводит предупреждение.
Подготовка служебных данных, необходимых для работы в этом режиме, выполняется в фоне с помощью регламентного задания Заполнение данных для ограничения доступа. Если в программу введен большой объем данных, то рекомендуется предварительно настроить его запуск в то время, когда с программой не работают пользователи.
Настройка групп доступа
С помощью групп доступа можно задавать и администрировать общие настройки прав доступа для некоторой группы пользователей, выполняющих однотипные функции в программе, например: Техники центрального офиса или Администраторы филиалов. Права на редактирование списка Группы доступа имеются только у администраторов программы, перечисленных в предопределенной группе доступа Администраторы. Кроме того, пользователь, указанный в группе доступа как Ответственный, может изменять состав участников данной группы.
Группа доступа всегда связана с одним из имеющихся профилей групп доступа, которые, как правило, объединяют в себе несколько ролей. При включении пользователя в группу доступа ему назначаются все роли, заданные в профиле группы доступа. Например, предопределенная группа доступа Администраторы связана с профилем Администратор, в состав которого входит роль Полные Права. Эта роль предоставляет неограниченный доступ ко всем данным и назначается всем администраторам программы, перечисленным в группе доступа Администраторы.
Для создания новой группы доступа необходимо перейти в список Группы доступа раздела Администрирование – Настройки пользователей и прав – Группы доступа.
Нажмите кнопку Создать.
Заполните поле Наименование.
Рекомендуется называть группу доступа во множественном числе таким образом, чтобы ее имя содержало указание на используемый в ней профиль (в поле Профиль) и однозначно характеризовало определенный в ней состав настроек прав доступа. Например, на базе профиля Сотрудник ремонта могут быть введены группы доступа Сотрудники ремонта Главного офиса и Сотрудники ремонта Филиал 1.
В карточке группы доступа нужно выбрать один из имеющихся Профилей групп доступа.
На вкладке Участники группы перечислите список пользователей (и групп пользователей), на которых должны распространяться настройки прав доступа.
Для быстрого перечисления пользователей можно нажать кнопку Подобрать. Подберите нужных пользователей.
Открывшийся список выбора состоит из двух частей.
В левой части окна выберите нужную группу пользователей (можно выбрать всю группу сразу), выберите нужных пользователей из этой группы, затем нажмите кнопку Завершить и закрыть для возврата к настройке группы доступа.
В поле Ответственный выберите пользователя, который будет ответственным за состав участников группы доступа.
Затем на вкладке Ограничения доступа необходимо указать дополнительные настройки прав доступа. Примечание: вкладка может быть недоступна для тех групп доступа, в которых такая настройка не предусмотрена (зависит от настроек выбранного профиля).
На этой вкладке с помощью поля Вид доступа можно задать границы области данных, с которой разрешено работать участникам группы доступа. Под видом доступа подразумевается некоторое правило, по которому «разрешается» доступ к данным программы. Например, с помощью вида доступа Организации можно разрешить работать пользователям только с документами по конкретным организациям; или наоборот, скрыть от них документы некоторых организаций. Состав видов доступа, перечисленных на вкладке Ограничения доступа, зависит от профиля, выбранного в поле Профиль. Кроме того, профиль также определяет, как именно действует настройка вида доступа: она разрешает только просмотр или также включает возможность редактирования данных. Например, в случае если профиль групп доступа включает в себя роль для чтения документов, то пользователи получают возможность просматривать документы по заданным организациям. Если же в профиле содержится роль для добавления и изменения, то появляется возможность редактировать такие документы.
Для каждого вида доступа можно указать либо список разрешенных значений, либо наоборот, список тех значений, которые не должны быть доступны. Первый способ настройки подходит в тех случаях, когда стоит задача предоставить доступ только к определенной области данных. Второй способ настройки удобен тогда, когда требуется закрыть доступ к заранее известной области данных, а для всех новых значений, вводимых в программу, должны по умолчанию действовать разрешительные правила. Например, если с помощью вида доступа Организации задано правило, запрещающее работать с документами по организации Наша фирма, то на новую организацию Торговый дом, введенную в программу позднее, эти ограничения распространяться не будут. При этом следует учитывать, что разрешающие настройки имеют приоритет над запрещающими. Так, если в приведенном выше примере пользователю будет разрешен ввод документов по организации Наша фирма в какой-либо другой группе доступа с тем же профилем, то в итоге он получит доступ ко всем документам по этой организации.
В ряде случаев для упрощения настройки прав доступа, в списке разрешенных или запрещенных значений можно указывать не отдельные элементы, а целые группы элементов. Например, для вида доступа Группы мест хранения (см. Рис.3) можно ограничить доступ в разрезе групп доступа мест хранения, а не по каждому месту хранения в отдельности. Для этого необходимо определить список групп доступа мест хранения, и у каждого места хранения задать принадлежность к той или иной группе. Эти действия могут быть выполнены не только администратором, но и любым пользователем с соответствующими правами на редактирование списка мест хранения. Аналогичным образом действует запрещающая настройка.
Пользователь может быть включен сразу в несколько групп доступа. В этом случае его совокупные права доступа складываются (объединяются по «или») из прав доступа каждой группы. Например, в группе доступа Сотрудники ремонта пользователю разрешено добавление/изменение документа Начало обслуживания по организации Наша фирма. В группе доступа Сотрудники склада ему разрешено добавление/изменение документа Поступление по организации Торговый дом. В результате у него появляются права на добавление/изменение документов Начало обслуживания по организации Наша фирма и Поступление по организации Торговый дом. При этом следует учитывать, что объединяются не списки разрешенных значений, указанные в группах, а именно права доступа. Т.е. ошибочно считать, что в приведенном примере пользователь получит доступ на добавление/изменение обоих видов документов одновременно по обеим организациям.
Настройка прав доступа отдельных пользователей
Для просмотра и настройки состава групп доступа интересующего пользователя (или группы пользователей; далее просто «пользователя») можно воспользоваться командой Права доступа в панели навигации карточки пользователя.
С помощью кнопки Включить в группу на вкладке Группы доступа администратор может добавить пользователя в состав участников любой из имеющихся групп доступа.
С помощью кнопки Исключить из группы можно удалить пользователя из выделенной группы доступа.
Также эту настройку могут выполнять ответственные за состав участников группы доступа для своих групп доступа.
С помощью кнопки Изменить группу можно перейти к карточке группы доступа, выбранной в списке.
На вкладке Разрешенные действия (роли) справочно выводится совокупный список ролей, которые назначены пользователю. Список ролей складывается из всех ролей, входящих в состав групп доступа, в которые включен пользователь. Этот же список можно увидеть в Конфигураторе, в свойствах пользователя информационной базы. При этом не следует редактировать этот список в режиме конфигурирования 1С:Предприятия, настройка прав доступа пользователей должна выполняться только с помощью групп доступа.
С помощью кнопки По подсистемам можно соответственно сгруппировать разрешенные действия.
Отчет по правам доступа
Для того чтобы увидеть полный список прав доступа пользователя, можно воспользоваться аналитическим отчетом Отчет по правам доступа пользователя.
Отчет можно открыть из карточки пользователя (группы пользователя) со страницы Права доступа с помощью соответствующей кнопки.
Для того чтобы получить подробный отчет, включите флажок Подробные сведения о правах доступа, нажмите кнопку Сформировать.
В отчете отражены все сведения о правах доступа пользователя:
- Свойства пользователя информационной базы;
- доступ к информационной базе, имя для входа, имя пользователя операционной системы и другие сведения;
- Группы доступа пользователя;
- Наименование группы, ответственный, профиль;
- Роли пользователя по профилям;
- Просмотр объектов;
- Включает таблицу из 3 колонок: Объект/Права/Ограничения, Группа доступа/Профиль/Роли, Ограничения на уровне записей/Виды и значения доступа;
- Редактирование объектов;
- Включает таблицу из 3 колонок: Объект/Права/Ограничения, Группа доступа/Профиль/Роли, Ограничения на уровне записей/Виды и значения доступа;
- Права на объекты: Папки.
Отчет с помощью стандартных кнопок можно распечатать или сохранить на компьютере в нужном формате.
Создание нового профиля для групп доступа
В ряде случаев предустановленных профилей групп доступа оказывается недостаточно для осуществления требуемой настройки прав доступа пользователей. В таких случаях администратор имеет возможность добавить новые или изменить предустановленные профили групп доступа.
Профиль групп доступа объединяет в себе несколько ролей, а также содержит описание видов доступа, в разрезе которых администратор может настраивать права с помощью групп доступа. Таким образом, профиль представляет собой определенный шаблон, в соответствии с которым администратор ведет группы доступа.
С одним профилем может быть связана одна или несколько групп доступа. Например, на базе профиля Сотрудник ремонта могут быть настроены группы доступа Сотрудники ремонта «Наша фирма» и Сотрудники ремонта «Торговый дом», которые отличаются друг от друга разрешенными организациями «Наша фирма» и «Торговый дом» соответственно.
Список Профили групп доступа можно открыть по соответствующей команде в разделе Администрирование – Настройка пользователей и прав – Группы доступа.
С помощью поля Показать в списке можно отобрать профили групп доступа:
- Все профили;
- Поставляемые;
- Непоставляемые;
- Устаревшие.
Для ввода нового профиля групп доступа воспользуйтесь кнопкой Создать.
При добавлении нового профиля сначала необходимо определить состав его ролей, исходя из потребностей целевой группы пользователей.
Роль определяет некоторую совокупность действий над объектами программы, которые может выполнять пользователь. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей программы, так и могут соотноситься с более мелкими функциями. Зачастую, роли либо разрешают просмотр, либо дают возможность редактирования тех или иных данных в программе.
Каждому пользователю, посредством профилей и групп доступа, может быть назначена одна или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа.
Как правило, различают основные и дополнительные профили.
Основной профиль описывает некоторую совокупность прав доступа, достаточную для выполнения в программе определенного участка работ.
С помощью дополнительных профилей пользователям могут быть выданы какие-либо вспомогательные права дополнительно к основному профилю.
В основных профилях важно предусмотреть такой набор ролей, который с одной стороны, не будет давать избыточного (нежелательного) доступа к функциям и данным программы, а с другой – будет достаточным для работы пользователей в рамках их круга задач и обязанностей. В частности, в основном профиле следует предусмотреть ряд вспомогательных ролей, которые напрямую не связаны с основной деятельностью пользователей, но, тем не менее, необходимы для нее.
Например, для сотрудника склада помимо роли на добавление и изменение складских документов нужно также не забыть включить в профиль следующие роли:
- роль для входа в программу с помощью тонкого, толстого или веб-клиента;
- предопределенные роли Базовые права и Базовые права УФ;
- роли для просмотра справочников, элементы которых требуется выбирать в полях документов и т.п.
При вводе нового профиля групп доступа введите его Наименование.
Если профилей групп доступа много, то их можно группировать по разным признакам, например, можно выделить в отдельные группы основные и дополнительные профили групп доступа, также можно сгруппировать профили групп доступа и по другим признакам.
На вкладке Разрешенные действия (роли) с помощью флажков выберите одну или несколько ролей. Роли обычно выводятся в алфавитном порядке.
С помощью команды По подсистемам меню Еще можно увидеть роли, сгруппированные по подсистемам.
С помощью соответствующей кнопки можно вывести в список Только выбранные роли.
Затем на вкладке Ограничения доступа необходимо принять решение по поводу состава видов доступа, которые должны быть определены в профиле. Под видом доступа подразумевается некоторое правило, по которому «разрешается» доступ к данным программы. С их помощью можно более точно настраивать границы области данных, с которой разрешено работать участникам тех или иных групп доступа. В простейшем случае, если в профиль не включено ни одного вида доступа, то права доступа к данным определяются только ролями. Например, в случае если профиль включает в себя роль чтения складских документов, то участники групп доступа получают возможность просмотра всех складских документов. Но если в дополнение к этой роли в профиль добавить вид доступа Организации, то появляется возможность разрешать пользователям работу с документами только по конкретным организациям; или наоборот, скрывать от них документы некоторых организаций. Таким образом, если список ролей в профиле отвечает на вопрос, «что должно быть доступно, а что – нет» (какие функции и данные программы), то виды доступа уточняют, как именно они должны быть доступны (в разрезе каких разрешенных и запрещенных значений). Состав видов доступа в профиле рекомендуется определять, исходя из соображений гибкости настройки прав доступа.
Для каждого вида доступа, заданного в профиле, можно указать один из четырех вариантов настройки:
- Все запрещены, исключения назначаются в группах доступа – применяется в тех случаях, когда по умолчанию доступ ко всем данным должен быть закрыт, но для отдельных объектов в группах доступа могут быть настроены разрешения;
- Все разрешены, исключения назначаются в группах доступа – аналогично предыдущему варианту, но по умолчанию все данные разрешены, а для отдельных объектов в группах доступа могут быть установлены исключения – запрет;
- Все запрещены, исключения назначаются в профиле – используется тогда, когда в группах доступа не предполагается предоставлять возможность настройки для вида доступа; т.е. вся настройка должна быть выполнена непосредственно в самом профиле и не может быть изменена в группах доступа. Такие виды доступа скрыты в группах доступа;
- Все разрешены, исключения назначаются в профиле – аналогично предыдущему варианту.
Если данная возможность в программе отключена, то вид доступа будет неактивен и в нижней части окна программа выводит об этом сообщение.
Для быстрого перехода к списку групп доступа, созданных на базе данного профиля, можно воспользоваться командой Группы доступа на панели навигации.
В данном списке с помощью кнопки Создать можно добавить новые группы доступа, с помощью соответствующих команд меню Еще также можно Скопировать, Изменить, Пометить к удалению существующие.
Состав профилей групп доступа
Для настройки прав доступа пользователей в распоряжении администратора имеются следующие профили:
- Администратор — настройка прав доступа пользователей и администрирование программы. Включает в себя роль Полные права, которая предоставляет неограниченный доступ ко всем данным.
- Бухгалтер — включает в себя набор функций, необходимых для работы бухгалтера(выписка документов по учету денежных средств);
- Внешний поставщик — включает в себя набор функций, позволяющих работать контрагентам — поставщикам ( Внешний контрагент);
- Сотрудник ремонта — включает в себя набор функций для работы специалистов — техников отдела IT (работа с документами по обслуживанию и ремонту);
- Сотрудник склада — включает в себя набор функций для кладовщиков (работа со складскими документами).
JavaScript спроектирован на основе простой парадигмы. В основе концепции лежат простые объекты. Объект — это набор свойств, и каждое свойство состоит из имени и значения, ассоциированного с этим именем. Значением свойства может быть функция, которую можно назвать методом объекта. В дополнение к встроенным в браузер объектам, вы можете определить свои собственные объекты. Эта глава описывает как пользоваться объектами, свойствами, функциями и методами, а также как создавать свои собственные объекты.
Обзор объектов
Объекты в JavaScript, как и во многих других языках программирования, похожи на объекты реальной жизни. Концепцию объектов JavaScript легче понять, проводя паралелли с реально существующими в жизни объектами.
В JavaScript объект — это самостоятельная единица, имеющая свойства и определенный тип. Сравним, например, с чашкой. У чашки есть цвет, форма, вес, материал, из которого она сделана, и т.д. Точно так же, объекты JavaScript имеют свойства, которые определяют их характеристики.
Объекты и свойства
В JavaScript объект имеет свойства, ассоциированные с ним. Свойство объекта можно понимать как переменную, закрепленную за объектом. Свойства объекта в сущности являются теми же самыми переменными JavaScript, за тем исключением, что они закреплены за объектом. Свойства объекта определяют его характеристики. Получить доступ к свойству объекта можно с помощью точечной записи:
objectName.propertyName
Как и все переменные JavaScript, имя объекта (которое тоже может быть переменной) и имя свойства являются чуствительными к регистру. Вы можете определить свойство указав его значение. Например, давайте создадим объект myCar и определим его свойства make, model, и year следующим образом:
var myCar = new Object(); myCar.make = «Ford»; myCar.model = «Mustang»; myCar.year = 1969;
Неопределенные свойства объекта являются undefined (а не null).
myCar.color; // undefined
Свойства объектов JavaScript также могут быть доступны или заданы с использованием скобочной записи (более подробно см. property accessors). Объекты иногда называются ассоциативными массивами, поскольку каждое свойство связано со строковым значением, которое можно использовать для доступа к нему. Так, например, вы можете получить доступ к свойствам объекта myCar следующим образом:
myCar = «Ford»; myCar = «Mustang»; myCar = 1969;
Имена свойств объекта могут быть строками JavaScript, или тем, что может быть сконвертировано в строку, включая пустую строку. Как бы то ни было, доступ к любому имени свойства, которое содержит невалидный JavaScript идентификатор (например, имя свойства содержит в себе пробел и тире или начинается с цифры), может быть получен с использованием квадратных скобок. Этот способ записи также полезен, когда имена свойств должны быть динамически определены (когда имя свойства не определено до момента исполнения). Примеры далее:
var myObj = new Object(), str = «myString», rand = Math.random(), obj = new Object(); myObj.type = «Dot syntax»; myObj = «String with space»; myObj = «String value»; myObj = «Random Number»; myObj = «Object»; myObj = «Even an empty string»; console.log(myObj);
Обратите внимание, что все ключи с квадратными скобками преобразуются в тип String, поскольку объекты в JavaScript могут иметь в качестве ключа только тип String. Например, в приведенном выше коде, когда ключ obj добавляется в myObj, JavaScript вызывает метод obj.toString () и использует эту результирующую строку в качестве нового ключа.
Вы также можете получить доступ к свойствам, используя значение строки, которое хранится в переменной:
var propertyName = «make»; myCar = «Ford»; propertyName = «model»; myCar = «Mustang»;
Вы можете пользоваться квадратными скобками в конструкции for…in чтобы выполнить итерацию всех свойств объекта, для которых она разрешена. Чтобы показать как это работает, следующая функция показывает все свойства объекта, когда вы передаете в нее сам объект и его имя как аргументы функции:
function showProps(obj, objName) { var result = «»; for (var i in obj) { if (obj.hasOwnProperty(i)) { result += objName + «.» + i + » = » + obj + «\n»; } } return result; }
Так что если вызвать эту функцию вот так showProps(myCar, «myCar»), то получим результат:
myCar.make = Ford myCar.model = Mustang myCar.year = 1969
Перечисление всех свойств объекта
Начиная с ECMAScript 5, есть три способа перечислить все свойства объекта (получить их список):
- циклы for…in
Этот метод перебирает все перечисляемые свойства объекта и его цепочку прототипов - Object.keys(o)
Этот метод возвращает массив со всеми собственными (те, что в цепочке прототипов, не войдут в массив) именами перечисляемых свойств объекта o. - Object.getOwnPropertyNames(o)
Этот метод возвращает массив содержащий все имена своих свойств (перечисляемых и неперечисляемых) объекта o.
До ECMAScript 5 не было встроенного способа перечислить все свойства объекта. Однако это можно сделать с помощью следующей функции:
function listAllProperties(o){ var objectToInspect; var result = ; for(objectToInspect = o; objectToInspect !== null; objectToInspect = Object.getPrototypeOf(objectToInspect)){ result = result.concat(Object.getOwnPropertyNames(objectToInspect)); } return result; }
Это может быть полезно для обнаружения скрытых (hidden) свойств (свойства в цепочке прототипа, которые недоступны через объект, в случае, если другое свойство имеет такое же имя в предыдущем звене из цепочки прототипа). Перечислить доступные свойства можно, если удалить дубликаты из массива.
Создание новых объектов
JavaScript содержит набор встроенных объектов. Также вы можете создавать свои объекты. Начиная с JavaScript 1.2, вы можете создавать объект с помощью инициализатора объекта. Другой способ — создать функцию-конструктор и сделать экземпляр объекта с помощью этой функции и оператора new.
Использование инициализаторов объекта
Помимо создания объектов с помощью функции-конструктора вы можете создавать объекты и другим, особым способом. Фактически, вы можете записать объект синтаксически, и он будет создан интерпретатором автоматически во время выполнения. Эта синтаксическая схема приведена ниже:
var obj = { property_1: value_1, // property_# may be an identifier… 2: value_2, // or a number… // …, «property n»: value_n }; // or a string
здесь obj — это имя нового объекта, каждое property_i — это идентификатор (имя, число или строковый литерал), и каждый value_i — это значения, назначенные property_i. Имя obj и ссылка объекта на него необязательна; если далее вам не надо будет ссылаться на данный объект, то вам не обязательно назначать объект переменной. (Обратите внимание, что вам потребуется обернуть литерал объекта в скобки, если объект находится в месте, где ожидается инструкция, чтобы интерпретатор не перепутал его с блоком.)
Если объект создан при помощи инициализатора объектов на высшем уровне скрипта, то JavaScript интерпретирует объект каждый раз, когда анализирует выражение, содержащее объект, записанный как литерал. Плюс, если пользоваться функцией инициализатором, то он будет создаваться каждый раз, когда функция вызывается.
Следующая инструкция создает объект и назначает его переменной x, когда выражение cond истинно.
if (cond) var x = {hi: «there»};
Следующий пример создает объект myHonda с тремя свойствами. Заметьте, что свойство engine — это также объект со своими собственными свойствами.
var myHonda = { color: «red», wheels: 4, engine: { cylinders: 4, size: 2.2 } };
Вы также можете использовать инициализатор объекта для создания массивов. Смотрите array literals.
До JavaScript 1.1 не было возможности пользоваться инициализаторами объекта. Единственный способ создавать объекты — это пользоваться функциями-конструкторами или функциями других объектов, предназначенных для этой цели. Смотрите Using a constructor function.
Использование функции конструктора
Другой способ создать объект в два шага описан ниже:
- Определите тип объекта, написав функцию-конструктор. Название такой функции, как правило, начинается с заглавной буквы.
- Создайте экземпляр объекта с помощью ключевого слова new.
Чтобы определить тип объекта создайте функцию, которая определяет тип объекта, его имя, свойства и методы. Например предположим, что вы хотите создать тип объекта для описания машин. Вы хотите, чтобы объект этого типа назывался car, и вы хотите, чтобы у него были свойства make, model, и year. Чтобы сделать это, напишите следующую функцию:
function Car(make, model, year) { this.make = make; this.model = model; this.year = year; }
Заметьте, что используется this чтобы присвоить значения (переданные как аргументы функции) свойствам объекта.
Теперь вы можете создать объект, называемый mycar, следующим образом:
var mycar = new Car(«Eagle», «Talon TSi», 1993);
Эта инструкция создает объект типа Car со ссылкой mycar и присваивает определенные значения его свойствам. Значением mycar.make станет строка «Eagle», mycar.year — это целое число 1993, и так далее.
Вы можете создать столько объектов car, сколько нужно, просто вызывая new. Например:
var kenscar = new Car(«Nissan», «300ZX», 1992); var vpgscar = new Car(«Mazda», «Miata», 1990);
Объект может иметь свойство, которое будет другим объектом. Например, далее определяется объект типа Person следующим образом:
function Person(name, age, sex) { this.name = name; this.age = age; this.sex = sex; }
и затем создать два новых экземпляра объектов Person как показано далее:
var rand = new Person(«Rand McKinnon», 33, «M»); var ken = new Person(«Ken Jones», 39, «M»);
Затем, вы можете переписать определение car и включить в него свойство owner, которому назначить объект person следующим образом:
function Car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner; }
Затем, чтобы создать экземпляры новых объектов, выполните следующие инструкции:
var car1 = new Car(«Eagle», «Talon TSi», 1993, rand); var car2 = new Car(«Nissan», «300ZX», 1992, ken);
Заметьте, что вместо того, чтобы передавать строку, литерал или целое число при создании новых объектов, в выражениях выше передаются объекты rand и ken как аргумент функции. Теперь, если вам нужно узнать имя владельца car2, это можно сделать следующим образом:
car2.owner
Заметьте, что в любое время вы можете добавить новое свойство ранее созданному объекту. Например, выражение
car1.color = «black»;
добавляет свойство color к car1, и устанавливаего его значение равным «black.» Как бы там ни было, это не влияет на любые другие объекты. Чтобы добавить новое свойство всем объектам одного типа, вы должны добавить свойство в определение типа объекта car.
Использование метода Object.create
Объекты также можно создавать с помощью метода Object.create. Этот метод очень удобен, так как позволяет вам указывать объект прототип для нового вашего объекта без определения функции конструктора.
// список свойств и методов для Animal var Animal = { type: ‘Invertebrates’, // Значение type по умолчанию displayType: function() { // Метод отображающий тип объекта Animal console.log(this.type); } }; // Создаем объект Animal var animal1 = Object.create(Animal); animal1.displayType(); // Выведет:Invertebrates // Создаем объект Animal и присваиваем ему type = Fishes var fish = Object.create(Animal); fish.type = ‘Fishes’; fish.displayType(); // Выведет:Fishes
Наследование
Все объекты в JavaScript наследуются как минимум от другого объекта. Объект, от которого произошло наследование называется прототипом, и унаследованные свойства могут быть найдены в объекте prototype конструктора.
Индексы свойств объекта
В JavaScript 1.0 вы можете сослаться на свойства объекта либо по его имени, либо по его порядковому индексу. В JavaScript 1.1 и позже, если вы изначально определили свойство по имени, вы всегда должны ссылаться на него по его имени, и если вы изначально определили свойство по индексу, то должны ссылаться на него по его индексу.
Это ограничение налагается когда вы создаете объект и его свойства с помощью функции конструктора (как мы это делали ранее с типом Car ) и когда вы определяете индивидуальные свойства явно (например, myCar.color = «red»). Если вы изначально определили свойство объекта через индекс, например myCar = «25 mpg», то впоследствии сослаться на это свойство можно только так myCar.
Исключение из правил — объекты, отображаемые из HTML, например массив forms. Вы всегда можете сослаться на объекты в этих массивах или используя их индекс (который основывается на порядке появления в HTML документе), или по их именам (если таковые были определены). Например, если второй html-тег <FORM> в документе имеет значение аттрибута NAME равное «myForm», вы можете сослаться на эту форму вот так: document.forms или document.forms или document.myForm.
Определение свойств для типа объекта
Вы можете добавить свойство к ранее определенному типу объекта воспользовавшись специальным свойством prototype. Через prototype создается свойство, единое для всех объектов данного типа, а не одного экземпляра этого типа объекта. Следующий код демонстрирует это, добавляя свойство color ко всем объектам типа car, а затем присваивая значение свойству color объекта car1.
Car.prototype.color = null; car1.color = «black»;
Смотрите свойство prototype объекта Function в Справочнике JavaScript для получения деталей.
Определение методов
Метод — это функция, ассоциированная с объектом или, проще говоря, метод — это свойство объекта, являющееся функцией. Методы определяются так же, как и обычные функции, за тем исключением, что они присваиваются свойству объекта. Например вот так:
objectName.methodname = function_name; var myObj = { myMethod: function(params) { // …do something } };
где objectName — это существующий объект, methodname — это имя, которое вы присваиваете методу, и function_name — это имя самой функции.
Затем вы можете вызвать метод в контексте объекта следующим образом:
object.methodname(params);
Вы можете определять методы для типа объекта, включая определение метода в функцию конструктора объекта. Например, вы можете определить функцию, которая форматирует и отображает свойства до этого определенных объектов car. Например,
function displayCar() { var result = «A Beautiful » + this.year + » » + this.make + » » + this.model; pretty_print(result); }
где pretty_print — это функция отображения горизонтальной линии и строки. Заметьте, что использование this позволяет ссылаться на объект, которому принадлежит метод.
Вы можете сделать эту функцию методом car, добавив инструкцию
this.displayCar = displayCar;
к определению объекта. Таким образом, полное определение car примет следующий вид:
function Car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner; this.displayCar = displayCar; }
Теперь вы можете вызвать метод displayCar для каждого из объектов как показано ниже:
car1.displayCar(); car2.displayCar();
Использование this для ссылки на объект
В JavaScript есть специальное ключевое слово this, которое вы можете использовать внутри метода, чтобы ссылаться на текущий объект. Предположим, у вас есть функция validate, которая сверяет свойство value, переданного ей объекта с некоторыми верхним и нижним значениями:
function validate(obj, lowval, hival) { if ((obj.value < lowval) || (obj.value > hival)) alert(«Invalid Value!»); }
Вы можете вызвать эту функцию validate в каждом элементе формы, в обработчике события onchange. Используйте this для доступа к этому элементу, как это сделано ниже:
<input type=»text» name=»age» size=»3″ onChange=»validate(this, 18, 99)»>
В общем случае, this ссылается на объект, вызвавший метод.
Через this можно обратиться и к родительской форме элемента, воспользовавшись свойством form. В следующем примере форма myForm содержит элемент ввода Text и кнопку button1. Когда пользователь нажимает кнопку, значению объекта Text назначается имя формы. Обработчик событий кнопки onclick пользуется this.form чтобы сослаться на текущую форму, myForm.
<form name=»myForm»> <p><label>Form name:<input type=»text» name=»text1″ value=»Beluga»></label> <p><input name=»button1″ type=»button» value=»Show Form Name» onclick=»this.form.text1.value = this.form.name»> </p> </form>
Определение геттеров и сеттеров
Геттер (от англ. get — получить) — это метод, который получает значение определенного свойства. Сеттер (от англ. set — присвоить) — это метод, который присваивает значение определенному свойству объекта. Вы можете определить геттеры и сеттеры для любых из встроенных или определенных вами объектов, которые поддерживают добавление новых свойств. Синтаксис определения геттеров и сеттеров использует литеральный синтаксис объектов.
Ниже проиллюстрировано, как могут работать геттеры и сеттеры в объекте определенном пользователем:
var o = { a: 7, get b() { return this.a + 1; }, set c(x) { this.a = x / 2; } }; console.log(o.a); // 7 console.log(o.b); // 8 o.c = 50; console.log(o.a); // 25
Объект o получит следующие свойства:
- o.a — число
- o.b — геттер, который возвращает o.a плюс 1
- o.c — сеттер, который присваивает значение o.a половине значения которое передано в o.c
Следует особо отметить, что имена функций, указанные в литеральной форме «et propertyName() { }» не будут в действительности являться именами геттера и сеттера. Чтобы задать в качестве геттера и сеттера функции с явно определенными именами, используйте метод Object.defineProperty (или его устаревший аналог Object.prototype.__defineGetter__).
В коде ниже показано, как с помощью геттера и сеттера можно расширить прототип объекта Date и добавить ему свойство year, которое будет работать у всех экземпляров класса Date. Этот код использует существующие методы класса Date — getFullYear и setFullYear для работы геттера и сеттера.
Определение геттера и сеттера для свойства year:
var d = Date.prototype; Object.defineProperty(d, ‘year’, { get: function() { return this.getFullYear(); }, set: function(y) { this.setFullYear(y); } });
Использование свойства year заданного геттером и сеттером:
var now = new Date(); console.log(now.year); // 2000 now.year = 2001; // 987617605170 console.log(now); // Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001
В принципе, геттеры и сеттеры могут быть либо:
- определены при использовании Инициализаторов объекта, или
- добавлены существующему объекту в любой момент, при использовании методов добавления геттеров и сеттеров.
Когда определение геттера и сеттера использует инициализаторы объекта, все что вам нужно, это дополнить геттер префиксом get а сеттер префиксом set. При этом, метод геттера не должен ожидать каких либо параметров, в то время как метод сеттера принимает один единственный параметр (новое значение для присвоения свойству). Например:
var o = { a: 7, get b() { return this.a + 1; }, set c(x) { this.a = x / 2; } };
Геттеры и сеттеры, могут быть добавлены существующему объекту в любой момент, при помощи метода Object.defineProperties. Первый параметр этого метода — объект, которому вы хотите присвоить геттер и сеттер. Второй параметр — это объект, имена свойств которого будут соответствовать именам создаваемых свойств, а значения — объекты определяющие геттер и сеттер создаваемых свойств. В следующем примере создаются в точности такие же геттер и сеттер, как и в примере выше:
var o = { a: 0 }; Object.defineProperties(o, { ‘b’: { get: function() { return this.a + 1; } }, ‘c’: { set: function(x) { this.a = x / 2; } } }); o.c = 10; // Запускает сеттер, который присваивает 10 / 2 (5) свойству ‘a’ console.log(o.b); // Запускает геттер, который возвращает a + 1 (тоесть 6)
То, какую из двух форм использовать для определения свойств, зависит от вашего стиля программирования и стоящей перед вами задачи. Если вы уже используете инициализатор объекта для определения прототипа, то, скорее всего, в большинстве случаев, вы воспользуетесь первой формой. Она более компактна и естественна. Однако, не редко, вторая форма является единственно возможной, в случаях, когда вы работаете с существующим объектом без доступа к его определению. Вторая форма наилучшим образом отражает динамическую природу JavaScript — но может сделать код сложным для чтения и понимания.
Удаление свойств
Вы можете удалить свойство используя оператор delete. Следующий код показывает как удалить свойство.
//Creates a new object, myobj, with two properties, a and b. var myobj = new Object; myobj.a = 5; myobj.b = 12; //Removes the a property, leaving myobj with only the b property. delete myobj.a;
Вы также можете воспользоваться delete чтобы удалить глобальную переменную, если ключевое слово var не было использовано при ее объявлении:
g = 17; delete g;
Смотри delete чтобы получить дополнительную информацию.
Сравнение объектов
В JavaScript объекты имеют ссылочный тип. Два отдельных объекта никогда не будут равными, даже если они имеют равный набор свойств. Только сравнение двух ссылок на один и тотже объект вернет true.
// Две переменных ссылаются на два объекта с одинаковыми свойствами var fruit = {name: ‘apple’}; var fruitbear = {name: ‘apple’}; fruit == fruitbear; // вернет false fruit === fruitbear; // вернет false // Две переменные ссылаются на один общий объект var fruit = {name: ‘apple’}; var fruitbear = fruit; // присвоим переменной fruitbear ссылку на объект fruit // теперь fruitbear и fruit ссылаются на один и тот же объект fruit == fruitbear; // вернет true fruit === fruitbear; // вернет true fruit.name = ‘grape’; console.log(fruitbear); // вернет { name: «grape» } вместо { name: «apple» }
Подробнее смотрите Операторы сравнения.