Compare commits
8 Commits
3ecbb4309a
...
ee171ae24d
Author | SHA1 | Date | |
---|---|---|---|
ee171ae24d | |||
d8cf27eef3 | |||
864949663f | |||
148b7fbbfe | |||
3c80ae83c6 | |||
464fd851d8 | |||
df1c50e7a2 | |||
94b3b7661f |
2
dev.yml
2
dev.yml
@ -28,7 +28,7 @@ plugins:
|
||||
- glightbox:
|
||||
zoomable: true
|
||||
- search:
|
||||
lang: ['ru', 'en']
|
||||
lang: ['ru']
|
||||
- section-index
|
||||
- include-markdown
|
||||
- mkdocs-video
|
||||
|
@ -4,36 +4,36 @@
|
||||
|
||||
Для перехода в документ необходимо в меню перейти Администрирование -> Документооборот -> СЭД -> Администрирование СЭД
|
||||
|
||||

|
||||

|
||||
|
||||
## Перевод-делегирование
|
||||
|
||||
В открытой вкладке "Перевод-делегирование" для формирования всех задач у заблокированного пользователя, необходимо нажать на **"Посмотреть заблокированные задачи"**
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
Для подробного просмотра документа необходимо перейти по кликабельной ссылке к этому документу.
|
||||
Также можно отфильтровать задачи по заданному пользователю. Для этого в поле "Пользователь" необходимо указать Ф.И.О. сотрудника и нажать на "Посмотреть заблокированные задачи" (например выберем сотрудника Романова И.В.)
|
||||
|
||||

|
||||

|
||||
|
||||
Для делегирования задач необходимо в поле **"Делегат"** указать пользователя на которого будет произведена делегация, нажать на кнопку "Делегировать активные задачи" и подтвердить делегирование (например документ "Проект поручения №277 делегируем на пользователя Денежную Е.К.).Если на предприятии несколько филиалов, нужно указать филиал. Иначе все задачи пользователя, по всем филиалам будут делегированы указанному пользователю.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
После подтверждения делегирования, данный документ поступает к указанному пользователю (в примере к пользователю Денежная Е.К.).
|
||||
|
||||

|
||||

|
||||
|
||||
В маршруте автоматически прописывается комментарий для делегированного пользователя
|
||||
|
||||

|
||||

|
||||
|
||||
## Перенос документов на другого пользователя
|
||||
|
||||
|
@ -151,7 +151,7 @@
|
||||
|
||||

|
||||
|
||||
<p>Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <img src="../media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически.</p>
|
||||
<p>Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <img src="media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически.</p>
|
||||
|
||||

|
||||
|
||||
@ -194,14 +194,14 @@
|
||||
|
||||

|
||||
|
||||
В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **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# | список сотрудников с паспортами
|
||||
|
||||
|
||||
Заполненная табличная часть выглядит следующим образом:
|
||||
|
||||

|
||||
@ -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>
|
||||
|
||||

|
||||
|
||||
|
@ -422,6 +422,18 @@
|
||||
|
||||

|
||||
|
||||
### Вид уведомления "Уведомления инициатора о работе с документом"
|
||||
|
||||
Ниже представлен пример уведомления инициатору после [каждого](../Настройка%20документов/#вкладка_маршрут_документооборота) действия с документом по маршруту согласования.
|
||||
|
||||

|
||||
|
||||
### Вид уведомления "О завершении маршрута"
|
||||
|
||||
Ниже представлен пример уведомления инициатору после [завершения](../Настройка%20документов/#вкладка_маршрут_документооборота) маршрута согласования.
|
||||
|
||||

|
||||
|
||||
<!-- ### Cписок используемых служебных наименований
|
||||
|
||||
**Служебное наименование** | **Описание**
|
||||
|
BIN
docs/Admin manuals/Конструктор уведомлений/media/image-2.png
Normal file
BIN
docs/Admin manuals/Конструктор уведомлений/media/image-2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
BIN
docs/Admin manuals/Конструктор уведомлений/media/image-3.png
Normal file
BIN
docs/Admin manuals/Конструктор уведомлений/media/image-3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
@ -20,7 +20,7 @@
|
||||
|
||||

|
||||
|
||||
После нажатия на кнопку "Выбрать файл" откроется окно, в котором необходимо выбрать файл для загрузки в систему. После успешной загрузки файла кнопка переименуется в "Скачать файл". Чтобы загрузить другой, необходимо нажать на <img alt="красный крестик" src="../media/del.png">.
|
||||
После нажатия на кнопку "Выбрать файл" откроется окно, в котором необходимо выбрать файл для загрузки в систему. После успешной загрузки файла кнопка переименуется в "Скачать файл". Чтобы загрузить другой, необходимо нажать на <img alt="красный крестик" src="media/del.png">.
|
||||
|
||||

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

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

|
||||
|
||||
|
@ -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 @@
|
||||
|
||||
С помощью столбца **"Присвоить номер"** определяется после какого действия с документом в нем будет проставляться номер. Данная настройка работает на служебных записках, исходящих документах, организационно-распорядительных документах.
|
||||
|
||||
С помощью столбца **Уведомление инициатору** определяется какой вид [уведомления](../Конструктор уведомлений/#вид_уведомления_уведомления_инициатора_о_работе_с_документом) будет направлен инициатору. Должна быть включена галка **Оповещать инициатора о каждом действии**.
|
||||
|
||||
С помощью столбца **О завершении маршрута** возможно задать вид [уведомления](../Конструктор уведомлений/#вид_уведомления_о_завершении_маршрута) о завершении маршрута согласования для инициатора документа. Заданный вид уведомления назначается один раз (заполняется в одной строке с любым действием). Должна быть включена галка **Оповещать инициатора о завершении маршрута**.
|
||||
|
||||
### Вкладка "Сервисы документооборота"
|
||||
|
||||
На этой вкладке можно настроить отслеживание данных в документе для соответственной корректировки его наименования и работу механизма отображения опосредованных связок.
|
||||
|
@ -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 |
|
||||
|
@ -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**
|
||||
|
||||
## Работа с данной формой
|
||||
|
@ -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 @@
|
||||
По аналогии в маршрут добавляется этап. Для этого необходимо нажать на кнопку .
|
||||
|
||||

|
||||
|
||||
Для того чтобы удалить участника или этап необходимо выделить соответствующий элемент (строку с номером этапа или участником) и нажать на кнопку <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_** - определяющая логин сотрудника, указанного в поле "Работник" в тиражированном заявлении, а также определяющая пользователей в соответствующий этап маршрута в документе на подписание. -->
|
||||
|
||||
## Автоматическая подстановка руководителей в маршрут
|
||||
|
||||
Существует несколько способов, при помощи которых можно настроить автоматическую подстановку руководителя (руководителей) инициатора документа. Первый требует индивидуальной настройки пользователей, а другие более общие и позволяет автоматически добавлять в маршрут нескольких руководителей разного уровня.
|
||||
Существует несколько способов, при помощи которых можно настроить автоматическую подстановку руководителя (руководителей) инициатора документа через [сервисную функцию](#сервисные_функции), [организационную](#через_организационную_структуру) либо [управленческую](#через_управленческую_структуру) структуры. Первый требует индивидуальной настройки пользователей, а другие более общие и позволяет автоматически добавлять в маршрут нескольких руководителей разного уровня.
|
||||
|
||||
**На данный момент не рекомендуется использовать несколько способов одновременно.**
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||

|
||||
|
||||
Для создания нового документа необходимо нажать на кнопку <img src="../media/create.png" alt="Создать"> на верхней панели инструментов.
|
||||
Для создания нового документа необходимо нажать на кнопку <img src="media/create.png" alt="Создать"> на верхней панели инструментов.
|
||||
|
||||
При увольнении сотрудника администратор системы блокирует пользователя, под которым работал сотрудник. При блокировке документ об отзыве сертификата ЭП у пользователя создаётся **автоматически**. Такие документы имеют примечание "Документ создан автоматически".
|
||||
|
||||
|
@ -84,7 +84,7 @@ search:
|
||||
|
||||

|
||||
|
||||
Создание физического лица возможно при помощи вложенной формы, доступной из вложенной формы "Создание пользователя" (см. п. 2). Для этого необходимо нажать на кнопку <img alt="Волшебная палочка" src="../media/magic.png">, заполнить перечисленные выше поля и нажать на кнопку "Сохранить".
|
||||
Создание физического лица возможно при помощи вложенной формы, доступной из вложенной формы "Создание пользователя" (см. п. 2). Для этого необходимо нажать на кнопку <img alt="Волшебная палочка" src="media/magic.png">, заполнить перечисленные выше поля и нажать на кнопку "Сохранить".
|
||||
|
||||

|
||||
|
||||
|
@ -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>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') 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>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') 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#
|
Reference in New Issue
Block a user