gifts2017

ВК для 1С:Предприятие 8.2 NativeAPI на Delphi - доработанная

Опубликовал Андрей Акулов (DrAku1a) в раздел Программирование - Внешние компоненты

Доработанная версия: http://infostart.ru/public/88060/
Добавлено:
1. Альтернативная "пауза" - с практически нулевой загрузкой на процессор;
2. Счетчик бездействия (определение времени простоя сеанса, работает даже в терминале Citrix)
3. Важное сообщение (выводится в окне 1С сверху-справа красный прямоугольник сообщения);
4. ПолучитьИнформациюОСеансе() - расширенная информация о текущем сеансе 1С (то, чего платформа не умеет).


Рекомендую, если не хватает стандартного функционала платформы 1С Предприятие - обратиться к  Miracle Native v8 - по крайней мере, прежде, чем изобретать велосипед разрабатывать нечто своё...

 

Новые методы данной ВК: 

Пауза(мс)

Процедура (метод).

Альтернативная пауза, без нагрузки на ЦП, с нормальной прорисовкой и т.п., мс - число, время бездействия в миллисекундах (обязательный).

НаблюдениеВремениБездействияАктивно

Свойство (чтение и запись). Тип: Булево.

После установки в ИСТИНА начинается подсчет времени бездействия пользователя текущего сеанса. Перед закрытием 1С настоятельно рекомендуется установить данное свойство в ЛОЖЬ;

ВремяБездействияПользователя

Свойство (только чтение). Тип: Число.

Хранит в себе число миллисекунд простоя данного сеанса 1С. Удобно, чтобы автоматически закрывать "забытые" окна стандартными средствами 1С.

ФоновоеСообщение(Заголовок, ТекстСообщения)

Процедура (метод).

Показывает сообщение вверху формы 1С вот так:

 

УбратьФоновоеСообщение()

Процедура (метод).

Закрывает сообщение вверху формы (если оно открыто);

ПолучитьИнформациюОСеансе()

Функция (метод).  

Возвращает строку дополнительной информации о текущем сеансе.

В файле имеется обработка с демонстрацией всех перечисленных возможностей.

 

О Native API

Native API - это новая технология компонент, появившаяся в 1С Предприятие 8. Главные достоинства - не требует регистрации и административных прав, простота разработки.

Основные материалы по теме:

http://infostart.ru/public/125913/ - Miracle Native v8 - мощная вещь! Умеет почти всё, что умеют данная и нижеприведенные ВК (графика, мультимедиа, много информации об ОС и терминальной сессии, закрытие терминальных сессий, пара полноценных игр, дополнение функционала платформы 1С, взаимодействие с главным окном 1С Предприятие и открытыми формами, обмен сообщениями между приложениями Windows и между запущенными сеансами 1С, работа с файловой системой, шустрое прямое чтение из XLS-файла, и еще много-много мелких но полезных функций).  

http://infostart.ru/public/81644/ - исходники Delphi / Free pascal - основные шаблоны и модули для начала разработки ВК;

http://infostart.ru/public/88060/ - исходники Delphi, компонента - основа для данной разработки.

http://infostart.ru/public/144151/ -  Delphi, реализация доступа к сокетам. Кто не знает, что такое сокеты - воспользуйтесь интернет-поиском по теме "сокеты в delphi"

http://infostart.ru/public/91306/ - Visual C++ 2010, Перехватчик клавиатуры (как я понимаю, глобальный (не только для текущего окна)?..);

http://infostart.ru/public/137945/ - Альтернативная реализация функции Сигнал(Beep), ничего сложного, но может и пригодится;

http://infostart.ru/public/168241/ - ВК для выполнение запросов SQL к базе данных Firebird

Делитесь ссылками в комментариях - буду пополнять безу компонент на Native API.

В данный момент хотелось бы реализацию утилиты Gold Parser, имеющуюся в Инструментах разработчика и в их мобильной версии.

Обновление от 11.01.2013: Исправлено описание (несправедливость по отношению к Miracle Native - ВК для V8, отмеченная в комментариях к публикации). Обновлена основная обработка тестирования ВК (в соответствии с комментарием 3, спасибо UncleVader).

 

 

 

Скачать файлы

Наименование Файл Версия Размер
v8utils2.zip 75
.zip 227,88Kb
10.01.13
75
.zip 227,88Kb Скачать
Исходники 52
.zip 20,34Kb
03.01.13
52
.zip 20,34Kb Скачать
v8utils.zip 50
.zip 226,81Kb
10.01.13
50
.zip 226,81Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Герман (German) 04.01.13 23:52
Gold Parser еще и в Ei используется, но как и везде к сожалению только для x32. Сделать ВК там не сложно, просто нужно заняться и тогда будет счастье и на х64
2. Герман (German) 04.01.13 23:55
ВремяБездействияПользователя, а что именно считать бездействием? если документ проводится 3 мин это 3 минуты бездействия?
3. UncleVader (UncleVader) 05.01.13 15:14
Авансом +, но хочется иметь полноценную работу в управляемом режиме.
Немного допилил управляемую форму, но часть функционала в ней так и не работает.
Прикрепленные файлы:
ТестВнешнейКомпоненты2.epf
4. Андрей Акулов (DrAku1a) 05.01.13 16:35
(2) Если за это время пользователь не разу не двинул мышью и не нажимал никаких клавиш на клавиатуре - то да!..
5. Андрей Акулов (DrAku1a) 05.01.13 16:39
Реализация контроля "забытых" сеансов состоит из нескольких этапов:
1. Периодический опрос времени бездействия;
2. Вопрос пользователю: "ты тут вообще?" с автоответом "нет" через скажем 600 секунд;
3. Завершение работы и запись в журнал регистрации события;

Если периодический опрос делается штатными средствами 1С (ПодключитьОбработчикОжидания), то он не будет выполнятьчся во время проведения документа или формирования отчета - а только по завершении операции.
6. Андрей Акулов (DrAku1a) 05.01.13 16:43
(3)Что не работает в УФ? Если честно, там почти не тестил - не возникло надобности. Но сделаю. Вот только ФоновоеСообщение() вряд ли будет там работать...

(1) эх... хотя бы исходнички GoldParser.DLL добыть...
7. UncleVader (UncleVader) 05.01.13 18:37
(6)
Вот только ФоновоеСообщение() вряд ли будет там работать
Как раз вот это и заинтересовало, но только в УФ, жаль если не заработает.
А исходники не планируется выкладывать?
8. Андрей Акулов (DrAku1a) 06.01.13 07:38
(7) Да вроде выложил уже - в отдельном файле.
9. Аркадий Кучер (Abadonna) 10.01.13 12:42
(0)
Miracle Native v8 (для любителей поизвращаться приукрасить интерфейсы);

Это ты как-то забавно только на одну часть функционала обратил внимание;)
Класс V8System:
СвойствоИмяКлиентаТерминала – имя компьютера, с которого подключена терминальная сессия
СвойствоСетевоеИмяПользователя – сетевое (а не 1С-овское) имя пользователя
СвойствоВерсия1С – версия движка, на котором запущена база
УстановитьИндикаторРакладки() – устанавливает индикатор раскладки на нижнюю панель главного окна (поддерживает только отображение раскладок RU и EN)
УстановитьТаймер(Интервал:число) – устанавливает таймер на систему с указанным интервалом, мс. Таймеру присваивается идентификатор, равный интервалу.
УдалитьТаймер(ИдентификаторТаймера:число) – удалить таймер с указанным идентификатором
СнимокЭкрана(ИмяФайлаДляСохранения) – делает снимок экрана и записывает картинку JPG в указанный файл
ВремяРаботыWindow():число – количество в минутах после запуска Windows
УстановитьКонтрольАктивности() – устанавливает упрощенную ловушку событий мыши (клик левой/правой кнопками) для оценки активности пользователя в текущем сеансе.
Генерирует внешнее событие LAST_CLICK, данные - количество в минутах после запуска Windows
ЗвукСистемногоДинамика(Частота, Длительность:число) – пискнуть системным динамиком
ВнешнееСобытие(Источник,Событие,Данные:строка) – сгенерировать произвольное внешнее событие
ЕстьПраваАдминистратора():булево – возвращает Истина, если у текущего пользователя 1С есть локальные административные права на данный компьютер
ВерсияФайла(ИмяФайла:строка):строка – возвращает версию exe,dll- файла (если таковая имеется)
Задержка(Время:число) – ненагружающаяпроцессор задержка на указанное время, мс.
СабклассингMDI() – включить сабклассинг, переопределение оконной процедуры окна MDI (только толстый клиент). Позволяет отслеживать рождения/разрушения форм 1С, а так же получать сообщения WM_COPYDATA от внешнего приложения.
Генерирует события:
FORM_CREATE, данные - строка вида Хендл;Заголовок (разделитель точка с запятой)
FORM_DESTROY, данные - строка вида Хендл;Заголовок (разделитель точка с запятой)
WM_COPYDATA, данные – переданные данные из другого приложения
СабклассингГлавногоОкна() – включить сабклассинг, переопределение оконной процедуры главного окна (только управляемое приложение). Позволяет отслеживать рождения/разрушения форм 1С, а так же получать сообщения WM_COPYDATA от внешнего приложения или другого экземпляра 1С
Генерирует события:
SDIFORM_CREATE, данные - строка вида Хендл;Заголовок (разделитель точка с запятой)
SDIFORM_DESTROY, данные - строка видаХендл;Заголовок (разделитель точка с запятой)
WM_COPYDATA, данные – переданные данные из другого приложения
ЗапуститьОтИмени(КоманднаяСтрока,ИмяПользователя,ИмяДомена,Пароль:строка) – запустить внешнее приложение, например, от пользователя с административными правами
Примечание: аналогично интерактивной команде «Запуск от имени…»
ЗапуститьИПодождать(КоманднаяСтрока,Параметры:строка,РежимПоказа:число) – запустить приложение, обозначенное в командной строке, с указанными параметрами. Режим показа – как показывать окно.
Примечание: практически аналогична оператору ЗапуститьПриложение(), но с вариантами показа окна запускаемого приложения.
МежпроцессноеТекстовоеСообщение(Хендл:число,Сообщение:строка) – послать сообщение внешнему приложению, в т.ч. другому экземпляру 1С.
Ваше приложение должно уметь обрабатывать сообщение WM_COPYDATA.
УстановитьЛовушкуМыши() – устанавливает ловушку на мышь.
ОтключитьЛовушкуМыши() – отключает ранее установленную ловушку
УстановитьЛовушкуКлавиатуры() – устанавливает ловушку на клавиатуру
При действиях с клавиатурой генерируются внешние события WM_KEYUP и WM_KEYDOWN
Данные – код клавиши
ОтключитьЛовушкуКлавиатуры() – отключает ранее установленную ловушку
УстановитьРасширеннуюЛовушкуКлавиатуры(БлокируемыеКлавиши:многострочная строка) – устанавливает ловушку на клавиатуру с блокировкой необходимых клавиш
БлокируемыеКлавиши – многострочная строка с кодами клавиш, которые необходимо блокировать.
При действиях с клавиатурой генерируются внешние события WM_KEYUP и WM_KEYDOWN
Данные – код клавиши
СписокТерминальныхСессий():многострочная строка. Возвращает многострочную строку со списком терминальных сессий. Каждая строка имеет вид:
ИдентификаторСессии;СетевойПользователь;СетевойКомпьютер;IP
ЗакрытьТерминальнуюСессию(ИдентификаторСессии:строка)- Закрывает сессию с указанным

Не говоря уж о классе V8Files ;)
10. Андрей Акулов (DrAku1a) 10.01.13 15:29
(9) ну да, согласен, недооценил! Прошу прощения! Дайте краткое описание - поправлюсь в статье.
11. Аркадий Кучер (Abadonna) 10.01.13 15:43
(10) DrAku1a, Описание в архиве и тут http://dev.1tsm.ru/project/148 и на ИС также.
Ваще-то она умеет практически все то, что заявлено у этой ВК + еще много чего ;)
И давно уже умеет
12. Андрей Акулов (DrAku1a) 10.01.13 17:04
(11) Перечитал весь перечень процедур в "MiracleNative ОПИСАНИЕ.doc" из архива на ИС. Впечатляюще!
Хотя, что касается системы - по большей части плюшки из какой-нибудь "Базы знаний Delphi" типа DRKB или типа того, но ведь их действительно тупо нету в 1С. Но у Вас есть и то, что добыто явно личным упорным трудом - изучая внутренности платформы 1С. Кроме того, как я понимаю, всё работает и в обычном и в управляемом приложении... Круто! Очень круто!
ВремяРаботыWindow():число – количество в минутах после запуска Windows
это смаливает на опечатку в названии метода ;-)

Но все-же не нашлось:
1. Методов СОН или ПАУЗА (я невнимательно читал?)
2. Счетчика бездействия для контроля неактивного сеанса (хотя его можно организовать с помощью имеющихся методов отлова событий мыши и клавиатуры).

И еще...
При написании своей ВК, я старался как можно меньше непосредственно взаимодействовать с платформой 1С, в частности с главным окном - я стараюсь сохранить целостность и стабильность платформы (и без того шаткую). Однако,ПоказатьФоновоеСообщение выводит сообщение внутри окна 1С (просто за пределами MDI-фрейма) и использует таймер для позиционирования окна (внутренними средствами delphi).
Ваша же компонента, как я понимаю, активно внедряется в интерфейсы окон 1С (а иначе такой функционал не реализовать) - а после этого система работает стабильно?..
13. Андрей Акулов (DrAku1a) 10.01.13 17:09
(11) Кстати, а исходники, как я понимаю, закрыты? ;-)
14. Аркадий Кучер (Abadonna) 10.01.13 18:39
(12) DrAku1a,
ПАУЗА

Задержка(Время:число) – ненагружающая процессор задержка на указанное время, мс.

ПоказатьФоновоеСообщение

СообщениеТрейИконки(ТекстСообщения:строка,ВремяПоказа:число)
Выводит трей- баллун с указанным сообщение на определенное время, сек.
Если ВремяПоказа=0 - на 60 сек.

Оповещение (ТекстЗаголовка,ТекстСообщения,ИмяФайлаКартинки:строка,ВремяПоказа,ЦветОкна:число)
Выводит окно оповещения по типу окна от 1С ПоказатьОповещениеПользователя() на время= ВремяПоказа, сек. Если ВремяПоказа=0 – до закрытия пользователем. При нажатии на текст окно оповещения закрывается и генерирует внешнее событие DESKTOP_ALERT_CLICK, данные – текст сообщения.

СоздатьСообщениеПользователю(ТекстСообщения:строка) – создает отдельное окно с сообщением пользователю.
СоздатьИнформОкно(ТекстСообщения:строка,ВремяПоказа:число) – создает отдельную форму информации (по типу, как в AIMP последних версий), располагающуюся вверху экрана.



Счетчика бездействия для контроля неактивного сеанса

УстановитьКонтрольАктивности() – устанавливает упрощенную ловушку событий мыши (клик левой/правой кнопками) для оценки активности пользователя в текущем сеансе.

Генерирует внешнее событие LAST_CLICK, данные - количество в минутах после запуска Windows

Соответственно и ВремяРаботыWindows - в минутах, для удобства. Оценивать неактивность в мс или сек - просто элементано неудобно.
Кстати, в тестовой базе, все эти методы задействованы.
а после этого система работает стабильно?..

А спроси у скачавших MiracleV8: Расширенная версия :)))
Я такие ВК пишу года эдак с 2002...
И никогда не публикую (и не пользую), что нестабильно
15. Андрей Акулов (DrAku1a) 10.01.13 18:49
(14) Спрашиваю! Народ, отпишитесь, кто тестил - особенно, если падало!.. У меня - ни разу, но пробовал только на толстом брате...
УстановитьКонтрольАктивности() – устанавливает упрощенную ловушку событий мыши (клик левой/правой кнопками) для оценки активности пользователя в текущем сеансе. Генерирует внешнее событие LAST_CLICK, данные - количество в минутах после запуска Windows
Счетчик бездействия - ловит не только нажатия мыши, но и малейший сдвиг курсора или нажатие клавиш на клавиатуре.
Кстати, публикацию обновил - теперь с рекламой ВК Miracle (с нее собственно и начинается).
16. Аркадий Кучер (Abadonna) 10.01.13 18:56
(15) DrAku1a,
ловит не только нажатия мыши, но и малейший сдвиг курсора или нажатие клавиш на клавиатуре.

Отказался еще на заре. Юзверь (обычный) обязательной мышью кликнет, если что-то делает.
И уж тем более на сдвиг его "ловить"... Ну, двиганул, случайно.
P.S. Пресловутая тетя Маша запустила 1С сама не знает зачем (на всяк случай), потом бумажки перебирала или пыль со стола стирала - вот тебе и сдвиг ;)
У меня - ни разу, но пробовал только на толстом брате...

Ты, видать, Native тестил, а я про COM - MiracleV8, а той уж сто лет в обед. А Native, как и написано в описании,
наследница вышеупомянутой. Да еще я до фига от предка выкинул, хотя бы потому, что та еще и 7.7 поддерживала.
И оставил в Native только то, что мне действительно надо.
17. Аркадий Кучер (Abadonna) 10.01.13 19:20
(0) Плюс ставить не буду, а то скажут "за что кукушка..." :)))
Но в уме плюс, полный одобрямс!
18. Андрей Акулов (DrAku1a) 10.01.13 19:20
(16) Одна пресловутая тетя Маша - один сеанс, погоды не делает... Да и все равно через какое-то время будет отключена. Так то я выкидываю в основном тех, кто на ночь открытой 1С-ку оставляет... Еще и в журнал регистрации записываю событие - потом таких наказываю.
19. Аркадий Кучер (Abadonna) 10.01.13 19:25
(18) DrAku1a,
кто на ночь открытой 1С-ку оставляет...

Дык и я про то же! Если на ночь оставил, контроля клика вполне достаточно.
А я всех гадов на пару часов сажаю (а иногда и на полчаса), ибо не фиг:)) А то родные проггеры в нашей родной базе и то умудряются "забыть".
20. Андрей Акулов (DrAku1a) 11.01.13 02:02
(19) Аналогично. Хотя у нас на ночь прогеры порой важные расчеты оставляют...
21. Олег Шалимов (CaSH_2004) 16.01.13 18:13
+ за профессиональное и доступное оформление/описание
> Я так понимаю ФоновоеСообщение (Заголовок, ТекстСообщения) не имеет никаких настроек типа ЦветФона, Картинка, Параметры шрифта? Всегда будет как на рисунке? Что за зеленая стрелка справа?
> Было бы удобно если были бы скриншоты результатов всех функций
22. Юрий Осипов (yuraos) 14.03.13 07:19
Я смотрю тут всякие вкусности реализованны,
что-то навроде FormEx.dll для 1с-7.7

Люблю интерфейсные плюшки!
Их так не хватает в 1С, особенно в управляемом интерфейсе.

Скажите
1) Может ли ваша ВК управлять расположением окна формы?
Ширину и высоту ее изменять можно,
Но иногда хочется вершний левый угол окна подогнать
к какому-нибудь из элементов управления в другом окне.
2) Мне не нравится как отрабатывается метод Форма::ВыбратьИзМеню().
Список выбора выравнивается по верхнему левому углу
элемента управления, для которого метод вызывается.
Иногда хотелось бы видеть его около курсора мыши,
аналогично варианту без привязки к элементу управления
у метода Сервис::ВыбратьЗначение() у ВК FormEx.dll.
23. Андрей Акулов (DrAku1a) 14.03.13 07:29
(21) Настроек действительно нет никаких - реализовано только так, как на картинке. Но ведь исходники прилагаются - никто не мешает Вам это дело исправить ;-)
(22) ни 1, ни 2 не реализовано - но вроде, реализовать то не сложно... но я бы для таких целей использовал VBScript...
24. Юрий Осипов (yuraos) 14.03.13 15:14
(23)

ни 1, ни 2 не реализовано - но вроде, реализовать то не сложно... но я бы для таких целей использовал VBScript...


а можно по-подробнее в порядке ликбеза
:)
25. Александр Прокопенко (babylon_5) 29.04.13 18:45
А можно в ВК добавить возможность отправлять какое-либо значение на LPT? Чтобы определенную линию данных порта на какое-то время переключить 0-1.
26. Andrey (kentavr27) 17.10.14 00:04
Чего-то я недопонял...
выложено 2 архива (не считая исходников). v8utils2.zip и v8utils.zip
Обработки в этих архивах разные, но DLL-ки абсолютно одинаковые (от 24.09.2012 15:35 размер то же одинаковый)
Если "Обновление от 11.01.2013" то чего ж файл 12-ым годом датирован?
Обработки изначально нерабочие (смотрю в управляемом приложении)
{Форма.ФормаОтчета.Форма(25)}: Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)
АдресВК = ПоместитьВоВременноеХранилище(ОбъектВК, ЭтаФорма.УникальныйИдентификатор);
по причине:
Переданное значение не может быть помещено во временное хранилище

Сделал через переменную модуля. Дошли до паузы... Метод объекта не обнаружен (Пауза)
ОбъектВК.Пауза(3000);
Бездействие: Поле объекта не обнаружено (НаблюдениеВремениБездействияАктивно)
Фоновое сообщение: Метод объекта не обнаружен (ФоновоеСообщение)
Инфо о сеансе: Метод объекта не обнаружен (НомерСоединенияИнформационнойБазы)

Это как? Не ту версию выложил, или это шутка такая была?
27. Андрей Акулов (DrAku1a) 17.10.14 02:01
(26)
Если "Обновление от 11.01.2013" то чего ж файл 12-ым годом датирован?
DLL-ка не изменялась.
Что касается тонкого клиента - там совершенно другая система поставки ВК (нужно делать комплект для Windows+Linux+Плагины для браузеров + описание всего этого в XML), но 1С не выдает ошибку при попытке зарегестрировать ВК - она просто возвращает неопределено.
28. Andrey (kentavr27) 17.10.14 17:16
(27) DrAku1a, да она регистрируется, вот только во временное хранилище помещать такой объект нельзя. А как на счет отсутствия вышеперечисленных методов? (и в тонком, и в толстом поведение одинаково)
29. Андрей Акулов (DrAku1a) 18.10.14 02:56
(28) kentavr27, протестировал в толстом клиенте - все методы есть и работают. Проверяйте, что возвращает
ОбъектВК = Новый("AddIn.DemoLib.ExecExtention")
если неопределено - то надо разбираться в причинах, почему 1С не грузит компоненту.
Прикрепленные файлы:
30. А. В. (Omicron) 03.12.15 08:27
Вдруг тут ещё кто-то есть.
Я хотел воспользоваться компонентой для отслеживания времени простоя сеанса, но либо она не предназначена для этого, либо я не понимаю, что нужно делать.
"Глобально" объект компоненты никак ведь не объявить. Если опрашивать её в ОбработчикеОжидания(), то экземпляр каждый раз создаётся новый.

Делал примерно такой код:
	АдресХранилищаКомпоненты = Инициализация.ПодключитьКомпонентуСервер();
	ПодключитьВнешнююКомпоненту(АдресХранилищаКомпоненты, "DemoLib");
	Компонент = Новый ("AddIn.DemoLib.ExecExtention");
	Компонент.НаблюдениеВремениБездействияАктивно = Истина;
	ВремяПростояРазрешённое = 15;
	ВремяПростояНакопленное	= Инициализация.ВернутьВремяПростоя(); 
	ВремяПростояТекущее = Компонент.ВремяБездействияПользователя; 
	Если ВремяПростояТекущее + ВремяПростояНакопленное > ВремяПростояРазрешённое Тогда 
		Инициализация.УстановитьВремяПростоя(0);
		ЗаблокироватьРаботуПользователя();
	Иначе
		Инициализация.УстановитьВремяПростоя(ВремяПростояНакопленное + ВремяПростояТекущее);
	КонецЕсли;
...Показать Скрыть


Время простоя пишется в параметр сеанса.
В момент вызова метод ВремяБездействияПользователя возвращает 0.
Что я делаю не так?
31. Андрей Акулов (DrAku1a) 04.12.15 03:47
(30)
"Глобально" объект компоненты никак ведь не объявить.

На форме - можно попробовать так:
&НаКлиенте;
Перем Компонент;

32. А. В. (Omicron) 07.12.15 06:34
(31) Да. Но не прописывать же объявление компоненты во всех формах конфигурации.
Я думал, можно как-то инициализировать её при начале работы системы, чтобы она постоянно работала и подсчитывала время простоя сеанса пользователя, а в ОбработкеОжидания я бы это время получал, но, похоже, это невозможно.
33. Андрей Акулов (DrAku1a) 08.12.15 02:40
(32) Может, сделать для неё глобальную переменную в модуле сеанса управляемого приложения?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа