# Курсовая работа блока А «Настройки и справочники» ## Описание задачи Создать конфигурацию «Управление ИТ-фирмой» с базовым набором справочников, поддерживающую управление пользователями ИБ в режиме Предприятия. ## Требования к результату Выгрузка информационной базы (.dt) конфигурацией с именем «УправлениеИТФирмой», содержащей **девять пунктов** ниже. ### 1. Перечисление «ЮридическоеФизическоеЛицо». Со значениями: - ЮридическоеЛицо. - ФизическоеЛицо. ### 2. Справочник «Контрагенты». *С реквизитами:* * ПолноеНаименование. * ИНН. * КПП. * Email. * Телефон. * ФактическийАдрес. * ЮридическийАдрес. * Тип (ПеречислениеСсылка.ЮридическоеФизическоеЛицо). * Ответственный (СправочникСсылка.Сотрудники). Типы должны быть подходящими, их длина и точность — разумно достаточными. *С формой элемента* - КПП должен быть доступен только для контрагентов — юридических лиц. Доступность должна отрабатываться как при изменении типа, так и при перечитывании элемента справочника из ИБ. - При изменении наименования полное наименование должно заполняться с разворачиванием распространённых сокращений организационно-правовых форм. Например, АО «Вектор» должно превращаться в Акционерное общество «Вектор». - Должна быть реализована проверка корректности ИНН как для физических, так и для юридических лиц. Проверять нужно и при попытке записи — с выдачей предупреждения и отказом, и при изменении ИНН — с подсветкой поля ввода или выводом текста ошибки рядом с ним. *С формой списка* В форме списка должны присутствовать все существенные реквизиты в разумном порядке. *С модулем объекта* В его коде определено заполнение по умолчанию: * Тип — юридическое лицо. * Ответственный — текущий сотрудник из параметра сеанса **«ТекущийСотрудник**. ### 3. Перечисление «Пол». Со значениями: - Мужской. - Женский. ### 4. Справочник «Сотрудники». *С реквизитами:* - Email. - ДатаРождения. - ИдентификаторПользователяИБ. - Оклад. - Пол. - СтавкаЧаса. - Телефон. Типы должны быть подходящими, их длина и точность — разумно достаточными. Для сумм нужно использовать определяемый тип. *С модулем менеджера* В котором переопределено получение формы объекта в зависимости от права доступа «Администрирование». *С формой элемента «ФормаАдминистратора»:* - которая открывается для пользователей с правом доступа «Администрирование»; - в которой, помимо реквизитов сотрудника, есть флажок «Вход разрешён» и поля ввода «Имя для входа» и «Пароль», отражающие свойства пользователя ИБ. При записи сотрудника из этой формы при необходимости должно выполняться: * создание пользователя ИБ с ролью **«БазовыеПрава»**; * изменение его пароля и имени для входа; * при снятии флажка — отключение стандартной аутентификации. Рядом с полем ввода пароля должна быть команда «Случайный пароль», генерирующая случайный пароль и показывающая его пользователю. *С формой элемента «ФормаПользователя»* Которая открывается для пользователей без права доступа «Администрирование» и содержит элементы управления для реквизитов сотрудника, упорядоченные по смыслу. ### 5. Константа и функциональная опция «ВестиРасчётЗарплаты». - Константа не должна присутствовать в командном интерфейсе сама по себе — флажок «Использовать стандартные команды» должен быть снят. - В состав ФО должны входить реквизиты, относящиеся к расчету зарплаты, справочника **«Сотрудники»**, а константа должна присутствовать флажком в общей форме **«НастройкаПрограммы»**. ### 6. Общая форма и общая команда «НастройкаПрограммы». - Форма должна содержать основной реквизит типа **«НаборКонстант»** и поле флажка для константы **«ВестиРасчётЗарплаты»**. - Общая команда должна открывать общую форму, принадлежать подсистеме **«Настройки»** и присутствовать в командном интерфейсе раздела «Настройки». ### 7. Параметр сеанса «ТекущийСотрудник». Тип **«СправочникСсылка.Сотрудники»**. Должен заполняться элементом справочника **«Сотрудники»**, идентификатор пользователя ИБ которого совпадает с идентификатором текущего пользователя ИБ. ### 8. Роли «БазовыеПрава» и «ПолныеПрава». Роль **«ПолныеПрава»** должна давать права на всё, кроме: * интерактивного удаления элементов справочников; * пометки на удаление и удаления помеченных предопределённых элементов справочников. Роль **«БазовыеПрава»** должна давать права на чтение, просмотр и ввод по строке всех данных. Редактирование, добавление и изменение разрешается только для справочника **«Контрагенты»**. Роль не должна давать права на открытие настроек программы. ### 9. Подсистема «Настройки»». Содержащая все справочники и общую команду **«НастройкаПрограммы»**. ## Процесс выполнения Старайтесь использовать наработки, выполненные ранее в домашних заданиях блока А. ### Подсистема «Настройки» Создайте подсистему **«Настройки»**, куда будете включать все добавляемые далее объекты метаданных. ### Константа и ФО Создайте константу **«ВестиРасчётЗарплаты»** типа **«Булево»** и соответствующую ФО. Константу включите в подсистему **«Настройки»**. Не забудьте снять флажок «Использовать стандартные команды», чтобы константа не появилась в командном интерфейсе сама по себе. ### Настройка программы * Создайте общую форму **«НастройкаПрограммы»**. * Добавьте в неё основной реквизит типа **«НаборКонстант»**. * Выведите константу **«ВестиРасчётЗарплаты»** на форму полем флажка. Заголовок флажка по общим правилам разместите справа. * Создайте общую команду **«НастройкаПрограммы»**, в модуле которой реализуйте открытие общей формы. * Включите команду и форму в подсистему **«Настройки»**. ### Справочник «Сотрудники» * Создайте справочник и наполните его указанным в Требованиях набором реквизитов. * Включите зарплатные реквизиты в состав ФО **«ВестиРасчётЗарплаты»**. * Создайте две формы элемента: **«ФормаАдминистратора»** и **«ФормаПользователя»**. Форма администратора будет основной. * В модуле менеджера определите обработчик события **«ОбработкаПолученияФормы()»**. В нём, в зависимости от наличия права доступа **«Администирование»**, открывайте форму администратора или форму пользователя. Право администрирования проверяйте так: `Если ПравоДоступа("Администрирование", Метаданные) Тогда` Выбранную форму лучше возвращать не по имени, а как объект метаданных, например: `Метаданные.Справочники.Сотрудники.Формы.ФормаАдминистратора` #### ФормаПользователя Выведите в неё реквизиты сотрудника в разумном порядке. #### ФормаАдминистратора Можно создать копированием формы **«ФормаПользователя»**. Создайте в ней две группы: левую и правую. В левую выведите реквизиты сотрудника в разумном порядке, как в форме пользователя. Добавьте реквизиты формы **«ВходРазрешён»** (Булево), **«ИмяДляВхода»** и **«Пароль»** и выведите их в правую группу флажком и двумя полями ввода. Для поля ввода **«Пароль»** включите режим пароля, чтобы введённое забивалось звёздочками. ##### Случайный пароль Создайте команду и кнопку **«СлучайныйПароль»**. В обработчике создайте случайный пароль из 5–6 букв и цифр, отключив у поля ввода **«Пароль»** режим пароля, чтобы пользователь увидел его и мог скопировать. ##### ПриЧтенииНаСервере Найдите пользователя ИБ по идентификатору — **«ТекущийОбъект.ИдентификаторПользователяИБ»**. Заполните по данным пользователя ИБ реквизиты формы **«ИмяДляВхода»** и **«Пароль»**. Реквизит **«ВходРазрешён»** заполните по реквизиту пользователя ИБ **«АутентификацияСтандартная»**. Если идентификатор не заполнен, или поиск пользователя ИБ возвращает **«Неопределено»**, считайте, что вход не разрешён, а имя и пароль пусты. ##### ПередЗаписьюНаСервере Если идентификатор пользователя ИБ заполнен — найдите пользователя ИБ и обновите его реквизиты значениями реквизитов **«ВходРазрешён»**, **«ИмяДляВхода»** и **«Пароль»**. Если идентификатор не заполнен, а флажок **«ВходРазрешён»** выставлен — создайте пользователя ИБ и добавьте ему роль **«Метаданные.Роли.БазовыеПрава»**. После создания пользователя ИБ присвойте его идентификатор реквизиту **«ИдентификаторПользователяИБ»** записываемого объекта, чтобы найти этого пользователя ИБ при следующем открытии формы. Обратите внимание, что учебная версия платформы не позволяет задать непустой пароль. Логику задания пароля всё равно нужно реализовать, а в тестах задавать пустой пароль. #### Форма списка Создайте форму списка, добавив в неё все существенные реквизиты в разумном порядке и расположении. ### Параметр сеанса - Создайте параметр сеанса **«ТекущийСотрудник»** типа **«СправочникСсылка.Сотрудники»**. - В модуле сеанса определите процедуру **«УстановкаПараметровСеанса»**. - В ней, для простоты не анализируя параметр **«ТребуемыеПараметры»**, найдите сотрудника по значению реквизита **«ИдентификаторПользователяИБ»**, используя функцию менеджера: `Справочники.Сотрудники.НайтиПоРеквизиту(<...>);` - Значение идентификатора получите, обратившись к функции **«ТекущийПользователь()»** менеджера **«ПользователиИнформационнойБазы»**. ### Справочник «Контрагенты» Создайте справочник и наполните его указанным в требованиях набором реквизитов. Не забудьте поставить флажок «Заполнять из данных заполнения» хотя бы для реквизитов **«Тип»** и **«Ответственный»**. В модуле объекта определите обработчик **«ОбработкаЗаполнения»**, в котором заполните реквизит **«Тип»** значением по умолчанию **«ЮридическоеЛицо»**, а реквизит **«Ответственный»** — значением параметра сеанса **«ТекущийСотрудник»**. #### Форма элемента Создайте форму элемента, поместив на неё все существенные реквизиты в разумном порядке и расположении. Реализуйте управление доступностью поля ввода **«КПП»** в зависимости от типа контрагента, сделав это в обработчиках событий **«ПриЧтенииНаСервере»** формы и **«ПриИзменении»** поля ввода **«Тип»**. Реализуйте функцию определения корректности ИНН, которая работала бы со всеми ИНН и возвращала бы, кроме значения Булево (Истина — корректен, Ложь — некорректен), текстовое описание ошибки, как неявно возвращаемое значение. Алгоритмы расчёта: https://www.egrul.ru/test_inn.html https://keysystems.ru/files/fo/arm_budjet/show_docum/BKS/onlinehelp/index.html?ro_kr_algor_klyuch_inn.htm Реализуйте вызов этой функции в двух местах: 1. В обработчике события **«ПередЗаписью»** формы — с отказом от записи при неверном ИНН и выводом предупреждения, содержащего текстовое описание ошибки. 2. В обработчике события **«ПриИзменении»** поля ввода ИНН — с подсветкой текста поля ввода или с выводом рядом с полем ввода текстового описания ошибки в виде декорации или подсказки. Считайте, что пустой ИНН корректен. В обработчике события **«ПриИзменении»** поля ввода **«Наименование»** реализуйте поиск распространённых сокращений организационно-правовых форм в начале строки и заполнение полного наименования по краткому с заменой сокращения ОПФ на её полное наименование. Не изменяйте полное наименование, если оно уже было изменено пользователем вручную. Чтобы это реализовать, при чтении формы получайте полное наименование из краткого и, если полученный заменой результат соответствует полному наименованию, запоминайте в невидимом булевском реквизите формы признак того, что полное наименование можно изменять автоматически. #### Форма списка Создайте форму списка, добавив в неё все существенные реквизиты в разумном порядке и расположении. ### Роли Создайте роли **«ПолныеПрава»** и **«БазовыеПрава»**. В состав роли **«ПолныеПрава»** включите все права, сняв только: * интерактивное удаление элементов справочников; * пометку на удаление и удаление помеченных предопределённых элементов. В состав роли **«БазовыеПрава»** включите права на чтение, просмотр и ввод по строке всех данных, включая параметры сеанса. Разрешите также изменение, добавление, редактирование и интерактивную пометку удаления справочника **«Контрагенты»**. ### Проверка 1. Проверьте, что подсистема **«Настройки»** содержит все добавленные объекты метаданных. 2. Создайте пользователя ИБ с полными правами. 3. Запустив программу под ним, удостоверьтесь в видимости раздела «Настройки», всех справочников и команды «Настройка программы». 4. Включите ФО «Вести расчёт зарплаты». 5. В справочнике «Сотрудники» создайте одного или нескольких сотрудников, разрешив вход. 6. Запустив программу под ними, удостоверьтесь в видимости раздела «Настройки» и всех справочников. 7. Открыв любого сотрудника, убедитесь, что открывается именно форма пользователя. 8. Проверьте создание и редактирование контрагентов, введя реальные данные.