Skip to main content
Glama

1C Testpilot

MCP-сервер для работы AI-агентов с интерфейсом 1С:Предприятия. Позволяет агенту открывать формы, читать и изменять данные, работать с таблицами, записывать и воспроизводить сценарии действий.

Сервер подключается напрямую к локальному или удалённому клиенту тестирования 1С по его сетевому протоколу.

Возможности

  • Подключение к локальному или удалённому тест-клиенту по адресу и порту; порядок подключения определяется автоматически.

  • Запуск/останов тест-клиента 1С на компьютере MCP-сервера (файловая или серверная база, логин/пароль) с ожиданием готовности и авто-подключением — tc_session(action="launch_client"/"stop_client").

  • Навигация по дереву UI: активное окно → форма → элементы (по иерархическим ключам).

  • Командный интерфейс — get_command_interface: текущее дерево или обзор всех разделов с поиском и постраничной выдачей команд. Полный обход переключает разделы; поиск по собранному меню не обращается к 1С.

  • Чтение: значения полей, вид/класс/заголовки элементов, таблицы, области табличного документа.

  • Действия: ввод текста/HTML, клики, флажки, выбор из списков/меню, работа с таблицами и деревом, календарь, гиперссылки, навигация по строкам и окнам.

  • click при включённом READBACK возвращает активное окно. diagnostics=True дополнительно читает текущие сообщения окна; они могут относиться к предыдущим действиям.

  • Обзор формы — get_context: первое чтение возвращает описание, следующие — изменения; result_mode="full" возвращает всё заново. save_as_snapshot=True отдельно сохраняет фиксированный снимок для сравнения. Сохранение состояния не требует повторного чтения.

  • Сравнение состояния формы: create_snapshot сохраняет снимок, compare_snapshot показывает изменения относительно текущего состояния. include_tables=True при создании снимка или обзоре формы добавляет сравнение строк по порядку, без раскрытия дерева. Строки остаются выделенными; на 8.3 подготовка может вызвать обработчики активации строки. Список и удаление — list_snapshots и delete_snapshot. Снимки хранятся в памяти до удаления, вытеснения или остановки сервера.

  • Чтение нескольких полей — read_fields; заполнение полей формы — set_fields, ячеек текущей строки таблицы — set_row_values; добавление заполненных строк — add_rows. При заполнении text задаёт текст поля, checked — нужное состояние флажка. В set_fields параметр select выбирает значение через список или форму выбора. Заполнение проверяет принятые значения и останавливается при проблеме, сохраняя результат выполненных шагов.

  • read_document читает табличный документ целиком или прямоугольную область; find_text ищет текст и возвращает адреса подходящих ячеек.

  • Поиск строк таблицы: find_rows отбирает прочитанные строки по тексту колонок с учётом текущих отборов и свёрнутых узлов. Это не поиск по всей базе.

  • Поиск в списке средствами 1С — search: вводит текст в строку поиска и возвращает строки после проверки стабильности результата; пустой текст очищает поиск.

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

  • Настройки списка: get_list_settings читает отборы и сортировку, get_list_settings_fields — доступные поля, set_list_settings изменяет настройки.

  • Запись и воспроизведение сценариев (uilog): агент выполняет шаги → получает XML-сценарий → воспроизводит его. Два режима записи (см. переменные окружения).

  • 11 инструментов для работы с клиентом тестирования; конкретная операция выбирается параметром action (до 163 действий). Версионный гейтинг по целевой версии платформы.

  • Совместимые сценарии Тестера: запуск поддерживаемого BSL из файлов через MCP и Python API, с параметрами и вложенными сценариями.

Related MCP server: qa-mcp

Требования

  • Windows, Linux или macOS для MCP-сервера. Платформа 1С (напр. 8.3.27 или 8.5.1) нужна на компьютере тест-клиента.

  • Python 3.10+.

  • Тест-клиент 1С — либо поднимается действием tc_session(action="launch_client"), либо запускается заранее: 1cv8.exe ENTERPRISE /F"<база>" /TESTCLIENT -TPort <порт>

Установка

Для сценариев на Python доступен Python API с интеграцией pytest. Тесты используют те же операции с 1С напрямую, без запуска MCP-сервера.

Установка из репозитория GitHub. Нужны Git и pipx.

pipx install git+https://github.com/ROCTUP/1c-testpilot.git
pipx ensurepath

После установки перезапустите терминал и MCP-клиент, чтобы они увидели команду 1c-testpilot. Зависимости устанавливаются автоматически в отдельное окружение.

Если репозиторий уже скачан, установите проект из его корневой папки:

pipx install .

Подключение к MCP-клиенту

Выберите способ подключения: stdio — MCP-клиент сам запускает 1C Testpilot; Streamable HTTP — вы запускаете сервер отдельно, а MCP-клиент подключается по URL.

Через stdio

Команда 1c-testpilot должна быть доступна в PATH MCP-клиента. Если клиент её не находит, укажите в command полный путь к исполняемому файлу.

Claude Desktop (документация). Откройте Settings → Developer → Edit Config и добавьте сервер в mcpServers:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json.

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json.

{
  "mcpServers": {
    "1c-testpilot": {
      "command": "1c-testpilot",
      "env": { "TC1C_TRANSPORT": "stdio" }
    }
  }
}

После изменения файла полностью перезапустите Claude Desktop.

Claude Code (документация):

claude mcp add --env TC1C_TRANSPORT=stdio --transport stdio --scope user 1c-testpilot -- 1c-testpilot

--scope user делает сервер доступным во всех проектах. Состояние подключения можно посмотреть командой /mcp внутри Claude Code.

Codex (документация). Добавьте в ~/.codex/config.toml:

[mcp_servers.1c-testpilot]
command = "1c-testpilot"
env = { TC1C_TRANSPORT = "stdio" }

Или добавьте сервер через CLI:

codex mcp add 1c-testpilot --env TC1C_TRANSPORT=stdio -- 1c-testpilot

Состояние подключения — /mcp в Codex. Для длительных операций, например запуска 1С, можно добавить tool_timeout_sec = 120 в секцию сервера; стандартный таймаут Codex — 60 секунд.

Без установки пакета можно указать напрямую: "command": "python", "args": ["<путь>/app/server.py"].

Через Streamable HTTP

Запустите 1C Testpilot в отдельном терминале.

Windows, PowerShell:

$env:TC1C_TRANSPORT = "streamable-http"
$env:TC1C_HTTP_HOST = "127.0.0.1"
$env:TC1C_HTTP_PORT = "6004"
$env:TC1C_HTTP_PATH = "/mcp"
1c-testpilot

Linux, Bash:

TC1C_TRANSPORT=streamable-http TC1C_HTTP_HOST=127.0.0.1 TC1C_HTTP_PORT=6004 TC1C_HTTP_PATH=/mcp 1c-testpilot

Пока сервер работает, он принимает MCP-подключения по адресу http://127.0.0.1:6004/mcp. Настройки TC1C_* задаются в окружении этого процесса сервера.

Claude Code:

claude mcp add --transport http --scope user 1c-testpilot http://127.0.0.1:6004/mcp

Эта настройка работает и в локальных сессиях вкладки Code приложения Claude Desktop: они используют MCP-конфигурацию Claude Code. Подключение к HTTP-серверу выполняется напрямую. Документация Claude Code Desktop.

Если сервер с таким именем уже добавлен через stdio, сначала удалите прежнюю запись командой claude mcp remove --scope user 1c-testpilot.

Codex — используйте URL в секции сервера в ~/.codex/config.toml:

[mcp_servers.1c-testpilot]
url = "http://127.0.0.1:6004/mcp"

При переходе со stdio замените прежние command, args и env на url. Для новой записи можно использовать CLI:

codex mcp add 1c-testpilot --url http://127.0.0.1:6004/mcp

Для подключения с другого компьютера задайте TC1C_HTTP_HOST равным сетевому IP компьютера с 1C Testpilot и укажите этот IP в URL клиента. Порт 6004 должен быть доступен из сети клиента. Встроенной HTTP-аутентификации в 1C Testpilot нет; доступ к серверу ограничивается вашей сетью или внешним прокси с аутентификацией и HTTPS.

Также поддерживается прежний транспорт SSE: TC1C_TRANSPORT=sse, адрес подключения http://127.0.0.1:6004/sse. У него стандартные пути /sse и /messages/; TC1C_HTTP_PATH применяется только к Streamable HTTP.

Подключение к клиенту тестирования 1С

Адрес, порт и версия платформы 1С передаются инструменту tc_session при выполнении действия connect. Эти параметры относятся к клиенту тестирования 1С и не задаются в конфигурации подключения MCP. Запуск клиента выполняется действием launch_client.

  • При локальном подключении host можно опустить: по умолчанию 127.0.0.1.

  • Удалённый клиент запустите с /TESTCLIENT -TPort <порт>; его порт должен быть доступен с компьютера MCP-сервера.

  • launch_client и stop_client работают на компьютере MCP-сервера. На Linux для обычного запуска клиента нужен графический сеанс; для подключения к уже запущенному — не нужен.

  • На macOS обычный запуск не требует DISPLAY; поиск платформы учитывает путь /opt/1cv8/<версия>/. desktop="isolated" и get_screenshot на macOS не поддерживаются. Для отправки клавиш и открытия закрытой панели сообщений приложению, запускающему Testpilot (терминалу, редактору), нужно разрешение «Универсальный доступ».

  • На Windows 10+ и Linux параметр desktop="isolated" в launch_client запускает 1С на отдельном рабочем столе, не мешая пользователю. По умолчанию — desktop="default", обычный запуск. Изолированные клиенты поддерживают скриншоты и завершаются вместе с MCP-сервером. На Linux требуется Xvfb (sudo apt install xvfb в Ubuntu/Debian); графический сеанс не нужен.

  • Можно работать с несколькими базами или одной базой под разными пользователями. Подключение выбирается через connection_id, список — tc_session(action="list_connections").

При автоматическом выборе исполняемого файла используется самая новая подходящая установка. Учитываются также установки только тонкого клиента. Например, version="8.3.27" выбирает самую новую сборку этой ветки. Для определённой сборки укажите полную версию или путь exe.

Именованные профили

Настройки запуска и подключения можно сохранить в YAML-файле (примеры всех допустимых параметров), указав его путь в TC1C_PROFILES_FILE. tc_session(action="list_profiles") показывает доступные профили; launch_client(profile="ut_admin") запускает клиент, connect(profile="remote_demo") подключается к работающему. Оба действия относятся к tc_session. Явно переданные параметры переопределяют профиль. Имя использованного профиля видно в list_connections.

Для запуска профиль содержит base и параметры launch_client, для подключения — port и необязательные host, version. Для серверной базы укажите server: true и base: 'server1c\Trade'. description задаёт описание. Пароль — строка в password или значение переменной окружения с именем из password_env; одновременно их задавать нельзя. Пароли в YAML заключайте в кавычки. Значения паролей не выводятся в списке профилей и журнале; при запуске 1С пароль передаётся в командной строке процесса. Файл перечитывается при обращении. Относительные пути base, exe и code_epf в профиле считаются от его папки. wait задаёт общий срок запуска и готовности подключения в секундах: по умолчанию 120. Для долгой загрузки базы его можно увеличить, например wait: 180. Ожидание заканчивается сразу после подключения; само открытие порта ещё не означает готовность клиента.

Переменные окружения

Задаются в окружении процесса сервера или в файле по образцу .env.example:

1c-testpilot --env-file "D:/Testpilot/.env"

При запуске из MCP-клиента добавьте аргументы к команде:

{
  "mcpServers": {
    "1c-testpilot": {
      "command": "1c-testpilot",
      "args": ["--env-file", "D:/Testpilot/.env"]
    }
  }
}

Путь к файлу — абсолютный или относительно рабочего каталога сервера. Переменные окружения имеют приоритет над значениями файла. Без --env-file файл .env не загружается; если указанный файл недоступен, сервер сообщает об ошибке и не запускается.

  • TC1C_PROFILES_FILE — путь к YAML-файлу профилей, абсолютный или от рабочего каталога сервера. По умолчанию не задан.

  • TC1C_CONNECTION_LIMIT — максимум зарегистрированных подключений, по умолчанию 16. Отключённый клиент, запущенный сервером, учитывается до stop_client. Лимит ссылок TC1C_REF_LIMIT применяется отдельно к каждому подключению.

  • TC1C_QUEUE_TIMEOUT — максимальное ожидание очереди к занятому соединению, по умолчанию 60 секунд; положительное число. По истечении сервер возвращает connection_busy с текущим действием и длительностью его выполнения. Таймаут самого выполняющегося действия задаётся отдельно. list_connections показывает busy, active_action, active_seconds; после обнаруженного обрыва сокета — connected=false. tc_session(action="disconnect", force=true) прерывает сетевое ожидание без очереди. В Python API — client.disconnect(force=True). Приложение 1С продолжает работать; результат прерванного действия может быть неизвестен (outcome_unknown). cleanup_pending=true означает, что обработчик ещё освобождает состояние соединения; дождитесь busy=false либо удаления подключения из списка перед повторным подключением.

  • TC1C_RECORD_MODE — режим записи сценариев: synth (по умолчанию — сервер собирает сценарий из вызовов инструментов, покрывая все действия агента) или native (журнал тест-клиента; составное чтение таблицы сервер дополняет командами снятия выделения).

  • TC_PLATFORM_VERSION — целевая версия платформы (напр. 8.3.24.1548): действия, чей метод в этой версии отсутствует, не публикуются; версия используется в рукопожатии.

  • TC1C_RESPONSE_FORMAT — формат ответов: toon (по умолчанию) или json (режим совместимости).

  • TC1C_RESPONSE_DETAIL — compact (по умолчанию) сокращает служебные поля успешных MCP-ответов; full сохраняет их полностью. Журнал и ответы Python API не сокращаются.

  • TC1C_COMPACT_REFS — адресация элементов: id (по умолчанию), prefix или off. id работает с TOON и JSON; prefix сокращает адреса только в TOON. Прежние true и false принимаются как синонимы prefix и off.

  • TC1C_REF_LIMIT — максимум элементов в реестре одного подключения, по умолчанию 100000; положительное целое число. Ограничение действует во всех режимах адресации.

  • TC1C_VERIFY_TARGET — проверка существования объекта перед действием, true (по умолчанию) или false.

  • TC1C_READBACK — чтение состояния до и после действия, true (по умолчанию) или false.

  • TC1C_SNAPSHOT_LIMIT — максимум сохранённых состояний форм на сервере, по умолчанию 100.

  • TC1C_SNAPSHOT_MEMORY_MB — лимит хранилища состояний в МиБ, по умолчанию 128. Лимиты общие для явных снимков и автоматических состояний get_context (одно на форму). При переполнении вытесняются давно не использовавшиеся снимки.

  • TC1C_SCREENSHOTS — снимки окна 1С, true (по умолчанию) или false. При false действие get_screenshot и его параметры не публикуются.

  • TC1C_LOGGING — журнал MCP-вызовов, по умолчанию true; при false действия управления журналом скрыты.

  • TC1C_LOG_AUTO_START — начинать журнал автоматически, по умолчанию false.

  • TC1C_LOG_DIR — каталог журналов на сервере, по умолчанию logs.

  • TC1C_LOG_REPORTS — отчёты: html (по умолчанию), allure, html,allure или none. JSONL-журнал сохраняется при любом выборе; скриншоты настраиваются отдельно.

  • TC1C_LOG_SCREENSHOTS — разрешить снимки в журнале, по умолчанию true; независимо от TC1C_SCREENSHOTS.

  • TC1C_LOG_MAX_MB — общий лимит журналов в МиБ, по умолчанию 1024. Старые завершённые журналы удаляются; если места недостаточно, запись приостанавливается.

Формат ответов

Формат ответов — TOON (компактный, по умолчанию) или JSON. Выбор: TC1C_RESPONSE_FORMAT.

По умолчанию успешные MCP-ответы сокращены (TC1C_RESPONSE_DETAIL=compact): в простых действиях не повторяются переданный target и успешная проверка его наличия; connection_id опускается при единственном подключении. У окна после нажатия или перехода остаются адрес, название и возможная диагностика. Если описание окна не изменилось, вместо блока window возвращается window_changed: false; первое или изменившееся описание приходит с window_changed: true. Сравнение отдельно для каждого подключения; переподключение сбрасывает запомненное описание. Ответы подключения сохраняют connection_id. Ошибки и признаки неполных результатов не сокращаются. full возвращает полные служебные поля; журнал и Python API всегда их сохраняют.

Режим адресации элементов задаётся через TC1C_COMPACT_REFS:

  • id — короткие ссылки ref, передаваемые в действия без изменений; по умолчанию.

  • prefix — сокращённые адреса со словарями в ответе TOON; в JSON адреса полные.

  • off — полные адреса key и handle.

Инструменты

find_objects по умолчанию возвращает все совпадения. Для больших результатов доступны limit и продолжение через cursor, без повторного поиска. Примеры — в справочнике.

Сервер публикует 11 инструментов для работы с клиентом тестирования; операция выбирается параметром action, до 163 действий. Список действий с методами 1С, применимыми типами и параметрами вынесен в отдельный документ: docs/TOOLS.md.

tc_keyboard отправляет сочетания клавиш локальному клиенту и позволяет искать стандартные сочетания в справочнике.

Дополнительно доступны инструменты без параметра action:

  • tc_execute_code — выполнение BSL-кода в клиентском или серверном контексте;

  • tc_execute_query — запрос с параметрами, до 500 строк результата (по умолчанию 100);

  • tc_get_metadata — структура конфигурации: объекты, реквизиты, типы, табличные части и перечисления;

  • tc_list_custom_bsl_functions и tc_execute_custom_bsl_function — описание и вызов пользовательских BSL-функций, зарегистрированных в обработке.

Они работают через внешнюю обработку Testpilot, которую сервер автоматически открывает при запуске клиента. Произвольный код, запросы и пользовательские функции включаются независимо; по умолчанию выключены. TC1C_METADATA=auto включает метаданные вместе с кодом или запросами; true включает их отдельно, false скрывает. При TC1C_FUNCTIONS=true инструменты функций появляются, когда подключена обработка с непустым реестром. В Python API те же методы вызываются без префикса tc_ и работают при запуске клиента с обработкой через code_epf, независимо от настроек публикации MCP.

Действие get_screenshot в tc_app возвращает изображение окна 1С со всплывающими списками, не переключая фокус. MCP-сервер и клиент должны работать на одном компьютере: Windows или Linux с X11/XWayland. На Linux нужен доступ к сеансу клиента через DISPLAY и XAUTHORITY; захват приложений, работающих напрямую через Wayland, не поддерживается. Свёрнутое окно нужно открыть. При изолированном запуске через Linux-обёртку она должна передавать клиенту DISPLAY и XAUTHORITY и ждать его завершения. Процесс 1С и его TCP-соединение должны быть видны из окружения MCP-сервера. В контейнере также нужны доступ к X11-сокету и запись Xauthority для его имени хоста. scale задаёт масштаб 25–100%, grid включает координатную сетку, region=[x,y,width,height] ограничивает область в пикселях исходного снимка. Неполный снимок сопровождается предупреждением. В сценарий снимки не записываются.

Журнал работы агента

В tc_session: start_logging начинает запись, get_logging_status показывает состояние, stop_logging завершает её и возвращает пути к JSONL-журналу и выбранным отчётам. Параметр reports в start_logging переопределяет TC1C_LOG_REPORTS для новой сессии: ["html"], ["allure"], ["html", "allure"] или ["none"] для одного JSONL-журнала. Параметр screenshot_mode: off — без снимков, actions — после изменений и при ошибках, all — после каждого вызова. По умолчанию actions, либо off, если снимки журнала запрещены. PNG сохраняются рядом с отчётом и не добавляются в ответы агенту. Для снимков нужен локальный клиент. Журнал каждого подключения независим; отключение клиента завершает запись. Повторный start_logging сохраняет текущий журнал и выбранные настройки. Вызов run_scenario содержит отдельные шаги с их результатами и скриншотами; одинаковый снимок используется во всех выбранных отчётах.

HTML доступен во время записи. При выборе Allure после завершения сессии в allure-results появляются результаты и вложения для сборки отчёта Allure. Поле allure_results содержит путь к ним, report_errors — ошибки формирования отчёта, если они возникли. Для просмотра установите Allure Report и выполните:

allure generate "logs/session-…/allure-results" -o allure-report
allure open allure-report

В Allure сессия MCP отображается в группе Testpilot sessions. Её статус описывает ошибки вызовов и полноту записи; выполнение пользовательской задачи оценивается отдельно. Для Python-тестов используется интеграция с allure-pytest: шаги относятся к тестам, а результат определяет pytest. Подробнее — отчёты pytest.

Запись и воспроизведение сценариев

tc_scenario(action="record_start") → выполнить действия → tc_scenario(action="record_finish") возвращает XML-сценарий (uilog) и lost_actions (действия, не попавшие в сценарий; при непустом списке сценарий неполный). Воспроизведение — tc_scenario(action="run_scenario", uilog=...). Ответ по умолчанию краткий: итог, счётчики и последний шаг с ошибкой. Для списка всех шагов передайте result_mode="full". При включённом логировании журнал сохраняет подробности в обоих режимах. Это поведение действует также в Python API. Режим записи — TC1C_RECORD_MODE.

Ограничения

  • Протокол закрытый и может отличаться между версиями платформы. Локальное подключение проверено на Windows с 8.3.27 и 8.5.1; удалённое — к Windows с 8.3.27 и к Ubuntu с 8.3.27. Способ подключения выбирается автоматически по ответу тест-клиента.

Available Tools

11 tools
tc_appA

Application-level state: active window, child objects, errors, dialogs, limits. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • clear_file_dialog_result() Clear a previously set file-dialog result. (1C 8.3.25+)

  • get_active_window() Read the active window: ref/class/title/platform_version, optional form_name/url/home_page/is_main. title is the form caption (null: no form or unreadable); url is empty without a link. form_name is a metadata name, not the form's GUID name; it is only attempted when the window supplies no caption and may remain absent; absence says nothing about the form. Read it explicitly with tc_app(action="get_child_objects") on the window ref. platform_version identifies this connection; unsupported actions report available_since. addressable=false means no element address, not a window type. native=true with recovery=close_window indicates a local preview to close before addressing form elements. active_window_unavailable gives recovery guidance; no_active_work_window requires opening a form with tc_window(action="execute_command"). (1C 8.3.3+)

  • get_child_objects(ref=null, scope='window') Read one level: parent and children: [...], with class/title and optional name/type/form_name. type is the platform element kind (null if unknown); ManagedForm.form_name is its metadata name. Omitted parent uses the last observed active window, querying it if none was observed. scope=application without a parent lists application windows. Windows/command buttons may include url; windows may include home_page/is_main. Address the parent with ref; children contain ref values. For a whole subtree, pass root_ref to tc_find(action="find_objects"). (1C 8.3.3+)

  • get_current_error() Get info about the session's last CLIENT error (none → null). error is the main description; details preserves additional text, including nested causes, module locations and stacks. Application messages (e.g. unfilled fields or posting refusal) are read with tc_window(action="get_user_message_texts"); they may include earlier actions. (1C 8.3.3+)

  • get_max_action_time() Get the max action-execution time in seconds (set via tc_app(action="set_max_action_time"); None if unset).

  • get_parent(ref*) Get an element's parent in parent: [...]. The server resolves the parent's own address and returns it with the available object metadata. Address the element with ref; objects in parent contain their own ref values. (1C 8.3.24+)

  • get_performance(clear=False) Get accumulated session performance counters (calls, duration, sent, received). Set clear to also reset them, so the next read measures only what happened after this call. (1C 8.3.6+)

  • get_screenshot(scale=100, grid=False, region=null) Capture the connected 1C window with popups as an image, without changing focus. Requires a local client on Windows or Linux with X11/XWayland and desktop access. scale: 25..100 percent. Optional region=[x,y,width,height] uses original screenshot pixels; grid labels those coordinates. capture_complete=false means some popups are missing. Screenshots are not recorded in scenarios.

  • set_file_dialog_result(result=True, filename=null, filter_index=0) Predefine the NEXT file dialog: result=true with filename (or a list for multiple files) selects; false cancels. filter_index is 0-based. Call BEFORE opening; cannot answer an open dialog. Each answer is consumed once. On 8.3.25+, replaces pending answers; clear_file_dialog_result clears unused ones. Older platforms cannot clear them: prepare only the next dialog. (1C 8.3.8+)

  • set_max_action_time(seconds*) Set the max action-execution time in seconds: how long a result-returning action may take before the call gives up (0 = wait indefinitely). Stored on the client (no network call) and applied to every subsequent command. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, grid, clear, +8 more.

tc_calendarA

Actions on type="CalendarField" only. For a regular date input field, use tc_field(action="input_text"). Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • calendar_next_month(ref*) Move a calendar field to the next month. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_next_year(ref*) Move a calendar field to the next year. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_previous_month(ref*) Move a calendar field to the previous month. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • calendar_previous_year(ref*) Move a calendar field to the previous year. The command is accepted, but nothing readable about the field changes, so this cannot be verified. To move the date use tc_calendar(action="goto_date").

  • goto_date(ref*, year*, month*, day*) Go to a date (year, month, day) in a calendar field. Returns changed/value_before/value_after. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), day, ref, year, +2 more.

tc_docA

Actions on document fields and spreadsheet areas. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • begin_edit_current_area(ref*) Start editing the current spreadsheet area; follow with input_text and end_edit_current_area. In view mode this can instead open a drill-down menu, object or field chooser. A menu may leave the active window unchanged; use execute_choice_from_menu to continue.

  • click_formatted_doc_hyperlink(ref*, index*) Click a hyperlink in a formatted-document field by 0-based index (or by its text). On a document without links the platform answers the same and puts up its own error window, and tc_doc(action="get_formatted_string_hyperlinks") cannot be used to check first: for a formatted DOCUMENT it answers with an empty list even when the document does have a link (it lists links only for a formatted-string label). Judge by what the click was supposed to do. (1C 8.3.25+)

  • click_formatted_string_hyperlink(ref*, index*) Click a hyperlink in a formatted string by 0-based index (or by its text). ref may be a label field or a form decoration bearing the formatted string. (1C 8.3.13+)

  • click_html_hyperlink(ref*, index*) Click an HTML link. The platform may open the FIRST link regardless of an in-range index; out-of-range indexes fail. text has no effect. Verify the resulting navigation. (1C 8.3.25+)

  • end_edit_current_area(ref*, cancel=False) Finish editing the current spreadsheet-document area. Set cancel to discard the edit instead of committing it. Returns the cell address and its text before/after finishing; changed compares those values, including when an edit is cancelled.

  • find_text(ref*, text*, match='contains', case_sensitive=False, area=null, start_address=null, max_cells=1000) Find literal spreadsheet text (match=contains/exact, case-insensitive by default); return cell addresses/text without moving the current area. area restricts a cell/rectangle (8.3.25+). max_cells=1..10000 limits scanned positions, not matches. If complete=false, resume with start_address=next_address and unchanged text/match/case_sensitive/area. Empty matches proves absence only in the successfully scanned part. (1C 8.3.13+)

  • get_area_text(ref*, area=null) Get the text of ONE spreadsheet-document area; omit area to read the current one. tc_doc(action="get_current_area_text") is the older form of this same call and answers identically; prefer this one. (1C 8.3.6+)

  • get_current_area_address(ref*) Get the address of the current spreadsheet-document area.

  • get_current_area_field(ref*) Get the field of the current spreadsheet-document area. (1C 8.3.2+)

  • get_current_area_text(ref*, area=null) Get the text of ONE spreadsheet-document area; omit area to read the current one. This is the older form of tc_doc(action="get_area_text"), which the platform deprecated in 8.3.6 in favour of that one; prefer get_area_text.

  • get_doc_area_horizontal_size(ref*) Get the horizontal size (max column number holding data) of a spreadsheet-document. (1C 8.3.13+)

  • get_doc_area_vertical_size(ref*) Get the vertical size (max row number holding data) of a spreadsheet-document. (1C 8.3.13+)

  • get_formatted_string_hyperlinks(ref*) Get a formatted string's hyperlink presentations. (1C 8.3.25+)

  • get_html(ref*) Read the HTML of a formatted/HTML-document field. After the form has put up a menu or a modal choice list, the platform stops returning this field's content until it is written again — an empty answer right after such a window does not mean the field is empty. (1C 8.3.8+)

  • included_in_merged_area(ref*, address*) Return the address of the merged area containing the cell (e.g. 'R1C1'), or None if the cell is not part of a merged area. A null answer is ambiguous in one more way: it also comes back when the document has no such cell or no area by that name — the platform does not distinguish the two, and neither can this action. Only the FORM of the address is checked here (cell, range, area name, intersection); whether it exists is up to the document. (1C 8.3.25+)

  • input_html(ref*, html*, attachments=null) Set HTML/text into a formatted-document field. attachments maps an image name used in the HTML (e.g. -> "p1") to that image as a base64 string; src must exactly match the attachment name. Names must be identifiers (no dots). (1C 8.3.8+)

  • read_document(ref*, start_address=null, max_cells=1000, area=null) Read nonempty spreadsheet cells as rows with cell addresses and merged-cell spans. Optional area is a rectangle such as R2C3:R8C5 (platform 8.3.25+), clipped to the document's data bounds. Intersecting merged cells retain their full address/span, even if they start outside area. If complete=false, pass next_address as start_address with the same area to continue. max_cells limits positions scanned per call (1–10000). Does not move the current area.

  • set_area_text(ref*, address*, text*) Set a spreadsheet cell's text by address, e.g. R2C1. Selects the cell, starts and finishes editing, then reads the result. Empty text clears it. Returns verified, changed and value_before/value_after. Numeric formatting can return verified=null with verification=numeric_equivalent. Rounded output returns value_verification_inconclusive: editing finished, but the exact value is not verified. Requires an editable document.

  • set_current_area(ref*, address*) Set the current area of a spreadsheet-document field (e.g. 'R1C1').

  • text_within_area_bounds(ref*, area=null) Whether the text in a spreadsheet-document area fits within its bounds (True) or is clipped to '#####' (False). Pass area (e.g. 'R1C1'); omit to check the current cell. (1C 8.3.25+)

  • write_content_to_file(ref*, filename=null, file_format=null, filter_index=null, save_as=null) Save HTML/formatted/spreadsheet/text fields (not PDF fields). filename forces Save As, replacing and finally clearing pending dialog answers on 8.3.25+; older versions cannot clear unused answers, so prepare only the next dialog. Spreadsheet file_format: mxl/html/pdf/xls/xlsx/ods/docx; extension alone does not select it. Alternatively use 0-based filter_index; mutually exclusive with file_format, omitted: first type. Without filename, use current name unless save_as=true; predefine possible dialogs before EACH call with tc_app(action="set_file_dialog_result"). ok confirms accepted requests, not completed disk writing. Final cleanup failure separately returns cleanup_error and dialog_answer_cleared=false; the next filename call retries cleanup before saving. (1C 8.3.8+) ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, area, html, +14 more.

tc_fieldA

Actions on a form field, button, group or element addition. Choose action. Also available: tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • activate(ref*) Focus an element, switch a page or make a table column current; click does not do this. Commits pending input_text only by focusing a DIFFERENT focusable element; tc_form(action="goto_next_element") lets the form choose. Reports page visibility; still hidden returns target_hidden. No changed flag: verify via get_text/get_current_page, tc_form(action="get_current_element") or tc_table(action="get_current_item").

  • cancel_edit(ref*) Cancel pending input, like Esc. Does not undo values accepted by input_text(finish=true) or other actions that finish editing. (1C 8.3.6+)

  • choose_from_drop_list(ref*, value*) Pick a value from a field's open drop-down list by its display text (e.g. a colour name) or by its 0-based index in the list. The value is written at once — no focus change is needed. changed may come back null here even when the value did change: with the list open the value cannot be read. A changed window is returned when readback is enabled; inspect it before continuing. window_changed=false reuses the previous window description. Read the field with tc_field(action="get_text") to confirm. (1C 8.3.6+)

  • clear(ref*) Clear an input field's value.

  • click(ref*, diagnostics=False, diagnostics_wait=2.0) Click a button, field, group, decoration or command-interface button. For submenus, find descendant Buttons and click them directly, even through nested menus; opening the menus first is unnecessary. Use activate to focus inputs/cells/pages. window, when present, is the active window afterwards. window_changed=false means the previous window description still applies. diagnostics=true also reads messages, possibly from earlier actions. diagnostics_wait=0..60 seconds polls while messages are unavailable/empty; 0 reads once. Individual requests use set_max_action_time. diagnostics.status is read/unavailable/failed; null messages are not an empty list. ok or absent messages do not prove business success.

  • click_view_status_item(ref*, index*) Click a view-status item by 0-based index (or by its text). Nothing here proves the item was there: the platform answers the same when the form has no view-status line at all, and reading the texts first does not settle it either — that read comes back empty even while a search or filter is active. Judge by the list itself: read the rows before and after. (1C 8.3.16+)

  • close_drop_list(ref*) Close a field's drop-down list. Verify with tc_field(action="drop_list_is_open"). (1C 8.3.6+)

  • create(ref*) Create a new object from a reference field: opens the new object's form, as the field's '+' does. The field must have the FOCUS first — call tc_field(action="activate") on it, otherwise the command is accepted and nothing opens. Verify by reading the active window. (1C 8.3.6+)

  • current_check(ref*) Whether a form BUTTON is pressed, or shows a check mark next to it. Only buttons answer meaningfully: anything else — a checkbox field, a page, a table — always reports false, which means 'not applicable', not 'switched off'. Read a checkbox with tc_field(action="get_text") ('Да'/'Нет') and the active page with tc_field(action="get_current_page"). (1C 8.3.16+)

  • current_mode_is_edit(ref*) Whether a table row or spreadsheet-document field is currently in edit mode. (1C 8.3.3+)

  • current_opened(ref*) Whether a form group is currently open. (1C 8.3.16+)

  • decrease_value(ref*) Decrement a numeric (spinner) field. A track bar does NOT take this — move it with tc_field(action="goto_value") in percent. When the value does not move, applicable: false in the answer means the method does not fit this kind of field.

  • delete_view_status_item(ref*, index*) Delete a view-status item by 0-based index (or by its text) — this is how a filter or a search chip is dropped. Nothing here proves the item was there: the platform answers the same when the form has no view-status line, and reading the texts first does not settle it either. Judge by the list itself: read the rows before and after. (1C 8.3.16+)

  • drop_list_is_open(ref*) Whether a field's drop-down list is open. (1C 8.3.6+)

  • execute_choice_from_choice_list(ref*, value*) Pick from a field's choice list by its display text or by its 0-based index. Reports changed/value_before/value_after — the field's value read before and after, same as tc_field(action="choose_from_drop_list"). A changed window is returned with readback enabled. window_changed=false reuses the previous window description.

  • get_choice_list(ref*) Read radio-button options, an input's open drop-down list or a form's open choice list. For an input, open its list immediately before reading: the answer describes whichever drop-down is currently open. items contains {presentation, text}; presentations contains the displayed texts to select. A closed input list may return items=[] with status=unknown. (1C 8.3.12+)

  • get_command_bar(ref*) Get an element's own command panel object, if it has one. This is NOT the list of buttons: the panel is a container, and its buttons are read with a separate tc_app(action="get_child_objects") on the returned ref. An empty result means the element has no command panel of its own — a list table is the usual case, its buttons live in a form group next to it. (1C 8.3.3+)

  • get_context_menu(ref*) Get an element's context menu. The platform returns the menu as a form GROUP, not as a list of commands: 'menu' holds that group, and its items are read with a separate tc_app(action="get_child_objects") on the group's ref. (1C 8.3.3+)

  • get_current_page(ref*) Get the current page of a page group. To switch pages use tc_field(action="activate"): a click on a page does not switch to it. tc_field(action="current_check") is useless here — pages always report checked=false. (1C 8.3.6+)

  • get_data_presentation(ref*) Get an element's data presentation. Form fields only — not form decorations, and on a table the answer is always null. An empty input or label field returns "". presentation is null when no value was available; that is not proof that the field has no presentation.

  • get_edit_text(ref*) Read an input field's edit buffer — what is being typed, which is not necessarily what the form holds. get_data_presentation reads the accepted value; get_text reads displayed text. An empty input buffer returns ""; null means unavailable. (1C 8.3.3+)

  • get_linked_window(ref*) Get the linked window of a command-interface button. An empty answer means the button has no linked window — but only when target_check says the button itself is there; a wrong ref answers empty too, and the check is what tells the two apart. (1C 8.3.6+)

  • get_state_presentation(ref*) Read a form field's state presentation. An unavailable value is explained in the answer; null does not confirm that the field has no state presentation. (1C 8.3.16+)

  • get_text(ref*) Read displayed text (checkbox text follows the client language). An empty input or label field returns "". For an edit buffer use get_edit_text. If text is unavailable, the answer explains the limitation and suggests another reading action where applicable. null does not confirm an empty field. (1C 8.3.12+)

  • get_tooltip(ref*) Read an element's tooltip text (empty → None). (1C 8.3.3+)

  • get_view_status_item_texts(ref*) Get the view-status item texts of a form-element addition → list of strings. Do not use it to tell whether a filter or search is active: with a list narrowed down to one row by search the platform still answers with an empty collection. Check the effect by reading the rows. (1C 8.3.16+)

  • goto_value(ref*, percent*) Move a TRACK BAR to a value in PERCENT (0..100). This is a track bar method: on any other kind of field the command is accepted and nothing moves, and the answer then carries applicable: false. A spinner is stepped with increase_value/decrease_value instead. Returns changed/value_before/value_after. (1C 8.3.6+)

  • increase_value(ref*) Increment a numeric (spinner) field. A track bar does NOT take this — move it with tc_field(action="goto_value") in percent. When the value does not move, applicable: false in the answer means the method does not fit this kind of field.

  • input_text(ref*, text*, finish=True) Enter text; text="" clears. finish=true moves the owning form's focus once and verifies ordinary input; false keeps the edit buffer (e.g. for reference choice/cancel). Reference input may still require selection. Changed pending text causes pending_input_changed: re-enter or cancel. committed=true/false/null means accepted/pending/unverified; edit_finished means focus left; changed compares displayed text. Numeric formatting may yield verification=numeric_equivalent and committed=null. These flags do not confirm saving. For table cells use tc_table(action="set_cell_text"); finish text documents with activate on another element, spreadsheet cells with tc_doc end_edit_current_area.

  • is_enabled(ref*) Read the element's availability. A command can still refuse execution in the current form state. (1C 8.3.3+)

  • is_readonly(ref*) Whether an element is currently read-only — that is the element's own read-only property. Two other things look the same and are NOT this: an element switched off entirely (read that with tc_field(action="is_enabled")), and a spreadsheet-document field shown in view mode, which neither read reflects — there, tc_doc(action="begin_edit_current_area") runs the cell's details instead of editing. (1C 8.3.3+)

  • is_visible(ref*) Whether an element is currently visible. Returns an error instead of visible=false when there is no object at ref: for this read the protocol does report a missing target, so a mistyped address cannot pass for a hidden element. On the pages of a page group this does NOT tell you which page is on screen — several pages report visible=true at once; use tc_field(action="get_current_page") for that. (1C 8.3.3+)

  • open_drop_list(ref*) Open the drop-down list of a reference/enum field (call before choose_from_drop_list). (1C 8.3.6+)

  • open_field(ref*) Open a reference field's value (F4 / follow the link).

  • read_fields(targets*, properties=null) Read 1–100 fields of the active form without moving focus. properties defaults to ['text']; presentation reads data, edit_text reads the editing buffer. visible/enabled/readonly are optional. Table-column text reads the current row. Results follow input order (index is 0-based); unavailable properties remain null with a reason. Reads are sequential, not an atomic snapshot. targets is an array of {ref} objects returned by discovery. (1C 8.3.12+)

  • select_option(ref*, value*) Pick a radio-button option by its display text or by its 0-based index.

  • select_value(ref*, value=null, match=null, choice_table=null, choice_column=null, data_type=null, expected=null, max_rows=500, timeout=180) Select exact value text (drop-down first) or match={column title: exact text} in a choice form. Ambiguous/incomplete searches refuse selection. choice_table is an exact table name; choice_column limits value to a column title; data_type chooses a displayed type in the standard type dialog. expected checks accepted field text. Returns accepted value and verification. max_rows=1..10000; timeout is in seconds, 0<timeout<=3600, and covers the action. Failure leaves the UI and does not undo sent choices. Table cells use the current row and leave row editing open. (1C 8.3.12+)

  • set_check(ref*) Toggle a checkbox field. Inside a table this acts on the column that is the CURRENT cell, so make the target column current first — tc_field(action="activate") on the column element does that; a click on the cell does not.

  • set_fields(entries*) Fill 1..100 input fields or checkboxes in one active form, in order. Each entry has exactly one of text, checked (boolean), or select={value: exact text} / select={match: {column title: exact text}}; select accepts tc_field(action="select_value") options. Empty text clears; matching checkboxes are not toggled, unknown states stop (Russian/English Yes/No supported). Stops on refusal, pending choice, window change or unconfirmed value; earlier changes remain. Rechecks all values at the end; final_verified=null may mean equivalent numeric formatting. Results use 0-based input indexes. Does not save the document. entries contains {ref, text}, {ref, checked}, or {ref, select} objects; use discovered references unchanged. (1C 8.3.12+)

  • start_choosing(ref*) Open a reference field's choice form. Handles focus and table-cell editing. For CalendarField, selects the current date like a double-click; use goto_date first. Returns opened and the active window. A calendar selection need not open another window.

  • start_choosing_from_choice_list(ref*) Start choosing from a field's choice list.

  • title_is_shown(ref*) Whether an element's title is shown. (1C 8.3.25+)

  • wait_for_drop_list_generation(ref*, timeout=60) Wait timeout seconds (integer 0..65535) for a generated drop-down; returns generated. The result is not tied to ref and may be true before this field's list opens. Open this field's list first, then read it immediately. (1C 8.3.4+) ref selects the client; otherwise set connection_id when several clients are connected. targets/entries references also select it; all must belong to one connection. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, text, index, +16 more.

tc_findA

Search the UI tree for objects.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • find_object(name=null, cls=null, type=null, root_ref=null, title=null, timeout=0, scope='window') Find the first object matching the criteria (parameters as in tc_find(action="find_objects")). When nothing matched, the answer carries the same filter diagnostics as tc_find(action="find_objects"). (1C 8.3.3+)

  • find_objects(name=null, cls=null, type=null, root_ref=null, title=null, timeout=0, scope='window', limit=null, cursor=null) Search UI objects: name/title support * ?; cls/type use discovered class/platform kind (tc_app(action="get_child_objects")). root_ref defaults to active window; scope=application requires omitting it. timeout retries while no matches (0: once). Empty results are ok; cls/type diagnostics identify unknown filters and list observed kinds. Windows/command buttons include url when available. No limit returns all; limit=1..1000 pages with total/has_more/next_cursor. Continue with cursor alone (plus connection_id if needed), no filters. Pages retain the original result for 5 minutes; elements may become stale. (1C 8.3.3+)

  • wait_for_object_displayed(name=null, cls=null, type=null, title=null, timeout=60) Poll the UI tree until an object matching the criteria appears, up to timeout seconds. Returns the object, or ok=False on timeout. Criteria as in tc_find(action="find_objects"). On timeout the answer says whether a cls was seen at all and lists the classes that were actually present, so a misspelled class name is distinguishable from an object that never appeared. (1C 8.3.3+) root_ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in root_ref; re-find expired elements.

Inputs: action (required), cls, name, type, +7 more.

tc_formA

Actions on the managed form itself, including navigation between form elements and reading the focused element. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • compare_snapshot(snapshot_id*, ref=null) Compare the original form instance with its baseline; optional ref must identify the same instance. Returns changes/added/removed; observed means previously unread properties, not changes. complete/baseline_complete/errors mark read gaps. Uses baseline table settings; table_changes matches 1-based row positions and column titles, *_present distinguishes missing/empty cells. Tables are prepared before reading and stay selected; truncated tables are not compared. Added flags: '-' unread, 'unknown' failed. Stores no new snapshot; closed/reconnected forms need a new baseline. (1C 8.3.3+)

  • create_snapshot(ref=null, include_tables=False, max_rows=500) Save ManagedForm state (default active) for later compare_snapshot; returns snapshot_id/summary. Reads visibility/availability/read-only and ordinary values; hidden branches skip further reads, disabled elements skip read-only. include_tables adds display-ordered rows up to max_rows each without expanding trees; requires active form/finished input (8.3.6+). Tables requiring sequential navigation report table_requires_sequential_read and complete=false; use read_rows separately. Rows stay selected; 8.3 may activate/establish current rows. Preparation precedes final reading. Excludes document contents; sequential, not atomic; may take seconds. (1C 8.3.3+)

  • current_modified(ref*) Whether a form has been modified. (1C 8.3.3+)

  • delete_snapshot(snapshot_id*) Delete a saved snapshot belonging to this connection.

  • execute_choice_from_list(ref*, index*) Pick an item from a modal choice list by 0-based index or display text. Not a field's drop-down (use tc_field(action="choose_from_drop_list")). ref: the form (ManagedForm), not a field. (1C 8.3.8+)

  • execute_choice_from_menu(ref*, index*) Choose an item from an open menu by 0-based index or display text. For a submenu, call again to choose its item. Address the form or the spreadsheet field that opened the menu. A spreadsheet field requires platform 8.3.25 or newer. (1C 8.3.8+)

  • find_default_button(ref*) Find the form's default button. ref is the form's ref. (1C 8.3.3+)

  • get_context(ref=null, save_as_snapshot=False, include_tables=False, max_rows=500, root_ref=null, visible_only=False, include_commands=True, result_mode='changes') Inspect ManagedForm elements (including hidden), state, values and input context; includes discovery, so no separate search is needed. Use tc_find(action="find_objects") alone for element lookup. May take seconds. result_mode=changes returns a full first read, then only new/changed elements and removed objects since the previous complete read of this form; changed=false means no changes. Other interaction fields describe the current state. full returns everything. result_mode and full_reason identify the actual response; context_id/compared_to identify automatic baselines. Filter changes or lost baselines return full. Incomplete reads return full and keep the prior baseline. save_as_snapshot creates a separate fixed snapshot for compare_snapshot without another read. include_tables adds up to max_rows per table without expanding trees; rows stay selected, 8.3 may activate rows. Excludes document contents. Flags: '-' unread, 'unknown' failed, null unavailable (not empty). form_details reports optional hints/type restrictions/choices availability. root_ref limits output to a subtree; include_commands=false omits buttons/command groups; visible_only excludes known hidden/inactive pages, retains unknown visibility. Output filters do not narrow reading or fixed snapshot scope. complete/errors mark read gaps; snapshot_error marks failed saving. Sequential reads. (1C 8.3.3+)

  • get_current_element(ref*) Get the managed form's focused element as item: [{ref}]. ref: the form (ManagedForm). The platform can return no current element after navigating out of its fields.

  • goto_next_element(ref*) Move focus to the next element in the managed form's tab order. ref: the form (ManagedForm). This can finish the current field's pending input; read the field's data presentation to verify acceptance. Reference fields may still require choosing a value.

  • goto_previous_element(ref*) Move focus to the previous element in the managed form's tab order. ref: the form (ManagedForm). This can finish the current field's pending input; read the field's data presentation to verify acceptance.

  • list_snapshots(ref=null) List saved snapshots for this connection, optionally restricted to one ManagedForm ref. Returns IDs, form titles, timestamps, element counts, sizes and global storage limits. Listing does not refresh last_used_at or verify forms are still open; a supplied ref is validated.

  • wait_for_closing(window_title=null, timeout=60) Wait until a window closes, up to timeout seconds. Without window_title, watch the window active AT THE MOMENT OF THE CALL. After a close, pass window_title to check the closed window. Switching windows or opening a preview does not count as closing. If the target cannot be identified or its absence confirmed, return ok=False. (1C 8.3.3+) ref/root_ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref/root_ref; re-find expired elements.

Inputs: action (required), ref, index, timeout, +10 more.

tc_keyboardA

Send a keyboard chord to the local 1C client or browse standard shortcuts offline. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • list_shortcuts(search=null, category=null, limit=20, offset=0) Browse standard 1C shortcuts offline (omit connection_id): search English/Russian descriptions or ref names; category filters by a returned category. Page with limit=1..100 and next_offset. Each alternatives entry is a keys array for send_keys. Context/focus matters; the catalogue contains standard managed-application PC shortcuts; availability depends on the platform version and configuration.

  • send_keys(keys*, ref=null) Send one chord to local 1C. Without ref, use the active window and focused control. ref addresses a window, managed form, input field or table: activates its window and, for fields/tables, verifies focus before sending. Table columns are not targets. Activation can finish pending input and switch pages; previous focus is not restored. keys: zero or more CTRL/SHIFT/ALT modifiers followed by one ref, e.g. ["CTRL","SHIFT","BACKQUOTE"] toggles panels. Letters A..Z, digits, F1..F12, ENTER/ESC/TAB, arrows, HOME/END, PAGEUP/PAGEDOWN, INSERT/DELETE/BACKSPACE and punctuation/keypad names from list_shortcuts. Requires Windows, Linux/X11 or macOS and local desktop access; on a shared Windows/Linux desktop 1C must have focus. macOS needs Accessibility permission; CTRL sends Command, ALT sends Option; INSERT is unavailable. Successful delivery does not prove command success: read the resulting state. May edit data, open dialogs or close windows. Not text input; use input_text for text. Chords need not appear in list_shortcuts. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, keys, limit, +4 more.

tc_scenarioA

Record and replay UI scenarios.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • record_cancel() Cancel user-actions recording (discard the scenario). (1C 8.3.2+)

  • record_finish(path=null) Stop recording; return XML in uilog or save path (relative to SERVER working directory; returns absolute). Write failure returns ok=false/error/path AND uilog; recording already stopped, so retry cannot recover it. Synth completion failure returns finish_not_confirmed with preserved XML. lost_actions means incomplete replay. no_effect lists unchanged readbacks by CALL index, not XML step; not proof of no effect. observed/not_observed count successful/unavailable readbacks; readback/scope describe coverage. Empty no_effect with observed=0 means nothing checked. (1C 8.3.2+)

  • record_pause() Pause user-actions recording: actions performed until tc_scenario(action="record_resume") stay out of the scenario. (1C 8.3.2+)

  • record_resume() Resume user-actions recording. (1C 8.3.2+)

  • record_start() Start recording a scenario (uilog) that tc_scenario(action="run_scenario") can replay later. Perform the real, effect-producing actions between start and tc_scenario(action="record_finish"), then read the scenario from finish. (1C 8.3.2+)

  • run_scenario(uilog=null, path=null, result_mode='summary') Replay uilog XML or path on the current form. Unsupported steps are skipped/listed; first failure stops at 0-based stopped_at. total counts reported steps, played counts attempted steps including failures. ok means all attempted commands accepted, not all effects verified; full steps[].changed follows each action's contract. Default summary; result_mode=full adds steps. Logs retain full details in both modes. Set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details.

Inputs: action (required), path, uilog, result_mode, +1 more.

tc_sessionA

Connect to, launch or stop the 1C test client.

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • connect(port=null, host='127.0.0.1', version=null, profile=null) Connect to a running /TESTCLIENT -TPort client using port or a list_profiles profile; explicit parameters override the profile. version must match the full running version (omitted: built-in default). Connect before UI actions. A new host/port creates a connection; the same host/port reconnects that client: connection_id is retained, but find elements again.

  • disconnect(force=False) Close the connection to the test client. force=true interrupts a pending network call; its result may be unknown. The 1C application remains running.

  • get_logging_status() Return call logging status, paths, call count, disk usage and any reason recording stopped.

  • launch_client(base=null, port=null, server=False, user=null, password=null, version=null, exe=null, extra_args=null, wait=120, connect=True, desktop='default', profile=null) Launch and optionally connect. base is a file infobase path, or 'server\infobase' with server=true; alternatively use a list_profiles profile. Explicit parameters override the profile. user/password are infobase credentials; the password is visible in the process command line. exe is the full path to 1cv8/1cv8c (with .exe on Windows); omitted: configured or auto-detected installation. A version prefix selects the latest matching build; use a full version or exe for an exact build. Omitted port allocates a free local port; each launch creates a connection_id. wait covers total startup including readiness; increase for slow bases. Linux default needs DISPLAY/XAUTHORITY; isolated needs Xvfb. isolated uses a separate desktop (Windows 10+/Linux) and stops with the server. connect=false confirms only an answering port, not a usable client.

  • list_connections() List registered clients with connection_id, profile, host, port, base, user and recording status. busy, active_action and active_seconds describe the running call. connected reports an open connection, not client responsiveness. base/user are known for clients launched here.

  • list_profiles() List named launch/connect profiles and their descriptions and settings, without passwords. Pass the name as profile to the listed action. Does not connect to or launch a client.

  • start_logging(screenshot_mode=null, reports=null) Start a call journal. Repeated start keeps the current journal. screenshot_mode: off, actions (changes and errors), or all calls; default follows server settings. reports: ["html"], ["allure"], ["html", "allure"], or ["none"] for JSONL only. Omit reports to use the server's configured formats; the response lists the selected reports. Saves files on the server. Allure results are finalized when logging stops.

  • stop_client(graceful_timeout=15) Stop the test client started by launch_client in this connection, and disconnect from it. Tries normal exit for graceful_timeout seconds (0..120, default 15), confirming known exit questions, then forces termination if needed. 0 forces termination immediately. Unsaved changes may be lost. Returns shutdown: graceful, forced, or already_exited; forced includes shutdown_reason. A failed stop retains process ownership for retry.

  • stop_logging() Stop call logging, finalize selected reports and return their paths. Does not stop the client. Set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details.

Inputs: action (required), exe, base, host, +15 more.

tc_tableA

Read and edit table or tree rows, manage selection and expand or collapse nodes. Choose action. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. ok=true means accepted; verify effects by reading state. target_check: present, unknown (uncheckable), off (disabled); present does not prove an effect. target_hidden=true means the target exists but is invisible; it describes the element, not its ancestors. Its absence says nothing; hidden targets may still act (e.g. activate). Invalid addresses are rejected only where the address can be checked; an unverified empty read may mean a missing target. failure_context describes state/editor/choices; its complete=false means incomplete diagnostics. Actions:

  • add_rows(ref*, rows*) Add and fill 1–100 rows: rows=[{cells:[{column: element name, text: ...}]}], at most 1000 cells. Each cell uses text for an input column or checked=true/false for a checkbox column, never both. Requires finished row editing. Stops at the first refusal; earlier edits remain. results use 0-based input indexes; added=null means creation could not be confirmed. Each completed row is checked when filled, not after later rows. Does not save the document. (1C 8.3.12+)

  • can_be_expanded(ref*, row_column=null, row_value=null) Whether a table row/group can be expanded. Pass row_column+row_value to target a specific row by a column name or title; omit them to use the current row. can_expand=true does not promise that tc_table(action="expand") will work: rows reporting true have been observed to stay collapsed. The reliable evidence is tc_table(action="expand")'s own value_before/value_after pair.

  • change_row(ref*) Start editing the current table row/column. Activate the intended column first. Needs an existing row not already in edit mode. edit_mode confirms whether editing started; null means it could not be checked. For text input use set_cell_text for automatic preparation.

  • choose_row(ref*) Choose/double-click the current row: selects and closes a choice form, opens an item's card in a list (a folder's own card, not its contents). changed tracks ACTIVE WINDOW change only. If false, read the destination field: selection may have succeeded without closing a window.

  • collapse(ref*, row_column=null, row_value=null) Collapse a form group or table node. For tables, row_column+row_value targets a row by column name/title; omitted: current row. No collapsible node is not an error. changed=false only for equal successfully read value_before/value_after; null for form groups, read failures or readback=off. can_be_expanded applies only to table rows and does not guarantee an effect; verify before/after.

  • copy_row(ref*, confirm=null) Copy the current table row. On catalog/document lists a confirmation dialog may appear — set confirm=True/False to auto-answer it (default None: no dialog handling). (1C 8.3.25+)

  • delete_row(ref*, confirm=null) Deprecated alias for delete_rows(scope="current"). Use delete_rows for new calls. (1C 8.3.3+)

  • delete_rows(ref*, confirm=null, scope='current', unmark=False) Delete current or selected rows (selected: 8.3.6+, standard context-menu Delete/Mark, preserving selection). confirm=true/false answers; null leaves confirmation open. Lists may mark instead of remove. deleted=null means unverified. unmark=true removes marks (8.3.6+), only in lists with a standard marking command, not ordinary tables. (1C 8.3.3+)

  • deselect_all_rows(ref*) Clear the table's row selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. Plain row navigation drops the selection down to the current row, which is the only way to undo a multi-row selection there. (1C 8.5.1+)

  • deselect_row(ref*) Remove the current table row from the selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. The closest thing there is to pass over the row with toggle_selection set: that toggles it, so a selected row becomes unselected. (1C 8.5.1+)

  • end_edit_row(ref*, cancel=False) Finish editing the current table row. Set cancel to discard the edits instead of committing them.

  • expand(ref*, row_column=null, row_value=null, subordinates=False) Expand a form group or table node; subordinates also expands child rows. For tables, row_column+row_value targets a row by column name/title; omitted: current row. No expandable node is not an error. changed=false only for equal successfully read value_before/value_after; null for form groups, read failures or readback=off. can_be_expanded applies only to table rows and does not guarantee an effect; verify before/after.

  • find_rows(ref*, conditions*, columns=null, case_sensitive=False, max_rows=500, max_matches=50, text_format='plain') Search selectable rows of the CURRENT table, respecting filters/collapsed groups; never a database-wide search. Example: conditions=[{"column":"Name","text":"Bolt","match":"exact"}]. Supply 1–32 conditions; all must match. column is the displayed column TITLE; text is a string. match: exact (default), contains, starts_with, ends_with; literal, case-insensitive by default. Ignore search highlighting for comparison; plain removes it in results, raw retains it. Empty text matches displayed emptiness. columns selects returned titles. max_rows bounds checked rows, not client response; max_matches bounds matches. complete covers this table; matches_truncated marks omitted matches. No stable order/row IDs. Uses read_rows: clears selection, may reposition an unavailable cursor on older platforms; refuses unfinished row edits. (1C 8.3.6+)

  • get_cell_text(ref*, column*) Read the current row's displayed cell (may contain search markup). column is an element NAME or 0-based index; digit strings are indexes. Unknown/ambiguous names refuse; a matching title suggests the name. null does not prove emptiness. A COLUMN GROUP displayed as one column may return neighbouring/group text indistinguishable from the intended value; other-kind members may return null. A nonexistent table can also return text=null.

  • get_current_item(ref*) Get the current item of a table → {ref}. ref: the table.

  • get_current_row(ref*) Get the current table row as [{column: value}]. Returns [] if there is no current row or its values could not be read. Needs platform 8.5.1 or newer — on every earlier one, use get_selected_rows after moving to the desired row, or get_cell_text to read one column. (1C 8.5.1+)

  • get_list_settings(ref*, max_rows=500, timeout=180) Read filters and sorting through the list's standard settings form. Closes settings opened by this call. filters contains expanded tree rows, including the root and groups; orders follows sort priority. Values are displayed text. max_rows limits each settings table (1–10000). timeout bounds the operation in seconds (greater than 0, at most 3600). (1C 8.3.12+)

  • get_list_settings_fields(ref*, section='filters', max_rows=500, timeout=180) List available field captions for filters or orders through the standard list settings. Returns visible fields; collapsed branches are not traversed. Closes settings opened by this call. timeout limits the operation in seconds (0 < timeout <= 3600). (1C 8.3.12+)

  • get_selected_rows(ref*) Read selected rows as {column title: displayed value} maps. Row order is not guaranteed. The platform chooses the columns. Missing columns are unread, not empty; empty text can also represent an omitted value. Values may contain search highlighting. Use read_rows to read all selectable rows of the current table. (1C 8.3.6+)

  • go_one_level_down(ref*, row_column=null, row_value=null, column=null) Go one level down in a table tree. Pass row_column+row_value to target a specific row by a column value; row_column accepts a column name or title. Omit both to use the current row. Optional column names a column to read before and after the move; changed compares its cell text.

  • go_one_level_up(ref*, row_column=null, row_value=null, column=null) Go one level up in a table tree. Pass row_column+row_value to target a specific row by a column value; row_column accepts a column name or title. Omit both to use the current row. Optional column names a column to read before and after the move; changed compares its cell text.

  • goto_first_row(ref*, toggle_selection=False, column=null) Move to the first row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_last_row(ref*, toggle_selection=False, column=null) Move to the last row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_next_item(ref*) Move to the next item within a table. ref: the table.

  • goto_next_row(ref*, toggle_selection=False, column=null) Move to the next row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_previous_item(ref*) Move to the previous item within a table. ref: the table.

  • goto_previous_row(ref*, toggle_selection=False, column=null) Move to the previous row of a table. Set toggle_selection to also toggle that row's selection. Pass column (the column element NAME) to have that cell read before and after the move: it comes back as value_before/value_after with changed=true when they differ. changed=false only means the two texts are the same — different rows can share a value; without column nothing is read and changed is null.

  • goto_row(ref*, column=null, value=null, direction='down', toggle_selection=False, fields=null) Seek by column (displayed TITLE, not index) and value, or fields={title:value} for multiple columns; do not combine them. Values accept int/string and * ? wildcards; matching is case-sensitive displayed text. Searches FROM AND INCLUDING current row towards down/up, without wrapping. Step away first for the next match. A miss moves to the last row going down, or the first going up. toggle_selection toggles the destination; without criteria, the current row. found=null means no criteria or undetermined, never not-found. criteria uses titles; observed.column uses the element name. Refuses inactive containing pages. (1C 8.3.2+)

  • is_expanded(ref*, row_column=null, row_value=null) Whether a table row is expanded. Without row_column this reads the CURRENT row. Pass row_column (column name or title) and row_value to read another row without moving the cursor.

  • read_rows(ref*, max_rows=500, columns=null, text_format='plain') Read up to max_rows within current filters/collapsed groups (0: full count only), unordered. row_count is null when a sequential read is truncated; truncated signals more rows. columns selects returned titles; plain strips known search highlighting, raw retains it. Temporarily selects rows, then clears ALL previous selection. Keeps a usable current row; older platforms may move an unavailable cursor to first (cursor_repositioned=true). Single-selection tables are read sequentially (10000-row, 180-second scan limits), restoring the current row. Refuses unfinished row edits and inactive containing pages. (1C 8.3.6+)

  • search(ref*, text*, max_rows=500, timeout=180, settle_time=2, columns=null, text_format='plain') Set the list's standard search string (empty clears), preserving filters. Returns rows after input readback and two equal row reads settle_time seconds apart; stability is not a platform completion signal. max_rows=1..10000; truncated means more rows. 0<settle_time<timeout<=3600; timeout covers the action. columns selects titles; raw retains search highlighting. Reading clears selection; unfinished edits refuse. An external search string is located with Ctrl+F on a local client; this changes focus. A newly opened native Find dialog is closed without searching and returns search_dialog_required. Remote clients require a search string inside the table. (1C 8.3.12+)

  • select_all_rows(ref*) Select all rows of a table. (1C 8.3.6+)

  • select_row(ref*) Add the current table row to the selection. Needs platform 8.5.1 or newer — on every earlier one the platform has no such method. Build a selection there by moving through rows with toggle_selection set — each row the cursor passes is toggled. (1C 8.5.1+)

  • set_cell_text(ref*, column*, text*) Set current-row column by element NAME; manages focus, continues existing row edits, finishes without discarding other cells, then reads back. Empty text clears. Returns verified/changed and displayed value_before/value_after; empty_value confirms emptiness despite formatting; numeric_equivalent may give verified=null. row_edit_pending means validation/reference choice kept editing: continue at the returned editor or end_edit_row(cancel=true). value_verification_inconclusive means editing finished but rounded output prevents exact verification.

  • set_list_settings(ref*, filters=null, orders=null, replace=False, max_rows=500, timeout=180) Apply standard list filters/sorting; field is an exact available caption, value is displayed text. filters/orders follow their schemas. Adds by default; replace=true replaces only supplied sections ([] clears one). Success applies and closes settings; failure leaves them open and earlier edits may remain. 0<timeout<=3600 seconds covers the operation. (1C 8.3.12+)

  • set_order(ref*, column*) Sort a table by a column, addressed by its TITLE. There is no direction parameter and no way to read the current direction: calling it again on the same column reverses the order. To learn which way it went, go to the first row and read a cell. (1C 8.3.6+)

  • set_row_values(ref*, cells*) Fill 1..100 cells of the current row: {column: element NAME, text} or {column, checked}. Matching checkboxes are not toggled. Continues editing, finishes once after all entries, then reads back. Refusal/unexpected editor stops with earlier edits preserved for completion/cancel. completed counts entries; edit_finished confirms row completion; final_verified=null may mean numeric equivalence. Results use 0-based input order. Does not add rows, alter selection or save. (1C 8.3.12+)

  • switch_row_delete_mark(ref*, confirm=True) Toggle the current row's deletion mark; confirm=true answers Yes, false No, null leaves the question open. dialog_answered proves only a response; changed is always null (no readable mark flag). To verify, invoke the mark command again and read its question: mark means currently unmarked, remove mark means marked. (1C 8.3.6+)

  • table_add_row(ref*) Add a row to a form table. Fill its cells with set_cell_text using column element names. ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, rows, text, +26 more.

tc_windowA

Actions on the client application window. Also available: tc_field(action="is_visible"), tc_field(action="is_enabled"), tc_field(action="get_context_menu"), tc_app(action="get_parent").

  • marks a required action parameter; the group schema treats action parameters as optional. Pass action="name" and only that action's parameters. Actions:

  • activate_window() Activate the current active window. (1C 8.3.3+)

  • answer_dialog(confirm=True, timeout=5) Wait up to timeout seconds and answer a modal question: confirm=true presses Button0, false Button1. Never presses Button2; inspect the question/window for other choices. Returns answered='Да'/'Нет' and question; both null means no dialog, question alone null means unreadable text. (1C 8.3.3+)

  • choose_user_message(text*, ref=null) Click the first user message matching text in the addressed window (active if omitted); * and ? are wildcards. Use get_user_message_texts to read the available messages first. (1C 8.3.3+)

  • close_user_messages_panel(ref=null) Close the addressed window's user-messages panel (active if omitted). This hides the panel; previous messages can reappear when it is reopened. It does not clear message history. (1C 8.3.6+)

  • close_window(ref=null) Close the window at ref, or the active window if omitted. Returns closed only after verifying that the window disappeared. If it remains open, returns window_not_closed and target; inspect the form or answer its dialog before retrying. Also closes an active local print preview when ref is omitted. (1C 8.3.3+)

  • execute_command(command*) Open a navigation link, e.g. 'e1cib/list/Справочник.Контрагенты', 'e1cib/app/Обработка.Имя' or a URL returned by the command interface. For a button name or title, find it and use click. Returns the resulting window; window_changed=false reuses the previous window description. An opened error window is a failure. (1C 8.3.3+)

  • get_command_interface(ref=null, all_sections=False, section=null, search=null, limit=50, offset=0, refresh=False, timeout=120) Read the current command tree of ref (default: main application window), without clicking. all_sections=true waits for stable windows/menu, then scans sections and returns command counts; it changes menus, then attempts to restore them. Stops on window changes; check complete/restored and window_changes inside scan_error/restoration_error. Incomplete results stay cached; inspect the window state before refresh=true. No section read means ok=false. With all_sections=true, section (returned identifier or exact title) or search (path substring) returns cached commands, paged by limit=1..200 and offset; continue with next_offset. Commands contain title, path and url: pass url to execute_command. refresh=true repeats the scan; catalogues are kept until disconnect (up to 20 windows). timeout limits a scan in seconds (0 < timeout <= 3600). (1C 8.3.3+)

  • get_user_message_texts(ref=null, open_if_closed=True) Read messages from ref (active window if omitted). A closed panel is temporarily opened with Ctrl+Shift+Z and closed again; this requires local desktop access and the addressed window to be active (foreground on a shared desktop). Remote clients require an open panel. open_if_closed=false reads without opening; a closed panel returns user_messages_unavailable. Messages can belong to earlier actions or appear late; closing the panel does not erase them. A restore failure returns the messages with ok=false and panel_restored=false. (1C 8.3.3+)

  • goto_next_window(ref=null) Go to the next open window from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • goto_previous_window(ref=null) Go to the previous open window from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • goto_start_page(ref=null) Go to the start page from the addressed main window (active if omitted). The client returns an error if navigation is unavailable. (1C 8.3.6+)

  • open_user_messages_panel(ref=null) Open ref's user-message panel (active window if omitted); an open panel is left open. Uses Ctrl+Shift+Z: requires a local client and the addressed window active, foreground on a shared Windows/Linux desktop. macOS needs Accessibility permission. Remote/inaccessible clients return a refusal. Returns opened and panel_open. (1C 8.3.6+) ref selects the client; otherwise set connection_id when several clients are connected. Use tc_session(action="list_connections"). Success may omit target/connection echoes and shorten window details. Use returned references unchanged in ref; re-find expired elements.

Inputs: action (required), ref, text, limit, +10 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.5/5.0

    Scored across 11 tools

    Disambiguation4/5

    The grouped tools are mostly distinct by UI object type: session, window, form, field, table, document, calendar, keyboard, find, scenario, and app. Some boundaries can still blur, especially tc_app vs tc_window vs tc_form for active window/form state, and tc_calendar vs tc_field for date controls, but descriptions and cross-references generally guide correct selection.

    Naming Consistency5/5

    All tool names follow a consistent tc_<domain> convention, and the action names within each group are also consistently snake_case and mostly verb_noun. The naming scheme is predictable across the entire set.

    Tool Count5/5

    Eleven grouped tools is well within a reasonable range for a broad UI-automation server. Each group corresponds to a clear functional domain, and the large action surface is packaged rather than exposed as dozens of separate tools.

    Completeness5/5

    The surface covers the full lifecycle: connection/launch/stop, logging, UI discovery, window and form navigation, field/table/document/calendar interactions, keyboard input, screenshots, snapshots, and scenario recording/replay. No obvious domain-critical gap stands out for 1C UI test automation.

    Maintenance

    ActivityActive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      Enables AI agents to drive native 1C TestClient QA automation over stdio or authenticated streamable-HTTP transports, running BDD/Gherkin scenarios, reading and verifying managed forms, and performing target-bound lifecycle and UI operations. It also supports JUnit/Allure reporting and an optional authenticated Windows host bridge for desktop input and screenshots.
      64
      5
      Apache 2.0
    • A
      license
      C
      quality
      B
      maintenance
      Enables AI agents to interactively drive 1C:Enterprise UI through the testing client, including opening forms, clicking buttons, filling fields, and capturing evidence.
      129
      6
      MIT
    • A
      license
      B
      quality
      B
      maintenance
      Enables an AI agent to run 1C queries, evaluate expressions, execute BSL code, and inspect configuration metadata inside a user's open 1C session, exchanging commands and results through a folder in the user's profile without any intermediate gateway. Results can be gated by user confirmation on the 1C form, and write operations are rolled back unless explicitly permitted.
      10
      11
      MIT