Last modified by superadmin on 2026/06/24 21:40

Hide last authors
pugachevskaya_elena 1.1 1 В данном разделе приведены сведения о порядке настройки шаблона формы для вывода данных о владельце и пропуске.
2
3 {{info}}
4 **ПОДСКАЗКА**
5
6 Если вы не хотите разбираться с кодом шаблона формы или вам требуется форма о определенном стиле, с дополнительными графическими элементами, вы всегда можете заказать разработку такой формы у специалистов компании ИТРИУМ.
7 {{/info}}
8
admin 6.1 9 == {{id name="Настройкаформыфотоидентификации-Общиесведения"/}}Общие сведения ==
pugachevskaya_elena 1.1 10
11 Платформа НЕЙРОСС с версии 20.41 позволяет вывести в форме фотоидентификации любые данные в владельце и пропуске, в том числе пользовательские свойства владельца и пропуска.
12
13 [[image:attach:s_photoid_extended.png||width="900"]]
14
15 {{info}}
16 Инструкция по добавлению пользовательских свойств приведена в разделе ~[[[doc:neyross.Настройка Платформы НЕЙРОСС.Настройка функций контроля доступа.Добавление пользовательских свойств.WebHome]]]. Чтобы вывести свойства в форме владельца и пропуска для ввода данных в АРМ Доступ используйте конструктор форм ~[[[doc:neyross.Настройка Платформы НЕЙРОСС.Настройка функций контроля доступа.Настройка форм ввода данных.WebHome]]].
17 {{/info}}
18
19 (% style="text-align: left;" %)
20 Для отображения поля необходимо сформировать его ключ по следующим правилам:
21
admin 2.1 22 {{code language="java"}}
pugachevskaya_elena 1.1 23 $PASS.$type_$field
24 {{/code}}
25
26 (% style="text-align: left;" %)
admin 6.1 27 где {{code language="none"}}$PASS{{/code}} фиксированная строка, {{code language="none"}}$type{{/code}} = **person** для владельца и **pass** для пропуска, а {{code language="none"}}$field{{/code}} формируется по следующим правилам:
pugachevskaya_elena 1.1 28
admin 6.1 29 (% style="text-align:left" %)
pugachevskaya_elena 1.1 30 1. Если свойство типовое (ФИО, организация и т. п.) – то просто ключ свойства
31 1. Если свойство пользовательское с ключом **key** – то строка вида {{code language="none"}}property_key{{/code}}
32
33 == {{id name="Настройкаформыфотоидентификации-Ключисвойств"/}}Ключи свойств ==
34
35 |=(((
36 Свойство
37 )))|=(((
38 Ключ
39 )))|=(((
40 Пример
41 )))
42 |=(% colspan="3" %)(((
43 Стандартные поля формы
44 )))
45 |(((
46 ФИО
47 )))|(((
48 {{code language="none"}}
49 $PASS.personName
50 {{/code}}
51 )))|(((
52 Петров Петр Сергеевич
53 )))
54 |(((
55 (((
56 Карта
57
admin 2.1 58 {{code language="java"}}
admin 7.1 59 Код_предприятия/Номер_карты
pugachevskaya_elena 1.1 60 {{/code}}
61 )))
62 )))|(((
63 {{code language="none"}}
64 $PASS.cardNumber
65 {{/code}}
66 )))|(((
67 №175/32784
68 )))
69 |(((
70 Событие
71 )))|(((
72 {{code language="none"}}
73 $EVENT.status
74 {{/code}}
75 )))|(((
76 Доступ разрешен
77 )))
78 |(((
79 Источник события
80 )))|(((
81 {{code language="none"}}
82 $EVENT.source
83 {{/code}}
84 )))|(((
85 Главный вход (турникет) — имя точки доступа
86 )))
87 |(((
88 Время события
89 )))|(((
90 $EVENT.time
91 )))|(((
92 08:56
93 )))
94 |=(% colspan="3" %)(((
95 Свойства владельца пропуска
96 )))
97 |(((
98 Фамилия
99 )))|(((
100 {{code language="none"}}
101 $PASS.person_surname
102 {{/code}}
103 )))|(((
104 Петров
105 )))
106 |(((
107 Имя
108 )))|(((
109 {{code language="none"}}
110 $PASS.person_name
111 {{/code}}
112 )))|(((
113 Петр
114 )))
115 |(((
116 Отчество
117 )))|(((
118 {{code language="none"}}
119 $PASS.person_patronymic
120 {{/code}}
121 )))|(((
122 Сергеевич
123 )))
124 |(((
125 Организация
126 )))|(((
127 {{code language="none"}}
128 $PASS.person_organization
129 {{/code}}
130 )))|(((
131 ООО Промтехмонтаж
132 )))
133 |(((
134 Подразделение
135 )))|(((
136 {{code language="none"}}
137 $PASS.person_division
138 {{/code}}
139 )))|(((
140 Технологической инспекции
141 )))
142 |(((
143 Должность
144 )))|(((
145 {{code language="none"}}
146 $PASS.person_post
147 {{/code}}
148 )))|(((
149 Инспектор
150 )))
151 |(((
152 Табельный номер
153 )))|(((
154 {{code language="none"}}
155 $PASS.person_clock_number
156 {{/code}}
157 )))|(((
158 5465-У
159 )))
160 |(((
161 Номер документа
162 )))|(((
163 {{code language="none"}}
164 $PASS.person_document_number
165 {{/code}}
166 )))|(((
167 4016584681
168 )))
169 |(((
170 Доп. информация
171 )))|(((
172 {{code language="none"}}
173 $PASS.person_properties_extra
174 {{/code}}
175 )))|(((
176 Доступ к работе на электроустановках: до 1000 В
177 )))
178 |(((
179 пользовательское свойство с ключом xxxxx
180 )))|(((
181 {{code language="none"}}
182 $PASS.person_properties_xxxx
183 {{/code}}
184 )))|(((
185 [[#Заметки отображения пользовательских свойств владельца/пропуска>>doc:||anchor="Настройкаформыфотоидентификации-Заметкиотображенияпользовательскихсвойстввладельца/пропуска"]]
186 )))
187 |=(% colspan="3" %)(((
188 Свойства пропуска
189 )))
190 |(((
191 Состояние пропуска
192 )))|(((
193 {{code language="none"}}
194 $PASS.pass_state
195 {{/code}}
196 )))|(((
197 Действителен
198 )))
199 |(((
200 Тип пропуска
201 )))|(((
202 {{code language="none"}}
203 $PASS.pass_type
204 {{/code}}
205 )))|(((
206 Постоянный
207 )))
208 |(((
209 Номер карты
210 )))|(((
211 {{code language="none"}}
212 $PASS.pass_card
213 {{/code}}
214 )))|(((
215 32784
216 )))
217 |(((
218 Код предприятия
219 )))|(((
220 {{code language="none"}}
221 $PASS.pass_facility
222 {{/code}}
223 )))|(((
224 175
225 )))
226 |(((
227 Действителен с
228 )))|(((
229 {{code language="none"}}
230 $PASS.pass_activation_date
231 {{/code}}
232 )))|(((
233 2025.12.01 00:00:00
234 )))
235 |(((
236 Действителен по
237 )))|(((
238 {{code language="none"}}
239 $PASS.pass_expiration_date
240 {{/code}}
241 )))|(((
242 2032.12.16 00:00:00
243 )))
244 |(((
245 пользовательское свойство с ключом yyyyy
246 )))|(((
247 {{code language="none"}}
248 $PASS.pass_properties_yyyyy
249 {{/code}}
250 )))|(((
admin 7.1 251
pugachevskaya_elena 1.1 252 )))
253
254 == {{id name="Настройкаформыфотоидентификации-Заметкиотображенияпользовательскихсвойств"/}}Заметки отображения пользовательских свойств ==
255
256 |=(((
257 Тип поля
258 )))|=(((
259 Комментарий
260 )))
261 |(((
262 Дата и время
263 )))|(((
admin 6.1 264 1979-03-31T10:00:00+03:00
pugachevskaya_elena 1.1 265 Указывается время и часовой пояс
266 )))
267 |(((
268 Только дата
269 )))|(((
270 1979-03-31
271 )))
272 |(((
273 Только время
274 )))|(((
275 18:00:00
276 )))
277 |(((
278 Переключатель
279 )))|(((
280 да/нет
281 Если не указано, ничего не выводится.
282 )))
283 |(((
284 Список
285 )))|(((
286 Отображается код, а не значение. Рекомендуется задавать осмысленные коды.
287 )))
288
289
admin 6.1 290
pugachevskaya_elena 1.1 291 (% style="text-align: left;" %)
292 == {{id name="Настройкаформыфотоидентификации-Порядокнастройки"/}}Порядок настройки ==
293
294 Скопируйте приведённый ниже код шаблона формы.
295
admin 2.1 296 {{code language="java"}}
pugachevskaya_elena 1.1 297 <!DOCTYPE html>
298 <html>
299 <head>
300 <meta charset="utf-8" />
301 <meta
302 name="viewport"
303 content="initial-scale = 1.0, maximum-scale=1.0, user-scalable = no, width=device-width"
304 />
305 <meta name="mobile-web-app-capable" content="yes" />
306 <meta name="apple-mobile-web-app-capable" content="yes" />
307 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
308 <link rel="stylesheet" type="text/css" href="/dry/css/vendor/font-awesome.css" />
309 </head>
310 <body>
311 <div class="card">
312 <div class="card__header">
313 <div class="{{ $EVENT.state }}">
314 <span>{{ $EVENT.status }}</span>
315 </div>
316 </div>
317 <div class="card__body">
318 <div class="card__body__photo" style="background-image: url('{{ $PASS.photoURL }}')"></div>
319 <div class="card__body__data">
320 <div class="card__body__data__row">
321 <div class="card__body__data__row__title">ФИО:</div>
322 <div class="card__body__data__row__value">{{ $PASS.personName }}</div>
323 </div>
324 <div class="card__body__data__row">
325 <div class="card__body__data__row__title">Карта:</div>
326 <div class="card__body__data__row__value">{{ $PASS.cardNumber }}</div>
327 </div>
328 <div class="card__body__data__row">
329 <div class="card__body__data__row__title">Событие:</div>
330 <div class="card__body__data__row__value">{{ $EVENT.status }}</div>
331 </div>
332 <div class="card__body__data__row">
333 <div class="card__body__data__row__title">Источник события:</div>
334 <div class="card__body__data__row__value">{{ $EVENT.source }}</div>
335 </div>
336 <div class="card__body__data__row">
337 <div class="card__body__data__row__title">Время события:</div>
338 <div class="card__body__data__row__value">{{ $EVENT.time }}</div>
339 </div>
340 <!-- all person fields -->
341 <div class="card__body__data__row">
342 <div class="card__body__data__row__title">Фамилия:</div>
343 <div class="card__body__data__row__value">{{ $PASS.person_surname }}</div>
344 </div>
345 <div class="card__body__data__row">
346 <div class="card__body__data__row__title">Имя:</div>
347 <div class="card__body__data__row__value">{{ $PASS.person_name }}</div>
348 </div>
349 <div class="card__body__data__row">
350 <div class="card__body__data__row__title">Отчество:</div>
351 <div class="card__body__data__row__value">{{ $PASS.person_patronymic }}</div>
352 </div>
353 <div class="card__body__data__row">
354 <div class="card__body__data__row__title">Организация:</div>
355 <div class="card__body__data__row__value">{{ $PASS.person_organization }}</div>
356 </div>
357 <div class="card__body__data__row">
358 <div class="card__body__data__row__title">Подразделение:</div>
359 <div class="card__body__data__row__value">{{ $PASS.person_division }}</div>
360 </div>
361 <div class="card__body__data__row">
362 <div class="card__body__data__row__title">Должность:</div>
363 <div class="card__body__data__row__value">{{ $PASS.person_post }}</div>
364 </div>
365 <div class="card__body__data__row">
366 <div class="card__body__data__row__title">Табельный номер:</div>
367 <div class="card__body__data__row__value">{{ $PASS.person_clock_number }}</div>
368 </div>
369 <div class="card__body__data__row">
370 <div class="card__body__data__row__title">Номер документа:</div>
371 <div class="card__body__data__row__value">{{ $PASS.person_document_number }}</div>
372 </div>
373 <div class="card__body__data__row">
374 <div class="card__body__data__row__title">Доп. информация:</div>
375 <div class="card__body__data__row__value">{{ $PASS.person_properties_extra }}</div>
376 </div>
377 <!-- all pass fields -->
378 <div class="card__body__data__row">
379 <div class="card__body__data__row__title">Состояние:</div>
380 <div class="card__body__data__row__value">{{ $PASS.pass_state }}</div>
381 </div>
382 <div class="card__body__data__row">
383 <div class="card__body__data__row__title">Тип:</div>
384 <div class="card__body__data__row__value">{{ $PASS.pass_type }}</div>
385 </div>
386 <div class="card__body__data__row">
387 <div class="card__body__data__row__title">Номер карты:</div>
388 <div class="card__body__data__row__value">{{ $PASS.pass_card }}</div>
389 </div>
390 <div class="card__body__data__row">
391 <div class="card__body__data__row__title">Код предприятия:</div>
392 <div class="card__body__data__row__value">{{ $PASS.pass_facility }}</div>
393 </div>
394 <div class="card__body__data__row">
395 <div class="card__body__data__row__title">Дата начала действия:</div>
396 <div class="card__body__data__row__value">{{ $PASS.pass_activation_date }}</div>
397 </div>
398 <div class="card__body__data__row">
399 <div class="card__body__data__row__title">Дата окончания действия:</div>
400 <div class="card__body__data__row__value">{{ $PASS.pass_expiration_date }}</div>
401 </div>
402 </div>
403 </div>
404 <div class="card__footer">{{ #DECISION_BUTTONS }} {{ #CAMERA_ICON }}</div>
405 </div>
406
407 <script type="text/javascript">
408 function safeClosure() {
409 return {
410 execute: function () {
411 // code goes here
412 },
413 cleanup: function () {
414 // required hook for script deactivation!
415 },
416 };
417 }
418
419 safeClosure().execute();
420 window.cleanup = safeClosure().cleanup;
421 </script>
422
423 <style>
424 html,
425 body {
426 height: 100%;
427 }
428 body {
429 margin: 0;
430 font-family: Arial, Verdana, Helvetica, sans-serif;
431 }
432 * {
433 box-sizing: border-box;
434 }
435 .card {
436 display: flex;
437 flex-direction: column;
438 width: 100%;
439 height: 100%;
440 justify-content: space-between;
441 overflow: hidden;
442 }
443 .card__header {
444 display: flex;
445 flex-direction: row;
446 align-items: center;
447 justify-content: space-between;
448 height: 40px;
449 }
450 .card__header > div {
451 width: 100%;
452 height: 100%;
453 padding: 0 25px;
454 overflow: hidden;
455 text-overflow: ellipsis;
456 }
457 .card__header > .ok {
458 background-color: #0a9d13;
459 }
460 .card__header > .warn {
461 background-color: #e8a71b;
462 }
463 .card__header > .alert {
464 background-color: #c73734;
465 }
466 .card__header > div > span {
467 line-height: 40px;
468 color: #fff;
469 display: block;
470 white-space: nowrap;
471 }
472 .card__body {
473 display: flex;
474 flex-direction: row;
475 height: calc(100% - 80px);
476 margin-top: 0;
477 margin-bottom: auto;
478 padding: 20px;
479 overflow: auto;
480 }
481 .card__body__photo {
482 position: relative;
483 display: flex;
484 flex-direction: column;
485 flex-grow: 1;
486 flex-shrink: 0;
487 max-width: 30%;
488 max-height: 70%;
489 background-size: contain;
490 background-repeat: no-repeat;
491 background-position: 50% 50%;
492 }
493 .card__body__photo > img {
494 width: 100%;
495 height: 100%;
496 margin: auto;
497 object-fit: contain;
498 }
499 .card__body__data {
500 display: table;
501 padding-left: 4vw;
502 width: 60%;
503 }
504 .card__body__data__row {
505 display: table-row;
506 }
507 .card__body__data__row__title {
508 display: table-cell;
509 padding-top: 4.5vh;
510 padding-right: 1vw;
511 font-size: 2vw;
512 }
513 .card__body__data__row__value {
514 display: table-cell;
515 font-size: 2.5vw;
516 }
517 .card__footer {
518 position: absolute;
519 display: flex;
520 flex-direction: row;
521 background-color: #d8dde1;
522 bottom: 0;
523 height: 40px;
524 width: 100%;
525 }
526 .card__footer #hoverable-camera-tooltip {
527 flex-shrink: 0;
528 color: #8f9aa3;
529 margin-right: 0;
530 margin-left: auto;
531 padding: 12px;
532 }
533 .card__footer .buttons__wrapper {
534 height: 40px;
535 flex-grow: 1;
536 }
537 .card__footer .buttons__wrapper > .button {
538 height: 40px;
539 line-height: 40px;
540 width: 50%;
541 padding: 0 20px;
542 margin: 0;
543 color: #fff;
544 border: none;
545 outline: none;
546 cursor: pointer;
547 }
548 .button.disabled {
549 opacity: 0.7;
550 pointer-events: none;
551 }
552 .card__footer .buttons__wrapper > .button.green {
553 background-color: #0a9d13;
554 }
555 .card__footer .buttons__wrapper > .button.green:hover {
556 background-color: #08820f;
557 }
558 .card__footer .buttons__wrapper > .button.red {
559 background-color: #9e0b0f;
560 }
561 .card__footer .buttons__wrapper > .button.red:hover {
562 background-color: #800007;
563 }
564 </style>
565 </body>
566 </html>
567 {{/code}}
568
569
570 Вставьте в текстовый редактор без форматирования, например, — свободно распространяемый Notepad++.
571
572 Отредактируйте код формы из блока:
573
admin 2.1 574 {{code language="java"}}
pugachevskaya_elena 1.1 575 <div class="card__body">
576 ...
577 </div>
578 {{/code}}
579
580
581 В этом блоке три группы полей. Порядок соответствует таблице выше.
582
583 Чтобы удалить поле из шаблона формы, просто удалите соответствующий блок кода.
584
585 Вы также можете добавить произвольное количество полей с пользовательскими свойствами владельца и пропуска, например:
586
admin 2.1 587 {{code language="java"}}
pugachevskaya_elena 1.1 588 <div class="card__body__data__row">
589 <div class="card__body__data__row__title">Группа крови:</div>
590 <div class="card__body__data__row__value">{{ $PASS.person_properties_Gruppa_krovi }}</div>
591 </div>
592 {{/code}}
593
594 , поле «Группа крови» с полем типа «список».
595
596
admin 2.1 597 {{code language="java"}}
pugachevskaya_elena 1.1 598 <div class="card__body__data__row">
599 <div class="card__body__data__row__title">Согласие на обработку персональных данных:</div>
600 <div class="card__body__data__row__value">{{ $PASS.person_properties_consent_to_personal_data_processing }}</div>
601 </div>
602 {{/code}}
603
604 , поле «Согласие на обработку персональных данных» типа «переключатель».
605
606
admin 2.1 607 {{code language="java"}}
pugachevskaya_elena 1.1 608 <div class="card__body__data__row">
609 <div class="card__body__data__row__title">Выход строго до:</div>
610 <div class="card__body__data__row__value">{{ $PASS.pass_properties_Vikhod_do }}</div>
611 </div>
612 {{/code}}
613
614 , поле «Выход строго до» типа «дата и время», подтипом «только время».
615
616 {{error}}
617 **ВАЖНО**
618
619 Будьте внимательны при вводе уникального ключа свойства. Рекомендуется копировать код во избежание ошибок.
620 {{/error}}
621
622
623 Сохраните подготовленный шаблон формы в формате TEMPLATE, например:
624
admin 2.1 625 {{code language="java"}}
pugachevskaya_elena 1.1 626 Шаблон_формы.template
627 {{/code}}
628
629
630 Загрузите файл шаблона в соответствующее поле настроек ячейки ~[[[doc:neyross.Настройка Платформы НЕЙРОСС.Настройка функций контроля доступа.Настройка АРМ фотоидентификации.WebHome]]]. Каждая ячейка может иметь свой шаблон формы.
631
admin 6.1 632