Compare commits

...

8 Commits

15 changed files with 299 additions and 39 deletions

View File

@ -28,7 +28,7 @@ plugins:
- glightbox:
zoomable: true
- search:
lang: ['ru', 'en']
lang: ['ru']
- section-index
- include-markdown
- mkdocs-video

View File

@ -4,36 +4,36 @@
Для перехода в документ необходимо в меню перейти Администрирование -> Документооборот -> СЭД -> Администрирование СЭД
![Рисунок](.media/../media/menu.png)
![Рисунок](media/menu.png)
## Перевод-делегирование
В открытой вкладке "Перевод-делегирование" для формирования всех задач у заблокированного пользователя, необходимо нажать на **"Посмотреть заблокированные задачи"**
![Рисунок](./media/blockTask.png)
![Рисунок](media/blockTask.png)
Сформируется табличная часть с задачами по всем заблокированным пользователям.
![Рисунок](./media/listBlockTask.png)
![Рисунок](media/listBlockTask.png)
Для подробного просмотра документа необходимо перейти по кликабельной ссылке к этому документу.
Также можно отфильтровать задачи по заданному пользователю. Для этого в поле "Пользователь" необходимо указать Ф.И.О. сотрудника и нажать на "Посмотреть заблокированные задачи" (например выберем сотрудника Романова И.В.)
![Рисунок](./media/taskToUser.png)
![Рисунок](media/taskToUser.png)
Для делегирования задач необходимо в поле **"Делегат"** указать пользователя на которого будет произведена делегация, нажать на кнопку "Делегировать активные задачи" и подтвердить делегирование (например документ "Проект поручения №277 делегируем на пользователя Денежную Е.К.).Если на предприятии несколько филиалов, нужно указать филиал. Иначе все задачи пользователя, по всем филиалам будут делегированы указанному пользователю.
![Рисунок](./media/delegation.png)
![Рисунок](media/delegation.png)
![Рисунок](.media/../media/confirmation.png)
![Рисунок](media/confirmation.png)
После подтверждения делегирования, данный документ поступает к указанному пользователю (в примере к пользователю Денежная Е.К.).
![Рисунок](.media/../media/delegationDoc.png)
![Рисунок](media/delegationDoc.png)
В маршруте автоматически прописывается комментарий для делегированного пользователя
![Рисунок](./media/comment.png)
![Рисунок](media/comment.png)
## Перенос документов на другого пользователя

View File

@ -151,7 +151,7 @@
![Рисунок 8 Реестр "Подтип документа"](./media/image7.png)
<p>Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <img src="../media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически.</p>
<p>Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <img src="media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически.</p>
![Рисунок 9 Создание подтипа документа на вложенной форме](./media/createSubTypeSubForm.png)
@ -194,14 +194,14 @@
![Таблица](media/table.png)
В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **double**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **Вещественное**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
- **"Служебное наименование"** наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Требовать заполнение"** обязательность заполнения атрибута. Если в этом поле стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен.
- **"Только для чтения"** используется для вычисляемых полей. Если в этом поле стоит галочка, атрибут будет недоступен для редактирования пользователем напрямую.
- **Сделать невидимым** - используется если необходимо скрыть дополнительный атрибут в карточке документа.
- **Скрыть технический код** - используется если необходимо скрыть технический код атрибута в карточке документа.
- **"Тип группы(Unispr)"** заполняется в том случае, если поле "Тип атрибута" принимает значение "Пользовательский тип атрибута" ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/index.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": <img src="../media/image13.png">
- **"Тип группы(Unispr)"** заполняется в том случае, если поле "Тип атрибута" принимает значение "Пользовательский тип атрибута" ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/index.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": <img src="media/image13.png">
{ #описание-ChCode }
- **"Наименование в выпадающем списке"** специфичная характеристика выпадающих списков, отвечает за то, какая информация будет отображаться в выпадающем списке для идентификации позиций в справочнике (например, для выпадающего списка "Работник" доступны варианты отображения ФИО работника или его табельного номера, для выпадающего списка "Контрагент" - полное или краткое наименование контрагента ). Выбирается из выпадающего списка, в зависимости от выбранного типа атрибута. По умолчанию устанавливается "NameFull", что означает для справочника "Работник" - ФИО работника, для справочника "Контрагент" - краткое наименование контрагента, для справочника "Пользовательский тип" - поле Наименование, которое будет фильтроваться в зависимости от выбранного типа группы для справочников "Должность" и "Подразделение" - наименование должности и подразделения соответственно. Является обязательным для заполнения, если тип атрибута справочник. Для некоторых типов атрибутов, возможно использование нескольких наименований.
@ -270,7 +270,7 @@ NSNT | Отображение ФИО пользователя-создателя
### Вычисляемые атрибуты
Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в Microsoft SQL Server Management Studio внести изменения в код процедуры dbo.callAfterSetSQL (в которой прописывается непосредственно вычисление значение атрибута) и в код процедуры dbo.callCheckSQL (для проверки корректности внесённых в поля атрибутов значений).
<!-- Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в Microsoft SQL Server Management Studio внести изменения в код процедуры dbo.callAfterSetSQL (в которой прописывается непосредственно вычисление значение атрибута) и в код процедуры dbo.callCheckSQL (для проверки корректности внесённых в поля атрибутов значений).
*Для вычисляемых атрибутов рекомендуется устанавливать признак "Только для чтения".*
@ -293,7 +293,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
Recalculated = 1
where ColumnName = '#eDate#'
end
```
``` -->
Есть специальные дополнительные атрибуты с зарезервированными наименованиями и типами, прописывать их в таблице "Дополнительные атрибуты" не надо. Среди таких атрибутов есть:
{ #спец-атрибуты }
@ -311,7 +311,8 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
#Master_DocumentDate# | дата создания документа
#Master_DocumentDateText# | дата в формате 1 января 2022 г
#Master_DocumentNumber# | номер создаваемого документа
#Master_DocumentSubtype# | тип документа
#Master_DocumentType# | тип документа
#Master_DocumentSubtype# | подтип документа
#Master_EndDate# | дата окончания действия доверенности
#Master_IdWorker# | код работника из справочника "Сотрудники"
#Master_MyCompany# | компания пользователя создателя документа
@ -350,7 +351,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
#Master_Position# | должность пользователя создателя документа
#Master_PositionDative# | должность пользователя создателя документа в дательном падеже
#Master_PositionGenitive# | должность пользователя создателя документа в родительном падеже
#Master_SumInWords# | конвертирует число в текст. Используется для атрибута **double**
#Master_SumInWords# | конвертирует число в текст. Используется для атрибута **Вещественное**
#Master_SubjectDetail# | список полномочий по доверенности из таблицы документа Доверенность
#Master_WorkersDetail# | список сотрудников: ФИО, дата рождения, паспортные данные, адрес регистрации из таблицы документа Доверенность
#Master_WorkersGenitiveDetail# | список сотрудников в винительном падеже
@ -360,7 +361,6 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
#Master_WorkersAccusativePasportDetail# | список сотрудников в род падеже с паспортом
#WorkerNominativePasportList# | список сотрудников с паспортами
Заполненная табличная часть выглядит следующим образом:
![Рисунок 12 Таблица "Дополнительные атрибуты"](./media/docTableFilled.png)
@ -906,7 +906,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
### Наименование, тип, подтип
<p>После нажатия на кнопку "Создать" в реестре "Конструктор документов" заполним служебное наименование шаблона значением "AppealToPetrov" (рекомендуется использовать латинский алфавит), выберем тип документа "Универсальный документ" и создадим новый подтип документа: "Обращение". Это делается с помощью кнопки <img src="../media/createSubTypeDoc.png"> справа от поля "Подтип документа".</p>
<p>После нажатия на кнопку "Создать" в реестре "Конструктор документов" заполним служебное наименование шаблона значением "AppealToPetrov" (рекомендуется использовать латинский алфавит), выберем тип документа "Универсальный документ" и создадим новый подтип документа: "Обращение". Это делается с помощью кнопки <img src="media/createSubTypeDoc.png"> справа от поля "Подтип документа".</p>
![Рисунок 15 Подтип "Обращение"](./media/subtypeExample.png)

View File

@ -422,6 +422,18 @@
![Планировщик](media/sheduler.png)
### Вид уведомления "Уведомления инициатора о работе с документом"
Ниже представлен пример уведомления инициатору после [каждого](../Настройка%20документов/#вкладкааршрут_документооборота) действия с документом по маршруту согласования.
![Alt text](media/image-2.png)
### Вид уведомления "О завершении маршрута"
Ниже представлен пример уведомления инициатору после [завершения](../Настройка%20документов/#вкладкааршрут_документооборота) маршрута согласования.
![Alt text](media/image-3.png)
<!-- ### Cписок используемых служебных наименований
**Служебное наименование** | **Описание**

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -20,7 +20,7 @@
![Обязательные поля](./media/docInit.png)
После нажатия на кнопку "Выбрать файл" откроется окно, в котором необходимо выбрать файл для загрузки в систему. После успешной загрузки файла кнопка переименуется в "Скачать файл". Чтобы загрузить другой, необходимо нажать на <img alt="красный крестик" src="../media/del.png">.
После нажатия на кнопку "Выбрать файл" откроется окно, в котором необходимо выбрать файл для загрузки в систему. После успешной загрузки файла кнопка переименуется в "Скачать файл". Чтобы загрузить другой, необходимо нажать на <img alt="красный крестик" src="media/del.png">.
![Пример заполнения полей](./media/docExample.png)

View File

@ -2,7 +2,7 @@
## Общее описание назначения документа
Настройка обозревателя аналитик (ОА) служит для выделения уникальных узлов в справочнике, открывающемся по кнопке <img src="../media/uaButton.png" style="height:30px;border:0px">, нажатие на которую открывает всплывающее окно с формой обозревателя аналитик. Так, если существует настройка ОА для контрагентов, то по нажатию на кнопку рядом с соответствующим полем
Настройка обозревателя аналитик (ОА) служит для выделения уникальных узлов в справочнике, открывающемся по кнопке <img src="media/uaButton.png" style="height:30px;border:0px">, нажатие на которую открывает всплывающее окно с формой обозревателя аналитик. Так, если существует настройка ОА для контрагентов, то по нажатию на кнопку рядом с соответствующим полем
![Пример лукапа с ОА](./media/lookupExample.png)
@ -28,7 +28,7 @@
В поле "Наименование" необходимо заполнить одним из стандартных значений из [таблицы ниже](#таблица).
В поле "Код" содержатся все узлы ОА. Нужный узел можно выбрать при помощи самого ОА, нажав на кнопку <img src="../media/uaButton.png" style="height:30px;border:0px">.
В поле "Код" содержатся все узлы ОА. Нужный узел можно выбрать при помощи самого ОА, нажав на кнопку <img src="media/uaButton.png" style="height:30px;border:0px">.
![Пример настройки для контрагентов](./media/docExample.png)

View File

@ -47,6 +47,7 @@
- **Полностью повторять маршрут при отзыве** после отзыва документа инициатором маршрут перестроится следующим образом: документ отзывается с согласования у других участников и возвращается к инициатору, завершённые и назначенные этапы маршрута добавятся в конец маршрута со статусом "Ожидание";
- **Разрешено "горячее редактирование" без отзыва** участник, обладающий специальной ролью, может в любой момент времени (при любом статусе в маршруте) откорректировать маршрут документа;
- **Оповещать инициатора о завершении маршрута** присылать инициатору уведомление на почту о завершении маршрута согласования документа;
- **Оповещать инициатора о каждом действии** - присылать инициатору уведомление на почту после каждого действия с документом по маршруту согласования;
- **В оповещениях отображать весь список участников** перечислять в уведомлениях на почту список участников маршрута для таких документов как: входящие документы, исходящие документы, ОРД, Поручение, служебная записка, заявки в техническую поддержку, служебная записка для договора, договоров и дополнительных документов к договору;
- **Отображать кнопку Делег в маршруте** возможность делегировать выполнение действия по маршруту другому пользователю;
- **Отображать кнопку Делег 2х в маршруте** возможность делегировать с контролем выполнение действия по маршруту другому пользователю;
@ -63,7 +64,7 @@
- **Скрыть "Лист согласования"** - скрывает кнопку "Лист согласования" в панели инструментов в документах;
- **Показывать в мобильном приложении** - включает отображение типа документа в [истории операции в мобильном приложении](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Общие%20принципы%20работы%20с%20приложением/#история).
#### Список разрешенных действий с документом
#### Настройка допустимых действий
В правой части вкладки "Маршрут документооборота" содержится таблица со списком возможных действий, которые можно совершить при отправке документа по маршруту.
@ -94,6 +95,10 @@
С помощью столбца **"Присвоить номер"** определяется после какого действия с документом в нем будет проставляться номер. Данная настройка работает на служебных записках, исходящих документах, организационно-распорядительных документах.
С помощью столбца **Уведомление инициатору** определяется какой вид [уведомления](../Конструктор уведомлений/#вид_уведомления_уведомления_инициатора_о_работе_сокументом) будет направлен инициатору. Должна быть включена галка **Оповещать инициатора о каждом действии**.
С помощью столбца **О завершении маршрута** возможно задать вид [уведомления](../Конструктор уведомлений/#вид_уведомления_оавершении_маршрута) о завершении маршрута согласования для инициатора документа. Заданный вид уведомления назначается один раз (заполняется в одной строке с любым действием). Должна быть включена галка **Оповещать инициатора о завершении маршрута**.
### Вкладка "Сервисы документооборота"
На этой вкладке можно настроить отслеживание данных в документе для соответственной корректировки его наименования и работу механизма отображения опосредованных связок.

View File

@ -157,9 +157,10 @@
**Предупреждать об окончании норматива согласования за (часов)** | Уведомления о приближении окончания срока обработки документов придет инициатору и всем поверенным за указанное кол-во дней и часов. **Необходима дополнительная настройка шедулера** | | укажите количество часов, за которое необходимо предупредить об окончании норматива согласования документов
**проверкаа_хотя_бы_одно_подписание_КЭП** | В реестре документов ["Заявления от сотрудника"](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Заявления%20от%20сотрудников/)в столбце "Подписан КЭП" ставится медаль при наличии хотя бы одной подписи КЭП в завершённом этапе маршрута. Иначе - Подписание КЭП должно быть выполнено на всех нужных этапах, при этом завершённых и не пропущенных. | | 1
**Просроченныеадачи_СЭД_кол-во_дней_просрочки_от** | Задаёт в аналитической форме ["Просроченные задачи СЭД"](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Анализ%20и%20отчетность/#журнал_состояния_документов) количество дней просрочки в поле **"Просрочка (дней) больше"** числовое значение по умолчанию. Если 0 или отсутствует, то ставится 30 дней | | 14
**Просроченныеадачи_СЭД_учитывать_ПК** | Исключает отправку уведомлений по просроченным документам в выходные и праздничные дни согласно производственного календари согласно [задачам](../Функции%20планировщика%20задач/index.md) [планировщика](../Планировщик%20задач/index.md): **Уведомления о приближающейся просрочке документов**, **Просроченные документы**, **Рассылка сводки по просроченным документам их инициаторам**, **Рассылка просроченных документов руководителям**. Заполняется столбец **"Значение (константа)"**.| | 1
**Разрешить делегировать самому себе** | Разрешает делегировать документ самому себе по маршруту согласования | | 1
**Сообщение об отправке** | Корректирует информационное сообщение при формировании заявления, например, на ежегодный отпуск. Заполняется столбец **"Значение (текст)"** **Сообщение по умолчанию** - Отправить заявление по маршруту? | |
**создавать переносы отпусков, начиная с даты (день+месяц)** | Назначается дата и месяц ранее которой не разрешается создавать заявление на перенос ежегодного отпуска. Используется в [конструкторе документов](../Конструктор документов/), для проверки **"Перенос создан с даты ранее разрешенной"** в [дополнительных проверках вычислений](../Конструктор документов/#дополнительные_проверки). Заполняется столбец **"Значение (текст)"**? | |
**создавать переносы отпусков, начиная с даты (день+месяц)** | Назначается дата и месяц ранее которой не разрешается создавать заявление на перенос ежегодного отпуска. Используется в [конструкторе документов](../Конструктор документов/), для проверки **"Перенос создан с даты ранее разрешенной"** в [дополнительных проверках вычислений](../Конструктор документов/#дополнительные_проверки). Заполняется столбец **"Значение (текст)"**. | |
**срок подготовки планового графика отпусков** | Указывается количество календарных дней за сколько дней направлять руководителю уведомление об [отсутствии планового графика отпусков](../Настройка внутрисистемных уведомлений/index.md#отсутствие_планового_графика_отпусков_по_подразделению) | | количество календарных дней
**СЭД_доп_текст_тиражированныхокументов** | Указывается дополнительный текст в письмо о поступлении тиражированных копий | для оформления документов на каждом месте работы в 1С |
**СЭД_не_учитывать_вложения_логинов** | В зависимости от настройки, во вкладке ["Входящие"](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Стартовая%20страница/#раздел_входящие) будет отображаться наличие вложений в столбце "Вложения" автоматически сгенерированные системой вложения, либо добавленные вручную пользователем. В этот список также можно включить логины пользователей. | Система,Admin |

View File

@ -2,7 +2,7 @@
## Описание
В данной форме настраиваются правила поиска документа для [журнала состояния документов](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Анализ%20и%20отчетность/#контроль_исполнения_поручений).
В данной форме настраиваются правила поиска документа для [истории операций](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9/)
Чтобы открыть данную форму необходимо перейти в Меню - Администрирование - Документооборот - СЭД - Настройка правил поиска для истории операций. Для доступа к данному времени пользователю необходимо назначить роль **rulesforunifieddocumentreg_write**
## Работа с данной формой

View File

@ -52,7 +52,7 @@
## Создание нового шаблона маршрута
Для создания нового шаблона маршрута необходимо нажать на кнопку <img src="../media/create.png" alt="Создать">.
Для создания нового шаблона маршрута необходимо нажать на кнопку <img src="media/create.png" alt="Создать">.
Откроется форма для создания нового шаблона.
@ -137,7 +137,7 @@
Для того, чтобы инициатор в 1 этапе определялся автоматически, в документе шаблона маршрута включается опция (ставится галочка в поле) "Инициатор является участником".
В табличной части начинаем заполнение со второго этапа. Чтобы добавить новый этап необходимо нажать на кнопку <img src="../media/stageDown.png" alt="+ Этап">. Количество участников в добавленном этапе зависит от числа, указанного в поле справа от этой кнопки, по умолчанию 1.
В табличной части начинаем заполнение со второго этапа. Чтобы добавить новый этап необходимо нажать на кнопку <img src="media/stageDown.png" alt="+ Этап">. Количество участников в добавленном этапе зависит от числа, указанного в поле справа от этой кнопки, по умолчанию 1.
В маршруте после проделанных действий добавятся минимум 2 пустые строки: одна с номером этапа, вторая и далее для указания новых участников маршрута.
@ -160,7 +160,7 @@
!!! note
В данной таблице номера этапов начинаются с 1. Но при выборе этого шаблона в документе номера этапов автоматически пересчитаются, т.е. данный этап станет вторым (2).
Чтобы в этап добавить нового участника, необходимо выделить строку с первым этапом и нажать на кнопку <img src="../media/participant.png" alt="+ Участник">.
Чтобы в этап добавить нового участника, необходимо выделить строку с первым этапом и нажать на кнопку <img src="media/participant.png" alt="+ Участник">.
Добавится новая строка, в которой также необходимо выбрать пользователя и его действие по маршруту.
@ -169,8 +169,7 @@
По аналогии в маршрут добавляется этап. Для этого необходимо нажать на кнопку ![новый этап](media/newEtap.png).
![Пример заполненного документа "Шаблон маршрута"](./media/thirdStageFull.png)
Для того чтобы удалить участника или этап необходимо выделить соответствующий элемент (строку с номером этапа или участником) и нажать на кнопку <img src="../media/deleteButton.png" alt="Удалить">.
Для того чтобы удалить участника или этап необходимо выделить соответствующий элемент (строку с номером этапа или участником) и нажать на кнопку <img src="media/deleteButton.png" alt="Удалить">.
#### Столбец "Служебное наименование из конструктора"
@ -214,7 +213,7 @@
## Сервисные функции
В списке пользователей также можно увидеть элементы списка, отсутствующие в списке пользователей. Такие элементы начинаются со слова _Service_ и называются сервисными функциями. При создании маршрута документа вместо них будут подставлены пользователи, отвечающим заданным условиям:
В списке пользователей также можно увидеть элементы списка, отсутствующие в списке пользователей. Такие элементы начинаются со слова _Service_ и называются сервисными функциями. Также возможно использовать [служебных пользователей](../Настройка служебных пользователей/index.md). При создании маршрута документа вместо них будут подставлены пользователи, отвечающим заданным условиям:
<table>
<tr>
@ -291,12 +290,11 @@
</tr>
</table>
<!-- - **_Service.ListOf.Workers_** - определяющая логин сотрудника, указанного в поле "Работник" в тиражированном заявлении, а также определяющая пользователей в соответствующий этап маршрута в документе на подписание. -->
## Автоматическая подстановка руководителей в маршрут
Существует несколько способов, при помощи которых можно настроить автоматическую подстановку руководителя (руководителей) инициатора документа. Первый требует индивидуальной настройки пользователей, а другие более общие и позволяет автоматически добавлять в маршрут нескольких руководителей разного уровня.
Существует несколько способов, при помощи которых можно настроить автоматическую подстановку руководителя (руководителей) инициатора документа через [сервисную функцию](#сервисныеункции), [организационную](ерез_организационную_структуру) либо [управленческую](ерез_управленческую_структуру) структуры. Первый требует индивидуальной настройки пользователей, а другие более общие и позволяет автоматически добавлять в маршрут нескольких руководителей разного уровня.
**На данный момент не рекомендуется использовать несколько способов одновременно.**

View File

@ -14,7 +14,7 @@
![Рисунок 2 Реестр "Отозванные сертификаты ЭП"](./media/registry.png)
Для создания нового документа необходимо нажать на кнопку <img src="../media/create.png" alt="Создать"> на верхней панели инструментов.
Для создания нового документа необходимо нажать на кнопку <img src="media/create.png" alt="Создать"> на верхней панели инструментов.
При увольнении сотрудника администратор системы блокирует пользователя, под которым работал сотрудник. При блокировке документ об отзыве сертификата ЭП у пользователя создаётся **автоматически**. Такие документы имеют примечание "Документ создан автоматически".

View File

@ -84,7 +84,7 @@ search:
![Рисунок Заполнение справочника "Физическое лицо"](./media/image1.png)
Создание физического лица возможно при помощи вложенной формы, доступной из вложенной формы "Создание пользователя" (см. п. 2). Для этого необходимо нажать на кнопку <img alt="Волшебная палочка" src="../media/magic.png">, заполнить перечисленные выше поля и нажать на кнопку "Сохранить".
Создание физического лица возможно при помощи вложенной формы, доступной из вложенной формы "Создание пользователя" (см. п. 2). Для этого необходимо нажать на кнопку <img alt="Волшебная палочка" src="media/magic.png">, заполнить перечисленные выше поля и нажать на кнопку "Сохранить".
![Рисунок Заполнение справочника "Физическое лицо" на вложенной форме](./media/FLNestCreate.png)

View File

@ -4,8 +4,6 @@ search:
---
# Функции планировщика задач
В системе список задач, выполняемых по расписанию постоянно обновляется. На текущий момент доступны следующие задачи:
<table border="1">
<tr>
<th width="200px">Название действия (задача)</th>
@ -254,7 +252,253 @@ search:
</tr>
</table>
 
**Способы и примеры настройки расписания задаются в формате crontab**
Ознакомиться подробнее можно в разделе [Создание расписания в формате Crontab](../FAQ/#использование_crontab_для_сервиса_sheduler)
Ознакомиться подробнее можно в разделе [Создание расписания в формате Crontab](../FAQ/#использование_crontab_для_сервиса_sheduler)
## Настройка заданий для планировщика
Также для планировщика возможно настроить иные задания с помощью справочника ["настройки заданий"](../Настройка%20внутрисистемных%20уведомлений/#настройкааданий_для_планировщика), где во вкладке "Задача" указывается часть содержащая динамический запрос для выполнения задачи. Текст для таких задач возможно назначить с помощью ["Конструктора уведомлений"](../Конструктор%20уведомлений/#вид_уведомления_настройкааданий_для_планировщика) Данные задачи отрабатывают при запуске задачи **"Уведомления Lexema"**. Далее представлены примеры запросов.
### Документы, не пришедшие из 1с
```sql
with "no1c"
as
(select r."COrgName" , 'таб.№ ' || r."NumTab"|| ' ' || r."Workers" as "Workers" ,r."PostWorkers" ,
r."name1c" || ' По заявлению № ' || r."DocumentNumber" || ' от ' || to_char( "DocumentDate"::date, 'DD.MM.YYYY') as "name1c"
, l."link_txt" || '#/view/'|| r."TypeName" ||'Form' ||'/' || r."VCode" as "link"
from odata."getExchange1CGuidsRegistry"(null, null, (now()::date+ '-45 day'::interval)::date , (now()::date+ '-3 day'::interval)::Date , null) r
cross join (select "LocationProtocol" || '//' || "LocationHostName" as "link_txt" from comdoc."DocflowSettings") l
where
coalesce( "DeletionMark",'false') = 'false ' and
r."VCode" is not null and
r."DFS_VCode" is null and
r."guid" is not null and
r.name1c not ilike '%больнич%'
and
r.name1c not ilike '%НДФЛ%'
and
r.name1c not ilike '%вычет%'
and
r.name1c not ilike '%мат%пом%'
and
r. "DocumentDate" >= now()::date+ '-45 day'::interval
and
r. "DocumentDate" <= now()::date+ '-3 day'::interval
)
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
select distinct 'Personnel' as "DocflowUser" ,
--rlU."DocflowUser" ,
'Следующие документы не пришли на подписание из 1С : <br/>' ||
replace(
replace(replace(
'<table style = "border-collapse:collapse">
<tr>
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Документ</th>
</tr>'||
(SELECT DISTINCT string_agg(x."Body", '')
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'|| coalesce(p2."COrgName",'')||'</td>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."Workers",'')||'</td>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."PostWorkers",'')||'</td>
<td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">' ||
'<a href="' || coalesce(p2."link",'') || '">' ||coalesce(p2."name1c",'')|| '</a>'::text || '</td>
</tr>' as "Body" from "no1c" p2
order by p2."COrgName", p2."Workers" ) x)||'</table>'
,'&lt;','<'),'&gt;','>'),
'&amp;','&') as txt,
null::bigint as "link", 'Первичный документ', 'Первичный документ',
'Информационное сообщение о документах, не пришедших из 1С',
null::bigint as "IdWorker"
from "no1c" dd
/*join comdoc."ReadListGroup" rl on rl."Name" = 'Кадровики для рассылки документов, не пришедших из 1С'
and rl."DocTypes" ilike '%NotificationLexema%'
join comdoc."ReadListGroupUsers" rlU on rl."VCode" = rlU."PCode"*/
--group by rlU."DocflowUser"
```
### Задача по изменению фамилии в карточке пользователя + склонение в карточке физического лица
```sql
do $$
begin
IF NOT comdoc."isTableExists"('#fio', 'temp') THEN
CREATE TEMP TABLE "#fio"("Id" bigint, "OldFam" text, "OldName" text, "OldOtch" text,
"IdPerson" bigint, "NewFam" varchar(255), "NewName" varchar(255), "NewOtch" varchar(255), "UserName" varchar(255), "Code" varchar(2550)
) ON COMMIT DROP;
END IF;
insert into "#fio"
select m."Id",m."LastName", m."FirstName", m."MiddleName", per."VCode", per."Family", per."Name", per."Father", m."UserName" , c."Code"
from lex."UserMeta" m
join rp."RP_PersonContact" c on c."IdTypeContact" = 6 and m."UserName" = c."Code"
join rp."RP_Person" per on per."VCode" = c."Pcode"
where (lower(coalesce(m."LastName",''))<> lower(coalesce(per."Family",'')) or lower(coalesce(m."FirstName",''))<> lower(coalesce(per."Name",''))
or lower(coalesce(m."MiddleName",''))<>lower(coalesce(per."Father",'')))
and (select count(a."Pc") from (select distinct c."Pcode" as "Pc" from rp."RP_PersonContact" c
join rp."RP_Person" per on per."VCode" = c."Pcode"
where c."Code" =m."UserName")a) =1;
update lex."UserMeta" m set "LastName" = q."NewFam", "FirstName" = q."NewName", "MiddleName" = q."NewOtch"
from "#fio" q
where q."Id" = m."Id";
update rp."RP_Person" per set "Note" = case when per."Note" is not null then per."Note" ||'
' else '' end ||to_char(now(),'DD.MM.YYYY')
|| (select ' изменено ФИО с '||coalesce(f."OldFam",'')||' '||coalesce(f."OldName",'')||' '||coalesce(f."OldOtch",'')||' на '
||coalesce(f."NewFam",'')||' '||coalesce(f."NewName",'')||' '||coalesce(f."NewOtch",'')from "#fio" f where f."IdPerson" = per."VCode" limit 1),
"FNFAccusative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 1),
"FNFDative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 0),
"FNFGenitive" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 2)
from "#fio" q
where per."VCode" = q."IdPerson";
end;
$$;
```
### Оповещение о необходимости замены паспорта
```sql
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
select distinct pc."Code" , '<font size="3"> <b>Настоящим сообщаем, что приближается срок замены паспорта </b> <br/>' || '</font>' ,
null::bigint as "link", '', '',
'Инф. сообщение о замене паспорта',
w."VCode" as "IdWorker"
from rp."RP_Person" p
join rp."RP_Worker" w on p."VCode" = w."IdPerson"
left join rp."RP_WorkerMove" wm on w."VCode" = wm."IdWorker" and now() between coalesce(wm."DateBeg", '20010101') and coalesce(wm."DateEnd", '20700101')
left join comdoc."Department" dep on wm."IdDepartment" = dep."VCode"
left join rp."RP_Post" post on wm."IdPost" = post."VCode"
left join rp."RP_PersonContact" pc on p."VCode" = pc."Pcode" and pc."IdTypeContact" = 6
LEFT JOIN LATERAL comdoc."getAccountingConstantValues"(w."COrg", 'СЭД_Уведомления_Сообщения_оамене_паспорта', NULL) cv on true
where (
now() between p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
p."DateBirth" + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
date_part('year',age(p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval ))::int in (20,45)
) or w."VCode" = 53
```
### Оповещение о списке работников, которые не создали заявление об отпуске из уведомления
```sql
with list as (
select ud."VCode", ud."IdWorker", atr."Value" as "Vacation", to_char(atrD."DateValue",'DD.MM.YYYY') as "DateBeg" , f."Name" as "COrgName"
from dfd."UniversalDocument" AS ud
join dfd."DocumentConstructor" dc on ud."DocumentCategory" = dc."VCode"
join dfd."DocumentSubtype" ds on dc."DocumentSubtype" = ds."VCode"
join dfd."DocumentAdditionalAttribute" atr on ud."VCode" = atr."PCode"
join dfd."DocumentCategoryAttributeType" atrtype on atr."CategoryAttributeType" = atrtype."VCode" and ud."DocumentCategory" = atrtype."PCode" and
atrtype."AttributeType" = 'string' and atrtype."ColumnName" = '#typeVacation#'
join dfd."DocumentAdditionalAttribute" atrD on ud."VCode" = atrD."PCode"
join dfd."DocumentCategoryAttributeType" atrtypeD on atrD."CategoryAttributeType" = atrtypeD."VCode" and ud."DocumentCategory" = atrtypeD."PCode" and
atrtypeD."AttributeType" = 'Date' and atrtypeD."ColumnName" = '#bdate#'
join comdoc."VFilials" f on ud."COrg" = f."VCode"
where ud."TypeName" = 'NotificationLexema' and
ds."InternalName" = 'NotificationVacation' and
not exists (select 1
from dfd."UniversalDocument" es
join comdoc."DocflowLink" dle on ud."VCode" = dle."DocCode2" and
((dle."DocType2" = ud."TypeName" and ud."VCode" = dle."DocCode2") or
(dle."DocType1" = ud."TypeName" and ud."VCode" = dle."DocCode1")
)
where es."TypeName" = 'EmployeeStatement' ) and
atrD."DateValue" > now()::date )
insert into "#forInsNotification" ( "txt", "txtSMS", "txtTelegram")
select null as "txt", null as "txtSMS", null as "txtTelegram"
from (select ('<table><tr><th align="left">Организация</th><th align="left">Сотрудник</th><th align="left">Отпуск</th></tr>' ||
(SELECT DISTINCT string_agg(x."link", '')
FROM ( SELECT '<tr><td>' || coalesce(l."COrgName",'') || '</td><td>' || coalesce(r."NameFull",'') || '</td>' ||
'<td>' || coalesce(l."Vacation", '') || ' ' || l."DateBeg" || '</td>'
||'</tr>' as "link"
FROM list l
join rp."RP_Worker" r on l."IdWorker" = r."VCode") AS x) || '</table>'
) ::text as "data") d
```
таблица.столбец | описание | # для шаблона
----------------|----------|--------------
d."data" | Список | #query_list#
### Отсутствие планового графика отпусков по подразделению
```sql
with "chiefStruct" as
(select * from vac."SendingLateApplicationNotice"())
insert into "#forInsNotification" ("DocflowUser","CopyTo", "txt")
select /*main."ChiefLogin"*/ 'Loginovasa@lexema.ru', (select DISTINCT string_agg(coalesce(ch."ChiefLogin",''),', ') from "chiefStruct" ch
where ch."IdWorker" = main."Chief" and main."ChiefLogin"<>coalesce(ch."ChiefLogin",'')),
'Добрый день, ' || '<b>'||RTRIM(coalesce(du."FirstName",'') || ' ' || coalesce(du."MiddleName",''))||'</b>' ||
'. <br><br>' ||
'<br> По следующим сотрудникам не сформированы заявки на отпуск на '||main."planYear"::text||' год:'||
'<br><br>' ||
replace(
replace(replace(
'<table style = "border-collapse:collapse">
<tr>
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Подразделение</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
</tr>'||
(SELECT DISTINCT string_agg(x."link", '')
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'||fil||'</td>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black">'||dep||'</td>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||fio||'</td>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||post||'</td>
</tr>' as "link" from (select distinct f."Name" as fil, coalesce(dep."Name",'') as "dep", coalesce(w."NameShort",w."NameFull",'') as fio , coalesce(rp."Name",'') as post
from "chiefStruct" p2
left join rp."RP_Worker" w on w."VCode" = p2."IdWorker"
left join comdoc."Department" dep on dep."VCode" = p2."IdDepartment"
left join rp."RP_Post" rp on rp."VCode" = p2."IdPost"
left join comdoc."VFilials" f on w."COrg" = f."VCode"
where coalesce(p2."ChiefLogin",'') = coalesce(main."ChiefLogin",'')) qw
order by fil, "dep", fio ) as x)||'</table>'
,'&lt;','<'),'&gt;','>'),
'&amp;','&') as "Body"
from "chiefStruct" main
inner join comdoc."DocflowUser" du on main."ChiefLogin" = du."UserName"
group by main."Chief", coalesce(du."FirstName",''), coalesce(du."MiddleName",''), main."ChiefLogin", main."planYear";
```
### Смена организации по умолчанию при смене основного места работы
```sql
call dfd."updateUsersDefaultOrganization" (null, 'Admin;EVIvaschenko')
/* 1 - коды исключен физ лиц через ;
2 - логины исключения через ; */
```
### Создание отзывов доверенностей МЧД по уволенным
```sql
with res as (select * ,
'<tr>
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||
'<a href="' ||
(select "LocationProtocol" || '//' || "LocationHostName" || coalesce(':'||"LocationPort",'') from comdoc."DocflowSettings" order by "CDate" desc limit 1)
|| '/#/view/' || se."DocForm" || '/' || r."VCode"::text
|| '">' || case when r."TypeName" = 'EmpowermentRevocation' then 'Отзыв доверенности' else 'Доверенность' end || ' № ' ||coalesce(r."DocumentNumber",'') || ' от ' || to_char(r."DocumentDate",'DD.MM.YYYY')
|| '</a>'::text ||'</td> </tr>' as "ref_link"
from dfd."createEmpowermentRevocationUvol" () r
join comdoc."DocflowDocumentSettings" se on r."TypeName" = se."DocType"
)
insert into "#forInsNotification" ("DocflowUser", "txt")
select d."DocflowUser", null as "txt"
from (select distinct r."DocflowUser", (select string_agg(coalesce(r1."ref_link",''),'')
from res r1 where r."DocflowUser" = r1."DocflowUser") as list
from res r
) d
```
таблица.столбец | описание | # для шаблона
----------------|----------|--------------
d.list | Список документов | #query_list#