Skip to main content
Version: 51.0.0

Розширені функції

Контроли та елементи​

Кнопки​

Дії по натисканню на Кнопку.

Можливе виконання різних дій щодо натискання кнопки на формі документа/завдання.

Оновлення атрибута "Короткий опис" кнопкою на формі​

Оновлення нативного атрибута "Короткий опис" після натискання на кнопку на формі документа

module.exports = {
form_22_click(event) { // 22 - id атрибута Кнопка
event.document.setNativeAttribute('subject', 'Натиснуто кнопку')
}
}

Вивід кастомних атрибутів у консоль браузера через кнопку форми​

Виведення значень кастомних атрибутів у консоль браузера після натискання на кнопку на формі документа

module.exports = {
form_25_click(event) { // 25 - id атрибута Кнопка
console.log(
'Значення першого атрибута:', event.document.getAttribute('text001'),
'Значення другого атрибута:', event.document.getAttribute('text002')
)
}
}

Заповнення числового атрибута сумою інших атрибутів кнопкою​

Заповнення кастомного атрибута типу 'Число' сумою інших кастомних атрибутів за натисканням кнопки на формі документа

module.exports = {
form_23_click(event) { // 23 - id атрибута Кнопка
event.document.setAttribute('sd05',
event.document.getAttribute('sd03') + event.document.getAttribute('sd04')
) // sd03, sd04, sd05 - атрибути типу число
}
}

Блокування кастомного атрибута кнопкою на формі документа​

module.exports = {
form_22_click(event) { // 22 - id атрибута Кнопка
event.form.setNodeProperty(15, 'disabled', !event.value) // 15 - id кастомного атрибута
}
}

Імітація натискання кнопки при значенні атрибута >50​

Викликаємо запуск дії, яка імітує натискання кнопки, якщо значення атрибута більше 50

module.exports = {
document_validateAttribute_act_sum(event) { // act_sum - код атрибута
if (event.value > 50) {
event.form.getNodeControl(4).click() // 4 - ID кнопки, яка буде натиснута
}
}
}

При натисканні на кнопку форми, відкриваємо документ​

ID якого знаходиться в атрибуті з кодом ms01.

module.exports = {
form_95_click(event) {
const docID = event.document.getAttribute('ms01') // ms01 - код атрибута, в якому вказано ID документа, який необхідно відкрити
$App.doCommand({
cmdType: 'showForm',
entity: 'dfx_Document',
formCode: 'dfx_Document',
instanceID: docID,
tabId: 'dfx_Document' + docID,
target: $App.viewport.centralPanel
})
}
}

Скрипти контрола "Форматований текст"​

Встановлення значення контрола залежно від стану документа​

Значення встановлюється в HTML форматі. В залежності від стану документа буде відображатись текст і блокуватись атрибути.

const RICH_TEXT_NODE_ID = 3 // id контрола "Форматований текст"

function disableButton(event) {
event.form.getNodeControl(RICH_TEXT_NODE_ID).setContent(` // установка значення контрола "Форматований текст"
<h2>Документ зараз в статусі "Надісланий"</h2>
<h3>Щоб повернутись до редагування натисніть кнопку "Редагування"</h3>
`)

// відключення атрибутів на формі документів
event.form.setNodeProperty(5, 'disabled', true) // 5 - id атрибута на формі документа
event.form.setNodeProperty(6, 'disabled', true) // 6 - id атрибута на формі документа
event.form.setNodeProperty(7, 'disabled', true) // 7 - id атрибута на формі документа
}

module.exports = {
form_0_mounted(event) {
if (event.document.state == 'sent') { // виконання функції якщо стан документа "Надісланий"
disableButton(event)
}
},
action_executed_a1(event) { // виконання функції після натискання кнопки "в Роботу", a1 - код дії
disableButton(event)
},
action_executed_b1(event) { // дія при натисканні кнопки "Редагування", b1 - код дії
event.form.getNodeControl(RICH_TEXT_NODE_ID).setContent(` // установка значення контрола "Форматований текст"
<h2>Документ в режимі редагування</h2>
<p>внесіть зміни та натисніть кнопку "Надіслати"</p>
`)

// включення атрибутів на формі документів
event.form.setNodeProperty(5, 'disabled', false)
event.form.setNodeProperty(6, 'disabled', false)
event.form.setNodeProperty(7, 'disabled', false)
}
}

Отримати значення контрола після натискання кнопки​

Його зміна - заміна кольору тексту на червоний, і встановлення значення іншого контролю.

module.exports = {
form_0_mounted(event) {
event.form.getNodeControl(3).setContent(` // 3 = id контрола "Форматований текст", при завантаженні форми встановлюється значення контрола
<h2>Документ зараз в статусі "Надісланий"</h2>
<h3>Щоб повернутись до редагування натисніть кнопку "Редагування"</h3>
`)
},
form_2_click(event) { // дія по натисканню кнопки
const richTextControl = event.form.getNodeControl(3) // отримання значення контрола "Форматований текст"
const newContent = richTextControl.getContent()
.replaceAll('<h2>', '<h2><span style="color: #ff0000;">') // зміна кольору тексту на червоний
.replaceAll('</h2>', '</span></h2>')
.replaceAll('<h3>', '<h3><span style="color: #ff0000;">')
.replaceAll('</h3>', '</span></h3>')

event.form.getNodeControl(8).setContent(newContent) // установка значення контрола "Форматований текст" id = 8 зміненим значенням
}
}

Спливаючі форми​

Виклик форм​

На формі документа/завдання і користувацькому довіднику можна викликати кастомну форму, на яку передати значення атрибутів. Кастомні форми налаштовуються окремо у Типі документів - Атрибуті - Спливаючі форми.

Виклик форми кнопкою на формі документа​

module.exports = {
async form_40_click(event) {
const popupResult = await event.openPopupForm('lastNameFirstNamePopup', { // lastNameFirstNamePopup - код форми з довідника "Спливаючі форми"
title: 'Введіть ім\'я та прізвище', // Заголовок форми
height: '400px', // висота форми
width: '400px', // ширина форми
attrValues: { // передаємо на форму значення атрибутів lastName, firstName з форми документа
lastName: event.document.getAttribute('lastName'),
firstName: event.document.getAttribute('firstName')
}
})

if (popupResult) { // при натисканні кнопки "ОК" на формі - записуємо в атрибут fullName ім'я та прізвище
const enteredValues = popupResult.attrValues
const fullName = enteredValues.lastName + ' ' + enteredValues.firstName
event.document.setAttribute('fullName', fullName)
}
}
}

Виклик форми кнопкою дії​

const { showPopupForm } = require('@unitybase/forms/public/forms-public.js')

module.exports = {
async action_beforeExecute_d1(event) { // викликаємо форму по дії d1
event.skipStandardConfirmDialog() // при виклику форми скасовуємо стандартне вікно підтвердження

const popupResult = await showPopupForm('approveActionPopup', {
// approveActionPopup - код форми з довідника "Спливаючі форми"
title: 'Результати погодження', // Заголовок форми
height: undefined, // висота форми не задана - буде встановлена з параметрів конструктора форми
width: undefined, // ширина форми не задана - буде встановлена з параметрів конструктора форми
attrValues: {
approveresult: event.document.getAttribute('additionalInfo')
}
})

if (!popupResult) { // при натисканні кнопки "Відмінити" нічого не робимо
event.cancelAction()
return
}

const additionalInfo = popupResult.attrValues // при натисканні кнопки "ОК" записуємо значення атрибута з форми в документ
event.document.setAttribute('additionalInfo', additionalInfo.approveresult)
}
}

Скрипти на спливаючих формах​

Перенесення значення одного атрибута в інший атрибут форми​

Отримання значення атрибута зі спливаючої форми та встановлення його як значення іншого атрибута на формі

module.exports = {
loaded(event) {
event.formData.setAttribute('sd04_1', event.formData.getAttribute('sd04'))
// sd04_1 - код атрибута який встановлюється, sd04 - код атрибута який отримано з форми
}
}

Встановити значення атрибута кнопкою​

module.exports = {
form_3_click(event) {
event.formData.setAttribute('sd04_1', '150') // sd04_1 - код атрибута якому встановлюється значення 150
}
}

Реагування на зміну значення атрибута​

Встановлення значення атрибута під час зміни іншого атрибута.

module.exports = {
formData_attributeChanged_sd04_1(event) {
event.formData.setAttribute('sd04', '200')
}
}

Валідація значення атрибута​

Скрипт не дозволяє встановити значення атрибута більше ніж 50.

module.exports = {
formData_validateAttribute_sd04_1(event) {
if (event.formData.getAttribute('sd04_1') > 50) {
return 'Введіть значення менше 50'
}
}
}

Генерація документів​

Генерація в образ документа​

З умовами на формі документа​

Генерація документа в атрибут "Образ документа" з умовами на формі документа. Для атрибута Образ документа повинен бути встановлений шаблон генерації, який має значення, що використовуються в скрипті.

const fileNode = 14 // id атрибута "Образ документа"

module.exports = {
async form_51_click(event) { // скрипт виконується при натисканні на кнопку на формі документа. 51 - ID кнопки
const docImageControl = event.form.getNodeControl(fileNode)
const hideRoles = event.document.getAttribute('smplToggle') // прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const hideNative = event.document.getAttribute('sd15') // прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const hideCustom = event.document.getAttribute('a027') // прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const dateREG = event.document.getNativeAttribute('regDate') // прив'язка атрибутів-умов з форми документа, дата реєстрації документа
const SomeText = event.document.getNativeAttribute('ms01') // прив'язка атрибутів-умов з форми документа, атрибут типу текст

await docImageControl.generateByTemplate(extendData) // формування образу документа

function extendData(items) {
if (hideNative) { // Змінюємо значення атрибутів з шаблону генерації при відпрацюванні умови smplToggle = true
items['docTypeID.caption'] = '1' // змінюємо значення на 1
items['stateID.name'] = '2' // змінюємо значення на 2
}
if (hideRoles) { // Змінюємо значення атрибутів з шаблону генерації при відпрацюванні умови sd15 = true
items['mi_participants.author'] = '' // очищуємо значення
items['mi_participants.watcher'] = '' // очищуємо значення
}
if (hideCustom) { // Змінюємо значення атрибутів з шаблону генерації при відпрацюванні умови a027 = true
items['attrValues.ms01'] = SomeText // змінюємо значення на значення атрибута ms01
items['attrValues.ms06'] = dateREG // змінюємо значення на значення атрибута regDate
items['attrValues.ms08.caption'] = '' // очищуємо значення
items['attrValues.ms08_1'] = '' // очищуємо значення
items['attrValues.ms08_1.name'] = '' // очищуємо значення
}
return items
}
}
}

З умовами на спливаючій формі​

Для атрибута Образ документа повинен бути встановлений шаблон генерації, який має значення, що використовуються в скрипті.

const fileNode = 14 // id атрибута "Образ документа"

module.exports = {
async form_63_click(event) { // скрипт виконується при натисканні на кнопку на формі документа. 63 - ID кнопки
const docImageControl = event.form.getNodeControl(fileNode)
const generateByTemplateButton = docImageControl.getButton('genByTemplate')
const popupResult = await event.openPopupForm('LDOC1750_Task_Custom') // LDOC1750_Task_Custom - код спливаючої форми з умовами

if (!popupResult) {
return
}

await docImageControl.generateByTemplate(extendData) // формування образу документа

function extendData(items) {
const attrsTable = {
// прив'язка атрибутів шаблону генерації до атрибутів на спливаючій формі
'attrValues.ms01': 'ms01',
'attrValues.ms02': 'ms02',
'attrValues.ms03': 'ms03',
'attrValues.ms04': 'ms04',
'attrValues.ms05': 'ms05',
'attrValues.ms08': 'ms08',
'attrValues.ms08.caption': 'ms08',
'attrValues.ms08_1': 'ms08_1',
'attrValues.ms08_1.name': 'ms08_1'
}

const attrsToCheck = popupResult.attrValues
for (const item of Object.keys(items)) {
if (attrsTable[item]) {
items[item] = attrsToCheck[attrsTable[item]]
}
}
return items
}
}
}

Генерація документа в файл MS Word​

З умовами на формі документа​

Для атрибута Образ документа повинен бути встановлений шаблон генерації, який має значення, що використовуються в скрипті.

const fileNode = 14 // id атрибута "Образ документа"

module.exports = {
// скрипт виконується при натисканні на кнопку на формі документа. 58 - ID кнопки
async form_58_click(event) {
const docImageControl3 = event.form.getNodeControl(fileNode)
const hideRoles3 = event.document.getAttribute('smplToggle')
// прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const hideNative3 = event.document.getAttribute('sd15')
// прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const hideCustom3 = event.document.getAttribute('a027')
// прив'язка атрибутів-умов з форми документа, атрибут типу Логічний
const docID3 = event.document.getNativeAttribute('ID')
// створюємо константу з номером документа
const dateREG3 = event.document.getNativeAttribute('regDate')
// прив'язка атрибутів-умов з форми документа, дата реєстрації документа
const data3 = await docImageControl3.generateDocumentByTemplate(extendData3)
// викликаємо генерацію в файл

if (data3) {
window.saveAs(data3, `${docID3}.docx`)
// назва файла - номер документа
}

function extendData3(items) {
if (hideNative3) {
// Змінюємо значення атрибутів з шаблону генерації при відпрацюванні умови smplToggle = true
items['docTypeID.caption'] = '1'
// змінюємо значення на 1
items['stateID.name'] = ''
// очищуємо значення
items['subject'] = ''
// очищуємо значення
}
if (hideRoles3) {
items['mi_participants.author'] = ''
// очищуємо значення
}
if (hideCustom3) {
items['attrValues.ms01'] = '19'
// змінюємо значення на 19
items['attrValues.ms02'] = ''
// очищуємо значення
items['attrValues.ms06'] = dateREG3
// змінюємо значення на значення атрибута regDate
items['attrValues.ms09.caption'] = ''
// очищуємо значення
items['attrValues.ms10'] = '33'
// змінюємо значення на 33
items['attrValues.ms10.name'] = '34'
// змінюємо значення на 34
}
return items
}
}
}

З умовами на спливаючій формі​

Для атрибута Образ документа повинен бути встановлений шаблон генерації, який має значення, що використовуються в скрипті.

const fileNode = 14 // id атрибута "Образ документа"

module.exports = {
async form_62_click(event) {
// скрипт виконується при натисканні на кнопку на формі документа. 62 - ID кнопки
const docImageControl = event.form.getNodeControl(fileNode)
const generateByTemplateButton = docImageControl.getButton('genByTemplate')
const popupResult = await event.openPopupForm('DocRules1750')
// DocRules1750 - код спливаючої форми з умовами

if (!popupResult) {
return
}

const docID = event.document.getNativeAttribute('ID')
// створюємо константу з номером документа
const data = await docImageControl.generateDocumentByTemplate(extendData)
// викликаємо генерацію в файл

if (data) {
window.saveAs(data, `${docID}.docx`)
// назва файла - номер документа
}

function extendData(items) {
const attrsTable = {
// робимо прив'язку атрибутів шаблону генерації з атрибутами спливаючої форми
'docTypeID.caption': 'sd15',
// очищуємо значення при відпрацюванні умови sd15 = true
'stateID.name': 'sd15',
// очищуємо значення при відпрацюванні умови sd15 = true
'subject': 'sd15',
// очищуємо значення при відпрацюванні умови sd15 = true
'attrValues.ms01': 'ms01',
// змінюємо значення на значення атрибута спливаючої форми ms01
'attrValues.ms02': 'ms02',
// змінюємо значення на значення атрибута спливаючої форми ms02
'attrValues.ms08.caption': 'ms08',
// змінюємо значення на значення атрибута спливаючої форми ms08
'attrValues.ms08_1': 'a027',
// очищуємо значення при відпрацюванні умови a027 = true
'attrValues.ms08_1.name': 'a027',
// очищуємо значення при відпрацюванні умови a027 = true
'attrValues.ms09': 'ms09',
// змінюємо значення на значення атрибута спливаючої форми ms09
'attrValues.ms09.caption': 'ms09'
// змінюємо значення на значення атрибута спливаючої форми ms09
}

const attrsToCheck = popupResult.attrValues
if (!Object.keys(attrsToCheck).length) {
return items
}

for (const item of Object.keys(items)) {
if (attrsTable[item]) {
if (typeof attrsToCheck[attrsTable[item]] === 'string') {
items[item] = attrsToCheck[attrsTable[item]]
} else {
if (attrsToCheck[attrsTable[item]] === true) {
items[item] = !attrsToCheck[attrsTable[item]]
}
}
}
}
return items
}
}
}