132 документа
← К списку

Глава 31. Отладка и тестирование прикладных решений

страница

Глава 31. Отладка и тестирование прикладных решений

31.1. Общая информация

Отладка ‑ этап разработки прикладного решения, в процессе которого происходит обнаружение, локализация и устранение ошибок в прикладном решении.

В процессе отладки можно пользоваться отладчиком (см. здесь), использовать результаты замера производительности (см. здесь), использовать механизмы отображения вызовов сервера (см. здесь), имитировать задержки при вызове сервера (см. здесь). Также существует возможность выполнить сценарий автоматизированного тестирования (см. здесь). При этом под тестированием понимается процесс испытания программного продукта, предназначенный для выявления ситуаций, когда поведение прикладного решения является не соответствующим спецификациям.

В данной главе приводится описание инструментов платформы, которые помогают в процессе отладки прикладного решения и его тестирования.

31.2. Отладчик

31.2.1. Общая информация

Отладчик ‑ инструмент, облегчающий разработку и отладку программных модулей системы «1С:Предприятие». Отладчик предоставляет следующие возможности:

● возможность отладки выполнения модулей, как в файловом, так и в клиент-серверном варианте, фоновых заданий;

● пошаговое выполнение модуля (см. здесь);

● расстановка точек останова (см. здесь);

● прерывание и продолжение выполнения модуля;

● возможность отладки нескольких модулей одновременно;

● вычисление выражений для анализа состояния переменных (см. здесь);

● изменение значений переменных во время отладки (см. здесь);

● просмотр стека вызовов процедур и функций (см. здесь);

● возможность остановки по возникновению ошибки;

● возможность редактирования модуля в процессе отладки.

Отладка может выполняться с помощью двух различных протоколов отладки: по TCP/IP (см. здесь) и по HTTP (см. здесь). Возможности, предоставляемые обоими протоколами отладки, достаточно близки. Дальнейший текст относится одинаково к обоим протоколам, если явным образом не оговорены те или иные особенности или ограничения.

В отладчике используется понятие предмета отладки. Предмет отладки ‑ это контекст встроенного языка, характеризуемый совокупностью параметров:

● имя пользователя, от имени которого исполняется код на встроенном языке;

● тип предмета отладки;

● номер используемого сеанса;

● сетевое имя компьютера, на котором исполняется код на встроенном языке (для протокола отладки TCP/IP);

● номер IP-порта, через который отладчик управляет работой предмета отладки (для протокола отладки TCP/IP);

● имя информационной базы (для протокола отладки HTTP).

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

К типам предметов отладки относятся:

● COM-соединение ‑ код на встроенном языке, исполняемый через внешнее соединение.

● HTTP-сервис ‑ код на встроенном языке, исполняемый при вызовах методов HTTP-сервисов.

● WebSocket ‑ код на встроенном языке, исполняемый при вызовах обработчиков событий WebSocket-клиентов.

● Web-сервис ‑ код на встроенном языке, исполняемый при вызовах методов Web-сервисов.

● Автономный сервер (мобильный клиент с автономным режимом)* ‑ код на встроенном языке, который исполняется на мобильном устройстве, в автономном сервере мобильного клиента.

● Веб-клиент ‑ код на встроенном языке, исполняемый в веб-клиенте.

● Клиент (мобильное приложение)* ‑ код на встроенном языке, исполняемый в клиентском приложении, на мобильном устройстве.

● Мобильный клиент* ‑ код на встроенном языке, исполняемый в мобильном клиенте.

● Сервер (мобильное приложение)* ‑ код на встроенном языке, который исполняется на мобильном устройстве, в приложени на мобильной платформе, на сервере, в файловом варианте.

● Сервер (файловый вариант) ‑ код на встроенном языке, исполняемый на сервере, в файловом варианте.

● Сервер ‑ код на встроенном языке, исполняемый на сервере.

● Стандартный интерфейс OData ‑ код на встроенном языке, исполняемый при доступе к информационной базе через стандартный интерфейс OData.

● Толстый клиент ‑ код на встроенном языке, исполняемый в толстом клиенте.

● Тонкий клиент ‑ код на встроенном языке, исполняемый в тонком клиенте.

● Фоновое задание (мобильное приложение)* ‑ код на встроенном языке, исполняемый в фоновом задании (в файловом варианте) на мобильном устройстве.

● Фоновое задание (файловый вариант) ‑ код на встроенном языке, исполняемый в фоновом задании (в файловом варианте).

● Фоновое задание ‑ код на встроенном языке, исполняемый в фоновом задании.

Предметы отладки, помеченные символом "*" используются только в том случае, если применяется протокол отладки по HTTP.

Во время отладки, для указания адресов компонентов системы, могут использовать как символические адреса (например, pc-``name) так и IP-адреса (например, 192.168.1.1). Во время работы подсистемы «1С:Предприятия» занимаются преобразованием символических имен в IP-адреса, например, для получения IP-адреса отладчика, который указан с помощью символического имени. Для этого используются специализированные сервисы используемых операционных систем (DNS). Желательно, чтобы при разрешении символических имен не возникало неоднозначностей.

В зависимости от используемого протокола отладки, «1С:Предприятие» по-разному организует взаимодействия компонентов системы. Однако, вне зависимости от используемого протокола, при работе отладчика используются некоторые порты протокола, лежащего в основе работы отладчика. Если на компьютере запрещено использование необходимых (для отладки) портов (порты «закрыты»), то отладка будет невозможна. Также может наблюдаться следующее:

● увеличение времени запуска клиентского приложения;

● замедление работы рабочего процесса сервера (rphost) «1С:Предприятия» во время работы, если сервер работает в режиме отладки (ключ ‑debug).

При работе отладчика используются следующие порты:

● При использовании протокола отладки TCP/IP: 1560-1591 (по умолчанию). Диапазон портов может быть изменен. Порты используются и на стороне отладчика и на стороне предмета отладки.

● При использовании протокола отладки HTTP: порт сервера отладки, который явно указывается при запуске. При работе в клиент-серверном варианте сервер отладки использует порт 1550 (по умолчанию). При работе в файловом варианте порт назначается явным образом или выбирается конфигуратором из интервала портов 1560-1591 (по умолчанию). Диапазон портов может быть изменен. Порт используется только на компьютере, где запущен сервер отладки.

При работе по протоколу отладки TCP/IP, диапазон портов может быть изменен с помощью параметров настройки используемых компонентов системы или конфигурационных файлов (debugcfg.``xml, см. здесь). Используемые порты (один или диапазон) должны быть разрешены для использования («открыты») на компьютерах, которые участвуют в процессе отладки. Для протокола отладки TCP/IP это все компьютеры, участвующие в отладке, а для протокола отладки HTTP ‑ это компьютер сервера отладки.

31.2.2. Использование отладчика

31.2.2.1. Протокол отладки TCP/IP

31.2.2.1.1. Общая схема

Чтобы иметь возможность отлаживать код на встроенном языке, нужно обеспечить работу приложения, в котором исполняется код, в отладочном режиме. Для работы режима отладки необходимо, чтобы на компьютере была включена поддержка используемого сетевого протокола TCP/IP.

Если режим 1С:Предприятие не запущен, то для начала отладки нужно выбрать пункт Отладка``‑ Начать отладку. Конфигуратор запускает клиентское приложение в отладочном режиме.

Если в настройках конфигуратора установлен режим разрешения отладки или указано, что отладка будет начата при запуске (окно настроек открывается с помощью команды Сервис``‑ Параметры закладка Запуск 1С:Предприятия, см. здесь), то для начала отладки также можно использовать режим запуска, выполняемый командой Сервис``‑ 1С:Предприятие. Если требуется выполнить отладку кода, выполняемого определенным пользователем, то в форме настроек можно указывать пользователя, от лица которого запускается отладочный режим.

Отладчик и предметы отладки при поиске друг друга используют IP-адрес 127.0.0.1. Для устойчивой работы службы транспорта данных необходимо определить соответствие адреса 127.0.0.1 символическому имени localhost. Для этого можно в файл C:\``Windows\``system32\``drivers\``etc\``hosts вписать соответствие:

Копировать в буфер обмена

127.0.0.1 localhost

31.2.2.1.2. Настройка приложения для работы в отладочном режиме
Общая информация

В данном разделе считается, что конфигуратор настроен для отладки с использованием протокола отладки TCP/IP. Настройка конфигуратора выполняется с помощью диалога параметров конфигуратора (см. здесь). Далее необходимость выполнения такой настройки отдельно не упоминается.

Отладка клиентского приложения

Для установки отладочного режима можно использовать следующие варианты запуска:

● В режиме Конфигуратор в форме настроек (меню Сервис``‑ Параметры), на закладке Запуск 1С:Предприятия``‑ Дополнительные установить флажок Устанавливать режим разрешения отладки, далее выполнить подключение предмета отладки. Также можно установить флажок Начинать отладку при запуске; в этом случае при запуске системы «1С:Предприятие» подключение будет выполнено автоматически. При этом для отладки должен использоваться протокол TCP/IP (диалог Сервис``‑ Параметры, закладка Отладка, свойство Протокол отладки должно быть установлено в значение Отладка по протоколу``TCP/``IP).

● Открыть информационную базу в режиме 1С:Предприятие с ключом командной строки /``debug ‑``tcp (отладочный режим).

● Если запущено клиентское приложение, то в форме настроек (открыть с помощью меню Сервис``‑ Параметры) установить отладочный режим. Для этого свойство Отладка в текущем сеансе необходимо установить в значениеРазрешена (протокол``TCP/``IP). Следует иметь в виду, что после применения настроек изменить значение свойства нельзя.

Отладка кода на сервере (включая автономный)

В отладочном режиме загрузка объектов конфигурации производится по мере необходимости, а не при начале работы системы, как в обычном режиме работы сервера. Это ускоряет процесс запуска «1С:Предприятия» при изменении конфигурации, то есть ускоряет процесс разработки.

Также следует учитывать, что в отладочном режиме производительность системы будет ниже, чем при обычной работе. Поэтому не рекомендуется использовать отладочный режим работы сервера для реальной работы пользователей.

Сервер как приложение

Если сервер «1С:Предприятия» работает в режиме приложения (в любой ОС), то следует остановить сервер и перезапустить его так, чтобы в числе параметров командной строки был параметр /debug.

Копировать в буфер обмена

ragent /debug <остальные параметры командной строки>

Сервер как служба ОС Windows

Если сервер работает как служба ОС Windows, то необходимо выполнить следующие операции:

1. Остановить сервер «1С:Предприятия».

Копировать в буфер обмена

ragent /stop

2. Выполнить повторную регистрацию агента сервера в качестве службы Windows таким образом, чтобы в числе параметров команды ragent был параметр /debug.

Копировать в буфер обмена

ragent /instsrvc /debug <остальные параметры командной строки>

3. Запустить сервер «1С:Предприятия».

Копировать в буфер обмена

ragent /start

Сервер как сервис ОС Linux

Если в отладочный режим необходимо перевести сервер «1С:Предприятия» работающего в режиме сервиса в ОС Linux, то необходимо выполнить следующие операции:

1. Остановить сервер «1С:Предприятия».

Копировать в буфер обмена

systemctl stop srvc1v8-A.B.C.D@instanceName

2. В конфигурационном файле сервиса (srvc1v8-A.B.C.D@instanceName) установить значение параметра SRV1CV8_DEBUG в значение -debug.

Копировать в буфер обмена

SRV1CV8_DEBUG=-debug

3. Сохранить конфигурационный файл.

4. Запустить сервер «1С:Предприятия».

Копировать в буфер обмена

systemctl start srvc1v8-A.B.C.D@instanceName

В примерах командной строки выше в данном разделе используются следующие обозначения:

● A.B.C.D ‑ полный номер версии системы «1С:Предприятие».

● instanceName ‑ имя экземпляра сервиса системы «1С:Предприятие».

Автономный сервер

Для того, чтобы включить режим отладки в автономном сервере, необходимо использовать команду --``debug или секцию debug конфигурационного файла автономного сервера. Если автономный сервер запущен без режима отладки, необходимо остановить автономный сервер, изменить командную строку запуска (или конфигурационный файл) и запустить автономный сервер снова.

Копировать в буфер обмена

ibsrv <текущие параметры командной строки> --debug=tcp

В конфигурационном файле автономного сервера для управления отладкой используется секция debug следующего вида:

Копировать в буфер обмена

debug: type: tcp

Смотри также:

● Запуск агента сервера в ОС Linux (см. здесь).

● Запуск агента сервера в ОС Windows (см. здесь).

● Отладка в автономном сервере (см. здесь).

● Конфигурационный файл кластера серверов в ОС Linux (см. здесь).

● Конфигурационный файл автономного сервера (см. здесь).

Отладка внешнего соединения

Для указания внешнему соединению необходимости запуска в отладочном режиме используются настройки, размещенные в xml-файле comcntrcfg.``xml, который расположен в каталоге конфигурационных файлов системы «1С:Предприятие». Если файл не найден, приложение открывается в обычном режиме.

Пример файла comcntrcfg.xml:

Копировать в буфер обмена

Подробнее о файле comcntrcfg.xml можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Если для элемента debug указан атрибут debuggerURL, то к моменту обращения к внешнему соединению по указанному URL должен быть доступен конфигуратор. В противном случае исполнение внешнего соединения будет приостановлено и система будет ожидать доступность конфигуратора. При этом для продолжения работы в конфигураторе следует подключить необходимый предмет отладки.

Отладка Web-сервиса, HTTP-сервиса и доступа через стандартный интерфейс OData

Для указания сервису необходимости запуска в отладочном режиме (только для файлового варианта информационной базы) используются настройки, размещенные в файле default.``vrd, который должен располагаться в каталоге виртуального приложения. В этом файле необходимо указать элемент debug, отсутствие которого означает невозможность отладки Web-сервиса.

Пример элемента debug из файла default.vrd:

Копировать в буфер обмена

Подробнее о файле default.``vrd можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Если для элемента debug указан атрибут url, то в момент обращения к сервису, по указанному URL должен быть доступен конфигуратор. В противном случае исполнение сервиса будет приостановлено и система будет ожидать доступность конфигуратора. При этом для продолжения работы в конфигураторе следует подключить необходимый предмет отладки.

Для необходимости отладки сервиса в клиент-серверном варианте информационной базы следует включить режим отладки на сервере с помощью ключа командной строки debug. Подробнее о ключах командной строки запуска сервера «1С:Предприятия» можно посмотреть в книге 1С:Предприятие 8.3. "Клиент-серверный вариант. Руководство администратора".

Примечание. Для отладки HTTP-сервиса и работы со стандартным интерфейсом OData не рекомендуется использовать веб-браузер Microsoft Internet Explorer 9.0, т. к. в этом веб-браузере имеются ошибки кодирования URL.

Отладка веб-клиента

Для установки отладочного режима можно использовать следующие варианты запуска:

● В режиме Конфигуратор в форме настроек (меню Сервис``‑ Параметры), на закладке Запуск 1С:Предприятия``‑ Дополнительно установить флажок Устанавливать режим разрешения отладки, далее выполнить подключение предмета отладки. Также можно установить флажок Начинать отладку при запуске. В этом случае при запуске системы «1С:Предприятие» подключение будет выполнено автоматически.

● Открыть информационную базу в режиме 1С:Предприятие с ключом командной строки debug (отладочный режим):

Копировать в буфер обмена

http://localhost/demo?debug=tcp

● Открыть информационную базу в режиме 1С:Предприятие с ключами командной строки debug и debuggerurl="``IP-адрес":

Копировать в буфер обмена

http://localhost/demo?debug=tcp&debuggerurl="127.0.0.1"

● IP-адрес ‑ это адрес отладчика. В случае такого запуска отладчик, расположенный по адресу 127.0.0.1, выполнит автоматическое подключение предметов отладки (отладчик должен быть запущен по указанному адресу).

Если необходимо включить отладку серверной части файлового варианта информационной базы, то это можно сделать двумя способами:

● Запустить отладку непосредственно из конфигуратора, как указано выше. В этом случае режим отладки для серверной части файлового варианта, расположенной на компьютере с веб-клиентом, включится автоматически.

● Включить режим отладки с помощью файла default.``vrd, который должен располагаться в каталоге виртуального приложения. В этом файле необходимо указать элемент debug, отсутствие которого означает невозможность отладки Web-сервиса.

Пример элемента debug из файла default.vrd:

Копировать в буфер обмена

Также следует учитывать, что в отладочном режиме производительность системы будет ниже, чем при обычной работе. Поэтому не рекомендуется использовать отладочный режим работы серверной части файлового варианта работы для реальной работы пользователей.

Подробнее о файле default.``vrd можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Во время отладки веб-клиента нужно помнить следующие особенности:

● не поддерживается возможность интерактивного включения режима отладки;

● не поддерживается автоматический поиск предметов отладки на удаленных компьютерах при отладке веб-клиента для файлового варианта информационной базы;

● не поддерживается активизация конфигуратора из веб-клиента в процессе отладки;

● не поддерживается отладка внешних отчетов и обработок;

● в случае принудительного прекращения работы веб-клиента из отладчика, прекращается работа того процесса веб-браузера, который был запущен при старте веб-клиента из конфигуратора. Однако если веб-клиент стартует во вкладке уже работающего веб-браузера, то принудительного закрытия вкладки не происходит, а в окне отлаживаемого веб-клиента открывается диалоговое окно с информацией о том, что веб-клиент завершается по требованию отладчика.

**Внимание! Для отладки веб-клиента (в том числе и клиентского программного кода) в клиент-серверном варианте необходимо, чтобы сервер «1С:Предприятия» был запущен в отладочном режиме (ключ debug).

Примечание. Не рекомендуется использовать отладку веб-клиента на низкоскоростных каналах связи.**

Клиент-серверный вариант работы подробнее описан в книге 1С:Предприятие 8.3. "Клиент-серверный вариант. Руководство администратора".

Отладка внешней обработки (отчета)

Для отладки внешнего отчета (обработки) необходимо соблюдение двух условий:

1. Внешняя обработка (отчет) открыта в клиентском приложении из конкретного места файловой системы;

2. Конфигуратор, который обслуживает предмет отладки с отлаживаемой внешней обработкой (отчетом), имеет доступ именно к тому файлу внешней обработки (отчета), который открыт клиентским приложением.

Если эти условия не выполняются ‑ отладка внешней обработки (отчета) будет невозможна. В частности, не поддерживается отладка внешних обработок (отчетов), расположенных в информационной базе. В этом случае рекомендуется извлечь внешнюю обработку (отчет) из информационной базы на время отладки.

31.2.2.1.3. Подключение предметов отладки

Для выполнения отладки модуля нужно, чтобы предмет отладки был подключен. Для управления подключением нужно выбрать пункт Отладка``‑ Подключение. На экран выводится окно для выбора предмета отладки. В список попадают только те предметы отладки, для которых выполняются следующие условия:

● Отладчик и предмет отладки имеют одинаковый идентификатор информационной базы:

● Для файлового варианта информационной базы формируется в момент первого обращения к базе с помощью клиентского приложения (включая доступ конфигуратором). При следующем первом обращении идентификатор будет сформирован заново. Под «первым обращением» понимается не абсолютно первое обращение в момент создания информационной базы, а первое обращение после того, как к информационной базе не осталось соединений.

● Для клиент-серверного варианта информационной базы используется идентификатор информационной базы в кластере серверов «1С:Предприятия».

● В приложении должна быть включена возможность отладки (для сервера ‑ флажок debug, для клиентского приложения ‑ соответствующий параметр командной строки, или свойство диалога настройки клиентского приложения, или корректно настроенный конфигурационный файл).

Предметы отладки доступны для подключения на протяжении интервала времени существования сеанса, в рамках которого работает конкретное фоновое задание, Web-сервис или внешнее соединение. Это интервал может длиться очень незначительно время, и в этом случае можно воспользоваться настройкой автоматического подключения предметов отладки.

Примечание. При подключении предмета отладки в списке пользователей информационной базы должны существовать пользователи, которые могут быть аутентифицированы как в конфигураторе, так и в предмете отладки.

Обычно список содержит одну строку с указанием на запущенную в режиме 1С:Предприятие конфигурацию. Если запущено несколько приложений системы «1С:Предприятие» с данной конфигурацией, то список может содержать несколько строк.

Рис. 582. Подключение предметов отладки

Если флажок Искать предметы отладки на удаленном компьютере установлен, то в поле, расположенном справа от флажка, следует ввести имя компьютера (или его сетевой адрес) или выбрать имя из ранее вводимых имен. При этом в список доступных предметов отладки будут добавлены предметы отладки, найденные на удаленном компьютере. Список подключенных предметов отладки будет содержать те предметы отладки, которые уже подключены к отладчику.

Нажатие кнопки Подключить подключает к отладчику выбранный предмет отладки. В окне подключения это отображается переносом предмета отладки из списка доступных в список подключенных предметов отладки.

Для исключения предмета отладки нужно указать его в списке подключенных и нажать кнопку Отключить. Для отключенного предмета отладки собственно отладка больше не выполняется. В частности, это означает, что точки останова, установленные в отключенных предметах отладки, не будут «срабатывать» при прохождении выполнения через них. В окне подключения это отображается переносом предмета отладки из списка подключенных в список доступных предметов, и к нему можно повторно подключиться.

Для закрытия предмета отладки следует нажать кнопку Завершить, для останова в месте выполнения ‑ кнопку Остановить.

Чтобы открыть диалог настройки диапазона, следует нажать кнопку Настройки. Диапазон определяет границы, в рамках которых отладчик ищет предметы отладки на текущем или указанном компьютере.

Рис. 583. Настройка отладчика

В поле Отладчик диалога содержатся настройки текущего отладчика. Их можно использовать, например, в командной строке при запуске клиентского приложения в качестве параметра ключа командной строки /``debuggerurl или в xml-файле с настройками отладки для внешнего соединения или Web-сервиса.

Для автоматического подключения предметов отладки на сервере системы «1С:Предприятие», работающем в отладочном режиме, можно воспользоваться диалогом Автоматическое подключение и отметить в нем соответствующие типы предметов отладки.

Рис. 584. Настройка автоматического подключения

Указанные настройки автоматического подключения действуют только для клиент-серверной информационной базы, кроме пункта Фоновые задания, который позволяет автоматически подключать фоновые задания, как в клиент-серверном, так и в файловом варианте использования информационной базы. Если необходимо отлаживать различные сервисы (WEB-, HTTP‑ и OData-) в файловом варианте информационной базы, то отладку в этом случае следует настраивать в диалоге публикации на веб-сервере.

Автоматическое подключение фонового задания, выполняющегося клиентским приложением или расширением веб-сервера, данным диалогом регулируется опосредованно. Для отладки фоновых заданий необходимо одновременное выполнение нескольких условий:

● Для тонкого или толстого клиента:

● Разрешить отладку в клиентском приложении;

● Разрешить автоматическое подключение к фоновым заданиям в диалоге настройки автоматического подключения.

● Для веб-сервера:

● В файле публикации (default.``vrd) разрешить отладку для отлаживаемой информационной базы;

● Разрешить автоматическое подключение к фоновым заданиям в диалоге настройки автоматического подключения.

31.2.2.1.4. Дополнительная настройка диапазона портов

Если все порты для подключения в стандартном диапазоне заняты, существует возможность указать дополнительный диапазон. Этот диапазон настраивается в файле debugcfg.``xml, расположенном в каталоге конфигурационных файлов компьютера, на котором расположен конфигуратор, отлаживаемое клиентское приложение или выполняется внешнее соединение. Если диапазон портов изменен на компьютере с отлаживаемым приложением, то эти же порты следует установить и для конфигуратора, из которого выполняется отладка (если отлаживаемое приложение и конфигуратор расположены на разных компьютерах). Если файл не найден, то для отладки используются порты из стандартного диапазона (1560:1591). Предметы отладки на сервере используют те же порты, что и процессы сервера: rmngr и rphost. Указания дополнительных диапазонов портов для предметов отладки на сервере не требуется.

Пример:

Копировать в буфер обмена

Подробнее о файле debugcfg.``xml можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

31.2.2.2. Протокол отладки HTTP

31.2.2.2.1. Общая схема

Чтобы иметь возможность отлаживать код на встроенном языке, нужно обеспечить работу приложения, в котором исполняется код, в отладочном режиме. Для работы режима отладки необходимо, чтобы на компьютере была включена поддержка сетевого протокола TCP/IP и не заблокирована работа по протоколу HTTP (различные прокси-сервера, брандмауэры и т. д.).

При использовании протокола отладки HTTP, для отладки используется специальный сервер отладки (dbgs). Сервер отладки выступает в качестве координатора процесса отладки:

● Хранит списки предметов отладки, доступных для использования и списки подключенных предметов отладки.

● Транслирует команды по управлению процессом отладки в команды предметам отладки (остановиться, продолжить исполнение и т. д.).

● Хранит список пользователей, которые могут выполнять отладку, и права этих пользователей на выполнение некоторых действий во время отладки.

Общую схему отладки, с использованием сервера отладки, можно представить следующим образом:

Рис. 585. Общая схема работы

Прямой передачи информации между отладчиком и предметами отладки нет. Всё взаимодействие организуется через сервер отладки. На сервере отладки организована очередь сообщений, через которую отладчик и предметы отладки передают информацию друг другу.

И отладчик, и предметы отладки взаимодействуют с сервером отладки по протоколу HTTP. Расположение предмета отладки не имеет значения для успешной работы механизма.

Взаимодействие с сервером отладки выполняется по инициативе отладчика и предметов отладки. Во время работы организуется два соединения между сервером отладки и каждым участником процесса (предметы отладки и отладчик). По одному соединению предмет отладки сообщает серверу отладки о своем состоянии (достигли точки останова, выполнили шаг и т. д.). По другому соединению предмет отладки (или отладчик) узнает, не появилась ли для него информация на сервере отладки. И если появилась ‑ получить эту информацию.

Таким образом, взаимодействие получается одностороннее. Информация всё время передаётся с сервера отладки в отладчик, и в предметы отладки. При этом необходимо понимать, что если предмет отладки не запущен в режиме отладки ‑ сервер отладки не сможет установить с ним соединение. В частности, это означает, что невозможно отлаживать код на сервере «1С:Предприятия», если сервер не запущен в режиме отладки.

Сервер отладки может обслуживать отладку произвольного количества предметов отладки из разных информационных баз. Сопоставление отладчика и предметов отладки на сервере отладки осуществляется на основе имени информационной базы. Эти имена различны и зависят от варианта использования информационной базы:

● Клиент-серверный вариант ‑ используется имя информационной базы, как оно задано в кластере серверов «1С:Предприятия».

● Файловый вариант ‑ используется предопределенное имя DefAlias (возможность изменения этого имени не поддерживается). Таким образом, в случае файловой информационной базы, сервер отладки следует использовать для одновременной работы только с отладчиком и предметами отладки из одной файловой информационной базы. При запуске конфигуратора для файловой информационной базы, автоматически запускается сервер отладки, соответствующий используемой информационной базе. При запуске клиентского приложения из конфигуратора, ему передается адрес запущенного сервера отладки для этой информационной базы. Таким образом, при работе с двумя файловыми информационными базами двумя запущенными конфигураторами, будут использоваться два сервера отладки, каждый для своей информационной базы. При этом при запуске клиентского приложения не из конфигуратора, необходимо самостоятельно указать правильный адрес сервера отладки в командной строке клиентского приложения (при необходимости выполнения отладки).

В конфигураторе предоставляется возможность настройки имени информационной базы, с которым отладчик регистрируется на сервере отладки (см. здесь). Эта возможность требуется для случаев, когда в конфигураторе открыта одна информационная база, но требуется отлаживать работу предметов отладки из другой серверной информационной базы с известным именем на известном сервере отладки.

Отдельно остановимся на том, что происходит при попадании на точку останова при использовании сервера отладки. После того, как сервер отладки получил сообщение о том, что определенный предмет отладки остановился на точке останова, он рассылает сообщение о необходимости остановиться всем подключенным предметам отладки. Каждый предмет отладки исполняет данную команду до начала исполнения очередной «своей» строки кода на встроенном языке. «Остановка» подключенных предметов отладки происходит асинхронно: предметы отладки текущего сеанса (это клиентское приложение и серверная часть, обслуживающая это клиентское приложение) остановятся синхронно, а момент остановки остальных предметов отладки в общем случае определить невозможно. После того, как в отладчике выполнена команда, например, сделать шаг, сервер отладки сообщает всем подключенным предметам отладки, что они могут дальше выполнять свою работу. При этом в активном предмете отладки выполняется указанная команда, а операцию «сделать шаг» можно представить (с некоторым приближением) как запуск предмета отладки на выполнение с установкой точки останова на следующей строке. После того, как активный предмет отладки выполнил затребованную операцию, он сообщает об этом серверу отладки и процесс повторяется.

Из этого описания следуют два важных факта:

1. Невозможна одновременная пошаговая отладка различных предметов отладки, связанных с одной информационной базой (в клиент-серверном варианте) или с одним сервером отладки (в файловом варианте).

2. При одиночном шаге в текущем предмете отладки, невозможно предсказать (в общем случае), в каком месте произойдет остановка в остальных подключенных предметах отладки. В рамках данного утверждения можно считать, что клиентский и серверный предметы отладки, связанные с одним номером сеанса, выступают как один предмет отладки.

Также стоит упомянуть возможность указывать, какие пользователи могут использовать сервер отладки и в каких информационных базах можно выполнять отладку. Эта возможность, в основном, будет востребована в тех случаях, когда сервер отладки используют в качестве внешнего сервера отладки для работы с удаленными информационными базами. В этом случае серверу отладки (через параметры командной строки) передается конфигурационный файл, который содержит следующую информацию:

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

● Список пользователей (для каждой информационной базы), которые могут подключаться к серверу отладки.

● Полномочия каждого пользователя ‑ что пользователь может делать во время отладки прикладного решения.

При подключении нового пользователя, сервер отладки требует, чтобы пользователь указал имя пользователя и пароль, так, как указано в списке пользователей из конфигурационного файла. Этот запрос выполняет Конфигуратор во время подключения к серверу отладки. Если пользователь авторизовался в сервере отладки, ему будет доступна отладка в рамках тех полномочий, которые указаны в конфигурационном файле. Вся остальная работа сервера отладки остается прежней.

31.2.2.2.2. Настройка системы для работы в отладочном режиме
Общая информация

В данном разделе считается, что конфигуратор настроен для отладки с использованием протокола отладки HTTP. Настройка конфигуратора выполняется с помощью диалога параметров конфигуратора (см. здесь). Далее необходимость выполнения такой настройки отдельно не упоминается.

При запуске из Конфигуратора

Для того чтобы при запуске из Конфигуратора клиентское приложение сразу запускалось в режиме отладки, необходимо запустить клиентское приложение с помощью команды Отладка``‑ Начать отладку. В этом случае клиентское приложение будет запущено в отладочном режиме и все необходимые компоненты также будут запущены с нужными настройками или параметрами командной строки. Для запуска будет использоваться то клиентское приложение, которое выбрано в настройках конфигуратора (см. здесь).

Если необходимо запустить в режиме отладки конкретное приложение, не меняя настроек по умолчанию, то запуск можно выполнить с помощью меню команды Отладка``‑ Начало отладки. В меню перечислены клиентские приложения, которые можно запустить в режиме отладки.

Запуск отладки мобильного приложения из Конфигуратора поддерживается только для устройств, работающих под управлением ОС Android. В этом случае устройство должно быть подключено к персональному компьютеру, на котором работает Конфигуратор, с помощью USB-кабеля, а в настройках запуска мобильного приложения (см. здесь) должно быть настроено использование Android Debug Bridge для запуска мобильного приложения. Отладка мобильного приложения на устройстве, работающем под управлением ОС iOS, возможно только при ручном запуске прикладного решения на мобильном устройстве. Более подробно про управление отладкой на мобильном устройстве см. здесь.

Разрешение отладки в запущенном клиентском приложении

В том случае, если необходимо выполнить отладку уже запущенного клиентского приложения без разрешенного режима отладки, необходимо выполнить следующие действия:

1. Открыть диалог настройки параметров клиентского приложения (команда Параметры меню Сервис и настройки``‑ Настройки).

2. Свойство Отладка в текущем сеансе установить в значение Разрешена (протокол``HTTP).

3. В свойстве Сервер отладки указать адрес используемого сервера отладки.

4. Нажать кнопку О``K. После разрешения отладки в текущем сеансе, отключить ее или изменить протокол отладки невозможно.

Разрешение отладки в запущенном экземпляре клиентского приложения не поддерживается при использовании веб-клиента.

Отладка кода на сервере (включая автономный)

В отладочном режиме загрузка объектов конфигурации производится по мере необходимости, а не при начале работы системы, как в обычном режиме работы сервера. Это ускоряет процесс запуска «1С:Предприятия» при изменении конфигурации, то есть ускоряет процесс разработки.

Также следует учитывать, что в отладочном режиме производительность системы будет ниже, чем при обычной работе. Поэтому не рекомендуется использовать отладочный режим работы сервера для реальной работы пользователей.

Сервер как приложение

Если сервер «1С:Предприятия» работает в режиме приложения (в любой ОС), то следует остановить сервер и перезапустить его так, чтобы в числе параметров командной строки был параметр /debug.

Копировать в буфер обмена

ragent /debug -http <остальные параметры командной строки>

При необходимости, в командной строке запуска сервера также необходимо указать значения параметров /debugServerAddr, /debugServerPort и /debugServerPwd.

Сервер как служба ОС Windows

Если сервер работает как служба ОС Windows, то необходимо выполнить следующие операции:

1. Остановить сервер «1С:Предприятия».

Копировать в буфер обмена

ragent /stop

2. Выполнить повторную регистрацию агента сервера в качестве службы Windows таким образом, чтобы в числе параметров команды ragent был параметр /debug.

Копировать в буфер обмена

ragent /instsrvc /debug -http <остальные параметры командной строки>

При необходимости, в командной строке регистрации сервера «1С:Предприятия» также необходимо указать значения параметров /debugServerAddr, /debugServerPort и /debugServerPwd.

3. Запустить сервер «1С:Предприятия».

Копировать в буфер обмена

ragent /start

Сервер как сервис ОС Linux

Если в отладочный режим необходимо перевести сервер «1С:Предприятия» работающего в режиме сервиса в ОС Linux, то необходимо выполнить следующие операции:

1. Остановить сервер «1С:Предприятия».

Копировать в буфер обмена

systemctl stop srvc1v8-A.B.C.D@instanceName

2. В конфигурационном файле сервиса (srvc1v8-A.B.C.D@instanceName) установить значение параметра SRV1CV8_DEBUG в значение -debug -http.

Копировать в буфер обмена

SRV1CV8_DEBUG=-debug -http

3. Сохранить конфигурационный файл.

4. Запустить сервер «1С:Предприятия».

Копировать в буфер обмена

systemctl start srvc1v8-A.B.C.D@instanceName

В примерах командной строки выше в данном разделе используются следующие обозначения:

● A.B.C.D ‑ полный номер версии системы «1С:Предприятие».

● instanceName ‑ имя экземпляра сервиса системы «1С:Предприятие».

Автономный сервер

Для того, чтобы включить режим отладки в автономном сервере, необходимо использовать команду --``debug или секцию debug конфигурационного файла автономного сервера.

Копировать в буфер обмена

ibsrv <текущие параметры командной строки> --debug=http

В конфигурационном файле автономного сервера для управления отладкой используется секция debug следующего вида:

Копировать в буфер обмена

debug: type: http

При таких настройках сервер отладки автономного сервера будет использовать сетевой порт по умолчанию (1550). Для изменения значения следует использовать или команду --debug-port или параметр port секции debug конфигурационного файла.

Смотри также:

● Запуск агента сервера в ОС Linux (см. здесь).

● Запуск агента сервера в ОС Windows (см. здесь).

● Отладка в автономном сервере (см. здесь).

● Конфигурационный файл кластера серверов в ОС Linux (см. здесь).

● Конфигурационный файл автономного сервера (см. здесь).

Отладка внешнего соединения

Для указания внешнему соединению необходимости запуска в отладочном режиме используются настройки, размещенные в xml-файле comcntrcfg.``xml, который расположен в каталоге конфигурационных файлов системы «1С:Предприятие». Если файл не найден, приложение открывается в обычном режиме.

Пример файла comcntrcfg.xml:

Копировать в буфер обмена

Подробнее о файле comcntrcfg.xml можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Если для элемента debug указан атрибут debuggerURL, то к моменту обращения к внешнему соединению по указанному адресу должен быть доступен сервер отладки. В противном случае внешнее соединение будет работать в обычном режиме и его будет невозможно отладить.

Отладка Web-сервиса, HTTP-сервиса и доступа через стандартный интерфейс OData

Для указания сервису необходимости запуска в отладочном режиме (только для файлового варианта информационной базы) используются настройки, размещенные в файле default.``vrd, который должен располагаться в каталоге виртуального приложения. В этом файле необходимо указать элемент debug, отсутствие которого означает невозможность отладки Web-сервиса.

Пример элемента debug из файла default.vrd:

Копировать в буфер обмена

Подробнее о файле default.``vrd можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Если для элемента debug указан атрибут url, то в момент обращения к сервису, по указанному адресу должен быть доступен сервер отладки. Если на момент запуска приложения, сервер отладки будет недоступен, отладка будет невозможна, и система будет работать в обычном режиме.

Для необходимости отладки сервиса в клиент-серверном варианте информационной базы следует включить режим отладки на сервере с помощью ключа командной строки /``debug. Подробнее о ключах командной строки запуска сервера «1С:Предприятия» можно посмотреть в книге 1С:Предприятие 8.3. "Клиент-серверный вариант. Руководство администратора".

Примечание. Для отладки HTTP-сервиса и работы со стандартным интерфейсом OData не рекомендуется использовать веб-браузер Microsoft Internet Explorer 9.0, т. к. в данном веб-браузере имеются ошибки кодирования URL.

Отладка веб-клиента

Если веб-клиент запускается не из конфигуратора, то для отладки клиентской части необходимо проделать следующие действия:

1. Определить адрес сервера отладки, с которым будет взаимодействовать отладчик. Описание того, как это сделать см. здесь.

2. Открыть информационную базу в режиме 1С:Предприятие с указанием необходимости отладки:

Копировать в буфер обмена

http://localhost/demo?debug=http,attach&debuggerURL="addr"

Значение addr получается на предыдущем шаге.

3. В данном случае будет недоступна отладка серверной части прикладного кода.

Если необходимо включить отладку серверной части файлового варианта информационной базы, то это можно сделать двумя способами:

● Запустить отладку непосредственно из конфигуратора (см. здесь).

● Включить режим отладки с помощью файла default.``vrd, который должен располагаться в каталоге виртуального приложения. В этом файле необходимо указать элемент debug, отсутствие которого означает невозможность отладки Web-сервиса.

Пример элемента debug из файла default.vrd:

Копировать в буфер обмена

Также следует учитывать, что в отладочном режиме производительность системы будет ниже, чем при обычной работе. Поэтому не рекомендуется использовать отладочный режим работы серверной части файлового варианта работы для реальной работы пользователей.

Подробнее о файле default.``vrd можно посмотреть в книге 1С:Предприятие 8.3. "Руководство администратора".

Во время отладки веб-клиента нужно помнить следующие особенности:

● не поддерживается возможность интерактивного включения режима отладки;

● не поддерживается автоматический поиск предметов отладки на удаленных компьютерах при отладке веб-клиента для файлового варианта информационной базы;

● не поддерживается активизация конфигуратора из веб-клиента в процессе отладки;

● не поддерживается отладка внешних отчетов и обработок;

● в случае принудительного прекращения работы веб-клиента из отладчика, прекращается работа того процесса веб-браузера, который был запущен при старте веб-клиента из конфигуратора. Однако если веб-клиент стартует во вкладке уже работающего веб-браузера, то принудительного закрытия вкладки не происходит, а в окне отлаживаемого веб-клиента открывается диалоговое окно с информацией о том, что веб-клиент завершается по требованию отладчика.

**Внимание! Для отладки веб-клиента (в том числе и клиентского программного кода) в клиент-серверном варианте необходимо, чтобы сервер «1С:Предприятия» был запущен в отладочном режиме (ключ debug).

Примечание. Не рекомендуется использовать отладку веб-клиента на низкоскоростных каналах связи.**

Клиент-серверный вариант работы подробнее описан в книге 1С:Предприятие 8.3. "Клиент-серверный вариант. Руководство администратора".

Отладка внешней обработки (отчета)

Для отладки внешнего отчета (обработки) необходимо соблюдение двух условий:

1. Внешняя обработка (отчет) открыта в клиентском приложении из конкретного места файловой системы;

2. Конфигуратор, который обслуживает предмет отладки с отлаживаемой внешней обработкой (отчетом), имеет доступ именно к тому файлу внешней обработки (отчета), который открыт клиентским приложением.

Если эти условия не выполняются ‑ отладка внешней обработки (отчета) будет невозможна. В частности, не поддерживается отладка внешних обработок (отчетов), расположенных в информационной базе. В этом случае рекомендуется извлечь внешнюю обработку (отчет) из информационной базы на время отладки.

Отладка мобильного приложения

Отладка при запуске из конфигуратора

Для запуска отладки из Конфигуратора может использоваться только платформа разработчика.

Запуск отладки мобильного приложения из Конфигуратора поддерживается только для устройств, работающих под управлением ОС Android. В этом случае устройство должно быть подключено к персональному компьютеру, на котором работает Конфигуратор, с помощью USB-кабеля, а в настройках запуска мобильного приложения (см. здесь) должно быть настроено использование Android Debug Bridge для запуска мобильного приложения. В этом случае в качестве адреса сервера отладки используется адрес Конфигуратора, из которого выполняется запуск отладки.

Признак разрешения отладки и адрес отладчика, указанный в одноименном свойстве информационной базы, игнорируется.

Отладка при публикации на веб-сервере

Для запуска отладки из Конфигуратора может использоваться только платформа разработчика.

Первый запуск мобильного приложения выполняется на мобильном устройстве вручную. При первом запуске мобильное приложение использует свойства информационной базы для определения состояния отладки. Если в настройках информационной базы установлено свойство Перезапуск из конфигуратора, то состояние отладки при перезапуске будет определяться тем, каким образом был инициирован этот перезапуск в конфигураторе. Мобильное приложение будет перезапущено в режиме отладки в том случае, если перезапуск инициирован из конфигуратора командой Начать отладку. В остальных случаях перезапущенное мобильное приложение будет недоступно для отладки.

внимание! Установка в настройках информационной базы свойства Перезапуск из конфигуратора фактически разрешает отладку мобильного приложения. Следует аккуратно использовать данную возможность при отладке мобильных приложений с реальными конфиденциальными данными во избежание несанкционированного доступа к таким данным.

Признак разрешения отладки и адрес отладчика, указанный в одноименном свойстве информационной базы, игнорируется (кроме первого запуска мобильного приложения).

Отладка собранного мобильного приложения

Для запуска отладки из Конфигуратора может использоваться только собранное мобильное приложение.

Мобильное приложение может быть запущено только на самом мобильном устройстве. Состояние отладки определяется настройками используемой информационной базы.

Установка разрешения отладки и адреса сервера отладки

Для установки параметров, управляющих отладкой, необходимо открыть список информационных баз, найти в списке требуемую базу и в свойствах этой информаиоцнной базы выполнить следующие действия:

● Включить переключатель Отладка разрешена.

● Установить адрес сервера отладки в поле Адрес отладки. Адрес используемого сервера отладки следует получить в конфигураторе, в свойстве Сервер отладки диалога Настройка отладчика, который доступен при исполнении следующей команды Главное меню``‑ Отладка``‑ Подключение``‑ Настройка.

Следует помнить, что настройки отладки, указанные в свойствах информационной базы, могут игнорироваться в некоторых режимах работы (описано выше в данном разделе).

Отладка автономного мобильного приложения

Отладка сразу всех составных частей автономного мобильного приложения не поддерживается. Предоставляется возможность отлаживать или часть, работающую на мобильном устройстве или часть, работающую с основным сервером. В случае отладки автономной части прикладного решения необходимо подключать следующие предметы отладки: клиент (мобильное приложение) и сервер (мобильное приложение). В случае отладки основной части прикладного решения необходимо подключать следующие предметы отладки: мобильный клиент и сервер.

Переключение между этими режимами осуществляется с помощью параметра настройки информационной базы на мобильном устройстве.

Действия, которые предшествуют собственно отладке, аналогичны таковым при отладке мобильного приложения или прикладного решения для персонального компьютера.

31.2.2.2.3. Подключение предметов отладки

Для выполнения отладки модуля нужно, чтобы предмет отладки был подключен. Для управления подключением нужно выбрать пункт Отладка``‑ Подключение. На экран выводится окно для выбора предмета отладки. В список Доступные предметы отладки попадают предметы отладки, которые зарегистрированы на используемом сервере отладки для информационной базы, которая указана в настройках (см. здесь) данного отладчика (конфигуратора):

Рис. 586. Предметы отладки

Из списка Доступные предметы отладки исключаются:

● Подключенные предметы отладки (отображаются в списке Подключенные предметы отладки);

● Те предметы отладки, которые не соответствуют отбору, установленному в правой верхней части окна. Отбор предназначен только для визуального ограничения списка. Предметы отладки, не соответствующие отбору, все равно являются доступными для использования и после отключения отбора сразу появятся в списке доступных предметов отладки.

Нажатие кнопки Подключить подключает к отладчику выбранный предмет отладки. В окне подключения это отображается переносом предмета отладки из списка доступных в список подключенных предметов отладки.

Для исключения предмета отладки нужно указать его в списке подключенных и нажать кнопку Отключить. В окне подключения это отображается переносом предмета отладки из списка подключенных в список доступных предметов, и к нему можно повторно подключиться. При этом точки останова, установленные в отключенных предметах отладки, не будут «срабатывать» при прохождении выполнения через них.

Для закрытия предмета отладки следует нажать кнопку Завершить, для останова в месте выполнения ‑ кнопку Остановить.

Чтобы открыть диалог с информацией об используемом сервере отладки, следует нажать кнопку Настройки. В открывшемся диалоге будут отображаться адрес сервера отладки и имя информационной базы.

Рис. 587. Информация о сервере отладки

Для автоматического подключения предметов отладки к текущему отладчику, можно воспользоваться диалогом Автоматическое подключение и настроить в нем нужные отборы.

Рис. 588. Фильтр предметов отладки для автоматического подключения

В левой части диалога (Типы предметов отладки) можно указать, какие типы предметов отладки будут автоматически подключаться к текущему отладчику сразу после своей регистрации на используемом сервере отладки. Можно отметить несколько типов предметов отладки. Так, если будет отмечен тип предмета отладки Фоновое задание, то это означает, что как только на сервере «1С:Предприятия», который работающет в режиме отладки, начнет исполняться фоновое задание, оно автоматически будет подключено к текущему отладчику.

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

Рис. 589. Отбор предметов отладки

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

Фильтр, который настраивается в диалоге Автоматическое подключение предметов отладки на сервере отладки объединяет фильтр по типам отладки и по отборам предметов отладки «по ИЛИ». Т. е. предмет отладки будет автоматически подключен, если он соответствует одному из установленных типов отладки ИЛИ соответствует одному из включенных отборов.

Значения, установленные в данном диалоге, начинают работать сразу и до следующей смены настроек.

Для фильтрации доступных предметов отладки используется общий список.

31.2.2.2.4. Сервер отладки
Общая информация

Сервер отладки (dbgs) ‑ специальное приложение, которое выступает посредником между отладчиком и различными предметами отладки (подробнее см. здесь).

Сервер отладки может быть запущен несколькими способами:

● Конфигуратором, при отладке прикладного решения в файловом варианте.

● Кластером серверов в том случае, если для кластера включен режим отладки.

● Прикладным разработчиком в случае необходимости реализации сложных сценариев отладки. В этом случае имеется возможность также зарегистрировать сервер отладки в качестве сервиса операционной системы (для ОС Windows) или запускать его как «демона» (для ОС Linux).

В том случае, если сервер отладки запускается другими компонентами системы «1С:Предприятие», все необходимые параметры сервера отладки автоматически устанавливаются этими компонентами.

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

Получение адреса отладчика

Чтобы получить адрес сервера отладки, с которым будет взаимодействовать отладчик конфигуратора, необходимо выполнить следующие действия:

● Открыть диалог подключения предметов отладки Главное меню``‑ Отладка``‑ Подключение…;

● Нажать кнопку Настройки…;

● Скопировать информацию из строки Сервер отладки:.

Проверка работоспособности сервера отладки

Проверку работоспособности сервера отладки можно выполнить следующим образом:

● Получить адрес сервера отладки, например в конфигураторе.

● Ввести полученный адрес в строку адреса любого веб-браузера.

● Сервер отладки функционирует нормально, если веб-браузер отображает информацию следующего вида:

Копировать в буфер обмена

1C:Enterprise 8.3 Debug Server (8.3.7.1140) © '1C' 1996 2015 - it works!

31.2.3. Точка останова

31.2.3.1. Общая информация

Точка останова ‑ это место в программном модуле, в котором исполнение программного модуля останавливается и управление передается отладчику.

В левой колонке текста модуля специальными значками показываются текущая точка останова, места останова и состояние точек останова.

Рис. 590. Виды точек останова

На рис. 590 цифрами обозначены следующие объекты:

1. Точка останова без каких-либо параметров.

2. Отключенная точка останова (с любым состояние параметров).

3. Точка останова с заданными условиями срабатывания.

4. Безусловная точка останова с заданными действиями.

5. Точка останова, для который заданы и условия срабатывания и действия.

6. Указатель текущей строки исполнения.

Точку останова можно установить в любой строке модуля, в любой момент работы с отладчиком. Исключением является невозможность установки точки останова для текста модуля, который добавлен после последнего сохранения и еще не сохранен. В том случае, если строка, на которой устанавливается точка останова, не содержит операторов (например, пустая строка), содержит неисполняемый текст (например, заголовок процедуры или функции, определение переменных) или является продолжением оператора, начатого на предыдущих строках, положение точки останова будет автоматически скорректировано. Место нахождения точки останова отмечается специальным знаком в левой колонке окна модуля. Для различных точек останова используются разные знаки (см. рис. 590).

Точку останова можно также установить или снять с помощью мыши. Для этого в серой области строки, в которой требуется установить точку останова, нужно дважды щелкнуть левой кнопкой мыши. Двойной щелчок по активной точке останова удаляет эту точку останова. Двойной щелчок по отключенной точке останова включает эту точку останова.

Для управления точками останова используются следующие команды меню Отладка главного меню конфигуратора:

Команда

Пояснение

Точка останова

Устанавливает либо стирает точку останова на той строке, на которой стоит курсор.

Точка останова с параметрами

Устанавливает точку останова и открывает диалог для ввода условия останова ‑ логического выражения. Если условие было введено, то открывается диалог для редактирования условия. Если в данной строке точка останова была установлена, то открывается диалог для ввода условия останова и ставится условие для точки останова с условием. Останов в указанной точке будет выполняться только в том случае, если истинны все заданные условия точки останова.

Останавливаться по ошибке

При возникновении ошибки отладчик останавливает выполнение и переходит к строке модуля, вызвавшей ошибку. Имеется возможность указать, какой текст должно включать сообщение об ошибке, чтобы произошла остановка выполнения при возникновении ошибки.

Отключить точку останова

Включает либо отключает действие точки останова. Доступна, если в текущей строке есть точка останова.

Убрать все точки останова

Стирает все ранее расставленные точки останова во всех модулях.

Отключить все точки останова

Запрещает действия всех ранее расставленных точек останова во всех модулях, не удаляя их.

Список точек останова

Просмотр и управление точками управления.

Сдвинуть точку останова вверх

Перемещает текущую точку останова на одну строку вверх.

Сдвинуть точку останова вниз

Перемещает текущую точку останова на одну строку вверх.

Вырезать точку останова

Копирует характеристики точки останова в буфер обмена и удаляет точку останова в текущей строке.

Скопировать точку останова

Копирует характеристики точки останова в буфер обмена.

Вставить точку останова

Создает в текущей строке точку останова с параметрами, соответствующими параметрам точки останова в буфере обмена.

31.2.3.2. Параметры точки останова

Создание точки останова с параметрами выполняется с помощью диалога Параметры точки останова.

Рис. 591. Параметры точки останова

С помощью данного диалога можно управлять следующими основными параметрами точки останова:

1. Включена или выключена точка останова (флажок Включена).

2. При выполнении каких условий будет срабатывать точка останова (группа параметров Условия срабатывания).

3. Что будет происходить, когда точка останова сработала (группа параметров Действия).

Если параметры точки останова заданы так, как на рис. 591, то это соответствует безусловной точке останова, которая приводит к безусловной остановке выполнения при попадании на данную точку.

Если в любой точке останова сбросить флажок Включена, то точка останова станет выключенной. В этом случае Конфигуратор сохранит все параметры точки, но эта точка останова никогда не приведет к остановке выполнения. Чтобы точка останова оказывала влияние на процесс выполнения кода на встроенном языке ‑ она должна быть активной (установлен флажок Включена).

В рамках обсуждения точки останова будет использоваться термин «попадание». Под этим термином мы будем понимать ситуацию, когда сработали все условия, заданные для точки останова, что привело к необходимости остановиться на точке останова.

Рассмотрим, какие условия можно указывать для точки останова. Всего допустимо несколько условий срабатывания. Если заданы несколько условий, то они объединяются «по И»: чтобы точка останова сработала ‑ должны выполниться все заданные условия.

Условие При выполнении условия позволяет указать выражение на встроенном языке. Условие будет выполняться, если выражение возвращает значение Истина. Конфигуратор запоминает последние 15 условий. Доступ к истории выражений осуществляется с помощью гиперссылки История, которая располагается над правым верхним краем поля ввода выражения.

Условие При вызове из вышестоящего метода позволяет указать имя метода, которое должно присутствовать в стеке вызовов, чтобы точка останова сработала. Для указания имени метода можно использовать регулярные выражения. Используется диалект ICU. С помощью данного условия имеется возможность вызвать срабатывание точки останова только тогда, когда метод с точкой останова опосредованно вызывается из вполне определенного метода и не срабатывает при вызове из любого другого метода прикладного решения. Важно, что имя метода проверяется по всей глубине стека в данном предмете отладки, а не только на уровне, с которого был вызван метод с точкой останова. Это означает, что если точка останова с таким условие задана в серверном коде, то данная проверка будет выполняться начиная с первого метода, вызванного на стороне сервера и не будет выполняться на стороне клиента.

Условие При количестве попаданий позволяет указать количество попаданий на точку останова (и условие на это количество), которое должно привести к срабатыванию. Условие может быть одним из: равно, больше или равно, меньше или равно и кратно. Значение задается в соответствующем поле. Текущий счетчик попаданий выводится справа от условия и это значение может быть очищено путем нажатия на гиперссылку Очистить правее текущего количества попаданий. Текущий счетчик попаданий очищается также в следующих случаях:

● При включении отключенной точки останова.

● При перезапуске отладки сбрасываются счетчики попаданий для всех точек останова.

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

Если включить флажок Выводить в окно служебных сообщений, то открывается возможность журналирования попаданий на точки останова (протокол отладки). Если указать имя точки останова в поле Описание точки останова, то при попадании на эту точку останова в окно сообщений будет выведено имя этой точки (вместе со служебной информацией: имя модуля, строка модуля, имя клиента и параметры сервера).

Если в поле Результат вычисления выражения указать какое-либо выражение, то при попадании на точку останова в окно сообщений будет выводиться результат вычисления этого выражения. Результат выводится как строковое представление результата вычисления выражения. Если требуется как-то озаглавить результат ‑ следует перед выражением указать требуемый заголовок согласно правилам формирования выражения для получения строки. Например, если при попадании на точку останова необходимо вывести результат выражения 2*2 с заголовком «2*2=», то для решения этой задачи в поле Результат вычисления выражения следует внести следующее выражение: `"2*2="

  • (2*2). Над правым верхним углом поля Результат вычисления выражениярасположена гиперссылкаИстория`. С помощью этой гиперссылки можно получить доступ к 15 последним редактируемым выражениям.

Если выражение не может быть вычислено, то в окно сообщений выводится стандартное сообщение об ошибке, из-за которой выражение не может быть вычислено.

Флажок Вывести стек вызовов приводит к тому, что при попадании на точку останова в окно сообщений будет выведен стек вызовов встроенного языка, который позволит понять, каким образом прикладное решение «дошло» до данного места программы. Стек выводится от метода, в котором находится сработавшая точка останова, до самого первого метода, который был вызван платформой при выполнении операции.

При выводе стека одна строка описывает один метод. Формат строки следующий: ИмяМодуля, ИмяМетода(СписокПараметров), НомерСтроки, где:

● ИмяМодуля ‑ полное имя модуля, в котором расположен метод.

● ИмяМетода ‑ имя метода в модуле, из которого был выполнен вызов.

● СписокПараметров ‑ фактические значения параметров, которые использованы при вызове метода, каждый параметр описывается парой Имя=Значение, при этом примитивные типы выводятся фактическим значением, а сложные типы ‑ в виде имени типа.

● НомерСтроки ‑ номер строки модуля, где расположено место вызова метода.

Например, рассмотрим следующий стек:

Копировать в буфер обмена

МодульУправляемогоПриложения.ПоказатьЗначения(Значение = Массив), 2 МодульУправляемогоПриложения.ПриВставкеИзБуфераОбмена(Значение = Массив), 32

В этом стеке видно, что точка останова находится во второй строке метода ПоказатьЗначение() модуля приложения. В этот метод вызван из метода ПриВставкеИзБуфераОбмена() модуля приложения, причем код вызова расположен на 32 строке модуля (не метода!).

Флажок Вывести количество попаданий позволяет узнать, сколько раз исполнение встроенного языка попадало на данную точку останова.

Флажок Продолжить выполнение позволяет управлять тем, что будет делать отладчик при попадании на точку останова. Если флажок сброшен, то точка останова работает по своему прямому назначению: если выполняются условия, перечисленные в группе Условия срабатывания, то выполнение кода на встроенном языке останавливается и в окно сообщений выводится результат действий, заданных (в группе Действия) для точки останова.

Если флажок Продолжить выполнение установлен, то при выполнении условий, заданных для точки останова, в окно сообщений будут выведены результаты всех указанных действий, а выполнение продолжится без остановки. Таким образом, для разбора сложных ошибок, имеется возможность расставить по отлаживаемому коду точки останова с параметрами, которые настроены таким образом, чтобы выводить в окно сообщений протокол отладки, но не прекращать выполнение. Затем можно будет воспроизвести ошибку и анализировать получившийся протокол отладки.

Все строки протокола отладки (которые выводятся в окно сообщений) могут быть «нажаты». При этом будет выполнен переход в тот метод (и модуль), «ссылка» на которой указана в сообщении.

При срабатывании точки останова в окно сообщений выводится информация следующего вида:

Копировать в буфер обмена

ОписаниеТочкиОстанова ИмяМодуля, НомерСтроки[ (КоличествоСрабатывания)] (Тип: Пользователь, Компьютер: Порт)

В данном описании:

● ОписаниеТочкиОстанова представляет один из следующих вариантов:

● Если задано только описание точки останова, то выводится заданное описание.

● Если задано только вычисляемое выражение, то выводится результат вычисления выражения.

● Если задано и описание и выражение, то выводится описание точки останова, затем символ «:» и результат вычисления выражения.

● В противном случае текст Сработала точка останова.

● ИмяМодуля ‑ полное имя модуля, в котором сработала точка останова.

● НомерСтроки ‑ номер строки в ИмяМодуля, где расположена точка останова.

● КоличествоСрабатываний ‑ выводится в том случае, если указано действие Вывести количество попаданий.

● Тип ‑ представление предмета отладки.

● Пользователь ‑ имя пользователя, от имени которого выполняется сеанс (если пользователи заданы в информационной базе).

● НомерСеанса ‑ номер сеанса информационной базы, в котором сработала точка останова.

● Компьютер:Порт ‑ имя компьютера и номер сетевого порта, где расположен отлаживаемый сеанс информационной базы (описание предмета отладки будет приведено ранее в строке ‑ поле Тип).

Смотри также:

● Регулярные выражения (см. здесь).

31.2.3.3. Список точек останова

Установленные точки останова запоминаются при закрытии конфигурации. Для просмотра списка точек останова нужно открыть конфигурацию и выбрать пункт меню Отладка``‑ Список точек останова.

Рис. 592. Список точек останова

На рис. 592 цифрами отмечены следующие кнопки:

1. С помощью данной кнопки открывается диалог Параметры точки останова.

2. Данная кнопка предназначена для перехода к строке модуля, на которой установлена текущая точка останова. При нажатии кнопки будет открыт соответствующий модуль конфигурации.

3. С помощью этих кнопок выполняется включение или выключение сразу всех точек останова в прикладном решении. Если необходимо включить или выключить несколько точек останова, то необходимо выделить эти точки останова (левой кнопкой мыши, удерживая нажатой кнопку Ctrl) и затем мышью установить нужное значение флажка Включена в одной из выделенных строк.

4. Нажатие данной кнопки удаляет текущую точку останова. Для отключения (включения) точки останова следует использовать флажок в колонке Включена списка точке останова.

5. Данная кнопка предназначена для удаления всех точек останова в прикладном решении.

6. С помощью этих кнопок можно сохранить в xml-файл настройки точек останова и загрузить точки останова из xml-файла.

С помощью флажка в колонке Включена можно управлять состоянием выбранной точки останова. Если флажок установлен, то отладчик будет обрабатывать параметры этой точки останова во время работы. В противном случае точка останова будет игнорироваться.

Колонки Условия срабатывания и Действия содержат краткое описание соответствующих параметров точки останова. Нажатие кнопки ENTER аналогично нажатию кнопки 2 (рис. 592) в окне со списком точек останова ‑ выполняет переход к строке модуля с точкой останова. Нажатие кнопки F2 аналогично нажатию кнопки 1 (рис. 592) в окне со списком точек останова ‑ открывается диалог редактирования параметров точки останова.

Окно со списком точек останова может размещаться на экране в различных режимах.

31.2.4. Пошаговое выполнение

В режиме пошагового исполнения предмет отладки, выполнив очередную команду, ждет от отладчика инструкций о продолжении работы.

В момент подключения первого из предметов отладки в меню Отладка система добавляет пункты, с помощью которых осуществляется управление процессом отладки.

На каждом шаге исполнения модуля существует несколько вариантов продолжения. Для выбора варианта продолжения используются пункты меню Отладка.

Команда

Пояснение

Шагнуть в

Если следующим выполняемым оператором модуля является вызов функции или процедуры, начинается ее пошаговое выполнение, иначе отладчик переходит к следующему оператору

Шагнуть через

Если следующим выполняемым оператором модуля является вызов функции или процедуры, она выполняется целиком (не пошагово) и отладчик переходит к следующему оператору

Шагнуть из

Прервать пошаговое выполнение функции или процедуры и остановиться на первом операторе, находящемся после ее вызова

Идти до курсора

Прервать пошаговое выполнение модуля, выполнять все операторы до той строки, на которой стоит курсор

Продолжить

Прервать пошаговое выполнение модуля и продолжить свободное выполнение

При отладке прикладных решений необходимо помнить следующую особенность: если в отлаживаемом программном коде встречается оператор Выполнить(), то:

● не поддерживается пошаговое исполнение программного кода, переданного в качестве параметра оператора (включая вызовы процедур и функций);

● поддерживается прерывание исполнения программного кода с помощью точек останова, которые расположены внутри процедур и функций, вызываемых из программного кода, переданного в качестве параметра оператора Выполнить().

Если выполняется отладка сразу нескольких предметов отладки, то существует ряд особенностей пошагового выполнения:

● если выполнена остановка одного предмета отладки, при начале исполнения кода останавливаются и другие;

● выполнение команды Продолжить приводит к продолжению выполнения всех предметов отладки;

● выполнение команды Шагнуть через приводит к исполнению продвижения на следующую строку во всех предметах отладки;

● выполнение команды Шагнуть в(если выполняемым оператором модуля является вызов функции или процедуры) приводит к переходу на первый оператор внутри этого вызова, для других предметов отладки всегда выполняется команда Шагнуть через.

Если производится отладка клиент-серверного варианта и код последовательно выполняется на клиенте и на сервере (подключение клиентского и серверного предметов отладки выполнено), то:

● выполнение команды Шагнуть в(если выполняемым оператором модуля является вызов функции или процедуры, исполняемой на сервере) приводит к переходу на первый оператор внутри этого вызова;

● выполнение команды Шагнуть изили команды Шагнуть через для последнего исполняемого оператора (если выполняемым оператором модуля является код функции или процедуры, исполняемый на сервере и вызванной из модуля, выполняемого в клиентском приложении) приводит к переходу на следующий исполняемый оператор внутри этого вызова.

Для выбора текущего предмета отладки выводится специальная панель инструментов Предметы отладки. Панель состоит из единственного поля выбора, в котором показывается текущий предмет отладки. Это поле выбора доступно только тогда, когда управление работой какого-либо из подключенных предметов отладки находится в отладчике (например, после срабатывания точки останова). При этом в список предметов отладки попадут только те предметы, управление исполнением которых сейчас также находится в отладчике, включая текущий предмет отладки.

С помощью табло и диалога Выражение можно получить значения интересующих выражений (см. здесь). Стек вызовов позволяет проследить последовательность вызова процедур и функций (см. здесь).

Если выполняется пошаговый процесс выполнения, то стек вызова, значения переменных (в табло и в окне Выражение) показываются для текущего предмета отладки. При смене предмета отладки стек вызова и значения переменных также меняются.

ВНИМАНИЕ! Если выполнено подключение клиентского и серверного предметов отладки и осуществлен переход из клиентской части в серверную, то на клиентских уровнях стека вызова любые вычисления не выполняются. Такие уровни выводятся в окне стека вызовов серым цветом.

Если необходимо продолжить выполнение модуля, то с помощью команды Отладка``‑ Продолжить отладку нужно разрешить подключенным предметам отладки свободное выполнение модуля (до следующей точки останова). Если для отладки подключено клиентское приложение, то оно активизируется автоматически.

Чтобы прервать процесс отладки в целом (кроме фоновых заданий), нужно снять все точки останова со всех модулей и выполнить команду Отладка``‑ Продолжить отладку, если в данный момент сработала точка останова. Если необходимо прервать отладку и завершить работу подключенных предметов отладки, следует воспользоваться командой Отладка``‑ Завершить. В последнем случае не будут выполнены процедуры ПередЗавершениемРаботыСистемы() и ПриЗавершенииРаботыСистемы().

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

ВНИМАНИЕ! Хотя в процессе отладки возможно редактирование отлаживаемого модуля, отладчик не производит компилирование измененного кода ‑ продолжается отладка кода конфигурации базы данных (на момент запуска отладчика или подключения). Для отладки изменений, внесенных в конфигурацию, необходимо выполнить обновление конфигурации базы данных.

Если в режиме 1С:Предприятие устанавливается монопольный режим, то сохранение текущей конфигурации невозможно до тех пор, пока монопольный режим не будет снят.

Если файловый вариант информационной базы находится в состоянии пошагового выполнения кода на встроенном языке или стоит на точке останова и при этом существует открытая транзакция (явная или неявная), то выполнение некоторых операций (например, попытка захвата объектов в хранилище конфигурации) может сопровождаться ошибкой: Ошибка операции с хранилищем конфигурации. (Ошибка при выполнении сбора информации для хранилища конфигурации) Конфликт блокировок при выполнении транзакции. Не удалось заблокировать таблицу``FILES. Перед повтором операции рекомендуется завершить работу клиентского приложения. Для выполнения операции, во время которой произошла ошибка, следует продолжить выполнение кода на встроенном языке до момента завершения транзакции.

Таблицу сочетаний клавиш для работы с отладчиком можно получить в справке при использовании программы.

31.2.5. Отладка внешних обработок (отчетов)

Для отладки модулей внешней обработки (отчета) необходимо открыть файл внешней обработки в конфигураторе, воспользовавшись пунктом Файл``‑ Открыть.

В дальнейшем с модулями внешней обработки (отчета) в отладчике можно работать так же, как и с любым другим модулем.

31.2.6. Управление отладкой

Команда Отладка``‑ Перезапустить прекращает выполнение конфигурации и производит повторный ее запуск в режиме 1С:Предприятие. Если конфигурация была модифицирована, то на экран выдается запрос о необходимости провести обновление конфигурации базы данных.

Команда Отладка``‑ Завершить прекращает выполнение модуля и заканчивает работу текущего предмета отладки.

Команда Отладка``‑ Остановить останавливает выполнение модуля на текущем операторе. Данная команда позволяет начать отладку модуля со следующей исполняемой строки. Эта команда полезна при анализе «зацикливания» модуля.

Команда Отладка``‑ Остановка по ошибке открывает диалоговое окно настройки остановки по ошибке.

Положение флажка Останавливаться по ошибке определяет, будет ли приостановлена отладка, если в процессе выполнения произошла ошибка. При остановке по ошибке на экран выводится предупреждение: Ошибка времени выполнения, и приводится поясняющий текст о месте и причине возникновения ошибки.

Если установлен флажок Останавливаться только на ошибках, содержащих текст, то отладка будет остановлена в месте ошибки (если сообщение об ошибке содержит указанную в табличном поле подстроку). Если этот флажок не установлен, то остановка по ошибке будет происходить независимо от текста сообщения об ошибке. При этом указанная подстрока будет учитываться, только если флажок напротив нее установлен.

На месте возникновения ошибки устанавливается текущая точка исполнения текущего предмета отладки, а предмет отладки, в котором произошла ошибка, становится текущим. Просмотр значений выражений и переменных позволяет установить причину возникновения ошибки. Текст сообщения об ошибке при такой остановке будет помещен в окно сообщений. При этом доступен переход к месту возникновения ошибки по двойному щелчку (или нажатию клавиши ENTER) по тексту ошибки.

31.2.7. Окно «Выражение»

Во время пошагового выполнения имеется возможность рассчитать выражение с помощью окна Выражение. Это окно вызывается на экран выбором пункта Отладка``‑ Вычислить выражение.

Рис. 593. Вычислить выражение

В поле Выражение этого окна необходимо ввести выражение на встроенном языке системы «1С:Предприятие». Выражение можно ввести «вручную» или из списка ранее введенных выражений.

Если при вызове окна Выражение курсор в окне модуля находился на каком-либо выражении или выражение было выделено, оно автоматически подставляется в поле Выражение.

Для вычисления выражения следует нажать кнопку Рассчитать. Результат вычисления выражения будет выдан в поле Значение. Следует понимать, что вычисление выражений выполняется в реальной системе, поэтому возможны различные побочные эффекты. Так, например, если рассчитываемое выражение анализирует наличие в информационной базе какого-то элемента, и создает нужный элемент при его отсутствии, то такое выражение будет выполнено «по пути» создания только один раз. Это связано с тем, что после первого выполнения нужный элемент будет создан в реальной информационной базе.

Кнопка Включить в табло помещает введенное выражение в табло. Это позволит в дальнейшем прослеживать изменение результата вычисления выражения в процессе отладки модуля. При этом выражение размещается в новой строке табло. Если окна табло на экране нет, то оно открывается.

Если выражение имеет тип Строка или представляет собой коллекцию значений или массив, то становится доступной кнопка панели инструментов Показать значение в отдельном окне.

Для удобства просмотра длинных строк выводится окно Просмотр значения выражения. Окно содержит элемент управления типа Надпись, в которое выводится значение строки для просмотра.

Для удобства просмотра коллекции значений или массива выводится окно, содержащее табличное поле, колонки которого соответствуют именам реквизитов, а строки содержат значения. Выводится количество элементов коллекции, а в первой колонке указывается индекс каждого элемента коллекции.

Если, в свою очередь, конкретное значение также является коллекцией значений или массивом, а также строкой, то возможен просмотр этих значений в отдельном окне (как показано на рис. 594). Для этого следует выбрать нужное значение и в контекстном меню выбрать пункт Показать значение в отдельном окне или нажать клавишу F2.

Рис. 594. Отображение значений

Для строки выводится окно, в котором значение строкового выражения выводится в многострочное поле. Это значение можно поместить в буфер обмена.

Содержимое табличного поля результата расчета можно вывести в текстовый или табличный документ по кнопке Вывести список. Если вычисленное значение представлено в виде дерева, то будут выводиться данные только раскрытых строк данного дерева.

Текущее значение выражения можно также посмотреть, подведя указатель мыши к выражению. Текущее значение показывается в виде короткой подсказки рядом с переменной. Просмотр возможен, если значение имеет текстовое представление. Таким же образом можно просмотреть значение свойства. Если свойство представлено в виде <Объект>.[<Объект>.…]<Свойство> (например, ЭлементыФормы.КоманднаяПанель.Кнопки.Получение.Доступность), то просмотр значения возможен при подведении указателя мыши к такому тексту. Значение показывается, если в тексте не используются круглые и квадратные скобки. Также можно просмотреть значение элемента массива, для которого явно указан его индекс (в виде числа или переменной, значение которой определено на момент просмотра). Для этого нужно выделить идентификатор массива и его индекс.

При подведении указателя мыши к отдельному объекту, или выделенному объекту, или группе объектов в тексте вида <Объект>.[<Объект>.…]<Свойство> показывается его тип. Например, если в тексте ЭлементыФормы.КоманднаяПанель1.Кнопки.Получение.Доступность выделить ЭлементыФормы.КоманднаяПанель1, то будет показан тип КоманднаяПанель.

31.2.8. Табло

Табло ‑ специальное окно, в котором отображаются результаты вычисления переменных и введенных в него формул в процессе выполнения программы в процессе отладки. Вызов табло на экран выполняется выбором пункта меню Отладка``‑ Табло, доступным при отладке.

Рис. 595. Табло

Табло представляет собой четырехстраничную форму. Каждая ее страница содержит табличное поле для ввода переменных и формул, результаты вычисления которых необходимо контролировать. Формулы могут включать арифметические выражения, выражения с использованием функций встроенного языка системы «1С:Предприятие», а также функции модуля управляемого приложения и общих модулей.

Каждая формула вводится в первую колонку табличного поля и должна находиться на отдельной строке. Результат вычисления формулы выдается в колонке Значение. В колонке Тип выводится тип выражения. Если формула введена неправильно, то вместо результата появится фраза: Обнаружены синтаксические ошибки!

Управление табло и результатами вычислений осуществляется с помощью команд контекстного меню.

Результат расчета может быть скопирован в буфер обмена выбором пункта Копировать результат контекстного меню второй колонки.

Для некоторых типов данных (см. предыдущий раздел) возможен просмотр значений в отдельном окне.

Табло также можно вывести в табличный или текстовый документ.

Если в процессе работы исходные данные, используемые в формулах, изменились, то для получения актуальных результатов расчетов необходимо выполнить обновление. Для этого в контекстном меню табло нужно выбрать пункт Пересчитать или Пересчитать все.

С точки зрения выбора страниц табло работает в двух режимах: в первом страницы выбираются с помощью закладок, располагающихся внизу, во втором ‑ с помощью контекстного меню. Выбор режима производится установкой или снятием флажка в пункте Закладки контекстного меню.

Для очистки содержимого строки табло необходимо выбрать строку и нажать клавишу Del.

Окно табло может размещаться на экране в различных режимах. После завершения отладки окно автоматически закрывается.

31.2.9. Окно «Локальные переменные»

Во время отладки имеется возможность открыть специальное окно, которое содержит список локальных переменных текущего метода (метод, в котором находится текущая строка исполнения встроенного языка). Вызов окна на экран выполняется выбором пункта меню Отладка``‑ Локальные переменные, доступным при отладке.

Рис. 596. Окно локальных переменных

Окно локальных переменных содержит в себе параметры отлаживаемого метода и все локальные переменные, которые используются в методе на текущем уровне стека вызовов (по умолчанию ‑ на вершине стека вызовов). В самом начале переменные находятся в неинициализированном состоянии. По мере присвоения им каких-либо значений ‑ эти значения появляются в окне локальных переменных. Порядок следования переменных в данном окне неопределен. Редактировать колонку Переменная в данном окне невозможно. Состав строк в данном окне недоступен для изменения пользователем.

После каждого действия, выполняемого в процессе отладки, переключения по стеку вызовов, смены предмета отладки, обновление содержимого окна произойдет автоматически.

Результат расчета может быть скопирован в буфер обмена выбором пункта Копировать результат контекстного меню второй колонки.

Для некоторых типов данных (см. предыдущий раздел) возможен просмотр значений в отдельном окне.

Табло также можно вывести в табличный или текстовый документ.

Окно локальных переменных может размещаться на экране в различных режимах. После завершения отладки окно автоматически закрывается.

31.2.10. Изменение значения переменной

Когда отладчик остановился на точке останова, имеется возможность изменять значения переменных и свойств объектов, доступных для записи. Доступ к функции изменения возможен из окна выражений (см. здесь), табло (см. здесь) и окна локальных переменных (см. здесь). В окне выражений для изменения значения переменной необходимо встать на эту переменную и нажать кнопку f(``x), в табло или окне локальных переменных необходимо выбрать пункт Установить новое значение в виде выражения в контекстном меню конкретной переменной. Под «переменной» понимается не только значение обычной переменной, но и свойство коллекции (произвольной вложенности).

Рис. 597. Изменение значения переменной

После вызова функции изменения значения, на экране открывается специальное окно для ввода выражения. В верхней части окна следует ввести то выражение, значение которого будет установлено в переменную, имя которой представлено в качестве заголовка поля ввода выражения. В примере на рис. 597 предлагается изменить значение переменной Курс.

В окне ввода выражения можно вводить константные значения различных типов, а также любые выражения, корректные с точки зрения встроенного языка. В окне ввода выражения действует контекстная подсказка, отображающая контекст того метода, в котором сейчас находится отладчик.

После нажатия кнопки Установить, в нижней части окна ввода выражения будет отображен результат установки. Это может быть фраза Изменение значения выполнено успешно или сообщение об ошибке при наличии таковой.

Значение переменной можно изменить непосредственно в том окне, где наблюдается значение переменной. Для этого необходимо дважды щелкнуть левой клавишей мыши по тексту в колонке Значение. Следует помнить, что таким образом можно установить только значение примитивных типов.

Необходимо четко понимать, возможность изменения значений переменных во время отладки может приводить к различным, непрогнозируемым, последствиям в работе информационной системы. Так, если в процессе отладки, для записываемого в базу данных объекта (например, в обработчике ПередЗаписью()), можно установить такие значения свойств, которые там не могут оказаться при реальной работе системы. Однако именно эти, некорректные значения, и будут записаны в базу данных. При этом другие алгоритмы системы могут начать работать некорректно. В связи с этим следует очень аккуратно использовать возможность изменения значений переменных и свойств объектов во время отладки.

31.2.11. Стек вызовов

Стек вызовов показывает последовательность вызовов процедур и функций, приведшую к строке модуля, которая отлаживается в данный момент.

Рис. 598. Стек вызовов

Окно отображает:

● исполняемый метод ‑ колонка Название;

● номер строки модуля ‑ колонка Строка;

● предмет отладки, в котором расположен модуль, ‑ колонка Предмет.

В первой колонке окна могут быть две пиктограммы:

● Желтая стрелка означает вершину стека вызовов.

● Зеленая стрелка (расположенная слева от строки ОбщаяФорма.СтекВызовов.Форма.СерверныйМетод()) указывает метод, в контексте которого будет работать вычисление переменных в окне Выражение и в окне Табло. Если вершина стека вызовов совпадает с текущим контекстом, то зеленая стрелка не отображается на экране. Для смены контекста (а также установки курсора на строку, указанную в колонке Строка) необходимо дважды щелкнуть левой кнопкой мыши по нужной строке окна Стек вызовов.

В примере, показанном на рис. 598, переменная ПеременнаяНаСервере имеет значение НаСервере, т. к. отладчик переключен в контекст метода СерверныйМетод() (об этом свидетельствует зеленая стрелочка напротив строки ОбщаяФорма.СтекВызовов.Форма.СерверныйМетод()).

Если переключить контекст на вершину стека (двойной щелчок по строке с желтой стрелкой), то значение переменной ПеременнаяНаСервере станет равно значению Повторно, т. к. произойдет переключение контекста.

Некоторые строки в окне Стек вызовов отображаются серым цветом (последние две строки на рис. 598). Это означает, что имеется возможность переключиться на строку модуля, но нельзя вычислять выражения в контексте того метода, куда произошел переход. Таким образом, выделяются те элементы стека, которые «расположены» на клиенте, в то время как вершина стека «расположена» на сервере.

31.2.12. Особенности отладки защищенных модулей

Если при выполнении команды Шагнуть встрока модуля содержит вызов процедуры или функции, расположенной в защищенном модуле (см. здесь), то при первой попытке перехода к выбранной процедуре или функции защищенного модуля отладчик запрашивает пароль доступа.

Если пароль введен правильно, то отладчик открывает защищенный модуль и управление переходит на первую строку вызываемой процедуры или функции. При последующих переходах в защищенный модуль в данном сеансе работы пароль не запрашивается.

Если отказаться от ввода пароля, то отладчик пропускает защищенный код программы (выполняя его) и переходит на первую строку кода после защищенного модуля. Аналогично выполняется команда Шагнуть из.

В стеке вызовов всегда указываются наименования процедур и функций. Если защищенный модуль еще не открывался, то при первой попытке перехода к выбранной процедуре защищенного модуля отладчик запрашивает пароль доступа. При последующих переходах в защищенный модуль из стека вызовов пароль запрашиваться не будет (в текущем сеансе работы).

31.3. Ошибки времени исполнения

31.3.1. Общая информация

Какие-то ошибки можно перехватить и обработать (восстановимые ошибки), какие-то ошибки не могут быть перехвачены (невосстановимые ошибки), но любая ошибка может быть отображена пользователю. Рекомендуется не подавлять отображение ошибок, т. к. это приводит к маскированию проблемы вместо ее решения.

В данном разделе будет описано как:

● Получать информацию о произошедшей ошибке, анализировать стек исключений, и получать принадлежность исключения к какой-либо категории из списка.

● Настраивать тексты сообщений об ошибках и формировать отчеты об ошибках.

● Перехватывать любые сообщения об ошибках в целях отображения информации об ошибке и формирования отчета об ошибке.

Смотри также:

● Работа с исключениями во встроенном языке (см. здесь).

● Восстановимая и невосстановимая ошибка (см. здесь).

31.3.2. Отображение ошибок

Отображение ошибок времени исполнения (т. е. ошибки, возникающие во время исполнения прикладного решения) зависит от того, какая ошибка (восстановимая или нет), а также от состояния режимов отладки и технического специалиста.

Если обнаружена восстановимая ошибка, то будет отображен диалог, в котором содержится некоторое описание ошибки и кнопка ОК. Если обнаружена невосстановимая ошибка, то в диалоге будут находиться кнопки Завершить и Перезапустить.

Кроме текста и кнопок, диалог с ошибкой может содержать гиперссылку Сформировать отчет об ошибке (в правом нижнем углу диалога). Наличие гиперссылки зависит от категории ошибки (не для всех категорий ошибок эта возможность доступна).

В диалоге с ошибкой отображается текст, содержимое которого для одной и той же ошибки зависит от режимов технического специалиста и режима отладки. Если клиентское приложение запущено в обычном режиме (без отладки и без режима технического специалиста), то в диалоге отображается представление ошибки для пользователя. Это представление зависит от категории ошибки. Если включен режим технического специалиста, то в диалоге будет отображаться подробный текст ошибки.

Так, если ошибка «Деление на 0» обнаружена без отладки и режима технического специалиста, то она будет отображаться следующим образом:

Рис. 599. Ошибка без режимов отладки и технического специалиста

Если включить режим технического специалиста, то эта же ошибка будет отображаться другим образом (текст в диалоге будет содержать фактическое сообщение об ошибке, без дополнительной обработки):

Рис. 600. Ошибка без режима отладки

Если клиентское приложение запущено в режиме отладки или используется мобильная версия платформы «1С:Предприятие» для разработчика, то информация об ошибке будет содержать фактический текст сообщения об ошибке (без дополнительной обработки), а кроме того, в диалоге будет отображаться кнопка Подробно:

Рис. 601. Ошибка в режиме отладки

Если в этом диалоге нажать кнопку Подробно, то откроется диалог следующего вида:

Рис. 602. Подробная информация об ошибке

В этом диалоге представлена вся доступная информация об ошибке (включая стек вызовов). Также имеется возможность завершить работу системы (кнопка Завершить работу) и перейти в конфигуратор на строку, в которой произошла ошибка. Для такого перехода предназначена кнопка Конфигуратор.

Если ошибка возникла при работе с сетью, то диалог с ошибкой выглядит немного по-другому:

Рис. 603. Потеряно соединение

В этом диалоге имеется возможность повторить действие или завершить работу. Повтор действия также будет выполняться каждую минуту (счетчик размещен на кнопке Повторить). Если нажать кнопку Отмена, от вместо диалога потери соединения будет отображаться стандартный диалог ошибки сети:

Рис. 604. Сетевая ошибка

Если сетевая ошибка возникла при обращении к информационной базе (при прямом подключении к кластеру серверов или при подключении по протоколу HTTP) и незавершенное действие может быть повторено, то система каждые 10 секунд проверяет доступность кластера серверов. После того, как доступность кластера восстанавливается, окно с ошибкой будет закрыто, и пользователь получит следующее оповещение:

Рис. 605. Оповещение о восстановлении соединения

После появления такого оповещения пользователь может полностью повторить прерванное действие.

31.3.3. Информация об ошибке

Если ошибка является восстановимой, то ситуацию возникновения такой ошибки можно обработать с помощью оператора Попытка … Исключение. Когда ошибка перехвачена с помощью оператора Попытка … Исключение, разработчику доступны несколько методов, позволяющих получить информацию об ошибке:

● ИнформацияОбОшибке(). С помощью этой функции можно получить одноименный объект, описывающий текущую ошибку.

● ОбработкаОшибок.КраткоеПредставлениеОшибки() ‑ позволяет получить краткое описание ошибки. Как правило, это текст, который вернула платформа в виде описания первой ошибки в стеке, без подробностей в виде имени модуля, номера строки и собственно текста на встроенном языке, приведшем к ошибке.

● ОбработкаОшибок.ПодробноеПредставлениеОшибки() ‑ позволяет получить подробное описание ошибки. Как правило, это будет текст, который содержит информацию о текущей ошибке (и всех ошибках, которые привели к текущей). Эта информация будет содержать описание ошибки, а также технические подробности в виде имени модуля, номера строки и текста на встроенном языке. Ошибка-первопричина будет в конце текста, а текущая ошибка ‑ в начале текста с представлением ошибки.

● ОбработкаОшибок.ПредставлениеОшибкиДляПользователя() ‑ позволяет получить только описание ошибки (без рекомендаций к действию), в том виде, как его увидит пользователь. Фактически, это краткое представление ошибки, в котором отсутствует информация, малопонятная или совсем непонятная пользователю. Например, в представлении ошибки не будет упоминания SDBL или какого-то объекта, у которого не найден метод.

● ОбработкаОшибок.СообщениеОбОшибкеДляПользователя() ‑ позволяет получить описание ошибки, в том виде, как его увидит пользователь в диалоге отображения ошибки. Это сообщение включает представление ошибки и некоторый опциональный набор рекомендаций.

Рассмотрим объект ИнформацияОбОшибке более подробно. Данный объект может быть получен с помощью функции ИнформацияОбОшибке() только в обработчике исключения. Объект содержит следующую информацию:

● Свойство Описание ‑ текстовое представление ошибки, сформированное платформой.

● Свойство Код ‑ содержит строку, которую можно использовать для уникальной идентификации исключения (ошибки) сформированного прикладным кодом.

● Свойство Причина ‑ объект типа ИнформацияОбОшибке, который описывает ошибку, которая явилась причиной данной ошибки. Данное свойство описывает стек исключений и позволяет получить всю причинно-следственную связь по ошибке.

● Свойство ИмяМодуля ‑ содержит полное имя модуля на встроенном языке, где произошла ошибка, которая описывается данным объектом. Номер строки в модуле и конкретная строка встроенного языка находятся в свойствах НомерСтроки и ИсходнаяСтрока, соответственно.

● Свойство ДополнительнаяИнформация ‑ это строка, которая содержит дополнительную информацию, которую можно указать при формировании исключения.

Для классификации ошибок служит метод ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(). Категории ошибок задаются системным перечислением КатегорияОшибки. Для фильтрации исключений, формируемых во встроенном языке оператором ВызватьИсключение, предназначена категория КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка.

Прикладному разработчику следует считать, что состав категорий будет расширяться с течением времени. Другими словами, в следующих версиях платформы может появиться категория ошибок, которой нет в текущей версии. Также стоит ожидать, что какая-то ошибка может поменять «принадлежность» к той или иной категории.

Смотри также:

● Работа с исключениями (см. здесь).

31.3.4. Обработка отображения ошибки

Ошибки могут быть перехвачены с помощью оператора Попытка … Исключение. В этом случае за информирование пользователя отвечает разработчик прикладного решения, который реализовал обработку исключения. Если ошибка не перехвачена, то разработчик, тем не менее, может получить управление перед тем, как сообщение об ошибке будет показано пользователю.

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

Рассмотрим параметры обработчика события ОбработкаОтображенияОшибки:

● ИнформацияОбОшибке ‑ объект одноименного типа, который содержит всю доступную информацию об ошибке, сообщение о которой планируется показать пользователю.

● ТребуетсяЗавершениеСеанса ‑ данный флажок сообщает о том, что будет отображаться информация о невосстановимом исключении (параметра установлен в значение Истина) и работа системы будет завершена после отображения завершения работы обработчика.

● СтандартнаяОбработка ‑ если данный параметр установлен в значение Истина, то после завершения работы обработчика события будет показана стандартная форма сообщения об ошибке.

Если внутри обработчика события ОбработкаОтображенияОшибки произойдет необработанное исключение, то выполнение обработчика завершится. Дальнейшее поведение зависит от того, включена в клиентском приложении отладка или нет:

● Режим отладки не включен ‑ пользователю будет показан стандартный диалог с информацией об ошибке, которая «привела» в обработчик события ОбработкаОтображенияОшибки.

● Режим отладки включен ‑ пользователю будет показан стандартный диалог с информацией о не перехваченной ошибке.

Рассмотрим весь процесс обработки ошибки в обработчике события ОбработкаОтображенияОшибки. Получив управление в обработчике события, можно определить степень критичности ошибки по параметры ТребуетсяЗавершениеСеанса. Если этот параметр установлен в значение Истина, значит код обработчика ‑ последний код прикладного решения, который выполнится до завершения работы клиентского приложения.

Если мы попали в этот обработчик, это значит, что информация об этой ошибке уже попала в журнал регистрации платформы. Т. к. вызов сервера нам, скорее всего, недоступен, то использовать платформенный журнал регистрации для фиксации дополнительной информации в данном обработчике не получится. Но можно использовать любой внешний инструмент журналирования, к которому можно получить доступ с помощью только клиентских инструментов любого клиентского приложения. Необходимо понимать, что ошибка сети может сделать невозможным использование и такого внешнего инструмента.

Теперь надо понять, как сообщение об ошибке будет показываться пользователю. Можно предоставить разбираться с этим платформе, в этом случае достаточно перед покиданием обработчика установить параметр СтандартнаяОбработка в значение Истина. Если мы сами хотим сформировать текст ошибки и показать его, то параметр СтандартнаяОбработка надо установить в значение Ложь и заняться формированием представления ошибки.

При формировании описания ошибки будем использовать два понятия:

● Представление ошибки ‑ это текст, который формируется только на основании объекта ИнформацияОбОшибке. Текст содержит только ту информацию, которая доступна из стека исключений.

● Сообщение пользователю ‑ это текст, который содержит в себе представление ошибки и некоторые рекомендации пользователю. Сообщение пользователю формируется с учетом настраиваемых шаблонов. Настройка шаблонов рассматривается в другом разделе.

В принципе, обладая объектом ИнформацияОбОшибке, можно сформировать произвольное представление ошибки. Однако так делать не рекомендуется. Рекомендуется показывать тот текст ошибки, какой формирует платформа. А вот сообщение пользователю можно формировать достаточно произвольно, например, вообще не включая в него представление ошибки.

Таким образом, функция ОбработкаОшибок.ПредставлениеОшибкиДляПользователя() позволит получить текст представления ошибки. А функция ОбработкаОшибок.СообщениеОбОшибкеДляПользователя() вернет готовое сообщение об ошибке, которое можно сразу показать пользователю.

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

Если все прошло нормально, то ошибка будет показана в окне следующего вида:

Рис. 606. Форма с ошибкой

На этой форме цифрами обозначены следующие объекты:

1. Это «представление ошибки для пользователя».

2. Это фрагмент сообщения пользователю, которое содержит рекомендации пользователю. Функция ОбработкаОшибок.СообщениеОбОшибкеДляПользователя() возвращает строки 1 и 2 как одну строку.

3. Это значение параметра ДополнительнаяИнформация метода ОбработкаОшибок.ПоказатьИнформациюОбОшибке().

4. Эта гиперссылка будет отображаться в том случае, если параметр ФормироватьОтчетОбОшибке метода ОбработкаОшибок.ПоказатьИнформациюОбОшибке() установлен в значение Истина.

Пример диалога, который отображается на рис. 606, создан очень простым обработчиком события ОбработкаОтображенияОшибки:

Копировать в буфер обмена

Процедура ОбработкаОтображенияОшибки(ИнформацияОбОшибке, ТребуетсяЗавершениеСеанса, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбработкаОшибок.ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке, ВариантОтображенияСообщенияОбОшибке.СообщениеОбОшибкеДляПользователя, "Здесь отображается дополнительная информация", Истина); КонецПроцедуры

Смотри также:

● Восстановимая и невосстановимая ошибка (см. здесь).

● Настройка шаблонов сообщений об ошибках (см. здесь).

● Отчет об ошибке (см. здесь).

31.3.5. Ошибка при входе в информационную базу

Ошибки, которые возникают при попытке входа в клиентское приложение, являются весьма непростыми для понимания обычным пользователем. В основном эти ошибки имеют две основных причины для возникновения:

● Технические проблемы с сетью, например не удается установить соединение с сервером, не удается установить соединение с информационной базой.

● Регламентные работы с информационной базой. К таким ошибкам можно отнести следующие ситуации: установка монопольной блокировки информационной базы, установка запрета начала сеанса и отказ от внешнего сервиса управления сеансами, ошибка лицензирования и т. д.

Как правило, тексты этих ошибок не несут никакой полезной информации для подавляющего большинства пользователей, хотя для технических специалистов могут представлять весьма полезную и нужную информацию. Данный раздел будет посвящен описанию того, как сделать так, чтобы сообщение о подобной ошибке максимально просто и понятно сообщало пользователю, что ему делать.

Сообщение об ошибке формируется системой и зависит от категории ошибки. Тонкую настройку можно выполнить с помощью стандартной функции Управление настройками обработки ошибок или с помощью аналогичного механизма, доступного из встроенного языка.

Также платформа предоставляет возможность настроить для подобных ошибок несколько дополнительных моментов. Такая настройка выполняется с помощью объекта НастройкиОбработкиОшибокПриЗапуске. Можно настроить следующие моменты:

● С помощью свойства ТекстПомощи можно настроить дополнительный текст, который будет отображаться в диалоге с ошибкой входа в приложение. Текст может быть задан обычной строкой или с помощью значения типа ФорматированнаяСтрока.

● С помощью свойства НавигационнаяСсылкаПомощи можно задать URL, переход по которому даст доступ к справочной информации, например к списку частых вопросов (FAQ). Если данное свойство содержит значение, то на форме ошибки подключения будет отображаться кнопка Нужна помощь?. Нажатие на гиперссылку приведет к переходу по указанной ссылке. URL должен содержать протокол, например, https://``example.``com или http://``example.``com.

● Свойство АдресСервисаОбработкиОшибокПриЗапуске позволяет задать адрес HTTP-сервиса, GET-запрос к которому позволит получить какую-либо дополнительную информацию о проблеме. Описание этого сервиса будет приведено далее.

● Свойство ДополнительнаяИнформацияЗапроса позволит указать дополнительную информацию, которая будет передана в заголовке запроса сервису обработки ошибок при запуске.

После того, как у объекта настроек заполнены нужные свойства, этот объект необходимо передать платформе «1С:Предприятие». Для этого предназначен метод ОбработкаОшибок.УстановитьНастройкиОбработкиОшибокПриЗапуске(). Текущие настройки можно получить с помощью парного метода ОбработкаОшибок.ПолучитьНастройкиОбработкиОшибокПриЗапуске().

Теперь рассмотрим, как использовать HTTP-сервис обработки ошибок при запуске. Данный HTTP-сервис предназначен для того, чтобы получить некоторую информацию для отображения пользователю в том случае, если при попытке входа в прикладное решение была обнаружена какая-то ошибка. Если настроен адрес сервиса, то после обнаружения ошибки платформа «1С:Предприятие» отправляет GET-запрос по адресу этого сервиса, при этом у запроса будут заполнены следующие заголовки:

Заголовок

Описание

errorDescr

Полный текст обнаруженной ошибки

appName

Имя клиентского приложения

appVersion

Версия клиентского приложения

clientID

Идентификатор клиента

additionalInfo

Дополнительная информация, которая заполняется из свойства НастройкиОбработкиОшибокПриЗапуске.ДополнительнаяИнформацияЗапроса

HTTP-сервис должен проанализировать запрос и вернуть json-файл следующей структуры:

Копировать в буфер обмена

{ userMessage:string userMessageEndTime:string }

В этом файле:

● userMessage ‑ текст сообщения, которое будет показано пользователю.

● userMessageEndTime ‑ время, после которого текст не будет отображаться на форме с ошибкой. Проверка времени выполняется на стороне клиентского приложения и по времени клиентского компьютера. Дата и время формируется в соответствии с ISO 8601.

Если запрос вернул корректные данные, а также если дата и время на клиентском компьютере это позволяют, то в окне ошибки будет отображена полученная информация (свойство userMessage).

Также следует отметить, что значения свойств ТекстПомощи и НавигационнаяСсылкаПомощи можно также указать с помощью свойств StartupErrorHelpText и StartupErrorHelpURL (соответственно) файла v8``i.

Рассмотрим возможные варианты настройки обработки ошибок при входе в систему. Если пользователи используют общий список информационных баз, то самым простым способом реакции на ошибки входа будет модернизация файла списка информационных баз. Для этого нужно для каждой информационной базы необходимо указать параметры StartupErrorHelpText и StartupErrorHelpURL. Данный способ не позволит использовать сервис обработки ошибок, но для внедрения такого способа не требуется использование собственно конфигурации.

Еще одним вариантом является использование стандартной функции Управление настройками обработки ошибок для настройки всех параметров обработки ошибок входа. Но это действие требует входа от имени администратора в каждую информационную базу, где требуется настроить ошибки входа.

Последним вариантом является настройка параметров обработки ошибок входа из кода собственно конфигурации, с помощью объекта НастройкиОбработкиОшибокПриЗапуске. Это самый гибкий способ настройки, т. к. позволяет выполнять различные условные настройки подсистемы обработки ошибок. Обратной стороной такой гибкости является необходимость внесение изменений в код конфигурации, что может потребовать снятие конфигурации с поддержки.

В простейшем случае сервис обработки ошибок входа можно свести к настройке веб-сервера на отдачу фиксированного файла. Настройка выполняется таким образом, чтобы при выполнении GET-запроса по адресу, который выбран в качестве адреса сервиса, отдавался файл info.``json описанного выше формата. Данный файл может изменяться администратором вручную или с помощью каких-либо инструментов автоматизации.

Смотри также:

● Описание формата файла v8``i (см. здесь).

31.3.6. Отчет об ошибке

31.3.6.1. Общая информация

У служб поддержки всегда есть одна задача, которую не очень просто решить: как собрать максимально полную и конкретную информацию об окружении, в котором произошла та или иная ошибка. Пользователь не всегда может корректно сообщить требуемую информацию, а служба поддержки может не знать, какую информацию надо запросить в момент обращения. Для того чтобы максимально упростить задачу получения информации об ошибке и информации о системе, платформа «1С:Предприятие» предоставляет разработчику прикладного решения специальный инструмент, который называется «отчет об ошибке».

Отчет об ошибке ‑ это одноименный объект системы программ «1С:Предприятие» (ОтчетОбОшибке), который позволяет:

● Получить максимум необходимой информации.

● Представить эту информацию в машиночитаемом виде (в определенном формате).

● Приложить нужные файлы (файлы дампов аварийного завершения и т. д.).

● Сформировать архив с этой информацией.

● Если отчет об ошибке формируется на стороне клиентского приложения ‑ отобразить на экране диалог с возможностью указать дополнительные подробности перед формированием архива с описанием ошибки.

● Сохранить на диск или отправить в сервис регистрации ошибок по указанному адресу. Сервис регистрации ошибок является HTTP-сервисом.

Информацию, которая будет отправлена пользователю, можно разделить на две части: автоматически собираемая информация и дополнительная информация. Автоматически собираемая информация получается при создании объекта ОтчетОбОшибке, а дополнительная информация может быть помещена в свойство ОтчетОбОшибке.ДополнительныеДанные. Т. к. отчет об ошибке размещается в файле формата JSON, то все дополнительные данные должны поддерживать JSON-сериализацию. Если дополнительные данные не поддерживают JSON-сериализацию, они будут проигнорированы и не попадут в отчет.

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

Рис. 607. Сообщение об ошибке с настроенной автоматической отправкой

Совет. При выполнении действий (например, автоматизированное тестирование или выполнение каких-либо регламентных операций) для которых не требуется отправлять отчеты об ошибках в конфигурации в сервис регистрации ошибок, рекомендуется отключать автоматическую отправку отчета об ошибках для пользователя, от имени которого выполняются эти действия.

Отчет будет оправлен после нажатия кнопки ОК. Также отправку отчета можно выполнить после открытия формы отчета об ошибке (которая будет доступна при нажатии на гиперссылку). Отправка будет возможна в том случае, если в настройках указан сервис регистрации ошибок и этот сервис доступен из клиентского приложения.

Для отчета об ошибке предусмотрена специальная форма. Эта форма может быть открыта одним из трех способов:

1. Из окна с сообщением об ошибке (по гиперссылке Сформировать отчет об ошибке или Отчет об ошибке будет отправлен автоматически. Настроить отчет…).

2. С помощью метода ОтчетОбОшибке.Записать() с включенным интерактивным режимом. Интерактивный режим игнорируется при использовании на стороне сервера.

3. С помощью метода ОтчетОбОшибке.Отправить() с включенным интерактивным режимом. Интерактивный режим игнорируется при использовании на стороне сервера.

Для интерактивного формирования отчета предназначена специальная форма.

Рис. 608. Форма отчета об ошибке

В форме отчета об ошибке пользователь может в свободной форме написать, как он можно воспроизвести ошибку. Для этого предназначено поле Пожалуйста, опишите проблему и последовательность действий, которая к ней привела. Текст, указанный в этом поле, попадет в поле отчета errorInfo``.``userDescription. Кроме этого, можно указать, какая дополнительная информация должна быть приложена к отчету (по порядку следования флажков на рис. 608):

● Подробный текст ошибки (в отчете ‑ свойство errorInfo``.``appErrorInfo).

● Снимки окон прикладного решения в момент ошибки (в отчете ‑ свойство screenshot).

● Имя пользователя, который работает в конфигурации (в отчете ‑ свойство clientInfo``.``userName).

● Сведения о используемом прикладном решении (в отчете ‑ свойство configInfo).

● Некоторую обобщенную информацию об операционной системе клиентского компьютера (в отчете ‑ свойство clientInfo``.``sysInfo).

● Если в результате ошибки сформирован дамп аварийного завершения, можно будет указать необходимость его включения в отчет (в отчете ‑ свойство dump).

● При необходимости, с помощью гиперссылки Приложить файл, пользователь может приложить к отчету любые файлы, которые могут помочь в расследовании ошибки (в отчете ‑ свойство additionalFiles).

● Дополнительные данные можно приложить только с помощью встроенного языка.

31.3.6.2. Формат файла report.json

Автоматически собираемая информация размещается в файле report.``json, который имеет следующий формат:

● time ‑ время создания ошибки в формате JavaScript.

● id ‑ уникальный идентификатор отчета об ошибке.

● clientInfo ‑ структура с информацией о клиентском приложении (если ошибка обнаружена на стороне клиента) или рабочем процессе (если ошибка обнаружена на стороне сервера).

● platformType ‑ тип платформы «1С:Предприятие». В качестве значения выступает значение свойства СистемнаяИнформация.ТипПлатформы в английском варианте написания.

● appVersion ‑ версия клиентского приложения (в виде строки), из свойства СистемнаяИнформация.ВерсияПриложения.

● appName ‑ имя клиентского приложения, как возвращает метод ИмяПриложения(). На сервере дополнительно возможны значения:

● BackgroundJob ‑ для фонового задания.

● HTTPServiceConnection ‑ для сессии HTTP-сервера.

● systemInfo ‑ структура с информацией о системе:

● osVersion ‑ строка с именем операционной системы (аналогично свойству СистемнаяИнформация.ВерсияОС).

● fullRAM ‑ всего установлено оперативной памяти.

● freeRAM ‑ свободно оперативной памяти.

● processor ‑ строка с описание процессора (из свойства СистемнаяИнформация.Процессор).

● useragent ‑ информация user``-``agent текущего веб-браузера (из свойства СистемнаяИнформация.ИнформацияПрограммыПросмотра).

● clientID ‑ текущий идентификатор клиентского приложения. Поле содержит значение свойства СистемнаяИнформация.ИдентификаторКлиента. Клиентским приложением выступает собственно клиентское приложение (если ошибка получена на стороне клиента) или рабочий процесс сервера (если ошибка получена на стороне сервера).

● sessionInfo ‑ информация о текущем сеансе:

● userName ‑ имя пользователя.

● dataSeparation ‑ значения разделителей текущего сеанса, аналогично параметру командной строки запуска клиентского приложения Z (см. здесь).

● platformInterfaceLanguageCode ‑ строка с кодом языка интерфейса.

● configurationInterfaceLanguageCode ‑ строка с кодом языка конфигурации для текущего пользователя.

● localeCode ‑ строка с кодом локализации сеанса (возвращаемое значение метода ТекущийКодЛокализации()).

● infoBaseInfo ‑ информация об информационной базе:

● localeCode ‑ строка с кодом локализации информационной базы (возвращаемое значение метода КодЛокализацииИнформационнойБазы()).

● serverInfo ‑ структура, содержащая информацию о кластере серверов:

● platformType ‑ тип платформы «1С:Предприятие». В качестве значения выступает значение свойства СистемнаяИнформация.ТипПлатформы в английском варианте написания.

● appVersion ‑ версия кластера серверов (в виде строки), из свойства СистемнаяИнформация.ВерсияПриложения.

● dbms ‑ тип СУБД, с которой работает кластер серверов. Для файлового варианта значение данного свойства равно DBEng``8.

● configInfo ‑ структура, описывающая информацию о конфигурации:

● name ‑ краткое имя конфигурации.

● description ‑ строка с информацией о конфигурации. Данная строка включает в себя: полное имя конфигурации, версия конфигурации, адрес конфигурации, название поставщика и адрес поставки. Данная информация отображается в диалоге О программе в поле Конфигурация:.

● version ‑ версия конфигурации.

● compatibilityMode ‑ режим совместимости конфигурации. В качестве значения выступает строка из английского написания значения системного перечисления РежимСовместимости. Вместо значения DontUse будет указано значение используемой версии в принятом формате.

● hash ‑ хеш конфигурации (в формате MD5).

● changeEnabled ‑ отображает возможность изменения конфигурации.

● extentions ‑ расширения, подключенные к конфигурации. Расширения перечислены в массиве, каждый элемент которого является массивом из двух элементов:

● Строка с именем расширения.

● Строка с хешем расширения.

● disabledExtentions ‑ перечень отключенных расширений конфигурации. Расширения перечислены в массиве, каждый элемент которого является массивом из двух элементов:

● Строка с именем расширения.

● Строка с хешем расширения.

● errorInfo ‑ структура с описанием ошибки (ОтчетОбОшибке.ИнформацияОбОшибке):

● userDescription ‑ текст описания ошибки, написанный пользователем (ОтчетОбОшибке.Описание). Отсутствует, если отчет об ошибке сформирован на сервере.

● systemErrorInfo ‑ информация об ошибке, относящаяся к платформе «1С:Предприятие»:

● clientStack ‑ текст стека клиентского приложения. Отсутствует, если отчет об ошибке сформирован на сервере.

● clientStackHash ‑ хеш текста стека клиентского приложения в формате MD5. Отсутствует, если отчет об ошибке сформирован на сервере.

● serverStack ‑ текст стека кластера серверов.

● serverStackHash ‑ хеш текста стека кластера серверов в формате MD5.

● systemCrash ‑ признак того, что отчет об ошибке формируется в результате аварийного завершения работы клиентского приложения.

● applicationErrorInfo ‑ информация об ошибке, относящаяся к прикладному решению:

● errors ‑ массив описаний всех ошибок. Массив состоит из массивов, каждый из которых состоит из двух элементов:

● Строка с текстом ошибки.

● Массив строк категорий ошибки. Значения массива ‑ английский вариант написания значений системного перечисления КатегорияОшибки.

● stack ‑ массив со стеком вызовов встроенного языка на момент ошибки. Массив состоит из массивов, каждый из которых состоит из трех элементов:

● Имя модуля (строка).

● Номер строки модуля (число).

● Исходный текст из строки модуля (строка).

● stackHash ‑ хеш текста стека встроенного языка в формате MD5.

● screenshot ‑ файл со скриншотом экрана. Отсутствует, если отчет об ошибке сформирован на сервере.

● file ‑ имя файла снимка экрана. Файл должен находиться в архиве с указанным именем.

● additionalData ‑ дополнительные данные, сериализованые в JSON. Получаются из свойства ОтчетОбОшибке.ДополнительныеДанные.

● additionalFiles ‑ массив имен файлов, приложенных дополнительно. Сами файлы размещаются в архиве с указанными, в данном массиве, именами. Получаются из свойства ОтчетОбОшибке.ДополнительныеФайлы.

● dump ‑ информация о дампе аварийного завершения:

● type ‑ тип дампа (аналогичен значению атрибута type элемента dump файла logcfg.``xml).

● file ‑ имя файла дампа. Файл должен находиться в архиве с указанным именем.

● reasonForNoDump ‑ причина, по которой файл дампа не сформирован. Возможные значения:

● genericFailure ‑ ошибка при создании файла дампа.

● userRefused ‑ пользователь отказался от формирования дампов клиентского приложения.

● insufficientResources ‑ недостаточно ресурсов для формирования дампов (только для кластера серверов).

Замечания о формировании отчета об ошибке:

● Отправка отчетов об аварийном завершении поддерживается только на компьютерах, работающих под управлением ОС Windows.

● Отправка отчета об ошибке (в том числе и отчетов об аварийном за-вершении) будет происходить из того же окружения, где выполнялся процесс, в котором произошла ошибка (процесс клиентского приложения или рабочий процесс кластера серверов).

● Для успешной отправки отчета об ошибке требуется, чтобы приложению, которое отправляет отчет об ошибке (клиентское приложение или рабочий процесс сервера), был разрешен доступ в Интернет по адресу сервиса регистрации ошибок (значение свойства НастройкиОбработкиОшибок.АдресСервисаОбработкиОшибок).

● Для успешной отправки отчета об аварийном завершении требуется, чтобы утилите dumper был разрешен доступ в Интернет по адресу сервиса регистрации ошибок (значение свойства НастройкиОбработкиОшибок.АдресСервисаОбработкиОшибок) или адресу сервиса регистрации ошибок платформы (https://pult.1c.com).

● При аварийном завершении отчет об ошибке будет содержать минимальный дамп (type``= 0), если отсутствуют достаточное количество свободных ресурсов:

● Свободной оперативной памяти меньше, чем количество памяти, выделенное на упавший процесс.

● Совокупная загрузка процессора более 50%.

Поля в файле report.``json не являются обязательными и зависят от того, какие настройки обработки ошибок указаны для данного пользователя.

Если требуется получить для анализа файл report.``json, то можно использовать функцию ОтчетОбОшибке.ПолучитьТекстОтчета(). В результате ее вызова будет получена строка, которая представляет собой содержимое этого файла. Для чтения вполне подходит штатные механизмы чтения JSON, которые предоставляет платформа.

Смотри также:

● Работа с форматом JSON (см. здесь).

● Сервис регистрации ошибок (см. здесь).

● Запрет отображения диалога ошибки при возникновении невосстановимой ошибки (см. здесь).

31.3.7. Настройка механизма обработки ошибок

Для настройки механизма обработки ошибок предназначен объект НастройкиОбработкиОшибок. Настройки обработку ошибок можно как для всех пользователей сразу, так и для какого-либо одного пользователя. Для работы с настройками для всех пользователей предназначены методы ОбработкаОшибок.ПолучитьОбщиеНастройки() и ОбработкаОшибок.УстановитьОбщиеНастройки(). Для работы с настройками конкретного пользователя предназначены методы ОбработкаОшибок.ПолучитьНастройкиПользователя() и ОбработкаОшибок.УстановитьНастройкиПользователя(). Настройки обработки ошибок в обоих случаях одинаковые по составу и поведению. Различаются настройки, которые отвечают за поведение системы в случае, если ошибка вознимкла на стороне клиентского приложения или на стороне серверного приложения. Как правило, все различие заключается в суффиксе НаКлиенте (для ошибки в клиентском приложении) или НаСервере (для ошибки в серверном приложении). В описании настроек (далее по тексту) такие настройки не будут описываться раздельно, кроме некоторых случаев.

Для настройки доступны следующие настройки:

● АдресСервисаОбработкиОшибок ‑ данная настройка позволяет указать сервис, который будет использоваться для автоматической регистрации ошибок (см. здесь).

● ВариантОтображенияСообщения ‑ настраивает вид сообщения об ошибке:

● СообщениеОбОшибкеДляПользователя ‑ в этом случае отображается результат работы метода ОбработкаОшибок.СообщениеОбОшибкеДляПользователя().

● КраткоеПредставлениеОшибки ‑ в этом случае отображается результат работы метода ОбработкаОшибок.КраткоеПредставлениеОшибки().

● ПодробноеПредставлениеОшибки ‑ в этом случае отображается результат работы метода ОбработкаОшибок.ПодробноеПредставлениеОшибки().

● Авто ‑ в настройках обработки ошибок интерпретируется следующим образом:

● в режиме совместимости с версией 8.3.16 и предыдущих ‑ как значение КраткоеПредставлениеОшибки.

● в остальных случаях ‑ как значение СообщениеОбОшибкеДляПользователя.

● ВключатьИмяПользователяВОтчетНаКлиенте, ВключатьИмяПользователяВОтчетНаСервере ‑ управляет включением имени текущего пользователя в отчет об ошибке.

● ВключатьИнформациюОСистемеВОтчетНаКлиенте ‑ управляет включением в отчет об ошибке системной информации о клиентском компьютере.

● ВключатьСнимокОконВОтчетНаКлиенте ‑ управляет включением в отчет об ошибке снимок окон программы.

● ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте, ВключатьПодробныйТекстОшибкиВОтчетНаСервере ‑ управляет включением в отчет об ошибке подробного текста ошибки.

● ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте, ВключатьСведенияОбИнформационнойБазеВОтчетНаСервере ‑ управляет включением в отчет об ошибке на клиенте сведений об информационной базе (сведения о конфигурации, расширениях и сервере).

● ДополнительнаяИнформацияОтчета ‑ позволяет указать произвольную дополнительную информацию, которая будет добавлена в отчет. Если в настройках для пользователя пустая строка, то значение параметра будет получено из общих настроек. Данная строка может содержать имя/код базы и/или области, либо любую другую указанную разработчиком информацию.

● ОтправлятьОчетНаКлиенте ‑ управляет необходимостью автоматической отправки отчета об ошибке прикладного решения (на стороне клиента) в сервис, адрес которого указан в свойстве АдресСервисаОбработкиОшибок.

● ОтправлятьОтчетНаСервере ‑ управляет необходимостью автоматической отправки отчета об ошибке прикладного решения (на стороне сервера) в сервис, адрес которого указан в свойстве АдресСервисаОбработкиОшибок. Настройка предназначена для ошибок, которые не предусматривают обработку ошибок на стороне клиентского приложения.

● ОтправлятьОтчетОбАварийномЗавершенииНаКлиенте, ОтправлятьОтчетОбАварийномЗавершенииНаСервере ‑ управляет необходимостью автоматически отправлять отчет об ошибке при аварийном завершении работы приложения в сервис, который указан в свойстве АдресСервисаОбработкиОшибок.

● ОтправлятьОтчетОбАварийномЗавершенииНаКлиентеВСервисРегистрацииОшибокПлатформы, ОтправлятьОтчетОбАварийномЗавершенииНаСервереВСервисРегистрацииОшибокПлатформы ‑ управляет необходимостью автоматически отправлять отчет об ошибке при аварийном завершении работы клиентского приложения в сервис «1С:Пульт»: https://pult.1c.com/pult/platform/errors. Отключить взаимодействие с этим сервисом можно, указав в данном свойстве значение РежимОтправкиИнформацииОбОшибке.НеОтправлять.

● ТекстыСообщенийОбОшибках ‑ позволяет задавать шаблоны текстов об ошибке.

Свойство ТекстыСообщенийОбОшибках позволяет задать представление ошибок для пользователя. Данное свойство представляет собой коллекцию элементов типа КлючИЗначение. При этом в качестве ключа выступает значение типа КатегорияОшибки, а в качестве ключа выступает значение типа ТекстыСообщенияОбОшибке. Объект типа ТекстыСообщенийОбОшибках не имеет собственного конструктора и может быть получен только из настроек обработки ошибок.

Объект ТекстыСообщенийОбОшибках позволяет указать два текста:

● текст для восстановимой ошибки (свойство объекта ТекстДляОшибкиНеТребующейПерезапуск);

● текст для невосстановимой ошибки (свойство объекта ТекстДляОшибкиТребующейПерезапуск).

Текст сообщения должен включать информацию, понятную пользователю и может включать в себя стандартное представлений ошибки (одно или несколько). Стандартное представление ошибки ‑ это то представление ошибки, которое формируется соответствующим методом платформы. Таким образом, текст ошибки, который формируется платформой ‑ изменить невозможно. Но можно изменить текст, который увидит пользователь.

Рассмотрим пример: допустим, мы хотим для всех ошибок, вызванных оператором ВызватьИсключение, выводить текст Неожиданная ошибка. Обратитесь к разработчику конфигурации!, а сам текст ошибки не показывать. Для начала зафиксируем, как будет выглядеть ошибка, которая отображается платформой в случае, если на встроенном языке написать код вида ВызватьИсключение "Ошибка из встроенного языка";:

Рис. 609. Сообщение по умолчанию

Если теперь выполнить следующий пример на встроенном языке:

Копировать в буфер обмена

Настройки = ОбработкаОшибок.ПолучитьНастройкиПользователя(); Настройки.ТекстыСообщенийОбОшибках.Очистить(); Текст = Новый ТекстыСообщенияОбОшибке("Неожиданная ошибка. Позвоните разработчикам по внутреннему телефону 1234!", ""); Настройки.ТекстыСообщенийОбОшибках.Вставить(КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка, Текст); ОбработкаОшибок.УстановитьНастройкиПользователя(Настройки);

и перезапустить клиентское приложение, то это же исключение будет выглядеть следующим образом:

Рис. 610. Новое сообщение об ошибке

Однако, кроме очевидной замены всего текста сообщения, может потребоваться и комбинация стандартного, платформенного, текста сообщения об ошибке и какого-то дополнительного текста. Для этих целей платформа предоставляет несколько параметров, которые можно вставить в текст сообщения:

Имя параметра

Описание

КраткоеПредставлениеОшибки

BriefErrorDescription

Содержит результат работы метода ОбработкаОшибок.КраткоеПредставлениеОшибки()

ПодробноеПредставлениеОшибки

DetailErrorDescription

Содержит результат работы метода ОбработкаОшибок.ПодробноеПредставлениеОшибки()

ПредставлениеОшибкиДляПользователя

ErrorDescriptionForUser

Содержит результат работы метода ОбработкаОшибок.ПредставлениеОшибкиДляПользователя()

СтандартноеСообщениеОбОшибкеДляПользователя

StandardErrorMessageForUser

Содержит результат работы метода ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(), но при формировании сообщения будет использоваться стандартный шаблон платформы, а не тот текст, который сейчас установлен в настройках обработки ошибок

Текст параметра подставляется в текст сообщения в квадратных скобках []. Так, если мы хотим в нашем примере все-таки добавить полный текст ошибки в сообщение, то это можно сделать следующим кодом:

Копировать в буфер обмена

Настройки = ОбработкаОшибок.ПолучитьНастройкиПользователя(); Настройки.ТекстыСообщенийОбОшибках.Очистить(); Текст = Новый ТекстыСообщенияОбОшибке("Неожиданная ошибка. Позвоните разработчикам по внутреннему телефону 1234!" + Символы.ПС + "[ПодробноеПредставлениеОшибки]", ""); Настройки.ТекстыСообщенийОбОшибках.Вставить(КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка, Текст); ОбработкаОшибок.УстановитьНастройкиПользователя(Настройки);

После выполнения такого кода и перезапуска клиентского приложения, текст нашей ошибки будет выглядеть следующим образом:

Рис. 611. Сообщение об ошибке с «платформенным» текстом

Настройка поведения системы обработки ошибок далеко не всегда может быть выполнена в момент разработки прикладного решения. Например, может возникнуть желание интегрировать в тексты с ошибками контактные данные службы поддержки конкретного предприятия. Очевидно, что разработчик прикладного решения не знает ни об этом желании, ни о координатах этой службы. Поэтому в платформе реализована возможность настраивать сообщения об ошибках в режиме «1С:Предприятие», с помощью стандартной функции Управление настройками обработки ошибок (см. здесь).

31.3.8. Cервис регистрации ошибок

31.3.8.1. Общая информация

Для регистрации отчетов об ошибках, необходимо опубликовать HTTP-сервис, с которым будет взаимодействовать платформа при необходимости отправки отчета об ошибке. Сервис должен реализовывать некоторый интерфейс, который ожидает система «1С:Предприятие». Описание интерфейса приводится в этом разделе.

31.3.8.2. Метод getInfo

Описание

HTTP-метод: POST.

Используется для того, чтобы платформа «1С:Предприятие» получила указание, как поступить с ошибкой в данной конфигурации.

Параметры

Тело запроса­входной Содержит запрос, в формате JSON. В запрос передаются значения отчета об ошибке. Соответствие свойств запроса и свойств отчета об ошибке приводится в следующей таблице:

Поле запроса

Поле отчета об ошибке

appName

clientInfo.appName

appStackHash

errorInfo.applicationErrorInfo.stackHash

appVersion

clientInfo.appVersion

clientID

clientInfo.clientID

clientStackHash

errorInfo.systemErrorInfo.clientStackHash

configHash

configInfo.hash

configName

configInfo.name

configurationInterfaceLanguageCode

sessionInfo.configurationInterfaceLanguageCode

configVersion

configInfo.version

errorCategories

Массив, который содержит уникальные категории ошибок из списка ошибок errorInfo.errors

platformInterfaceLanguageCode

sessionInfo.platformInterfaceLanguageCode

platformType

clientInfo.platformType

reportID

id

serverStackHash

errorInfo.systemErrorInfo.serverStackHash

systemCrash

errorInfo.systemErrorInfo.systemCrash

Возвращаемое значение

Тело запроса­выходной

Содержит ответ, в формате JSON, указывающий, какие действия необходимо выполнить системе «1С:Предприятие»:

● needSendReport ‑ данная ошибка должна быть отправлена в сервис регистрации.

Тип Булево.

● userMessage ‑ текст, который будет показан пользователю в качестве дополнительной информации об ошибке (подробнее см. здесь). Текст желательно возвращать на том языке, который будет понятен пользователю. Информацию о локализации можно получить из запроса, который поступает в метод getInfo.

Если желательно, чтобы пользователь отправил отчет о конкретной ошибке в сервис регистрации ошибок, то с помощью данного свойства можно показать пользователю рекомендацию, мотивирующую на отправку отчета об ошибке.

Тип Строка.

● dumpType ‑ тип дампа, который нужно приложить к отчету об ошибке (аналогичен значению атрибута type элемента dump файла logcfg.``xml). Поле будет анализироваться клиентским приложением в том случае, если ответ формируется для запроса, связанного с аварийным завершением работы клиентского приложения (поле запроса systemCrash равно true). Если данного поля в ответе не содержится ‑ значит файл дампа не будет прислан.

Тип Число.

31.3.8.3. Метод pushReport

Описание

HTTP-метод: POST.

Выполняется отправка отчета об ошибке в сервис регистрации ошибок.

Параметры

Тело запроса­входной Тело содержит файл отчета для техподдержки в виде архива.

Возвращаемое значение

Нет.

31.4. Замер производительности

31.4.1. Общая информация

Замер производительности позволяет оценить скорость работы всей конфигурации или ее части, работающей в рамках любого типа предмета отладки. Измеряется частота использования конкретных участков кода и скорость их выполнения; указывается, какой код исполнялся на сервере, а какой ‑ на клиенте; указываются строки кода, приведшие к вызову сервера. Если имеется несколько способов решения какой-либо задачи, можно реализовать их все, после чего выбрать самый быстрый.

При этом необходимо иметь в виду, что сравнение нужно производить в одинаковых условиях. Например, если во время выполнения задачи одним из сравниваемых способов процессор компьютера был загружен еще какой-либо задачей, это может повлиять на достоверность сравнения. Возможны и другие, менее очевидные причины, по которым условия измерения окажутся различными. Поэтому при сравнении двух способов выполнения задачи, имеющих близкую производительность, желательно делать с каждым из них несколько замеров ‑ для оценки и усреднения случайного разброса.

Для замера производительности нужно выбрать команду Отладка``‑ Замер производительности. При повторном выборе команды замер прекратится и откроется окно с его результатами. Включение и выключение замера производительности действуют на все предметы отладки, которые в настоящий момент подключены к отладчику.

31.4.2. Варианты порядка действий

Если нужно измерить производительность конфигурации, включая участок, выполняемый при старте системы, необходимо сначала выбрать команду Отладка``‑ Замер производительности, а затем запустить систему «1С:Предприятие». Время, прошедшее между стартом замера и началом работы системы, не будет учитываться в результатах замера.

Если участок, выполняемый при старте системы, включать в замер не требуется, необходимо сначала запустить систему «1С:Предприятие», подготовить ее к выполнению требуемого участка, затем перейти в конфигуратор и включить замер.

Если в замер нужно включить участок, выполняемый при окончании работы системы «1С:Предприятие», то, независимо от того, использовался ли вариант 1 или 2 для начала замера, нужно завершить работу программы, после чего перейти в режим Конфигуратор. В этом случае прекращать замер вручную не нужно. Как только будут подведены итоги замера, его результаты появятся на экране.

Если участок, выполняемый при окончании работы системы «1С:Предприятия», включать в замер не требуется, то для появления результатов замера его нужно закончить. Например, для анализа процедуры проведения какого-либо документа нужно запустить программу, открыть документ, заполнить его, перейти в режим Конфигуратор, включить замер, перейти в режим 1С:Предприятие, провести документ, перейти в режим Конфигуратор и закончить замер.

31.4.3. Результаты замера

Результаты замера ‑ ссылки на конкретные строки модуля с указанием частоты их выполнения и длительности ‑ представляются в виде табличного поля, имеющего следующие колонки:

● Модуль ‑ содержит название модуля.

● Номер строки ‑ номер строки модуля.

● Строка ‑ текст данной строки модуля.

● Кол. ‑ количество вызовов данной строки за время замера.

● Врем. ‑ суммарное время (сек.) выполнения данной строки за время замера.

● %(Врем.) ‑ процент суммарного времени выполнения данной строки к общему времени замера (общее время замера равно сумме всех промежутков времени, в которые выполнялся код конфигурации). При этом за 100 % принимается время выполнения кода на клиенте.

Рис. 612. Пиктограммы замера производительности

● Клиент ‑ пиктограммой (отмечена цифрой 1 на рис. 612) отмечаются строки кода, выполняющиеся на клиенте;

● Автономный сервер ‑ пиктограммой (отмечена цифрой 3 на рис. 612) отмечаются строки кода, которые выполняются на автономном сервере мобильного клиента с автономным режимом. Колонка, связанная с автономным сервером и флажок отбора Автономный сервер будут доступны только в том случае, если выполняется отладка мобильного клиента с возможностью использования автономного режима.

● Сервер ‑ пиктограммой (отмечена цифрой 3 на рис. 612) отмечаются строки кода, выполняющиеся на сервере;

● Обр. сервер ‑ пиктограммами отмечаются строки кода, приводящие к вызову сервера:

● Вызов сервера происходил на уровне платформы, или непосредственно вызывались процедуры или функции, исполняемые на сервере (на рис. 612 отмечена цифрой 2).

● Локальный вызов процедуры или функции, исполняемой на клиенте, внутри которой вызов сервера происходил на уровне платформы, или непосредственно вызывались процедуры или функции, исполняемые на сервере (на рис. 612 отмечена цифрой 4).

В результатах замера производительности время выполнения каждой строки складывается из времени выполнения собственно операторов строки («чистое время») и времени вызова процедуры (функции), если такие в строке есть. С помощью флажка Для вызовов процедур и функций включать время выполнения можно выбирать, какое время требуется показывать: полное время (как сумму времени вызова и «чистого времени») или «чистое время» выполнения.

Рис. 613. Результат замера

Если в строке есть хотя бы один вызов процедуры (функции), то время выполнения включает время выполнения собственно операторов строки и время вызова процедуры (функции).

Если флажок установлен, то время вызова процедуры (функции) учитывается в общем времени выполнения.

Если флажок снят, в результат замера будет включено только время выполнения строк кода, но не время работы процедуры (функции), которая вызывается в данной строке. В этом случае суммарное время выполнения данной строки (в колонке Врем.) не будет отражать реального времени, потраченного системой на отработку данной строки. Необходимо иметь в виду, что выполнение вызванной процедуры (функции) может занимать значительное время, которое в данном случае не будет включено в результат («чистое время»). По умолчанию флажок установлен, а его состояние запоминается между сеансами. При смене состояния изменяются наименования колонок времени.

В правом нижнем углу формы с результатами замера (см. рис. 613) располагаются флажки, позволяющие управлять отображением результатов замера производительности:

● Флажок Клиент ‑ управляет отображением результатов замера выполнения кода на клиенте.

● Флажок Автономный сервер ‑ управляет отображением результатов замера выполнения кода на автономном сервер мобильного клиента с автономным режимом.

● Флажок Сервер ‑ управляет отображением результатов замера выполнения кода на сервере.

● Устанавливая и сбрасывая нужные флажки, можно получить отображение нужной комбинации результатов замера производительности.

Флажки показываются, если выполняется отладка серверной информационной базы. Флажки доступны, если выполняется отладка серверного предмета отладки.

Если открыто несколько окон с результатами замера производительности, то при подведении указателя мыши к колонке результатов замера показывается подсказка, содержащая URL файла, данные которого в этой колонке отображаются.

По двойному щелчку мыши в колонке с результатами замера производительности в редакторе модуля осуществляется переход к соответствующей строке файла с результатами замера производительности.

Кроме специального окна результаты замера можно видеть непосредственно в окне с исходным кодом модуля. Если в отладчике открыто окно с замером, в окнах модулей появляется колонка, показывающая количество вызовов данной строки и процент времени ее работы от общего времени.

Рис. 614. Результаты замера в тексте модуля

Пиктограммами показывается выполнение кода на клиенте или сервере, а также вызовы сервера (аналогично окну с результатами замера), описание пиктограмм (см. рис. 612).

Двойным щелчком мыши по строке окна результатов замера можно переключиться на соответствующую строку в окне модуля.

Если открыто несколько замеров одновременно, то в окнах с текстами модулей появится соответствующее количество колонок.

Закрытие окна результатов замера убирает из модулей колонки с количеством вызовов и процентом времени работы.

31.4.4. Сортировка результатов замера

Результаты замера могут быть отсортированы по любой колонке отчета.

Сортировка осуществляется щелчком мышью на заголовке одной из колонок. Щелчок на заголовках Модуль или Строка обеспечивает сортировку по номерам строк, Кол. ‑ по количеству вызовов строки, Врем. Или %(Врем.) ‑ по времени работы. Если выполнялся замер производительности выполнения кода на клиенте и на любом сервере, то сортировка допускается также и по этим колонкам.

31.4.5. Выборочное суммирование результатов замера

Для анализа результатов замера могут оказаться полезными суммарные характеристики. Если в окне результатов отметить несколько строк, их суммарные характеристики ‑ суммы количества вызовов, времени работы в секундах и процентах ‑ отображаются в нижней части окна.

Флажок Для вызовов процедур и функций включать время выполнения служит для выбора одного из двух методов приблизительного отслеживания уровней вложенности при суммировании. Если в данном модуле имеется и строка, вызывающая некоторую процедуру, и строки текста самой процедуры, то, конечно, не следует помечать и то, и другое: это приведет к повторному учету в сумме одного и того же времени выполнения. Если все же приходится пометить их (например, слишком много усилий пришлось бы потратить на отслеживание), то можно снять флажок, и повторного учета не будет. С другой стороны, если все вызываемые процедуры ‑ внешние по отношению к модулю, флажок лучше установить. Тогда в общее время выполнения будет включено время отработки этих процедур, что лучше отражает реальное время работы.

31.4.6. Особенности замера производительности при работе клиент-серверной базы

При замере производительности результаты замера для кода встроенного языка, выполняемого для одного и того же номера соединения на клиенте и на сервере, будут объединяться в один общий замер производительности. При этом указывается, какие строки кода выполнялись на клиенте, а какие ‑ на сервере, из каких строк кода осуществлялся вызов процедуры или функции, исполняемых на сервере, а также системные вызовы (самой платформы, например, оператор Выполнить для запроса, оператор записи объекта базы данных) на сервере.

При просмотре результатов можно указать, что показывать в замере: замер для клиента, замер для сервера, замер для клиента и сервера вместе. Выбор режима устраивается с помощью флажков в правом нижнем углу окна с результатами замера производительности.

Для серверных вызовов учитывается время выполнения серверного вызова на самом сервере. Можно рассматривать происходящее по аналогии со временем исполнения вложенных вызовов процедур и функций для клиентского приложения.

31.4.7. Сохранение результатов

Результат замера можно сохранить в файл с помощью команд Файл``‑ Сохранить и Файл``‑ Сохранить как. В стандартном диалоге сохранения нужно выбрать каталог и указать имя файла. Файл результатов имеет расширение *.``pff.

Открыть файл с замером можно командой Файл``‑ Открыть файл. Для отбора файлов с замерами следует использовать фильтр Замер производительности (*.``pff).

31.5. Механизм имитации задержек при вызове сервера

Цель механизма ‑ имитация работы прикладного решения в условиях существенных временных задержек, возникающих при взаимодействии с сервером.

Примечание. Включить механизм можно только в тонком клиенте и в режиме управляемого приложения толстого клиента.

Механизм обеспечивает имитацию временных задержек, возникающих в следующих случаях:

● задержка при вызове сервера: указывается в секундах на каждый вызов сервера;

● задержка при отправке данных на сервер: указывается в секундах в расчете на каждые 1 Кбайт (1024 байта) данных, отправляемых на сервер.

● задержка при получении данных с сервера: указывается в секундах в расчете на каждые 1 Кбайт (1024 байта), принимаемых с сервера.

Включение механизма можно обеспечить с помощью соответствующей настройки параметров конфигуратора (см. здесь), а также с помощью ключа командной строки /``SimulateServerCallDelay [-``CallXXXX] [-``SendYYYY] [-``ReceiveZZZZ], где:

● Call ‑ параметр, указывающий величину задержки при вызове сервера в секундах, если не указан, то 1.45 секунды.

● Send ‑ параметр, указывающий величину задержки в секундах в расчете на каждые 1 Кбайт данных, отправляемых на сервер. Если не указан, то 0.45 секунды.

● Receive ‑ параметр, указывающий величину задержки в секундах в расчете на каждые 1 Кбайт данных, принятых с сервера. Если не указан, то 0.15 секунды.

Пример:

Копировать в буфер обмена

/SimulateServerCallDelay Call2.1 Send1.3 Receive1.2

Примечание. Максимальное значение устанавливаемой задержки равно 9,99 секунды. Значение, равное 0, означает, что данная задержка не применяется.

Механизм имитации задержек при вызове сервера также может быть включен в режиме 1С:Предприятие. Это можно сделать с помощью диалога Сервис``‑ Параметры. Настройка механизма имитации задержек при вызове сервера, сделанная в режиме «1С:Предприятие», действует только на протяжении текущего сеанса и не сохраняется.

31.6. Отображение вызовов сервера

Данный механизм предназначен для отладки клиент-серверной системы и оценки объема данных, передаваемых между клиентом и сервером.

Режим можно включить с помощью соответствующей настройки параметров конфигуратора (см. здесь) или ключа командной строки /``DisplayPerformance. Отображение показателей производительности также можно включить и в режиме 1С:Предприятие с помощью флажка Отображать показатели производительности диалога Сервис``‑ Параметры. По умолчанию механизм выключен.

Если режим включен, то «1С:Предприятие» будет отображать показатели производительности в панели показателей производительности в нижней части основного окна приложения.

Рис. 615. Панель показателей производительности

Если включен режим имитации задержек при вызове сервера, то картинка в окне, показывающем вызовы сервера, будет иметь другой вид:

Рис. 616. Вызовы сервера в режиме имитации задержек при вызове сервера

Если прикладное решение находится в состоянии, когда основное окно приложения еще не открыто или уже закрыто, но прикладной код работает, то окно показателей производительности имеет вид:

Рис. 617. Вызовы сервера

Если при этом включен режим имитации задержек сервера, то окно показателей производительности будет иметь такой вид:

Рис. 618. Имитация задержек при вызове сервера

При изменении данных, отображаемых в окне вызовов сервера, они выводятся красным цветом.

По умолчанию окно состоит из двух счетчиков: Текущие вызовы и Накопленные вызовы:

● Текущие вызовы ‑ показывает состояние вызовов сервера с некоторого момента времени: с начала работы механизма или с последнего пользовательского действия, после которого 0,2 сек. Не было других пользовательских действий.

● Накопленные вызовы ‑ показывает состояние вызовов сервера с начала работы механизма или с последнего его принудительного сброса через команду контекстного меню.

Настройка показателей производительности выполняется с помощью диалога Настройка показателей производительности. Доступ к этому диалогу можно получить, нажав кнопку в панели показателей производительности и выбрав в меню команду Настройка.

Рис. 619. Меню настройки

В диалоге настройки можно указать следующие параметры:

● группа Периодичность ‑ указывает, за какой период требуется отображать значения счетчиков;

● группа Показатели ‑ указывает, какие показатели в счетчиках нужно отображать.

Рис. 620. Настройка показателей производительности

Также контекстное меню окна содержит следующие команды:

● Очистить накопленные ‑ очищает счетчик накопленных вызовов;

● История текущих…``‑открывает окно с историей счетчика текущих вызовов;

● История накопленных… ‑ открывает окно с историей счетчика накопленных вызовов.

Настройки являются общими для всех пользователей и всех информационных баз на данном компьютере. Настройка отображения окна вызовов сервера, сделанная в режиме 1С:Предприятие, действует только на протяжении текущего сеанса и не сохраняется.

Необходимо учитывать следующие особенности механизма:

● при работе в файловом варианте (при прямом соединении с информационной базой) объем данных отображается без сжатия, так как сжатие в этом случае не производится;

● при работе в клиент-серверном варианте или в файловом варианте с подключением через веб-сервер, при использовании режима сжатия трафика SDC, значения показателей могут зависеть от последовательности действий, так как сжатие выполняется с использованием предыдущих передаваемых данных.

В веб-клиенте данный механизм имеет ряд особенностей:

● Учитываются только синхронные запросы.

● Объем передаваемых данных отображается в символах, а не байтах. Результаты замеров можно использовать для оценочного сравнения различных вариантов вызова в веб-клиенте и не рекомендуется использовать для сравнения объема передаваемых данных между различными видами клиентов.

● Показатели производительности не отображаются до момента отображения основного окна приложения, при этом значения показателей накапливаются. В результате, после отображения основного окна приложения, можно увидеть интересующие результаты запуска веб-клиента.

● Окно с показателями имеет больший размер, чем на других клиентах, и не отображается поверх других окон.

31.7. Автоматизированное тестирование прикладных решений

31.7.1. Общая информация

Автоматизированное тестирование представляет собой имитацию интерактивных действий пользователя и проверку результатов этих действий.

Внимание! Автоматизированное тестирование поддерживается только для управляемого приложения.

Сценарий автоматизированного тестирования представляет собой программу на встроенном языке системы «1С:Предприятие». В сценарии описывается последовательность выполняемых действий и проверка результата их (действий) выполнения. Для этого во встроенном языке существуют специальные объекты, позволяющие имитировать интерактивные действия в тестируемом приложении и предоставляющие доступ к логической модели интерфейса клиентского приложения и элементов управляемой формы. Один сценарий тестирования может применяться для любого тестируемого клиентского приложения.

В процессе тестирования участвуют две системы: менеджер тестирования и клиент тестирования. Менеджер тестирования обеспечивает:

● Установку соединения с клиентом тестирования для выполнения сценария тестирования (тестового соединения).

● Выполнение собственно сценария тестирования.

● Оценку результатов тестирования (при необходимости).

Клиент тестирования обеспечивает:

● Выполнение команд сценария тестирования, передаваемых с менеджера тестирования.

● Передачу менеджеру тестирования данных, требуемых для оценки результата тестирования.

Менеджером тестирования может выступать толстый или тонкий клиент. Клиентом тестирования может быть толстый клиент, тонкий клиент, веб-клиент, мобильный клиент или приложение на мобильной платформе. Один менеджер тестирования может быть одновременно подключен к нескольким клиентам тестирования, в то же время один клиент тестирования может быть подключен только к одному менеджеру тестирования. Для взаимодействия менеджера тестирования и клиента тестирования используется прямое TCP/IP соединение через определенный порт (который должен быть «открыт»). Для взаимодействия менеджера тестирования и клиента тестирования, который является веб-клиентом, используется сервер «1С:Предприятия» (для клиент-серверного варианта работы тестируемого приложения) или веб-сервер (для файлового варианта). Для взаимодействия менеджера тестирования и клиента тестирования, который является мобильным клиентом или приложением на мобильной платформе, всегда используется веб-сервер. Для проведения тестирования не требуется вносить какие-либо изменения в тестируемое приложение.

Механизм автоматизированного тестирования не позволяет получать информацию о структуре оконных объектов для системных окон веб-браузера и управлять ими. Поэтому необходимо избегать в веб-клиенте действий, которые могли бы спровоцировать появление таких окон, так как это приведёт к невозможности автоматического продолжения теста. В качестве примера такого действия можно привести попытку ввода текста в поле ввода с автоматическим заполнением: в тонком клиенте в этом случае будет отображен встроенный диалог, а в веб-клиенте ‑ системный. Поэтому при планировании теста необходимо учитывать эту особенность и соответственно создавать тест.

Сценарий тестирования может располагаться как в тестируемом прикладном решении, так и в отдельном прикладном решении. При этом схема взаимодействия менеджера тестирования и клиента тестирования не изменяется.

Следует понимать, что менеджер тестирования (и исполняющийся сценарий тестирования) не обладает непосредственным доступом к тестируемому приложению. Сценарию тестирования доступны все возможности приложения, где исполняется сам сценарий (т. е. менеджера тестирования) и доступ к логической модели интерфейса и форм тестируемого приложения (т. е. клиента тестирования).

Запуск клиентского приложения в режиме клиента тестирования не влияет на быстродействие и другие параметры клиентского приложения, однако позволяет любому менеджеру тестирования подключиться к нему, зная имя (или IP-адрес) компьютера и порт, с помощью которого происходит взаимодействие.

Также система предоставляет возможность записать интерактивные действия пользователя в файл формата .``xml. В дальнейшем этот файл можно использовать для проведения автоматизированного тестирования. Для выполнения такой записи предназначен особый режим запуска тестируемого приложения. Управление записью интерактивных действий также доступно из встроенного языка.

31.7.2. Запуск системы тестирования

31.7.2.1. Общая информация

Для выполнения сценария тестирования должны быть запущены и менеджер, и клиент тестирования. Порядок запуска произволен. Важно, чтобы к моменту начала исполнения сценария тестирования клиент тестирования был запущен и доступен по адресу, используемому для подключения менеджера тестирования.

Запуск возможен как из командной строки (этот способ будет рассмотрен ниже), так и с помощью конфигуратора. Приложение, запускаемое из конфигуратора, может выполнять одну из ролей (менеджер или клиент тестирования) в зависимости от настроек, указанных в диалоге настроек конфигуратора, подробное описание которых см. здесь. Мобильный клиент может выполнять только роль клиента тестирования.

31.7.2.2. Запуск клиента тестирования

Для запуска клиента тестирования предназначена команда командной строки запуска клиентского приложения TestClient. Также можно указать номер TCP порта, с помощью которого будут взаимодействовать менеджер и клиент тестирования. Для этого служит параметр TPort команды TestClient. Если значение для этого параметра не указано, используется значение 1538. Указывать этот параметр нужно в том случае, если на одном компьютере выполняется несколько клиентов тестирования.

Таким образом, строка запуска клиентского приложения, которое должно выступать в качестве клиента тестирования, выглядит следующим образом:

Копировать в буфер обмена

1cv8c ENTERPRISE /IBName "Test Application" /TestClient -Tport 1843

В данном примере тонкий клиент (1``Cv8``c) будет выступать клиентом тестирования для информационной базы Test``Application и будет использовать TCP-порт 1843 для взаимодействия с менеджером тестирования.

Если клиентское приложение запущено в качестве клиента тестирования, то в заголовке основного окна приложения будет отображаться текст ‑ Клиент тестирования. Аналогичный текст будет также отображаться в окне О программе. Во встроенном языке можно проверить, что клиентское приложение запущено в качестве клиента тестирования, с помощью метода глобального контекста ТекущийСеансТестируется(). Если метод вернул значение Истина, то клиентское приложение запущено в качестве клиента тестирования и готово выполнять команды менеджера тестирования.

Для подключения к клиенту тестирования, являющемуся тонким или толстым клиентом, необходимо знать два параметра: IP-адрес (или имя компьютера) на котором запущен клиент тестирования, и номер TCP-порта, с помощью которого будет выполняться взаимодействие.

В случае запуска веб-клиента или мобильного клиента ситуация немного сложнее. Кроме указания команды TestClient, необходимо указать еще один параметр командной строки запуска: TestClientID``=<Идентификатор>, который содержит уникальный идентификатор тестируемого клиентского приложения. При этом для однозначного указания клиента тестирования, в случае веб-клиента или мобильного клиента, необходимо три параметра:

● Адрес веб-сервера, на котором развернуто тестируемое приложение. Адрес информационной базы знать не обязательно!

● Идентификатор конкретного экземпляра тестируемого приложения, исполняющегося в веб-клиенте/мобильном клиенте.

● Номер TCP-порта, через который веб-сервер будет передавать данные между менеджером и клиентом тестирования.

Т. к. один веб-сервер может обслуживать несколько информационных баз и несколько соединений с одной информационной базой (в том числе и с целью выполнения тестирования), необходимо указать веб-серверу, какие TCP-порты использовать для взаимодействия с менеджером тестирования. Это делается с помощью файла testcfg.``xml, расположенного в каталоге настроек системы «1С:Предприятие», которое обслуживает опубликованный (на веб-сервере) клиент тестирования.

Если в качестве клиента тестирования выступает мобильное приложение, созданное для мобильной платформы, то в командную строку запуска клиента тестирования добавляется параметр TULR команды TestClient. Значение параметра TURL указывает адрес публикации информационной базы, которая запущена в режиме менеджера тестирования. Для мобильного приложения указывать параметр TestClientID необходимо в том случае, если одновременно работает несколько клиентов тестирования (аналогично веб-клиенту).

Тестирование мобильного клиента (с помощью инструментов автоматизированного тестирования) можно выполнять на персональном компьютере. Для этого необходимо реализовать следующий сценарий работы:

● Запускается менеджер тестирования на персональном компьютере.

● Запускается клиент тестирования в мобильном клиенте, который запущен под управлением ОС Android в эмуляторе.

● Клиент тестирование в мобильном клиенте работает под управлением менеджера тестирования, запущенного на персональном компьютере.

Такое использование потребует некоторый код на встроенном языке, который будет запускать клиента тестирования в эмуляторе. Этот код следует разместить в конфигурации, которая управляет созданием необходимой, для выполнения тестирования, инфраструктуры и запуском тестовых сценариев. Запуск мобильного клиента в режиме клиента тестирования выглядит следующим образом:

Копировать в буфер обмена

ПутьКAndroidSDK = "<Путь к корневому каталогу Android SDK>"; ИдентификаторПриложения = "<идентификатор запускаемого приложения>"; АдресПубликации = "http://host/test"; Команда = ПутьКAndroidSDK + "\platform-tools\adb.exe shell am broadcast --user current -n " + ИдентификаторПриложения + "/com.e1c.mobile.Starter -a com.e1c.mobile.START_CMD -es cmd '/WS "+ АдресПубликации + " /TestClient'"; Ждать ЗапуститьПриложениеАсинх(Команда);

Смотри также:

● Командная строка запуска клиентского приложения (см. здесь).

● Файл testcfg.``xml (см. здесь).

31.7.2.3. Запуск менеджера тестирования

Для того чтобы можно было запустить сценарий тестирования, следует запустить клиентское приложение в режиме менеджера тестирования. Для этого необходимо использовать ключ командной строки запуска клиентского приложения TestManager. Веб-клиент не может выступать в качестве менеджера тестирования.

Таким образом, строка запуска клиентского приложения, которое должно выступать в качестве клиента тестирования, выглядит следующим образом:

Копировать в буфер обмена

1cv8c ENTERPRISE /IBName "Test Manager" /TestManager

Если клиентское приложение запущено в качестве менеджера тестирования, то в заголовке основного окна приложения будет отображаться текст ‑ Менеджер тестирования. Аналогичный текст будет также отображаться в окне О программе.

31.7.2.4. Запуск в режиме записи журнала интерактивных действий

Запуск клиентского приложения в режиме, позволяющем выполнять запись интерактивных действий, осуществляется либо с помощью ключа командной строки UILogRecorder либо с помощью специальной команды меню конфигуратора Сервис``‑ Запустить для записи журнала действий пользователя.

Также можно указать номер IP-порта, с помощью которого менеджер тестирования сможет управлять записью журнала интерактивных действий. Для этого служит параметр TPort команды UILogRecorde``r. Если значение для этого параметра не указано, используется значение 1538. Также можно указать системе, куда записывать файл журнала. Для этого служит параметр File команды UILogRecorder. Если этот параметр не указан, то после окончания записи клиентское приложение откроет окно текстового документа, в котором будет содержаться записанный журнал.

Таким образом, строка запуска клиентского приложения, которое должно позволять формировать журнал интерактивных действий, выглядит следующим образом:

Копировать в буфер обмена

1cv8c ENTERPRISE /IBName "Test Manager" /UILogRecorder

При таком запуске в правом верхнем углу основного окна клиентского приложения добавляется специальная командная панель, управляющая записью журнала.

Рис. 621. Командная панель тестирования

На рисунке цифрами отмечены:

1. Кнопка начала записи журнала действий пользователя.

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

Рис. 622. Командная панель тестирования во время записи

На рисунке цифрами отмечены:

1. Кнопка временной остановки/продолжения записи журнала действий пользователя.

2. Кнопка прекращения записи журнала действий пользователя. Журнал действий, записанный к моменту нажатия кнопки, будет утерян.

3. Завершение записи действий пользователя. После завершения записи будет выполнена запись списка действий в файл (если указан параметр File) или открыто окно текстового документа со списком действий.

Если в качестве клиентского приложения выступает мобильный клиент, то следует учитывать следующие особенности:

● Мобильный клиент разработчика всегда запущен в режиме записи журнала действий пользователя. Для управления записью действий пользователя следует использовать подменю Сервис и настройки``‑ Запись действий пользователя.

● Для команды UILogRecorder, указанной в командной строке запуска мобильного клиента, доступен только параметр File. Файл с записанным сценарием будет располагаться на том устройстве, на котором выполнялась запись. Параметр TPort в мобильном клиенте не используется.

31.7.3. Описание возможностей

С точки зрения сценария тестирования, тестируемое приложение представляет собой набор объектов, позволяющий имитировать интерактивные действия в тестируемом приложении и предоставляющий доступ к логической модели интерфейса клиентского приложения и элементов управляемой формы:

Рис. 623. Схема тестируемого приложения

Если у какого-либо объекта тестируемого приложения есть подчиненные объекты, то система предоставляет следующие возможности:

● Получить список объектов, подчиненных текущему, с помощью метода ПолучитьПодчиненныеОбъекты().

● Получить объект, который является родителем текущего, с помощью метода ПолучитьРодителя().

● Найти один или несколько объектов с заданным типом, именем и заголовком. Для этого предназначены методы ПолучитьОбъект(), НайтиОбъект() и НайтиОбъекты().

При работе с коллекцией объектов, которые получаются с помощью метода ПолучитьПодчиненныеОбъекты(), рекомендуется использовать методы НайтиОбъект() или НайтиОбъекты() вместо обращения к элементу коллекции по индексу.

Многие тестируемые объекты предоставляют возможность выполнить однотипные действия, например:

● Активизировать объект ‑ метод Активизировать().

● Получить доступность элемента ‑ метод ТекущаяДоступность().

● Получить возможность изменения данных в элементе ‑ метод ТекущееТолькоПросмотр().

Далее будут более подробно рассмотрены представленные объекты.

ТестируемоеПриложение

Предоставляет следующие возможности:

● Установить соединение с тестируемым приложением;

● Разорвать установленное соединение с тестируемым приложением;

● Получить активное окно;

● Получить список окон тестируемого приложения;

● Получить текущую информацию об ошибке;

● Получить начальную страницу тестируемого приложения;

● Найти объект с указанными параметрами в иерархии подчинённых объектов;

● Ожидать отображения объекта с заданными параметрами на экране;

● Получать и очищать накопленные показатели производительности тестируемого приложения;

● Получать командный интерфейс тестируемого приложения;

● Имитировать работу с диалогом выбора файлов;

● Управлять ведением журнала интерактивных действий пользователя в тестируемом приложении.

● Получать и устанавливать максимальное время исполнения какого-либо действия на стороне клиента тестирования.

У объекта ТестируемоеПриложение имеется возможность ожидать наступления какого-либо события в тестируемом приложении не организую «вечных циклов». Для этого предназначен метод ОжидатьСостояния(). Метод 1 раз в секунду вызывает функцию, которая проверяет ожидаемое состояние. Если нужное состояние наступило, то метод ОжидатьСостояние() досрочно завершает свою работу и возвращает значение Истина. Если за некоторый интервал времени (который является параметром метода ОжидатьСостояние()) нужное состояние не наступило ‑ метод ОжидатьСостояние() вернет значение Ложь.

ТестируемоеОкноКлиентскогоПриложения

Описывает окно клиентского приложения и предоставляет методы для управления окном:

● Получение коллекции подчиненных объектов окна;

● Поиск объекта с указанными параметрами в иерархии подчинённых объектов окна клиентского приложения;

● Определить, что данное тестируемое окно описывает начальную страницу (рабочий стол);

● Получить командный интерфейс тестируемого клиентского приложения;

● Работать с сообщениями пользователю;

● Закрыть тестируемую форму;

● Получить навигационную ссылку формы;

● Выполнение команды по навигационной ссылке.

ТестируемыйКомандныйИнтерфейсОкна

Описывает командный интерфейс тестируемой формы прикладного решения. Этому объекту подчинены несколько объектов ТестируемаяГруппаКомандногоИнтерфейса:

● Панель разделов (в том случае, если она содержит разделы);

● Панель навигации (кроме интерфейса Такси);

● Панель действий (кроме интерфейса Такси);

● Панель функций текущего раздела;

● Панель открытых;

● Панель инструментов;

● Панель избранного;

● Панель истории;

● Меню функций (кроме интерфейса Формы в отдельных окнах).

Для вспомогательных окон в командном интерфейсе формы присутствует только панель навигации формы. При открытии форм в закладках, объект ТестируемыйКомандныйИнтерфейсОкна, относящийся к главному окну приложения, не дает возможности получить информацию о подчинённых группах и элементах командного интерфейса.

ТестируемаяГруппаКомандногоИнтерфейса

Данный объект описывает группу командного интерфейса и позволяет получать коллекцию подчиненных объектов группы и выполнять поиск объекта с указанными параметрами в иерархии подчиненных элементов.

ТестируемаяГруппаКомандногоИнтерфейса может состоять из элементов двух типов:

● ТестируемаяГруппаКомандногоИнтерфейса,

● ТестируемаяКнопкаКомандногоИнтерфейса.

ТестируемаяКнопкаКомандногоИнтерфейса

Описывает команду командного интерфейса и предоставляет возможность имитировать ее нажатие.

ТестируемаяФорма

Описывает форму тестируемого приложения и предоставляет методы для управления формой:

● Получение коллекции подчиненных объектов формы;

● Поиск объекта с указанными параметрами в иерархии подчинённых объектов формы;

● Получение текущего активного элемента формы;

● Получение кнопки по умолчанию;

● Получение признака модифицированности;

● Получение командной панели формы;

● Осуществлять выбор из списка или из меню, получить представление списка выбора;

● Изменить текущий элемент формы на следующий/предыдущий в соответствии с порядком обхода элементов формы (список элементов в редакторе управляемой формы).

ТестируемоеПолеФормы

Описывает поле ввода формы и предоставляет методы для управления этим элементом формы:

● Получение коллекции подчиненных объектов поля формы;

● Поиск объекта с указанными параметрами в иерархии подчинённых объектов поля формы;

● Определение вида элемента формы;

● Позволяет имитировать интерактивные действия для следующих видов поля управляемой формы:

● Поле ввода;

● Поле надписи;

● Поле картинки;

● Поле переключателя;

● Поле флажка;

● Поле индикатора;

● Поле полосы регулирования;

● Поле календаря;

● Поле текстового документа;

● Поле форматированного документа;

● Поле табличного документа;

● Поле HTML-документа.

● Не позволяет имитировать интерактивные действия для следующих видов поля управляемой формы:

● Поле географической схемы;

● Поля диаграммы (любой);

● Поля графической схемы.

● Если объект связан с полем ввода, то предоставляются следующие возможности:

● Получить текст, редактируемый в поле ввода;

● Имитировать нажатие кнопки Очистить;

● Имитировать нажатие кнопки Выбрать;

● Имитировать нажатие кнопки Открыть;

● Проверить отображение заголовка поля ввода;

● Имитировать открытие списка выбора;

● Имитировать выбор строки из списка выбора;

● Имитировать создание нового элемента из списка выбора;

● Отменять редактирование строки в поле ввода;

● Имитировать нажатие кнопок регулирования;

● Имитировать нажатие гиперссылки, расположенной в форматированной строке, отображаемой полем формы;

● Получать отображаемый текст для некоторых видов поля ввода;

● Для выпадающего списка:

● Открывать список;

● Ожидать завершение формирования списка;

● Закрывать список;

● Выполнять выбор из выпадающего списка.

● Если объект связан с полем вида флажок, то предоставляются следующие возможности:

● Имитировать изменение состояния флажка.

● Если объект связан с полем вида переключатель, то предоставляются следующие возможности:

● Имитировать выбор значения переключателя;

● Получать представление всех значений списка выбора переключателя.

● Если объект связан с полем вида календарь, то предоставляются следующие возможности:

● Имитировать установку выбранной даты;

● Имитировать выбор даты;

● Имитировать операции перехода вперед или назад (на месяц и год).

● Если объект связан с полем вида табличный документ, то предоставляются следующие возможности:

● Получение адреса текущей области;

● Получение текста текущей области;

● Имитация начала редактирования текущей области;

● Имитация окончания редактирования текущей области;

● Имитация выбора из меню расшифровки табличного документа;

● Получение текущего режима редактирования табличного документа.

● Если объект связан с полем ввода вида HTML-документ, то предоставляются следующие возможности:

● Установить отображаемый HTML-документ;

● Получить документ, который отображается в поле HTML-документ;

● Имитировать нажатие гиперссылку, расположенной в HTML-документе.

● Если объект связан с полем ввода вида табличный документ, HTML-документ, текстовый документ или форматированный документ, то предоставляется возможность выполнять запись документа в файл.

ТестируемаяТаблицаФормы

Описывает таблицу формы и предоставляет методы для управления этим элементом формы:

● Получение активного элемента таблицы;

● Получение текста ячейки таблицы;

● Выполнять перемещение по таблице как по строкам, так и по колонкам;

● Выбрать строку;

● Добавить, удалить или скопировать строку;

● Получение текущего режима редактирования таблицы;

● Изменять пометку удаления у строки;

● Выделять и получать выделенные строки;

● Изменять порядок сортировки таблицы;

● Выполнять переход по уровням иерархических списков;

● Свернуть или развернуть узел для иерархических списков;

● Проверить состояние узла иерархического списка (свернут или развернут) и возможность развертывания текущей строки иерархического списка.

В мобильном клиенте для редактирования строки табличной части используется форма редактирования. Если во время процесса тестирования выполняется редактирование строки таблицы формы, то при начале редактирования строки выполняется автоматическое открытие формы редактирования, а при окончании редактирования ‑ форма автоматически закрывается.

ТестируемаяКнопкаФормы

Описывает кнопку формы и предоставляет возможность имитировать ее нажатие и проверять состояние отметки.

ТестируемаяГруппаФормы

Описывает группу элементов формы и предоставляет методы для управления ей:

● Развернуть группу;

● Свернуть группу;

● Позволяет проверить, что группа свернута (для свертываемой или всплывающей группы);

● Получить текущую страницу группы.

В мобильном клиенте, при активизации элемента внутри автоматически сворачиваемой группы, выполняется автоматической раскрытие такой группы.

ТестируемаяДекорацияФормы

Описывает декорацию формы и предоставляет возможность имитации нажатия гиперссылки (в том числе размещенную в форматированной строке) или картинки.

ТестируемоеДополнениеЭлементаФормы

Объекты такого типа могут быть получены как подчиненные объекты для элементов формы типа ТестируемаяТаблицаФормы. Тестируемое дополнение элемента формы представляет доступ к следующим дополнениям элемента формы:

● отображения строки поиска,

● отображения состояния просмотра,

● отображения управления поиском.

Данный объект позволяет выполнить следующие действия с дополнением элемента формы (некоторые действия зависят от вида дополнения):

● Получить вид дополнения;

● Получить текст подсказки;

● Получить и установить видимость;

● Получить состояние просмотра;

● Получить доступность элемента;

● Получить представление данных, отображаемые элементом;

● Если видом дополнения выступает строка поиска, то доступны следующие действия:

● Активизировать элемент;

● Выполнить интерактивные действия с элементом (ввести текст, получить текст редактирования, отменить редактирование, очистить).

● Если видом дополнения выступает отображение состояния просмотра, то доступны следующие действия:

● Получить тексты элементов, отображаемых дополнением;

● Нажать на какой-либо элемент состояния просмотра;

● Удалить элемент состояния просмотра.

31.7.4. Пример сценария тестирования

Ниже приведен простой пример, который создает новый элемент справочника Товары в некоторой конфигурации. Для основной формы элемента важно наличие поля с заголовком Наименование и кнопки с заголовком Записать и закрыть.

Копировать в буфер обмена

// Подключимся к тестируемому приложению ТестируемоеПриложение = Новый ТестируемоеПриложение("localhost"); ТестируемоеПриложение.УстановитьСоединение(); // Найдем главное окно ГлавноеОкноТестируемого = ТестируемоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения")); ГлавноеОкноТестируемого.Активизировать(); // Выполним команду создания элемента справочника товаров ГлавноеОкноТестируемого.ВыполнитьКоманду("e1cib/command/Справочник.Товары.Создать"); ТестируемоеПриложение.ОжидатьОтображениеОбъекта(Тип("ТестируемаяФорма"), "Товар*"); ТестируемаяФорма = ТестируемоеПриложение.НайтиОбъект(Тип("ТестируемаяФорма"), "Товар*"); ТестируемаяФорма.Активизировать(); // Зададим наименование для нового товара ЭлементФормы = ТестируемаяФорма.НайтиОбъект(Тип("ТестируемоеПолеФормы"), "Наименование"); ЭлементФормы.Активизировать(); ЭлементФормы.ВвестиТекст("Новый товар"); // Запишем элемент ЭлементФормы = ТестируемаяФорма.НайтиОбъект(Тип("ТестируемаяКнопкаФормы"), "Записать и закрыть"); ЭлементФормы.Нажать();

31.7.5. Сервисные возможности

31.7.5.1. Запись журнала действий пользователя

Клиентское приложение можно запустить в режиме, позволяющем выполнять запись интерактивных действий. В дальнейшем этот журнал можно записать в файл. Подробное описание данного режима см. здесь.

31.7.5.2. Преобразование журнала действий пользователя в сценарий автоматизированного тестирования

Записанный журнал действий пользователя можно преобразовать в текст на встроенном языке для последующего использования. Для выполнения такого преобразования можно использовать специальный инструмент, расположенный на диске ИТС: Технологическая поддержка``‑ 1С:Предприятие 8``‑ Универсальные отчеты и обработки``‑ Преобразование журнала действий пользователя (http://its.1c.ru/db/metod81#content:5014:1).

С помощью этого инструмента можно:

● Выполнять преобразование как файла с журналом (например, ранее записанным), так и текста, который можно ввести вручную (в формате журнала).

● Указывать вариант встроенного языка для получившегося текста на встроенном языке.

● Добавлять программный код, реализующий подключение к клиенту тестирования.

● Указывать необходимость разбиения длинных последовательностей действий на процедуры, каждая из которых работает с одним тестируемым окном прикладного решения.

Получившийся в результате преобразования текст можно использовать, например, для многократного автоматического исполнения преобразованного набора действий.