# wlb_prescr_io

IDW: prescrEdit
ID: dscr
IO_VAL:
  The frame is one of the group frames for working with the prescriptions, which serves for the user-editing of the prescriptions-programs. The frame commonly uses and represents the representative structure of the prescription manager.

  The frame contains from left to right:
  - "Library" — library with a list of programs and library's control tools.
  - "Program" — the list of commands-steps of the selected in the library prescription-program with the control tools.
  - "Command" — the edit field of the selected step in the prescription, which contains the selection of the command and set the name, description, background execution flag and values of the available attributes, as well as button to save the changes.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.3.0
  License: GPLv2

uk#IO_VAL:
  Кадр є одним із групи кадрів роботи із рецептами, який слугує для користувацького редагування рецептів-програм. Кадр загалом використовує та представляє представницьку структуру менеджеру рецептів.

  Кадр містить, зліва праворуч:
  - "Бібліотека" — бібліотека із переліком програм та елементами управління бібліотекою.
  - "Програма" — перелік кроків-команд обраного у бібліотеці рецепту-програми з елементами управління.
  - "Команда" — поле редагування обраного кроку рецепту у складі вибору команди та встановлення ім'я, опису, прапорця фонового виконання та значень доступних атрибутів, а також кнопки збереження змін.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.3.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Кадр является одним из группы кадров работы с рецептами, который служит для пользовательского редактирования рецептов-программ. Кадр, в целом, использует и представляет представительскую структуру менеджера рецептов.

  Кадр содержит, слева на право:
  - "Библиотека" — библиотека со списком программ и элементами управления библиотекой.
  - "Программа" — список шагов-команд выбранного в библиотеке рецепта-программы с элементами управления.
  - "Команда" — поле редактирования выбранного шага рецепта в составе выбора команды и установки имени, описания, флага фонового исполнения и значений доступных атрибутов, а также кнопки сохранения изменений.

  Автор: Роман Савоченко <roman@oscada.org>
  Версия: 1.3.0
  Лицензия: GPLv2


IDW: prescrRun
ID: dscr
IO_VAL:
  The frame is one of the group frames for working with the prescriptions, which serves for control and observing of executing the programs-prescriptions, previously formed in the Prescription — edit frame. The frame commonly uses and represents the representative structure of the prescription manager. In addition to this full-format prescription frame, there is a simplified one — "Prescription — run, simple, that allows you to manage and to track compactly the prescriptions execution in other frames of the technological process.

  The frame contains from the left to the right:
  - "Start/stop/skip" — two buttons to start and stop the selected program and a button to skip the current step execution.
  - "Library" — library with a list of the programs.
  - "Program" — document of the commands-steps list of the selected prescription-program in the library. During the execution in this field it is monitored the program execution current state by the appropriate highlight of the steps.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.3.0
  License: GPLv2

uk#IO_VAL:
  Кадр є одним із групи кадрів роботи із рецептами, який слугує для контролю та спостереження за виконанням програм-рецептів, раніш сформованих у кадрі "Рецепт — редагування". Кадр загалом використовує та представляє представницьку структуру менеджеру рецептів. Додатково до цього повноформатного кадру виконання рецептів, передбачено спрощений — "Рецепт — виконання, простий", який дозволяє компактно керувати та відстежувати виконання рецептів у складі інших кадрів технологічного процесу.

  Кадр містить, зліва праворуч:
  - "Запуск/зупинка/пропуск" — дві кнопки запуску та зупинки обраної програми, а також кнопка пропуску виконання поточного кроку.
  - "Бібліотека" — бібліотека із переліком програм.
  - "Програма" — документ переліку кроків-команд, обраного у бібліотеці рецепту-програми. При виконання у цьому полі відстежується поточний стан виконання шляхом відповідного підсвітлення кроків.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.3.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Кадр является одним из группы кадров работы с рецептами, который служит для контроля и наблюдения за исполнением программ-рецептов, ранее сформированных в кадре "Рецепт — редактирование". Кадр, в целом, использует и представляет представительскую структуру менеджера рецептов. Дополнительно к этому полноформатному кадру исполнения рецептов, предусмотрен упрощённый — "Рецепт — исполнение, простой", который позволяет компактно управлять и отслеживать исполнение рецептов в составе других кадров технологического процесса.

  Кадр содержит, слева на право:
  - "Запуск/останов/пропуск" — две кнопки запуска и останова выбранной программы, а также кнопка пропуска выполнения текущего шага.
  - "Библиотека" — библиотека со списком программ.
  - "Программа" — документ списка шагов-команд, выбранного в библиотеке рецепта-программы. При исполнении в этом поле отслеживается текущее состояние исполнения путём соответствующей подсветки шагов.

  Автор: Роман Савоченко <roman@oscada.org>
  Версия: 1.3.0
  Лицензия: GPLv2


IDW: prescrRunSimple
ID: dscr
IO_VAL:
  The widget is a simple variant of the frame "Prescription — run", which designed for placing as a widget of the mnemonic schemes and it mostly works together the frame "Prescription — run". The frame commonly uses and represents the representative structure of the prescription manager.

  The widget contains from the left to the right and to the bottom:
  - "Start/stop/skip" — two buttons to start and stop the selected program and a button to skip the current step execution.
  - "Library" — button to display the current prescription-program and call the dialog of selecting item into tree.
  - "Program" — document with lines of currently active commands.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.3.0
  License: GPLv2

uk#IO_VAL:
  Віджет це спрощений варіант кадру "Рецепт — виконання", який розроблено для розташування як віджет мнемосхем та він переважно і працює доповненням кадру "Рецепт — виконання". Кадр загалом використовує та представляє представницьку структуру менеджеру рецептів.

  Віджет містить, зліва праворуч та додолу:
  - "Запуск/зупинка/пропуск" — дві кнопки запуску та зупинки обраної програми, а також кнопка пропуску виконання поточного кроку.
  - "Бібліотека" — кнопка відображення поточного рецепту-програми та виклику діалогу обрання програми у дереві.
  - "Програма" — документ із рядками активних наразі команд.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.3.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Виджет это упрощённый вариант кадра "Рецепт — исполнение", который разработан для размещения как виджет мнемосхем и он в основном и работает дополнением кадра "Рецепт — исполнение". Кадр, в целом, использует и представляет представительскую структуру менеджера рецептов.

  Виджет содержит, слева направа и вниз:
  - "Запуск/останов/пропуск" — две кнопки запуска и останова выбранной программы, а также кнопка пропуска исполнения текущего шага.
  - "Библиотека" — кнопка отображения текущего рецепта-программы и вызова диалога выбора программы в дереве.
  - "Программа" — документ со строками активных на текущий момент команд.

  Автор: Роман Савоченко <roman@oscada.org>
  Версия: 1.3.0
  Лицензия: GPLv2


# prj_tmplSO_io

IDW: /prj_tmplSO/pg_so
ID: evProc
IO_VAL:
  ws_BtPress:/prev:prev:/pg_so/*/*/$
  ws_BtPress:/next:next:/pg_so/*/*/$
  ws_BtPress:/go_mn:open:/pg_so/*/mn/*
  ws_BtPress:/go_graph:open:/pg_so/*/ggraph/*
  ws_BtPress:/go_cadr:open:/pg_so/*/gcadr/*
  ws_BtPress:/go_view:open:/pg_so/*/gview/*
  ws_BtPress:/go_doc:open:/pg_so/*/doc/*
  ws_BtPress:/go_resg:open:/pg_so/rg/rg/*
  ws_BtPress:/so1:open:/pg_so/1/*/*
  ws_BtPress:/so2:open:/pg_so/2/*/*
  ws_BtPress:/so3:open:/pg_so/3/*/*
  ws_BtPress:/so4:open:/pg_so/4/*/*
  ws_BtPress:/so5:open:/pg_so/5/*/*
  ws_BtPress:/so6:open:/pg_so/6/*/*
  ws_BtPress:/so7:open:/pg_so/7/*/*
  ws_BtPress:/so8:open:/pg_so/8/*/*
  ws_BtPress:/so9:open:/pg_so/9/*/*
  ws_BtPress:*:open:/pg_control/pg_terminator


IDW: /prj_tmplSO/pg_so/pg_1/pg_view4
ID: evProc
IO_VAL:
  ws_FocusIn:/el1_1:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el1_2:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el1_3:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el1_4:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el1_5:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el1_6:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_1:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_2:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_3:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_4:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_5:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el2_6:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_1:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_2:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_3:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_4:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_5:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el3_6:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_1:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_2:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_3:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_4:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_5:open:/pg_control/pg_ElCadr
  ws_FocusIn:/el4_6:open:/pg_control/pg_ElCadr


# wlb_mnEls_io

IDW: cooler2
ID: elLst
IO_VAL:
  arc:(60|50):(60|50):(50|50):(50|40):(40|50):::::
  line:(46.5|40.63):(39.74|21.81):::::
  line:(53.42|40.6):(60.26|21.81):::::
  arc:(39.74|21.81):(60.26|21.81):(50|21.81):(50|9.55):(39.74|21.81):::::
  line:(59.4|53.41):(78.19|60.26):::::
  line:(59.4|46.59):(78.19|39.74):::::
  arc:(78.19|39.74):(78.19|60.26):(78.19|50):(78.19|39.74):(67.93|50):::::
  arc:(46.5|40.63):(53.42|40.6):(50|50):(50|40):(40|50):::::
  arc:(59.4|46.59):(59.4|53.41):(50|50):(50|40):(40|50):::::
  line:(53.42|59.4):(60.26|78.19):::::
  line:(46.58|59.4):(39.74|78.19):::::
  arc:(53.42|59.4):(46.58|59.4):(50|50):(50|40):(40|50):::::
  arc:(60.26|78.19):(39.74|78.19):(50|78.19):(50|67.88):(39.74|78.19):::::
  line:(40.7|53.68):(21.81|60.26):::::
  line:(40.6|46.59):(21.81|39.74):::::
  arc:(40.7|53.68):(40.6|46.59):(50|50):(50|40):(40|50):::::
  arc:(21.81|60.26):(21.81|39.74):(21.81|50):(32.07|50):(21.81|39.74):::::
  fill:(46.5|40.63):(39.74|21.81):(60.26|21.81):(53.42|40.6):c1:
  fill:(59.4|46.59):(78.19|39.74):(78.19|60.26):(59.4|53.41):c1:
  fill:(53.42|59.4):(60.26|78.19):(39.74|78.19):(46.58|59.4):c1:
  fill:(40.7|53.68):(21.81|60.26):(21.81|39.74):(40.6|46.59):c1:
  fill:(60|50):(60|50):c2:


IDW: El_round_square1
ID: elLst
IO_VAL:
  arc:(30|95):(30|5):(30|50):(5|50):(30|95):::::
  arc:(70|5):(70|95):(70|50):(95|50):(70|5):::::
  line:(30|5):(70|5):::::
  line:(30|95):(70|95):::::
  fill:(30|95):(30|5):(70|5):(70|95)::


IDW: El_pipe_1
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::c1:::
  line:(75|100):(25|100)::c1:::
  line:(0|25):(75|25):::::
  line:(75|25):(75|100):::::
  line:(25|100):(25|75):::::
  line:(25|75):(0|75):::::
  fill:(0|25):(0|75):(25|75):(25|100):(75|100):(75|25):c1:


IDW: sep
ID: elLst
IO_VAL:
  line:(39|0):(0|54):::::
  line:(39|0):(79|54):::::
  line:(79|54):(39|109):::::
  line:(0|54):(39|109):::::
  line:(16|77):(63|77):::::
  line:(25|77):(39|97):::::
  line:(54|77):(39|97):::::
  fill:(39|0):(0|54):(39|109):(79|54)::


IDW: El_Troinik
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::c1:::
  line:(100|25):(100|75)::c1:::
  line:(75|100):(25|100)::c1:::
  line:(75|0):(75|25):::::
  line:(75|25):(100|25):::::
  line:(100|75):(75|75):::::
  line:(75|75):(75|100):::::
  line:(25|100):(25|0):::::
  fill:(25|0):(75|0):(75|25):(100|25):(100|75):(75|75):(75|100):(25|100):c1:


IDW: El_Zadvizhka
ID: elLst
IO_VAL:
  line:(5|45):(5|95)::black-127:::
  line:(5|95):(50|70)::black-127:::
  line:(50|70):(5|45)::black-127:::
  line:(50|70):(95|45)::black-127:::
  line:(50|70):(95|95)::black-127:::
  line:(95|45):(95|95)::black-127:::
  line:(50|70):(50|60):::::
  arc:(22|32):(22|32):(50|32):(50|4):(22|32):::::
  fill:(50|70):(95|45):(95|95):c1:
  fill:(5|45):(5|95):(50|70):c1:
  fill:(22|32):(22|32)::


IDW: El_Pipe_simple_vert
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::c1:::
  line:(75|100):(25|100)::c1:::
  line:(75|0):(75|100):::::
  line:(25|100):(25|0):::::
  fill:(25|0):(75|0):(75|100):(25|100):c1:


IDW: El_Pipe_simple
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::c1:::
  line:(100|25):(100|75)::c1:::
  line:(0|25):(100|25):::::
  line:(100|75):(0|75):::::
  fill:(0|25):(0|75):(100|75):(100|25):c1:


IDW: El_Kran_polozh
ID: elLst
IO_VAL:
  line:(5|45):(5|95):::::
  line:(5|95):(40|70):::::
  line:(40|70):(5|45):::::
  line:(60|70):(95|45):::::
  line:(60|70):(95|95):::::
  line:(95|45):(95|95):::::
  line:(60|90):(40|90):::::
  line:(40|35):(60|35):::::
  line:1:2:::::
  line:(5|35):(95|35):::::
  line:(40|35):1:::::
  line:(60|35):2:::::
  line:1:(40|90):::::
  line:2:(60|90):::::
  arc:(5|35):(95|35):(50|35):(50|5):(5|35):::::
  fill:(60|90):(40|90):1:2:c2:
  fill:(60|70):(95|45):(95|95):c1:conR_128
  fill:(5|45):(5|95):(40|70):c1:conL_128
  fill:(5|35):(95|35):#d3d3d3:v_127


IDW: El_round_square
ID: elLst
IO_VAL:
  arc:(30|95):(30|5):(30|50):(5|50):(30|95):::::
  arc:(70|5):(70|95):(70|50):(95|50):(70|5):::::
  line:(30|5):(70|5):::::
  line:(30|95):(70|95):::::


IDW: cooler
ID: elLst
IO_VAL:
  line:(39|0):(0|39):::::
  line:(39|0):(79|39):::::
  line:(79|39):(39|79):::::
  line:(0|39):(39|79):::::
  line:(19|99):(60|99):::::
  line:(19|99):(39|79):::::
  line:(60|99):(39|79):::::
  line:(39|0):(39|79):::::
  line:(0|39):(79|39):::::
  fill:(39|0):(0|39):(39|79):(79|39)::
  fill:(39|79):(19|99):(60|99)::


IDW: El_Obr_Strela
ID: elLst
IO_VAL:
  line:(0|75):(0|25)::c1:::
  line:(0|25):(65|25):::::
  line:(65|25):(95|5):::::
  line:(95|5):(95|95):::::
  line:(95|95):(65|75):::::
  line:(65|75):(0|75):::::
  fill:(0|75):(0|25):(65|25):(95|5):(95|95):(65|75):c1:


IDW: El_d
ID: elLst
IO_VAL:
  arc:(5|50):(5|50):(50|50):(50|5):(5|50):::::
  line:(5|50):(86|23):::::
  line:(5|50):(86|77):::::
  fill:(5|50):(5|50)::


IDW: El_Krest
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::c1:::
  line:(100|25):(100|75)::c1:::
  line:(75|100):(25|100)::c1:::
  line:(0|75):(0|25)::c1:::
  line:(0|25):(25|25):::::
  line:(25|25):(25|0):::::
  line:(75|0):(75|25):::::
  line:(75|25):(100|25):::::
  line:(100|75):(75|75):::::
  line:(75|75):(75|100):::::
  line:(25|100):(25|75):::::
  line:(25|75):(0|75):::::
  fill:(0|25):(25|25):(25|0):(75|0):(75|25):(100|25):(100|75):(75|75):(75|100):(25|100):(25|75):(0|75):c1:


IDW: Shkala
ID: elLst
IDC: El_shkala
IO_VAL:
  line:(5|5):(5|86):::::
  line:(5|5):(10|5):::::
  line:(5|86):(10|86):::::
  line:(5|45):(10|45):::::
  line:(5|25):(8|25):::::
  line:(5|65):(8|65):::::


IDW: El_Strela
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::c1:::
  line:(0|25):(65|25):::::
  line:(65|25):(65|5):::::
  line:(65|5):(95|50):::::
  line:(95|50):(65|95):::::
  line:(65|95):(65|75):::::
  line:(65|75):(0|75):::::
  fill:(0|25):(0|75):(65|75):(65|95):(95|50):(65|5):(65|25):c1:


IDW: El_Armatura
ID: elLst
IO_VAL:
  line:(5|25):(5|75):::::
  line:(5|75):(50|50):::::
  line:(50|50):(5|25):::::
  line:(50|50):(95|25):::::
  line:(50|50):(95|75):::::
  line:(95|25):(95|75):::::
  fill:(5|25):(5|75):(50|50):c1:conL_128
  fill:(50|50):(95|25):(95|75):c1:conR_128


IDW: El_Kran_Sh
ID: elLst
IO_VAL:
  line:(5|45):(5|95)::#000000-127:::
  line:(5|95):(50|70)::#000000-127:::
  line:(50|70):(5|45)::#000000-127:::
  line:(50|70):(95|45)::#000000-127:::
  line:(50|70):(95|95)::#000000-127:::
  line:(95|45):(95|95)::#000000-127:::
  line:(50|70):(50|35):::::
  line:(50|35):(5|35):::::
  line:(5|35):(5|10):::::
  line:(5|10):(93|10):::::
  line:(93|10):(93|35):::::
  line:(93|35):(50|35):::::
  fill:(50|70):(95|45):(95|95):c1:conR_128
  fill:(5|45):(5|95):(50|70):c1:conL_128
  fill:(50|35):(5|35):(5|10):(93|10):(93|35)::


IDW: El_Pipe_simple_vert_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::white-0:::
  line:(75|100):(25|100)::white-0:::
  line:(75|0):(75|100):::::
  line:(25|100):(25|0):::::
  fill:(25|0):(75|0):(75|100):(25|100)::


IDW: El_Strela_gr
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::#ffffff-0:::
  line:(0|25):(65|25):::::
  line:(65|25):(65|5):::::
  line:(65|5):(95|50):::::
  line:(95|50):(65|95):::::
  line:(65|95):(65|75):::::
  line:(65|75):(0|75):::::
  line:(65|25):(75|50)::#ffffff-0:::
  line:(65|75):(75|50)::#ffffff-0:::
  fill:(65|25):(65|5):(95|50):(65|95):(65|75):(75|50)::conL
  fill:(0|25):(0|75):(65|75):(75|50):(65|25)::


IDW: El_pipe_1_gr
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::white-0:::
  line:(75|100):(25|100)::white-0:::
  line:(0|25):(75|25):::::
  line:(75|25):(75|100):::::
  line:(25|100):(25|75):::::
  line:(25|75):(0|75):::::
  line:(25|75):(75|25)::white-0:::
  fill:(0|25):(0|75):(25|75):(75|25)::h_31
  fill:(75|100):(25|100):(25|75):(75|25)::v_31


IDW: El_Troinik_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::white-0:::
  line:(100|25):(100|75)::white-0:::
  line:(75|100):(25|100)::white-0:::
  line:(75|0):(75|25):::::
  line:(75|25):(100|25):::::
  line:(100|75):(75|75):::::
  line:(75|75):(75|100):::::
  line:(25|100):(25|0):::::
  line:(50|50):(75|25)::white-0:::
  line:(50|50):(75|75)::white-0:::
  fill:(25|0):(75|0):(75|25):(50|50):(75|75):(75|100):(25|100)::v_31
  fill:(100|25):(100|75):(75|75):(50|50):(75|25)::h_31


IDW: El_Krest_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::white-0:::
  line:(100|25):(100|75)::white-0:::
  line:(75|100):(25|100)::white-0:::
  line:(0|75):(0|25)::white-0:::
  line:(0|25):(25|25):::::
  line:(25|25):(25|0):::::
  line:(75|0):(75|25):::::
  line:(75|25):(100|25):::::
  line:(100|75):(75|75):::::
  line:(75|75):(75|100):::::
  line:(25|100):(25|75):::::
  line:(25|75):(0|75):::::
  line:(25|25):(50|50)::white-0:::
  line:(75|25):(50|50)::white-0:::
  line:(75|75):(50|50)::white-0:::
  line:(25|75):(50|50)::white-0:::
  fill:(0|75):(0|25):(25|25):(50|50):(25|75)::h_31
  fill:(25|0):(75|0):(75|25):(50|50):(25|25)::v_31
  fill:(100|25):(100|75):(75|75):(50|50):(75|25)::h_31
  fill:(75|100):(25|100):(25|75):(50|50):(75|75)::v_31


IDW: El_Obr_Strela_gr
ID: elLst
IO_VAL:
  line:(0|75):(0|25)::white-0:::
  line:(0|25):(65|25):::::
  line:(65|25):(99|5):::::
  line:(99|5):(99|95)::white-0:::
  line:(99|95):(65|75):::::
  line:(65|75):(0|75):::::
  line:(65|25):(80|50)::white-0
  line:(65|75):(80|50)::white-0
  fill:(0|75):(0|25):(65|25):(80|50):(65|75)::
  fill:(65|25):(99|5):(99|95):(65|75):(80|50)::


IDW: El_Pipe_simple_gr
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::white-0:::
  line:(100|25):(100|75)::white-0:::
  line:(0|25):(100|25):::::
  line:(100|75):(0|75):::::
  fill:(0|25):(0|75):(100|75):(100|25)::


IDW: El_Kran_Sh
ID: dscr
IO_VAL:
  The elements is used to display the discrete apparatus' status on basis of the discrete signals, for use in pipelines. The elements commonly use and represent the representative structure of the DAQ-template of the discrete block in different visual variants.

  Author: Maxim Lysenko, Roman Savochenko <roman@oscada.org>
  Version: 1.1.0
  License: GPLv2

uk#IO_VAL:
  Елементи використовуються для відображення статусу дискретних апаратів на основі дискретних сигналів, для використання в трубопроводах. Елементи загалом використовують та репрезентують структуру DAQ-шаблону дискретного блоку у різних візуальних варіантах.

  Автор: Максим Лисенко, Роман Савоченко <roman@oscada.org>
  Версія: 1.1.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы используются для отображения статуса дискретных аппаратов на основе дискретных сигналов, для использования в трубопроводах. Элементы в целом используют и репрезентуют структуру DAQ-шаблона дискретного блока в различных визуальных вариантах.

  Автор: Максим Лисенко, Роман Савоченко <roman@oscada.org>
  Версия: 1.1.0
  Лицензия: GPLv2


IDW: rnd_sq_gr1
ID: elLst
IO_VAL:
  arc:(10|20):(20|10):(20|20):(20|10):(10|20):::::
  line:(20|10):(80|10):::::
  arc:(80|10):(90|20):(80|20):(80|10):(70|20):::::
  line:(90|20):(90|80):::::
  arc:(90|80):(80|90):(80|80):(80|70):(70|80):::::
  line:(80|90):(20|90):::::
  arc:(20|90):(10|80):(20|80):(10|80):(20|90):::::
  line:(10|80):(10|20):::::
  fill:(10|20):(20|10):(80|10):(90|20):(90|80):(80|90):(20|90):(10|80)::


IDW: Compressor
ID: elLst
IO_VAL:
  arc:(25|50):(25|50):(50|50):(50|25):(25|50)::#000000-0:::
  arc:(40|50):(40|50):(50|50):(50|40):(40|50):::::
  line:(50|25):(90|25):::::
  line:(90|25):(90|50):::::
  line:(90|50):(50|50):::::
  line:(50|50):(50|25):::::
  fill:(50|25):(90|25):(90|50):(50|50):c1:h_31
  fill:(25|50):(25|50):c1:rad_127
  fill:(40|50):(40|50)::


IDW: rnd_sq_gr
ID: elLst
IO_VAL:
  arc:(30|95):(30|5):(30|50):(5|50):(30|95):::::
  arc:(70|5):(70|95):(70|50):(95|50):(70|5):::::
  line:(30|5):(70|5):::::
  line:(30|95):(70|95):::::
  line:(30|5):(30|95)::black-0
  line:(70|5):(70|95)::black-0
  fill:(30|95):(30|5)::rad_l_127
  fill:(70|95):(70|5)::rad_r_127
  fill:(30|95):(30|5):(70|5):(70|95)::


IDW: Zadvizhka
ID: elLst
IO_VAL:
  line:(5|45):(5|95)::black-127:::
  line:(5|95):(50|70)::black-127:::
  line:(50|70):(5|45)::black-127:::
  line:(50|70):(95|45)::black-127:::
  line:(50|70):(95|95)::black-127:::
  line:(95|45):(95|95)::black-127:::
  line:(50|70):(50|60):::::
  arc:(22|32):(22|32):(50|32):(50|4):(22|32):::::
  fill:(50|70):(95|45):(95|95):c1:conR_128
  fill:(5|45):(5|95):(50|70):c1:conL_128
  fill:(22|32):(22|32)::


IDW: Level
ID: elLst
IO_VAL:
  line:(50|5):(50|95):::::
  line:(50|95):(58|95):::::
  line:(50|50):(58|50):::::
  line:(50|5):(58|5):::::
  line:(50|72):(55|72):::::
  line:(50|27):(55|27):::::
  line:(35|5):1:::::
  line:(35|95):(45|95):::::
  line:2:(45|5):::::
  line:(45|5):(35|5):::::
  line:1:2:::::
  line:(35|95):1:::::
  line:(45|95):2:::::
  fill:1:(35|95):(45|95):2::


IDW: Teploobm
ID: elLst
IO_VAL:
  line:(4|196):(4|4):2:#000000:::
  line:(196|196):(4|196):2:#000000:::
  line:(4|4):(196|4):2:#000000:::
  line:(196|4):(196|196):2:#000000:::
  arc:(20|100):(60|100):(40|100):(40|35):(20|100):::::
  arc:(100|100):(60|100):(80|100):(80|165):(100|100):::::
  arc:(100|100):(140|100):(120|100):(120|35):(100|100):::::
  arc:(180|100):(140|100):(160|100):(160|165):(180|100):::::
  line:(1|99):(29|99):::::
  line:(171|98):(199|98):::::
  fill:(4|4):(196|4):(196|196):(4|196)::


IDW: Compressor_1
ID: elLst
IO_VAL:
  arc:(5|50):(5|50):(50|50):(50|5):(5|50):::::
  line:(30|18):(85|50):::::
  line:(85|50):(30|82):::::
  line:(30|82):(30|18):::::
  fill:(5|50):(5|50):c1:
  fill:(30|18):(85|50):(30|82)::


IDW: Kran_3_pos
ID: elLst
IO_VAL:
  arc:(30|34):(90|34):(60|34):(60|4):(30|34):::::
  line:(28|47):(28|97):::::
  line:(28|97):(50|74):::::
  line:(50|74):(28|47):::::
  line:(70|74):(92|47):::::
  line:(70|74):(92|97):::::
  line:(92|47):(92|97):::::
  line:(90|34):(30|34):::::
  line:(60|84):(35|107):::::
  line:(35|107):(85|107):::::
  line:(85|107):(60|84):::::
  line:(50|34):(70|34)::#000000-0:::
  line:(70|34):(70|84):::::
  line:(70|84):(50|84):::::
  line:(50|84):(50|34):::::
  line:1:2:::::
  line:(50|84):1:::::
  line:(70|84):2:::::
  fill:(60|84):(35|107):(85|107):c1:conT_128
  fill:(28|47):(28|97):(50|74):c1:conL_128
  fill:(70|74):(92|47):(92|97):c1:conR_128
  fill:(30|34):(90|34)::v_127
  fill:(50|84):1:2:(70|84):#0000ff:


IDW: El_StrelaHL_gr
ID: elLst
IO_VAL:
  line:(100|25):(100|75)::#ffffff-0:::
  line:(100|25):(35|25):::::
  line:(35|25):(35|5):::::
  line:(35|5):(5|50):::::
  line:(5|50):(35|95):::::
  line:(35|95):(35|75):::::
  line:(35|75):(100|75):::::
  line:(35|25):(25|50)::#ffffff-0:::
  line:(35|75):(25|50)::#ffffff-0:::
  fill:(35|5):(35|25):(25|50):(35|75):(35|95):(5|50)::conR
  fill:(100|25):(100|75):(35|75):(25|50):(35|25)::


IDW: El_StrelaVT_gr
ID: elLst
IO_VAL:
  line:(25|100):(75|100)::#ffffff-0:::
  line:(25|100):(25|35):::::
  line:(25|35):(5|35):::::
  line:(5|35):(50|5):::::
  line:(50|5):(95|35):::::
  line:(95|35):(75|35):::::
  line:(75|35):(75|100):::::
  line:(25|35):(50|25)::#ffffff-0:::
  line:(75|35):(50|25)::#ffffff-0:::
  fill:(5|35):(25|35):(50|25):(75|35):(95|35):(50|5)::conT
  fill:(25|100):(75|100):(75|35):(50|25):(25|35)::


IDW: El_angleBR_gr
ID: elLst
IO_VAL:
  line:(100|25):(100|75)::#ffffff-0:::
  line:(25|100):(75|100)::#ffffff-0:::
  line:(100|25):(25|25):::::
  line:(25|25):(25|100):::::
  line:(75|100):(75|75):::::
  line:(75|75):(100|75):::::
  line:(25|25):(75|75)::#ffffff-0:::
  fill:(25|100):(75|100):(75|75):(25|25)::v_31
  fill:(100|25):(100|75):(75|75):(25|25)::h_31


IDW: El_TroinikHT_gr
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::#ffffff-0:::
  line:(100|25):(100|75)::#ffffff-0:::
  line:(25|0):(75|0)::#ffffff-0:::
  line:(25|0):(25|25):::::
  line:(25|25):(0|25):::::
  line:(0|75):(100|75):::::
  line:(100|25):(75|25):::::
  line:(75|25):(75|0):::::
  line:(50|50):(25|25)::#ffffff-0:::
  line:(50|50):(75|25)::#ffffff-0:::
  fill:(0|25):(0|75):(100|75):(100|25):(75|25):(50|50):(25|25)::h_31
  fill:(25|0):(75|0):(75|25):(50|50):(25|25)::v_31


IDW: El_TroinikVL_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::#ffffff-0:::
  line:(0|25):(0|75)::#ffffff-0:::
  line:(75|100):(25|100)::#ffffff-0:::
  line:(25|0):(25|25):::::
  line:(25|25):(0|25):::::
  line:(0|75):(25|75):::::
  line:(25|75):(25|100):::::
  line:(75|100):(75|0):::::
  line:(50|50):(25|25)::#ffffff-0:::
  line:(50|50):(25|75)::#ffffff-0:::
  fill:(25|0):(75|0):(75|100):(25|100):(25|75):(50|50):(25|25)::v_31
  fill:(0|25):(0|75):(25|75):(50|50):(25|25)::h_31


IDW: El_angleTL_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::#ffffff-0:::
  line:(0|25):(0|75)::#ffffff-0:::
  line:(75|0):(75|75):::::
  line:(75|75):(0|75):::::
  line:(0|25):(25|25):::::
  line:(25|25):(25|0):::::
  line:(25|25):(75|75)::#ffffff-0:::
  fill:(25|0):(75|0):(75|75):(25|25)::v_31
  fill:(0|25):(0|75):(75|75):(25|25)::h_31


IDW: El_Obr_StrelaVT_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::#ffffff-0:::
  line:(25|0):(25|65):::::
  line:(25|65):(5|99):::::
  line:(5|99):(95|99)::#ffffff-0:::
  line:(95|99):(75|65):::::
  line:(75|65):(75|0):::::
  line:(25|65):(50|75)::#ffffff-0:::
  line:(75|65):(50|75)::#ffffff-0:::
  fill:(25|65):(5|99):(95|99):(75|65):(50|75)::
  fill:(25|0):(75|0):(75|65):(50|75):(25|65)::


IDW: El_StrelaVB_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::#ffffff-0:::
  line:(25|0):(25|65):::::
  line:(25|65):(5|65):::::
  line:(5|65):(50|95):::::
  line:(50|95):(95|65):::::
  line:(95|65):(75|65):::::
  line:(75|65):(75|0):::::
  line:(25|65):(50|75)::#ffffff-0:::
  line:(75|65):(50|75)::#ffffff-0:::
  fill:(5|65):(25|65):(50|75):(75|65):(95|65):(50|95)::conD
  fill:(25|0):(75|0):(75|65):(50|75):(25|65)::


IDW: El_angleTR_gr
ID: elLst
IO_VAL:
  line:(25|0):(75|0)::#ffffff-0:::
  line:(100|25):(100|75)::#ffffff-0:::
  line:(25|0):(25|75):::::
  line:(25|75):(100|75):::::
  line:(100|25):(75|25):::::
  line:(75|25):(75|0):::::
  line:(25|75):(75|25)::#ffffff-0:::
  fill:(25|0):(75|0):(75|25):(25|75)::v_31
  fill:(100|25):(100|75):(25|75):(75|25)::h_31


IDW: El_TroinikHB_gr
ID: elLst
IO_VAL:
  line:(0|25):(0|75)::#ffffff-0:::
  line:(100|25):(100|75)::#ffffff-0:::
  line:(25|100):(75|100)::#ffffff-0:::
  line:(0|75):(25|75):::::
  line:(25|75):(25|100):::::
  line:(75|100):(75|75):::::
  line:(75|75):(100|75):::::
  line:(100|25):(0|25):::::
  line:(50|50):(25|75)::#ffffff-0:::
  line:(50|50):(75|75)::#ffffff-0:::
  fill:(0|25):(0|75):(25|75):(50|50):(75|75):(100|75):(100|25)::h_31
  fill:(25|100):(75|100):(75|75):(50|50):(25|75)::v_31


IDW: El_Obr_StrelaVB_gr
ID: elLst
IO_VAL:
  line:(25|100):(75|100)::#ffffff-0:::
  line:(75|100):(75|35):::::
  line:(75|35):(95|0):::::
  line:(95|0):(5|0)::#ffffff-0:::
  line:(5|0):(25|35):::::
  line:(25|35):(25|100):::::
  line:(25|35):(50|25)::#ffffff-0:::
  line:(75|35):(50|25)::#ffffff-0:::
  fill:(25|100):(75|100):(75|35):(50|25):(25|35)::
  fill:(75|35):(95|0):(5|0):(25|35):(50|25)::


IDW: El_Obr_StrelaHR_gr
ID: elLst
IO_VAL:
  line:(100|75):(100|25)::#ffffff-0:::
  line:(100|25):(35|25):::::
  line:(35|25):(0|5):::::
  line:(0|5):(0|95)::#ffffff-0:::
  line:(0|95):(35|75):::::
  line:(35|75):(100|75):::::
  line:(35|25):(25|50)::#ffffff-0:::
  line:(35|75):(25|50)::#ffffff-0:::
  fill:(35|25):(0|5):(0|95):(35|75):(25|50)::
  fill:(100|75):(100|25):(35|25):(25|50):(35|75)::


IDW: Compressor
ID: dscr
IO_VAL:
  The elements is used to display the discrete apparatus' status on basis of the discrete signals, for use in pipelines. The elements commonly use and represent the representative structure of the DAQ-template of the discrete block in different visual variants.

  Author: Roman Savochenko <roman@oscada.org>, Maxim Lysenko
  Version: 1.1.0
  License: GPLv2

uk#IO_VAL:
  Елементи використовуються для відображення статусу дискретних апаратів на основі дискретних сигналів, для використання в трубопроводах. Елементи загалом використовують та репрезентують структуру DAQ-шаблону дискретного блоку у різних візуальних варіантах.

  Автор: Роман Савоченко <roman@oscada.org>, Максим Лисенко
  Версія: 1.1.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы используются для отображения статуса дискретных аппаратов на основе дискретных сигналов, для использования в трубопроводах. Элементы в целом используют и репрезентуют структуру DAQ-шаблона дискретного блока в различных визуальных вариантах.

  Автор: Роман Савоченко <roman@oscada.org>, Максим Лысенко
  Версия: 1.1.0
  Лицензия: GPLv2


IDW: El_Alarm
ID: dscr
IO_VAL:
  The element is used to display the discrete status by color. Also this element generates notifications of violations on the locally defined condition, the attribute "ntf". The element commonly uses and represents the representative structure of the DAQ-template of the discrete block.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елемент слугує для відображення дискретного статусу кольором. Також цей елемент генерує повідомлення про порушення за локально визначеною умовою, атрибут "ntf". Елемент загалом використовує та представляє представницьку структуру DAQ-шаблону дискретного блоку.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элемент служит для отображения дискретного статуса цветом. Также этот элемент генерирует уведомление про нарушения по локально определённому условию, атрибут "ntf". Элемент в целом использует и представляет представительскую структуру DAQ-шаблона дискретного блока.

  Автор: Роман Савоченко <roman@oscada.org>
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: El_Armatura
ID: dscr
IO_VAL:
  The elements are for use in, or around, pipelines.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елементи слугують для використання у складі, або довкола, трубопроводів.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы служат для использования в составе, или около, трубопроводов.

  Автор: Роман Савоченко <roman@oscada.org>
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: El_Kran_polozh
ID: dscr
IO_VAL:
  The elements is used to display the analog apparatus' status and intended for use in pipelines. The elements commonly use and represent the representative structure of the DAQ-template of the analog PID-regulators in different visual variants.

  Author: Maxim Lysenko, Roman Savochenko <roman@oscada.org>
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елементи використовуються для відображення статусу аналогових апаратів та призначені для використання в трубопроводах. Елементи загалом використовують та репрезентують структуру DAQ-шаблону аналогових ПІД-регуляторів у різних візуальних варіантах.

  Автор: Максим Лисенко, Роман Савоченко <roman@oscada.org>
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы используются для отображения статуса аналогових аппаратов и предназначены для использования в трубопроводах. Элементы в целом используют и репрезентуют структуру DAQ-шаблона аналоговых ПИД-регуляторов в различных визуальных вариантах.

  Автор: Максим Лысенко, Роман Савоченко <roman@oscada.org>
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: El_Krest
ID: dscr
IO_VAL:
  The elements serve to construct pipelines of any complexity, required width and color. By default, they are filled in yellow and the angle of rotation is 0°.

  Author: Maxim Lysenko
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елементи слугують для побудови трубопроводів будь-якої складності, потрібної ширини та забарвлення. По замовченню їх залито жовтим кольором, а кут повороту складає 0°.

  Автор: Максим Лисенко
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы служат для построения трубопроводов любой сложности, необходимой ширины и окраса. По умолчанию они заполнены желтым цветом, а угол поворота составляет 0°.

  Автор: Максим Лысенко
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: El_Krest_gr
ID: dscr
IO_VAL:
  The elements serve to construct volumetric pipelines of any complexity, required width and color. By default, the transparent volumetric gradient is filled in yellow.

  Author: Maxim Lysenko, Roman Savochenko <roman@oscada.org>
  Version: 1.1.0
  License: GPLv2

uk#IO_VAL:
  Елементи слугують для побудови об'ємних трубопроводів будь-якої складності, потрібної ширини та забарвлення. По замовченню, напівпрозорий об'ємний градієнт залито жовтим кольором.

  Автор: Максим Лисенко, Роман Савоченко <roman@oscada.org>
  Версія: 1.1.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы служат для построения объёмных трубопроводов любой сложности, необходимой ширины и окраса. По умолчанию, полупрозрачный объёмный градиент заполнен желтым цветом.

  Автор: Максим Лысенко, Роман Савоченко <roman@oscada.org>
  Версия: 1.1.0
  Лицензия: GPLv2


IDW: El_Obriv
ID: dscr
IO_VAL:
  The elements are for use in, or around, pipelines.

  Author: Maxim Lysenko
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елементи слугують для використання у складі, або довкола, трубопроводів.

  Автор: Максим Лисенко
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы служат для использования в составе, или около, трубопроводов.

  Автор: Максим Лысенко
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: Level
ID: dscr
IO_VAL:
  The element is used to display a value histogram of levels of liquid in the technological apparatus. The element commonly uses and represents the representative structure of the "Analog signal" DAQ-template.

  Author: Maxim Lysenko, Roman Savochenko <roman@oscada.org>
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елемент слугує для відображення гістограми значення рівня рідини у технологічних апаратах. Елемент загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал".

  Автор: Максим Лисенко, Роман Савоченко <roman@oscada.org>
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элемент служит для отображения гистограммы значения уровня жидкости в технологических аппаратах. Элемент в целом использует и представляет представительскую структуру DAQ-шаблона "Аналоговый сигнал".

  Автор: Максим Лысенко, Роман Савоченко <roman@oscada.org>
  Версия: 1.0.0
  Лицензия: GPLv2


IDW: cooler2
ID: dscr
IO_VAL:
  The elements are for use in, or around, pipelines.

  Author: Ksenia Yashina
  Version: 1.0.0
  License: GPLv2

uk#IO_VAL:
  Елементи слугують для використання у складі, або довкола, трубопроводів.

  Автор: Ксенія Яшина
  Версія: 1.0.0
  Ліцензія: GPLv2

ru#IO_VAL:
  Элементы служат для использования в составе, или около, трубопроводов.

  Автор: Ксения Яшина
  Версия: 1.0.0
  Лицензия: GPLv2


# wlb_Main_uio

IDW: RootPgSo
ID: notify2
NAME: Notification: type 2 (TextSpeech)
uk#NAME: Повідомлення: тип 2 (Мова)
ru#NAME: Уведомление: тип 2 (Речь)
IO_VAL:
  #!/bin/sh
  #flags=notify2|queue|qMergeMess
  #name=Text speech
  #ico=aSound

  if test $doNtf = 1 -a $en = 1 -a -s $res; then
  	play=$(which play)
  	if test "x$play" != "x"; then play -q $res; fi

  elif test $doRes = 1 -a "x" != "x$mess"; then
  	#Specific TTS
  	case $lang in
  		ru_*)
  			iconv=$(which iconv)
  			ru_tts=$(which ru_tts)
  			sox=$(which sox)
  			if test "x$ru_tts" != "x" -a "x$iconv" != "x" -a "x$sox" != "x"; then
  				echo "$mess" | $iconv -f $(echo $lang | sed -n "/^[^.]*\.\(.*\)/s//\1/p") -t KOI8-R | $ru_tts -p 0.05 -r 0.4 -s /usr/share/ru_tts/lexicon | $sox -t raw -e signed-integer -b 8 -r 10k -c 1 -v 0.8 - -t wav $res.wav
  			fi
  		;;
  		*) > $res.wav; ;;
  	esac

  	#Generic TTS for mostly all
  	if test ! -s $res.wav; then
  		espeak=$(which espeak)
  		text2wave=$(which text2wave)
  		if test "x$espeak" != "x"; then
  			echo "$mess" | $espeak --stdin -s 130 -v $(echo $lang | sed -n "/\(^[^_]*\).*/s//\1/p") -w $res.wav
  		elif test "x$text2wave" != "x"; then
  			case $lang in
  				uk_*) langFull="ukrainian"; ;;
  				ru_*) langFull="russian"; ;;
  				en_*) langFull="english"; ;;
  				#!!!! Append here need languages
  			esac
  			echo $mess > $res.text; text2wave $res.text -o $res.wav -eval "(language_$langFull)"
  		fi
  	fi

  	#Encode before for that less to transfer
  	if test -s $res.wav; then
  		oggenc=$(which oggenc)
  		if test "x$oggenc" != "x"; then oggenc -Q $res.wav -o $res; echo "audio/ogg";
  		else mv -f $res.wav $res; echo "audio/wav"; fi
  		rm -f $res.wav $res.text
  	fi
  fi


IDW: RootPgSo
ID: notify1
NAME: Notification: type 1 (Buzzer)
uk#NAME: Повідомлення: тип 1 (Бузер)
ru#NAME: Уведомление: тип 1 (Бузер)
IO_VAL:
  //flags=notify0|resource
  //name=Buzzer
  //ico=aAlarm
  //resStatic=ntf1
  if(doNtf) {
  	if(en) {
  		if(res.length) {
  			if((play=SYS.system("which play")).length) {
  				SYS.fileWrite(prcID+".res", res);
  				SYS.system(play.parseLine(0)+" -q "+prcID+".res &\necho $! > "+prcID+".pid", true);
  			}
  		}
  		else {
  			if((beep=SYS.system("which beep")).length)
  				SYS.system(beep.parse(0,"\n")+" -f 1000 -l 100000 &\necho $! > "+prcID+".pid", true);
  			else if((play=SYS.system("which play")).length)
  				SYS.system(play.parse(0,"\n")+" -q -n synth 1000000 sin 1000 gain -20 &\necho $! > "+prcID+".pid", true);
  		}
  	} else SYS.system("if test -s "+prcID+".pid; then kill $(cat "+prcID+".pid); rm "+prcID+".pid "+prcID+".res; fi");

  }
  else if(doRes && (sox=SYS.system("which sox")).length) {
  	SYS.system(sox.parseLine(0)+" -n -r 8000 "+prcID+".ogg synth 60 sin 1000");
  	res = SYS.fileRead(prcID+".ogg");
  	SYS.system("rm "+prcID+".ogg");
  	return "audio/ogg";
  }


# wlb_doc_io

IDW: docRepDay
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">

  <center>
  <h1>Average over hour values of ""</h1>
  <?dp return "<h1>"+tr("Average over hour values of \"%1\"").replace("%1",title)+"</h1><span>"+SYS.strftime(time-params.repHour*3600-1,"%d %B %Y")+"</span>";?>
  </center>

  <div width="100%"><div style="margin-left: auto; margin-right: auto; text-align: center; width: fit-content;">
  	<?dp if(!enGraph) return "";
  		for(iP = 0, srcs = ""; iP < params.length; iP++)
  			if(!params[iP].min.isEVal() && !params[iP].max.isEVal())
  				srcs += params[iP].var+":"+params[iP].min+":"+params[iP].max+":"+params[iP].color+":0:2\n";
  		return srcs.length ? DAQ.JavaLikeCalc.lib_doc.diagram(time, time-bTime, srcs, 800, 300, arch) : "";
  	?>
  </div></div>
  <br/>

  <TABLE class="data" width="100%" export="1">
    <TR>
  	<TH>Date</TH><TH>Time</TH><TH>Capacity</TH><TH>Aver. pressure diff.</TH><TH>St. pressure</TH><TH>Aver. temp.</TH><TH>Density</TH>
  	<?dp
  		rez = "<TH>"+tr("Date")+"</TH><TH>"+tr("Time")+"</TH>";
  		for(iP = 0; iP < params.length; iP++)
  			rez += "<TH style='color: "+(enGraph?params[iP].color:"black")+";'>"+SYS.strEncode(params[iP].name, "HTML")+"</TH>";
  		return rez; ?>
    </TR>
    <TR>
  	<TH>&nbsp;</TH><TH>begin&nbsp;&nbsp;end</TH><TH>m3</TH><TH>kgF/m2</TH><TH>kgF/cm</TH><TH>grad.C</TH><TH>kg/m3</TH>
  	<?dp
  		rez = "<TH>&nbsp;</TH><TH>"+tr("begin")+"&nbsp;&nbsp;"+tr("end")+"</TH>";
  		for(iP = 0; iP < params.length; iP++) {
  			pO = params[iP];
  			rez += "<TH>"+((enGraph && pO.min < pO.max)?"["+pO.min+"..."+pO.max+"] ":"")+SYS.strEncode(pO.ed, "HTML")+"</TH>";
  		}
  		return rez; ?>
    </TR>
    <TR docRept="3600">
    <?dp using DAQ.JavaLikeCalc.lib_doc;
  	if((rTime-rPer) > SYS.time())	return "";
  	rez = "<TD style='text-align: center;'>"+SYS.strftime(rTime,"%d %m")+"</TD>"+
  		"<TD style='text-align: center;'>"+SYS.strftime(rTime-rPer,"%H:%M")+"&nbsp;&nbsp;"+SYS.strftime(rTime,"%H:%M")+"</TD>";
  	for(iP = 0; iP < params.length; iP++)
  		if(params[iP].isCntr == true) {
  			if(!(V1=getVal(params[iP].var,rTime-rPer,0,-1,arch,false,rTime*1e6)).isEVal())	V1 = V1.toReal();
  			if(!(V2=getVal(params[iP].var,rTime,0,-1,arch,false,(rTime-rPer)*1e6)).isEVal())	V2 = V2.toReal();
  			rez += "<TD style='text-align: center;'>"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(params[iP].prec))+"</TD>";
  		} else rez += "<TD style='text-align: center;'>"+averVal(params[iP].var,rTime-rPer,rTime,params[iP].prec,arch)+"</TD>";
  	return rez; ?>
    </TR>
    <TR style="font-weight: bold;">
    <?dp using DAQ.JavaLikeCalc.lib_doc;
  	rez = "<TD colspan='2' style='text-align: center;'>"+tr("Summary")+"</TD>";
  	for(iP = 0; iP < params.length; iP++)
  		if(params[iP].isCntr == true) {
  			if(!(V1=getVal(params[iP].var,bTime,0,-1,arch,false,time*1e6)).isEVal())	V1 = V1.toReal();
  			if(!(V2=getVal(params[iP].var,time,0,-1,arch,false,bTime*1e6)).isEVal())	V2 = V2.toReal();
  			rez += "<TD style='text-align: center;'>"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(3))+"</TD>";
  		} else rez += "<TD/>";
  	return rez; ?>
    </TR>
  </TABLE>
  </body>


IDW: docRepMonth
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">

  <center>
  <h1>Average over day values of ""</h1>
  <?dp return "<h1>"+tr("Average over day values of \"%1\"").replace("%1",title)+"</h1><span>"+SYS.strftime(time-params.repHour*3600-1,"%B %Y")+"</span>";?>
  </center>

  <div width="100%"><div style="margin-left: auto; margin-right: auto; text-align: center; width: fit-content;">
  	<?dp if(!enGraph) return "";
  		for(iP = 0, srcs = ""; iP < params.length; iP++)
  			if(!params[iP].min.isEVal() && !params[iP].max.isEVal())
  				srcs += params[iP].var+":"+params[iP].min+":"+params[iP].max+":"+params[iP].color+":0:2\n";
  		return srcs.length ? DAQ.JavaLikeCalc.lib_doc.diagram(time, time-bTime, srcs, 800, 300, arch) : "";
  	?>
  </div></div>
  <br/>

  <TABLE class="data" width="100%" export="1">
    <TR>
  	<TH>Date</TH><TH>Capacity</TH><TH>Aver. pressure diff.</TH><TH>St. pressure</TH><TH>Aver. temp.</TH><TH>Density</TH>
  	<?dp
  		rez = "<TH>"+tr("Date")+"</TH>";
  		for(iP = 0; iP < params.length; iP++)
  			rez += "<TH style='color: "+(enGraph?params[iP].color:"black")+";'>"+SYS.strEncode(params[iP].name, "HTML")+"</TH>";
  		return rez; ?>
    </TR>
    <TR>
  	<TH>&nbsp;</TH><TH>m3</TH><TH>kgF/m2</TH><TH>kgF/cm</TH><TH>grad.C</TH><TH>kg/m3</TH>
  	<?dp
  		rez = "<TH>&nbsp;</TH>";
  		for(iP = 0; iP < params.length; iP++) {
  			pO = params[iP];
  			rez += "<TH>"+((enGraph && pO.min < pO.max)?"["+pO.min+"..."+pO.max+"] ":"")+SYS.strEncode(pO.ed, "HTML")+"</TH>";
  		}
  		return rez; ?>
    </TR>
    <TR docRept="86400">
    <?dp using DAQ.JavaLikeCalc.lib_doc;
  	if((rTime-rPer) > SYS.time())	return;
  	rez = "<TD style='text-align: center;'>"+SYS.strftime(rTime-rPer,"%d %m %Y")+"</TD>";
  	for(iP = 0; iP < params.length; iP++)
  		if(params[iP].isCntr == true) {
  			if(!(V1=getVal(params[iP].var,rTime-rPer,0,-1,arch,false,rTime*1e6)).isEVal())	V1 = V1.toReal();
  			if(!(V2=getVal(params[iP].var,rTime,0,-1,arch,false,(rTime-rPer)*1e6)).isEVal())	V2 = V2.toReal();
  			rez += "<TD style='text-align: center;'>"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(params[iP].prec))+"</TD>";
  		} else rez += "<TD style='text-align: center;'>"+averVal(params[iP].var,rTime-rPer,rTime,params[iP].prec,arch)+"</TD>";
  	return rez; ?>
    </TR>
    <TR style="font-weight: bold;"><?dp using DAQ.JavaLikeCalc.lib_doc;
  	rez = "<TD style='text-align: center;'>"+tr("Summary")+"</TD>";
  	for(iP = 0; iP < params.length; iP++)
  		if(params[iP].isCntr == true) {
  			if(!(V1=getVal(params[iP].var,bTime,0,-1,arch,false,time*1e6)).isEVal())	V1 = V1.toReal();
  			if(!(V2=getVal(params[iP].var,time,0,-1,arch,false,bTime*1e6)).isEVal())	V2 = V2.toReal();
  			rez += "<TD style='text-align: center;'>"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(params[iP].prec)) + "</TD>";
  		} else rez += "<TD/>";
  	return rez; ?>
    </TR>
  </TABLE>
  </body>


IDW: docUsersSet
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1>Protocol of interruptions <?dp return tr("Protocol of interruptions"); ?></h1>
  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data">
    <TR><TH colspan="7" align="left">User interruptions at <?dp return tr("User interruptions at %1").replace("%1",SYS.strftime(bTime)+" — "+SYS.strftime(time));?></TH></TR>
    <TR>
  	<TH>Date</TH><TH>Time</TH><TH>User</TH><TH>Source</TH><TH>Description</TH><TH>Old value</TH><TH>New value</TH>
       <?dp return "<TH>"+tr("Date")+"</TH><TH>"+tr("Time")+"</TH><TH>"+tr("User")+"</TH><TH>"+tr("Source")+"</TH><TH>"+tr("Description")+"</TH><TH>"+tr("Old value")+"</TH><TH>"+tr("New value")+"</TH>"; ?>
    </TR>
    <TR docAMess="2:/(^|.*:)OP*/" docRevers="1">
  	<?dp
  		user = "";
  		if((tVl=mCat.match("^OP:([^:]*):")).length || (tVl=mCat.match("^OP[^:]+:[^:]+:(.*)")).length || (tVl=mCat.match("(.*):OP[^:]+:[^:]+:(.*)")).length)
  			user = tVl[(tVl.length>=3)?2:1];

  		srcO = tVl; tVl = "";
  		//From remote station
  		if(srcO.length >= 3)
  			for(off2 = 0, isFirst = true; (tVl2=srcO[1].parse(0,":",off2)).length; tVl += (tVl.length?".":"")+tVl2, isFirst = false) {
  			if(!isFirst)	continue;
  			if(!sourceCache[tVl2].isEVal())	tVl2 = sourceCache[tVl2];
  			else {
  				req = SYS.XMLNode("get").setAttr("path","/Transport/%2fsub%2fehost").setAttr("upRiseSYS",1);
  				SYS.cntrReq(req);
  				for(iTr = 0; req.childSize() && iTr < req.childGet(0).childSize(); iTr++)
  					if(req.childGet(0).childGet(iTr).text() == tVl2) {
  						tVl2 = sourceCache[tVl2] = req.childGet(1).childGet(iTr).text();
  						break;
  					}
  			}
  		}

  		return "<TD>"+SYS.strftime(mTime,"%d %m")+"</TD>"+
  			"<TD>"+SYS.strftime(mTime,"%H:%M:%S")+"</TD>"+
  			"<TD>"+Special.FLibSYS.strEnc2HTML(user)+"</TD>"+
  			"<TD>"+Special.FLibSYS.strEnc2HTML((tVl.length?tVl+" > ":"")+mVal.parse(0, ":"))+"</TD>"+
  			"<TD>"+Special.FLibSYS.strEnc2HTML(mVal.parse(1,":"))+"</TD>"+
  			"<TD>"+mVal.parse(2,":")+"</TD>"+
  			"<TD>"+mVal.parse(3,":")+"</TD>";
  	?>
    </TR>
  </TABLE>
  </body>


IDW: docAlarmsRep
ID: style
IDC: doc
IO_VAL:
  TABLE.data { border-collapse: collapse; }
  TABLE.data TH { background-color: #e6e6e6; border: 1px solid black; }
  TABLE.data TD { white-space: normal; border: 1px solid black;}


IDW: docAlarmsRep
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1>Protocol of violations <?dp return tr("Protocol of violations"); ?></h1>
  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data">
    <TR><TH colspan="5" align="left">Violations at <?dp return tr("Violations at %1").replace("%1",SYS.strftime(bTime)+" — "+SYS.strftime(time));?></TH></TR>
    <TR><TH>Date</TH><TH>Time</TH><TH>Source</TH><TH>Violation</TH><TH>Value</TH>
     <?dp return "<TH>"+tr("Date")+"</TH><TH>"+tr("Time")+"</TH><TH>"+tr("Source")+"</TH><TH>"+tr("Violation")+"</TH><TH>"+tr("Value")+"</TH>"; ?>
    </TR>
    <TR docAMess="@@messCat@@" docRevers="1">
  <?dp
  	srcO = mCat.match("^al(.+):([^\\.]+)|^(.*):al");
  	tVl = "";

  	//From remote station
  	if(srcO.length == 4)
  		for(off2 = 0, isFirst = true; (tVl2=srcO[3].parse(0,":",off2)).length; tVl += (tVl.length?".":"")+tVl2, isFirst = false) {
  			if(!isFirst)	continue;
  			if(!sourceCache[tVl2].isEVal())	tVl2 = sourceCache[tVl2];
  			else {
  				req = SYS.XMLNode("get").setAttr("path","/Transport/%2fsub%2fehost").setAttr("upRiseSYS",1);
  				SYS.cntrReq(req);
  				for(iTr = 0; req.childSize() && iTr < req.childGet(0).childSize(); iTr++)
  					if(req.childGet(0).childGet(iTr).text() == tVl2) {
  						tVl2 = sourceCache[tVl2] = req.childGet(1).childGet(iTr).text();
  						break;
  					}
  			}
  		}

  	return "<TD><center style='white-space: nowrap;'>"+SYS.strftime(mTime,"%d %m")+"</center></TD>"+
  		"<TD><center style='white-space: nowrap;'>"+SYS.strftime(mTime,"%H:%M:%S")+"</center></TD>"+
  		"<TD><center>"+Special.FLibSYS.strEnc2HTML((tVl.length?tVl+" > ":"") + mVal.parse(0,":"))+"</center></TD>"+
  		"<TD>"+Special.FLibSYS.strEnc2HTML(mVal.parse(1,":"))+"</TD>"+
  		"<TD>"+Special.FLibSYS.strEnc2HTML(mVal.parse(2,":"))+"</TD>";
  ?>
    </TR>
  </TABLE>
  </body>


IDW: doc
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1>Table of average over day values</h1>

  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data" export="1">
    <TR align="center" valign="center">
      <TH>View</TH><TH>Compare</TH><TH>Reports print</TH><TH>Point configuration</TH><TH>Archivation</TH><TH>Options</TH><TH>?</TH>
    </TR>
    <TR align="center" valign="center">
      <TH colspan="2">&nbsp;</TH><TH colspan="2">Information over day</TH>
      <TH colspan="3" rowspan="2">DD MM YYYY<?dp return Special.FLibSYS.tmFStr(time,"%d %m %Y");?></TH>
    </TR>
    <TR align="center" valign="center"><TH colspan="2">&nbsp;</TH><TH colspan="2">Information over month</TH></TR>
    <TR align="center" valign="center"><TH colspan="7">
  Days data over XXXXX Calculator # Pipeline #.<?dp return "Day data over "+Special.FLibSYS.tmFStr(time,"%m %Y")+" Calculator # Pipeline #.";?>
    </TH></TR>
    <TR><TH>Date</TH><TH colspan="2">Capacity</TH><TH>Aver. pressure diff.</TH><TH>St. pressure</TH><TH>Aver. temp.</TH><TH>Density</TH></TR>
    <TR><TH>&nbsp;</TH><TH colspan="2">1000x m3</TH><TH>kgF/m2</TH><TH>kgF/cm</TH><TH>grad.C</TH><TH>kg/m3</TH></TR>
    <TR docRept="86400">
      <TD>DD MM YYYY<?dp return Special.FLibSYS.tmFStr(rTime-rPer,"%d %m %Y");?></TD>
      <TD colspan="2">XXX.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.averVal(pQ,rTime-rPer,rTime,2,"FSArch.1h");?></TD>
      <TD>XXX.X<?dp return DAQ.JavaLikeCalc.lib_doc.averVal(pDP,rTime-rPer,rTime,2,"FSArch.1h");?></TD>
      <TD>X.XX<?dp return DAQ.JavaLikeCalc.lib_doc.averVal(pP,rTime-rPer,rTime,2,"FSArch.1h");?></TD>
      <TD>XX.XX<?dp return DAQ.JavaLikeCalc.lib_doc.averVal(pT,rTime-rPer,rTime,2,"FSArch.1h");?></TD>
      <TD>X.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.averVal(pDS,rTime-rPer,rTime,2,"FSArch.1h");?></TD>
    </TR>
    <TR><TD>All</TD>
      <TD colspan="2">XXX.XXX (1000x m3)<?dp return DAQ.JavaLikeCalc.lib_doc.sumVal(pQ,bTime,time,2,"FSArch.1h")+" (1000x m3)";?></TD>
      <TD colspan="4">&nbsp;</TD>
    </TR>
  </TABLE>
  </body>


IDW: docRepInstVals
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <center>
  <h1>Instantaneous values of ""</h1>
  <?dp return "<h1>"+tr("Instantaneous values of \"%1\"").replace("%1",title)+"</h1><span>"+SYS.strftime(time)+"</span>";?>
  </center>

  <div width="100%"><div style="margin-left: auto; margin-right: auto; width: text-align: center; fit-content;">
  	<?dp if(!enGraph) return "";
  		for(iP = 0, srcs = ""; iP < params.length; iP++)
  			if(!params[iP].min.isEVal() && !params[iP].max.isEVal())
  				srcs += params[iP].var+":"+params[iP].min+":"+params[iP].max+":"+params[iP].color+":0:2\n";
  		return srcs.length ? DAQ.JavaLikeCalc.lib_doc.diagram(time, time-bTime, srcs, 800, 300) : "";
  	?>
  </div></div>
  <br/>

  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data" export="1">
    <TR>
  	<TH>Date</TH><TH>Time</TH><TH>Flow</TH><TH>Capacity</TH><TH>Pressure</TH><TH>Temperatura</TH><TH>Pressure diff.</TH>
  	<?dp
  		rez = "<TH>"+tr("Date")+"</TH><TH>"+tr("Time")+"</TH>";
  		for(iP = 0; iP < params.length; iP++)
  			rez += "<TH style='color: "+(enGraph?params[iP].color:"black")+";'>"+SYS.strEncode(params[iP].name, "HTML")+"</TH>";
  		return rez; ?>
    </TR>
    <TR>
  	<TH colspan="2">&nbsp;</TH><TH>m3/h</TH><TH>m3</TH><TH>kgF/cm2</TH><TH>grad.C</TH><TH>kgF/cm2</TH>
  	<?dp
  		rez = "<TH colspan='2'>&nbsp;</TH>";
  		for(iP = 0; iP < params.length; iP++) {
  			pO = params[iP];
  			rez += "<TH>"+((enGraph && pO.min < pO.max)?"["+pO.min+"..."+pO.max+"] ":"")+SYS.strEncode(pO.ed, "HTML")+"</TH>";
  		}
  		return rez; ?>
    </TR>
    <TR docRept="@@valPer@@" docRevers="1">
  	<?dp 
  		rez = "<TD style='text-align: center;'>"+SYS.strftime(rTime,"%d %m %Y")+"</TD><TD  style='text-align: center;'>"+SYS.strftime(rTime,"%H:%M:%S")+"</TD>";
  		for(iP = 0; iP < params.length; iP++)
  			rez += "<TD  style='text-align: center;'>"+DAQ.JavaLikeCalc.lib_doc.getVal(params[iP].var, rTime, 0, params[iP].prec,"",true)+"</TD>";
  		return rez; ?>
    </TR>
  </TABLE>
  </body>


IDW: docDin
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1>Table of the instantaneous values accumulation</h1>
  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data" export="1">
    <TR align="center" valign="center">
      <TH>View</TH><TH>Compare</TH><TH>&nbsp;</TH><TH>Point configuration</TH><TH>Archivation</TH><TH>Options</TH><TH>?</TH>
    </TR>
    <TR align="center" valign="center">
      <TH colspan="2">&nbsp;</TH><TH colspan="2">Information over day</TH>
      <TH colspan="3" rowspan="2">DD MM YYYY<?dp return Special.FLibSYS.tmFStr(time,"%d %m %Y");?></TH>
    </TR>
    <TR align="center" valign="center"><TH colspan="2">&nbsp;</TH><TH colspan="2">Information over month</TH></TR>
    <TR align="center" valign="center"><TH colspan="7">Accumulated values by the calculator # pipeline #</TH></TR>
    <TR><TH>Date</TH><TH>Time</TH><TH>Flow</TH><TH>Day capacity</TH><TH>Pressure</TH><TH>Temperatura</TH><TH>Pressure diff.</TH></TR>
    <TR><TH colspan="2">&nbsp;</TH><TH>1000x m3/h</TH><TH>1000x m3</TH><TH>kgF/cm2</TH><TH>grad.C</TH><TH>kgF/cm2</TH></TR>
    <TR docRept="1">
      <TD>DD MM YYYY<?dp return Special.FLibSYS.tmFStr(rTime,"%d %m %Y");?></TD>
      <TD>hh:mm:ss<?dp return Special.FLibSYS.tmFStr(rTime,"%H:%M:%S");?></TD>
      <TD>XX.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.getVal(pF,rTime,0,2,"",true);?></TD>
      <TD>X.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.getVal(pQ,rTime,0,3,"",true);?></TD>
      <TD>X.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.getVal(pP,rTime,0,3,"",true);?></TD>
      <TD>X.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.getVal(pT,rTime,0,3,"",true);?></TD>
      <TD>XXX.XXX<?dp return DAQ.JavaLikeCalc.lib_doc.getVal(pDP,rTime,0,3,"",true);?></TD>
    </TR>
  </TABLE>
  </body>


IDW: doc
ID: dscr
IO_VAL:
  The frame is a template of documents of the archive type and it is provided as an example and for building own archive documents on it basis. The main specific of that document type is the periodic generating on the VCA-session level (in the background) and placing the final and ready to view documents to an archive, the VCA-project's session DB-table "prj_{ProjID}_ses".

  The main advantage of this document type is the lowest load on CPU during the generation, which can be multi-step one during the main generation period, and the fast view, which involves simply opening the ready documents from the archive. But this document type has a significant disadvantage, which is the constant execution of single project session in the background and the absence of which leads to the omission of the documents generation in the archive.

  Therefore, documents of this type are appropriated to use on the stationary AWPs of the operators, even if it is a reproduction from the visualisation server, and are useless in the WEB-interface!

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.2.0
  License: GPLv2

uk#IO_VAL:
  Кадр є шаблоном документу архівного типу, він надається як приклад та для побудови власних архівних документів на його основі. Основною специфікою документу цього типу є періодична генерація на рівні СВУ-сеансу (у фоні) та розміщення фінальних та готових документів у архіві, таблиця БД сеансу СВУ-проекту "prj_{ProjID}_ses".

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

  Відтак, документи такого типу доцільні до використання на стаціонарних АРМ оператору, навіть якщо це відтворення із серверу візуалізації, та малокорисні у WEB-інтерфейсі!

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.2.0
  Ліцензія: GPLv2


IDW: docDin
ID: dscr
IO_VAL:
  The frame is a template of documents of the dynamic type and it is provided as an example and for building own dynamic documents on it basis. The main specific of that document type is the synchronous generating at the requesting-opening.

  The main advantage of this document type is the maximal actuality of the data and the document language, for the multilingual interfaces, that is the possibility of generating for the specified date and time. But this document type has a significant disadvantage, which is the high CPU load and long time of the synchronous generation for big archival data.

  Therefore, documents of this type are allowed to use on every types of the interfaces, include the WEB-interfaces, but some documents based on big archival data require for not slow processing systems!

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.2.0
  License: GPLv2

uk#IO_VAL:
  Кадр є шаблоном документу динамічного типу, він надається як приклад та для побудови власних динамічних документів на його основі. Основною специфікою документу цього типу є синхронна генерація за запитом-відкриттям.

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

  Відтак, документи такого типу дозволено до використання на всіх типах інтерфейсів, включно з WEB-інтерфейсами, але деякі документи, засновані на великих архівних даних, потребують не повільних обчислювальних систем!

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.2.0
  Ліцензія: GPLv2


IDW: docRep2WorkSh
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1> Report of two working shifts <?dp return tr("Report of two working shifts"); ?> </h1>
  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data">
    <TR><TH colspan='16'>DD MM YYYY hh.mm.ss   at DD MM YYYY (shift 1)</TH></TR>
    <TR><TH rowspan='2'>Code</TH><TH rowspan='2'>Name</TH><TH rowspan='2'>Dimension</TH><TH colspan='12'>Hours</TH><TH rowspan='2'>Sum</TH></TR>
    <TR><TH>08-09</TH><TH>09-10</TH><TH>10-11</TH><TH>11-12</TH><TH>12-13</TH><TH>13-14</TH><TH>14-15</TH><TH>15-16</TH><TH>16-17</TH><TH>17-18</TH><TH>18-19</TH><TH>19-20</TH></TR>
    <TR>
  	<TD style='text-align: center'>Prm{N}</TD><TD>Parameter {N}</TD><TD style='text-align: center'>Dimension</TD>
  	<TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD>
  	<TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD><TD style='text-align: center'>-----</TD>
  	<TD style='text-align: center'>-----</TD>
    </TR>

  <?dp
  	curHour = curDay = curMonth = curYear = 0;
  	stH = max(0, min(11,stH));
  	SYS.localtime(time, 0, 0, curHour, curDay, curMonth, curYear);
  	if(curHour < stH) SYS.localtime(time-24*60*60, 0, 0, curHour, curDay, curMonth, curYear);
  	smN = (curHour >= (stH+12) || curHour < stH) ? 2 : 1;
  	smBeg = SYS.strptime(""+curYear+"-"+(curMonth+1)+"-"+curDay+" "+(smN==1?stH:stH+12)+":0:0", "%Y-%m-%d %H:%M:%S");
  	res = "<TR><TH colspan='16'>"+tr("%1   at %2 (shift %3, start hour %4)").replace("%1",SYS.strftime(SYS.time(),"%d %m %Y %H:%M:%S")).replace("%2",SYS.strftime(time,"%d %m %Y")).replace("%3",smN.toString()).replace("%4",stH.toString())+"</TH></TR>"
  			"<TR><TH rowspan='2'>"+tr("Code")+"</TH><TH rowspan='2'>"+tr("Name")+"</TH><TH rowspan='2'>"+tr("Dimension")+"</TH><TH colspan='12'>"+tr("Hours")+"</TH><TH rowspan='2'>"+tr("Sum")+"</TH></TR>";
  	res += "<TR>";
  	for(iH = 0; iH < 12; iH++)
  		res += "<TH>"+((smN==1)?(stH+iH).toString(10,2)+"-"+(stH+iH+1).toString(10,2):
  					((tVl=stH+iH+12)<24?tVl:tVl-24).toString(10,2)+"-"+((tVl=stH+iH+13)<24?tVl:tVl-24).toString(10,2))+"</TH>";
  	res += "</TR>";
  	for(iP = 1; iP <= 10; iP++) {
  		pSh = arguments["p"+iP+"_sh"], pNm = arguments["p"+iP+"_nm"], pVal = arguments["p"+iP+"_val"],
  		pEd = arguments["p"+iP+"_ed"], pPrec = arguments["p"+iP+"_prec"], pSum = arguments["p"+iP+"_flSum"];
  		if(pVal.isEVal() || !pVal.length || pSh.isEVal() || !pSh.length || pNm.isEVal() || !pNm.length)	continue;
  		res += "<TR><TD style='text-align: center'>"+SYS.strEncode(pSh,"HTML")+"</TD>"
  					"<TD>"+SYS.strEncode(pNm,"HTML")+"</TD>"
  					"<TD style='text-align: center'>"+SYS.strEncode(pEd,"HTML")+"</TD>";
  		for(iH = 0; iH < 12; iH++)
  			res += "<TD style='text-align: center'>"+DAQ.JavaLikeCalc.lib_doc.getVal(pVal,smBeg+iH*3600,0,pPrec,arch,true)+"</TD>";
  		res += "<TD style='text-align: center'>"+((pSum == true)?DAQ.JavaLikeCalc.lib_doc.sumVal(pVal,smBeg,smBeg+3600*12,pPrec,arch):"")+"</TD>";
  		res += "</TR>";
  	}

  	return res;
  ?>
  </TABLE>
  <BR/>
  <p>Working shift chief: __________________________ <?dp return tr("Working shift chief:")+"__________________________";?> </p>
  </body>


IDW: docUsersSet
ID: style
IDC: doc
IO_VAL:
  TABLE.data { border-collapse: collapse; }
  TABLE.data TH { background-color: #e6e6e6; border: 1px solid black; }
  TABLE.data TD { white-space: nowrap; border: 1px solid black;}
  TABLE.data TD:nth-child(5) { white-space: normal;}


IDW: docRepInstVals
ID: style
IDC: doc
IO_VAL:
  TABLE.data { border-collapse: collapse; }
  TABLE.data TH { background-color: #e6e6e6; border: 1px solid black; }
  TABLE.data TD { white-space: nowrap; border: 1px solid black;}


IDW: docMessRep
ID: style
IDC: doc
IO_VAL:
  TABLE.data { border-collapse: collapse; }
  TABLE.data TH { background-color: #e6e6e6; border: 1px solid black; }
  TABLE.data TD { border: 1px solid black; text-align: center; }


IDW: docMessRep
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">
  <h1>Protocol of messages <?dp return tr("Protocol of messages"); ?></h1>
  <TABLE border="1" cellpadding="2" cellspacing="0" width="100%" class="data">
    <TR><TH colspan="6" align="left">Message at <?dp return tr("Message at %1").replace("%1",SYS.strftime(bTime)+" — "+SYS.strftime(time));?></TH></TR>
    <TR>
  	<TH>Date</TH><TH>Time</TH><TH>Lev.</TH><TH>Source</TH><TH>Description</TH><TH>Value</TH>
       <?dp return "<TH>"+tr("Date")+"</TH><TH>"+tr("Time")+"</TH><TH>"+tr("Level")+"</TH><TH>"+tr("Source")+"</TH><TH>"+tr("Description")+"</TH><TH>"+tr("Value")+"</TH>";?>
    </TR>
    <TR docAMess="@@messCat@@" docAMessArchs="@@archLs@@" docRevers="1">
    <!--<TR docAMess="1:al*:*" docRevers="1">-->
  <?dp
  mValPrm = mVal.parse(0, ": "); mValDscr = mVal.parse(1, ": "); mValVal = mVal.parse(2, ": ");

  srcO = mCat.match("^al(.+):([^\\.]+)|^(.*):(al|OP)");
  tVl = "";
  //From remote station
  if(srcO.length >= 4)
  	for(off2 = 0, isFirst = true; (tVl2=srcO[3].parse(0,":",off2)).length; tVl += (tVl.length?".":"")+tVl2, isFirst = false) {
  		if(!isFirst)	continue;
  		if(!sourceCache[tVl2].isEVal())	tVl2 = sourceCache[tVl2];
  		else {
  			req = SYS.XMLNode("get").setAttr("path","/Transport/%2fsub%2fehost").setAttr("upRiseSYS",1);
  			SYS.cntrReq(req);
  			for(iTr = 0; req.childSize() && iTr < req.childGet(0).childSize(); iTr++)
  				if(req.childGet(0).childGet(iTr).text() == tVl2) {
  					tVl2 = sourceCache[tVl2] = req.childGet(1).childGet(iTr).text();
  					break;
  				}
  		}
  	}

  if(tVl.length)	mValPrm = tVl + " > " + mValPrm;

  if(mCat.slice(0,2) == "OP") mValVal += " -> "+mVal.parse(3,":");
  else if(mCat[0] == "/")	mValDscr = mVal, mValPrm = mCat;
  if(fltr.length && !fltrCol.isEVal() && (
  	(fltrCol == "dttm" && SYS.strftime(mTime,"%d %m %H:%M:%S").indexOf(fltr) < 0) ||
  	//(fltrCol == "lev" && abs(mLev).toString().indexOf(fltr) < 0) ||
  	(fltrCol == "lev" && ((fltr.toInt() > 0 && abs(mLev) < fltr.toInt()) || (fltr.toInt() < 0 &&  mLev > fltr.toInt()))) ||
  	(fltrCol == "prm" && mValPrm.indexOf(fltr) < 0) ||
  	(fltrCol == "dscr" && mValDscr.indexOf(fltr) < 0) ||
  	(fltrCol == "alrm" && mValVal.indexOf(fltr) < 0))) return "";
  if(mCat[0] == "/") return "<TD style='white-space: nowrap; '>"+SYS.strftime(mTime,"%d %m")+"</TD>"+
  		"<TD>"+SYS.strftime(mTime,"%H:%M:%S")+"</TD>"+
  		"<TD>"+mLev+"</TD>"+
  		"<TD>"+SYS.strEncode(mValPrm,"HTML")+"</TD>"+
  		"<TD colspan='2'>"+SYS.strEncode(mValDscr,"HTML")+"</TD>";
  return "<TD style='white-space: nowrap; '>"+SYS.strftime(mTime,"%d %m")+"</TD>"+
  		"<TD>"+SYS.strftime(mTime,"%H:%M:%S")+"</TD>"+
  		"<TD>"+mLev+"</TD>"+
  		"<TD>"+SYS.strEncode(mValPrm,"HTML")+"</TD>"+
  		"<TD>"+SYS.strEncode(mValDscr,"HTML")+"</TD>"+
  		"<TD>"+SYS.strEncode(mValVal,"HTML")+"</TD>";
  ?>
    </TR>
  </TABLE>
  </body>


IDW: docAlarmsRep
ID: dscr
IO_VAL:
  The document is provided for generating a report of the violations. The document is the dynamic type, so you can specify the data time and depth. The document commonly uses and represents the messages structure "Violations". As a data source of this document is the message archive.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.6.0
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації звіту з порушень. Документ динамічного типу, відтак ви можете визначити час та глибину даних. Документ загалом використовує та представляє структуру повідомлень "Порушення". У якості джерела даних документу виступає архів повідомлень.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.6.0
  Ліцензія: GPLv2


IDW: docRepDay
ID: dscr
IO_VAL:
  The document is provided for generating a day report of the hour-averaged values in view of the trends diagram and the data table. The document is initially the archival type but in time it is made dynamic also, so, depending from the execution mode, you can whether select a ready document from the archive or specify the data time and depth. The document commonly uses and represents the representative structure of the DAQ-template "Analog signal". As a data source of this document is the value archives of the DAQ-parameters.

  Working in the primary archival mode performed with the 5 minutes period, when during an hour an one record-row data is formed. The last one record-row is closed at the 5 minute of a new hour (14:05 for example) and a new one record-row is started. Whole and complete document is archived at the 3 minute of the "Report hour (repHour)" of the next day (09:03 for example).

  Author: Roman Savochenko <roman@oscada.org>
  Sponsored for the dynamization by: Elyor Turaboev, BLUE STAR GROUP Ltd
  Version: 3.1.2
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації добового звіту середніх за годину значень у вигляді діаграми трендів та таблиці даних. Документ початково архівного типу, та з часом він зроблений і динамічним, відтак, залежно від режиму виконання, ви можете або обирати готові документи із архіву або визначити час та глибину даних. Документ загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал". У якості джерела даних документу виступають архіви значень DAQ-параметрів.

  Робота у первинному архівному режимі відбувається із періодом 5 хвилин, коли протягом години формується один запис-рядок. Останній запис-рядок закривається на п'ятій хвилині нової години (наприклад, 14:05) та розпочинається новий запис-рядок. Весь та завершений документ архівується на третій хвилині "Звітного часу (repHour)" наступного дня (наприклад, 09:03).

  Автор: Роман Савоченко <roman@oscada.org>
  Спонсоровано щодо динамізації: Еліор Турабоєв, ТОВ BLUE STAR GROUP
  Версія: 3.1.2
  Ліцензія: GPLv2


IDW: docRepInstVals
ID: dscr
IO_VAL:
  The document is provided for generating a report of the instantaneous values in view of the trends diagram and the data table. The document is the dynamic type, so you can specify the data time and depth. The document commonly uses and represents the representative structure of the DAQ-template "Analog signal". As a data source of this document is the value archives of the DAQ-parameters.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 2.1.1
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації звіту миттєвих значень у вигляді діаграми трендів та таблиці даних. Документ динамічного типу, відтак ви можете визначити час та глибину даних. Документ загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал". У якості джерела даних документу виступають архіви значень DAQ-параметрів.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 2.1.1
  Ліцензія: GPLv2


IDW: docRepMonth
ID: dscr
IO_VAL:
  The document is provided for generating a month report of the day-averaged values in view of the trends diagram and the data table. The document is initially the archival type but in time it is made dynamic also, so, depending from the execution mode, you can whether select a ready document from the archive or specify the data time and depth. The document commonly uses and represents the representative structure of the DAQ-template "Analog signal". As a data source of this document is the value archives of the DAQ-parameters.

  Working in the primary archival mode performed with the 5 minutes period, when during a day an one record-row data is formed. The last one record-row is closed at the 5 minute of a new day (05 09:05 for example) and a new one record-row is started. Whole and complete document is archived at the 3 minute of the "Report hour (repHour)" of the next month (05 09:03 for example).

  Author: Roman Savochenko <roman@oscada.org>
  Sponsored for the dynamization by: Elyor Turaboev, BLUE STAR GROUP Ltd
  Version: 3.1.2
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації місячного звіту середніх за добу значень у вигляді діаграми трендів та таблиці даних. Документ початково архівного типу, та з часом він зроблений і динамічним, відтак, залежно від режиму виконання, ви можете або обирати готові документи із архіву або визначити час та глибину даних. Документ загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал". У якості джерела даних документу виступають архіви значень DAQ-параметрів.

  Робота у первинному архівному режимі відбувається із періодом 5 хвилин, коли протягом доби формується один запис-рядок. Останній запис-рядок закривається на п'ятій хвилині нової доби (наприклад, 05 09:05) та розпочинається новий запис-рядок. Весь та завершений документ архівується на третій хвилині "Звітного часу (repHour)" наступного місяця (наприклад, 05 09:03).

  Автор: Роман Савоченко <roman@oscada.org>
  Спонсоровано щодо динамізації: Еліор Турабоєв, ТОВ BLUE STAR GROUP
  Версія: 3.1.2
  Ліцензія: GPLv2


IDW: docMessRep
ID: dscr
IO_VAL:
  The document is provided for generating a report of different sort messages together, including: "Violations", "User-operator actions" and "System". The document is the dynamic type, so you can specify the data time and depth. The document so commonly uses and represents the messages structures: "Violations", "User-operator actions" and "System". As a data source of this document is the message archive.

  The document also provides a simple filtering for selected criteria: "Disabled", "Date and time (dttm)", "Level (lev)", "Parameter (prm)", "Description (dscr)", "Value (alrm)".

  Author: Roman Savochenko <roman@oscada.org>
  Sponsored by: Ustijancev Michael
  Version: 1.5.3
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації звіту різного сорту повідомлень разом, включаючи: "Порушення", "Дії користувача-оператора" та "Системні". Документ динамічного типу, відтак ви можете визначити час та глибину даних. Документ загалом використовує та представляє структури повідомлень: "Порушення", "Дії користувача-оператора" та "Системні". У якості джерела даних документу виступає архів повідомлень.

  Документ також надає просту фільтрацію за обраним критерієм: "Вимкнено", "Дата та час (dttm)", "Рівень (lev)", "Параметр (prm)", "Опис (dscr)", "Значення (alrm)".

  Автор: Роман Савоченко <roman@oscada.org>
  Спонсорування: Устьянцев Михайло
  Версія: 1.5.3
  Ліцензія: GPLv2


IDW: docRep2WorkSh
ID: dscr
IO_VAL:
  The document is provided for generating a report of the hour values of up to 10 parameters for two working shift of day with the result sum for flows and related parameters. The document is the dynamic type, so you can specify the data time and depth (fixed). The document commonly uses and represents the representative structure of the DAQ-template "Analog signal". As a data source of this document is the value archives of the DAQ-parameters.

  Author: Roman Savochenko <roman@oscada.org>
  Sponsored by: DIYA LTD (http://diyaorg.dp.ua/)
  Version: 2.0.0
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації звіту годинних значень до 10 параметрів двох робочих змін доби із результатною сумою для потоків та схожих параметрів. Документ динамічного типу, відтак ви можете визначити час та глибину (фіксована) даних. Документ загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал". У якості джерела даних документу виступають архіви значень DAQ-параметрів.

  Автор: Роман Савоченко <roman@oscada.org>
  Спонсоровано: ТОВ "ДІЯ" (http://diyaorg.dp.ua/)
  Версія: 2.0.0
  Ліцензія: GPLv2


IDW: docUsersSet
ID: dscr
IO_VAL:
  The document is provided for generating a report of the user interruptions. The document is the dynamic type, so you can specify the data time and depth. The document commonly uses and represents the messages structure "User-operator actions". As a data source of this document is the message archive.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.7.0
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації звіту з втручань користувача. Документ динамічного типу, відтак ви можете визначити час та глибину даних. Документ загалом використовує та представляє структуру повідомлень "Дії користувача-оператора". У якості джерела даних документу виступає архів повідомлень.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.7.0
  Ліцензія: GPLv2


IDW: docRepYear
ID: dscr
IO_VAL:
  The document is provided for generating a year report of the month values in view of the trends diagram and the data table. The document is the dynamic type. The document commonly uses and represents the representative structure of the DAQ-template "Analog signal". As a data source of this document is the value archives of the DAQ-parameters mostly.

  The document first introduced the manual entry of archival values of a large measurement time interval, which in this case is a month, as an undetermined interval. This feature is of great relevance for counters that for one reason or another cannot be connected to the system directly, with continuous measurement or periodic uploading of archive parts. Determining the parameter to manual input performs by setting the constant isMan of the appropriate parameter, which enables the form elements at the top of the document under the appropriate rights ("root" or in the "ITW" group), and accessing the data for the table and trend strictly at the interval of the document — month, as well as entering them.

  Manually entered data is stored or traditionally in an archive of values, with only one value recorded per representative interval, that is, with unreliable values between them; or a separate entry with a value in the message archive, also introduced for the first time by this document:
  - CATEGORY: defines the source ID SrcID in the form "val{SrcID}", where:
    - "val*" — the typical template-sign of a value, that can be directly used in the category filter to determine only the values in messages;
    - SrcID — source identifier, what directly entered by a constant in the parameter address var.
  - TEXT: the parameter Name and Value in the form "{Name}: {Value}".

  The message archiver of the module FSArch must be set for the next attributes to correct work perform together this document: set "Prevent duplicates", "Consider duplicates and prevent, for equal time, category, level" and set "Time size of the archive files" to 3660 days. The module DBArch must work without such kind specific.

  Author: Roman Savochenko <roman@oscada.org>
  Version: 1.2.2
  License: GPLv2

uk#IO_VAL:
  Документ слугує для генерації добового звіту місячних значень у вигляді діаграми трендів та таблиці даних. Документ динамічного типу. Документ загалом використовує та представляє представницьку структуру DAQ-шаблону "Аналоговий сигнал". У якості джерела даних документу виступають переважно архіви значень DAQ-параметрів.

  Документом вперше запроваджено ручне введення архівних значень великого інтервалу часу вимірювання, яким у цьому випадку є місяць, як недетермінований інтервал. Найбільшу актуальність ця функція становить для лічильників, які з тієї або іншої причини неможливо підключити до системи прямо, із безперервним вимірюванням або періодичним вивантаженням ділянок архіву. Визначення параметру до ручного вводу здійснюється встановленням постійної isMan відповідного параметру, що вмикає елементи форми нагорі документу, за відповідних прав ("root" або у групі "ITW"), та доступ до даних для таблиці та тренду суворо за інтервалом документу — місяць, як і їх введення.

  Зберігання введених вручну даних здійснюється або традиційно у архів значень, із записом лише одного значення на представницький інтервал, тобто із недостовірними значеннями між ними; або окремим записом зі значенням у архіві повідомлень, що також запроваджено цим документом вперше:
  - КАТЕГОРІЯ: визначає ID джерела SrcID у форматі "val{SrcID}", де:
    - "val*" — типовий шаблон-ознака значення, який може бути безпосередньо використано у фільтрі категорії для визначення суто значень у повідомленнях;
    - SrcID — ідентифікатор джерела, що безпосередньо вводиться постійною у адресі параметру var.
  - ТЕКСТ: назва Name та значення Value параметру у форматі "{Name}: {Value}".

  Архіватор повідомлень модуля FSArch має бути встановлено у наступних атрибутах для здійснення коректної роботи разом із цим документом: встановити "Запобігати дублікатам", "Вважати дублікатами та запобігати, для рівного часу, категорії, рівня" та встановити "Розмір файлів за часом" у 3660 діб. Модуль DBArch має працювати без такого роду специфіки.

  Автор: Роман Савоченко <roman@oscada.org>
  Версія: 1.2.2
  Ліцензія: GPLv2


IDW: docRepYear
ID: tmpl
IDC: doc
IO_VAL:
  <body docProcLang="JavaLikeCalc.JavaScript">

  <center>
  <h1>Month values of ""</h1>
  <?dp return "<h1>"+tr("Month values of \"%1\"").replace("%1",title)+"</h1><span>"+SYS.strftime(time-1,"%Y")+"</span>";?>
  </center>

  <div width="100%"><div style="margin-left: auto; margin-right: auto; text-align: center; width: fit-content;">
  	<?dp if(!enGraph) return "";
  		for(iP = 0, srcs = ""; iP < params.length; iP++)
  			if(!(pO=params[iP]).min.isEVal() && !pO.max.isEVal())
  				srcs += (pO.trData.length?pO.trData:pO.var)+":"+pO.min+":"+pO.max+":"+pO.color+":0:2\n";
  		return srcs.length ? DAQ.JavaLikeCalc.lib_doc.diagram(time, time-bTime, srcs, 800, 300, arch.parse(0,";")) : "";
  	?>
  </div></div>
  <br/>

  <TABLE class="data" width="100%" export="1" docAppend="1">
    <TR>
  	<TH>Date</TH><TH>Capacity</TH><TH>Aver. pressure diff.</TH><TH>St. pressure</TH><TH>Aver. temp.</TH><TH>Density</TH>
  	<?dp
  		rez = "<TH>"+tr("Date")+"</TH>";
  		for(iP = 0; iP < params.length; iP++) {
  			pO = params[iP];
  			rez += "<TH style='color: "+(enGraph?pO.color:"black")+";' "+((pO.isCntr&&showOrigCntr)?"colspan='2'":"")+">"+SYS.strEncode(pO.name, "HTML")+"</TH>";
  		}
  		return rez; ?>
    </TR>
    <TR>
  	<TH>&nbsp;</TH><TH>m3</TH><TH>kgF/m2</TH><TH>kgF/cm</TH><TH>grad.C</TH><TH>kg/m3</TH>
  	<?dp
  		rez = "<TH>&nbsp;</TH>";
  		for(iP = 0; iP < params.length; iP++) {
  			pO = params[iP];
  			rez += "<TH "+((pO.isCntr&&showOrigCntr)?"colspan='2'":"")+">"+((enGraph && pO.min < pO.max)?"["+pO.min+"..."+pO.max+"] ":"")+SYS.strEncode(pO.ed, "HTML")+"</TH>";
  		}
  		return rez; ?>
    </TR>
    <?dp using DAQ.JavaLikeCalc.lib_doc;
  	rez = "";
  	bYear = 0;
  	SYS.localtime(bTime, 0, 0, 0, 0, 0, bYear);
  	tTime = tTime_ = SYS.mktime(0, 0, 0, 1, 0, bYear);
  	for(iMonth = 0; tTime < time && tTime < SYS.time() && iMonth < 12; tTime = tTime_) {
  		tTime_GM = SYS.timegm(0, 0, 0, 1, iMonth, bYear);
  		iMonth++; tTime_ = SYS.mktime(0, 0, 0, 1, iMonth, bYear);
  		rez_ = "<TD>"+SYS.strftime(tTime,"%B")+"</TD>";
  		for(iP = 0; iP < params.length; iP++)
  			if((pO=params[iP]).isMan) {
  				if(pO.isCntr)
  					rez_ += "<TD style='text-align: center;'>"+((tVl=pO.cntrData[tTime_GM]).isEVal()?tr("Empty"):tVl.toFixed(pO.prec))+"</TD>"+
  						(showOrigCntr?"<TD style='text-align: center;'>"+((tVl=pO.manData[tTime_GM]).isEVal()?tr("Empty"):tVl.toFixed(pO.prec))+"</TD>":"");
  				else rez_ += "<TD style='text-align: center;'>"+((tVl=pO.manData[tTime_GM]).isEVal()?tr("Empty"):tVl.toFixed(pO.prec))+"</TD>";
  			}
  			else if(pO.isCntr) {
  				if(!(V1=getVal(pO.var,tTime,0,-1,arch.parse(0,";"),false,tTime_*1e6)).isEVal())	V1 = V1.toReal();
  				if(!(V2=getVal(pO.var,tTime_,0,-1,arch.parse(0,";"),false,tTime*1e6)).isEVal())	V2 = V2.toReal();
  				rez_ += "<TD style='text-align: center;'>"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(pO.prec))+"</TD>"+
  					(showOrigCntr?"<TD style='text-align: center;'>"+(V1.isEVal()?tr("Empty"):V1.toFixed(pO.prec))+"</TD>":"");
  			} else rez_ += "<TD style='text-align: center;'>"+averVal(pO.var,tTime,tTime_,pO.prec,arch.parse(0,";"))+"</TD>";
  		rez = "<TR>" + rez_ + "</TR>" + rez;		
  	}

  	rez_ = "", presentCntr = false;
  	for(iP = 0; iP < params.length; iP++)
  		if(!(pO=params[iP]).isCntr)	rez_ += "<TD/>";
  		else {
  			presentCntr = true;
  			if(!pO.isMan) {
  				if(!(V1=getVal(pO.var,bTime,0,-1,arch.parse(0,";"),false,time*1e6)).isEVal())	V1 = V1.toReal();
  				if(!(V2=getVal(pO.var,time,0,-1,arch.parse(0,";"),false,bTime*1e6)).isEVal())	V2 = V2.toReal();
  				rez_ += "<TD style='text-align: center;' "+(showOrigCntr?"colspan='2'":"")+">"+((V1.isEVal() || V2.isEVal())?tr("Empty"):abs(V2-V1).toFixed(pO.prec)) + "</TD>";
  			} else rez_ += "<TD style='text-align: center;' "+(showOrigCntr?"colspan='2'":"")+">"+(pO.manResCntr.isEVal()?tr("Empty"):pO.manResCntr.toFixed(pO.prec))+"</TD>";
  		}
  	if(presentCntr) rez += "<TR style='font-weight: bold;'><TD>"+tr("Summary")+"</TD>"+rez_+"</TR>";

  	return rez;
    ?>
  </TABLE>
  </body>


