Как автоматизировать переввод данных в управляемых формах 1С и имитировать действия пользователя?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему обычная обработка объекта часто не помогает?

Проанализируем ситуацию: если мы просто откроем документ программно и изменим реквизит через Объект.Товары[0].Количество = 10;, то события формы, такие как КоличествоПриИзменении, не выполнятся. Это происходит потому, что:

  1. Процедуры обработчиков обычно объявлены с директивой &НаКлиенте и не являются экспортными.
  2. Логика формы часто завязана на контекст (свойство Элементы.Таблица.ТекущиеДанные), который отсутствует при программной записи объекта.

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

Решение 1: Использование механизма Тест-клиента и Vanessa Automation

Разберем самый современный и «чистый» способ — встроенный в платформу 8.3 механизм автоматизированного тестирования. Платформа позволяет запустить один сеанс как Менеджер тестирования, а другой как Клиент тестирования.

Посмотрим на алгоритм действий при использовании Vanessa Automation:

  1. Запускаем целевую базу с ключом /TestClient.
  2. В Vanessa Automation используем «Рекордер» для записи действий: открываем документ, меняем значение в строке, нажимаем «Записать».
  3. Инструмент генерирует сценарий, который при запуске будет в точности повторять эти действия, вызывая все необходимые события ПриИзменении.

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


И в таблице "Товары" я перехожу к текущей строке
И в таблице "Товары" я активизирую поле "Количество"
И в таблице "Товары" я ввожу значение "10" в поле "Количество"

Решение 2: Внешние кликеры и скриптовые языки (AutoIt)

Если задача разовая или использование встроенных механизмов тестирования кажется избыточным, рассмотрим вариант применения внешних утилит, таких как AutoIt. Этот инструмент позволяет управлять окнами Windows, имитируя нажатия клавиш и перемещение мыши.

Разберем, как это работает: скрипт AutoIt ищет окно 1С по заголовку, активирует его и посылает последовательность команд, например, {TAB}, {ENTER} или {DOWN}. Однако у этого метода есть существенный минус — он «слепой». Если форма перерисуется или откроется лишнее оповещение, скрипт может сбиться.

Решение 3: Специализированные инструменты разработчика

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

  1. Инструменты разработчика (ИР) от Tormozit: Включают в себя расширенные возможности по групповой обработке данных. В некоторых режимах они позволяют имитировать интерактивное заполнение, вызывая серверные процедуры, связанные с изменением реквизитов.
  2. Интерактивное заполнение ТЧ (с Infostart): Существуют специализированные обработки, которые встраиваются в форму и позволяют «прощелкивать» выделенные строки, программно подставляя значения в элементы управления, что провоцирует запуск клиентских событий.

Технический нюанс: Прямой вызов обработчиков

Иногда программисты пытаются решить задачу «в лоб», делая процедуры формы экспортными. Посмотрим на пример того, как это могло бы выглядеть в коде формы, если бы мы готовили её к автоматизации:


&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    ТоварыКоличествоПриИзмененииСервер();
КонецПроцедуры

&НаСервере
Процедура ТоварыКоличествоПриИзмененииСервер()
    // Основная логика пересчета
    // ...
КонецПроцедуры

Важно: Если вы имеете доступ к изменению кода конфигурации, лучше всего вынести логику из обработчиков формы в модуль менеджера или модуль объекта. Тогда необходимость в «кликерах» отпадет, так как вы сможете вызвать ту же самую логику простой программной обработкой, передав в неё объект документа.

Подводя итог, если вам нужно «заставить события отрабатывать», лучшим выбором будет связка 1С:Тест-клиент + Vanessa Automation. Это наиболее стабильный метод, который полностью эмулирует программную среду пользователя.

← На главную