При работе в 1С часто возникает задача массового пересчета или обновления данных в документах. Казалось бы, достаточно написать простую обработку, которая изменит значения в базе. Однако на практике программисты сталкиваются с тем, что логика документа (пересчет цен, налогов, зависимых полей) прописана в обработчиках событий формы, которые срабатывают только при интерактивном взаимодействии. Рассмотрим подробнее, как решить задачу автоматического «перещелкивания» данных, имитируя действия реального пользователя.
Проанализируем ситуацию: если мы просто откроем документ программно и изменим реквизит через Объект.Товары[0].Количество = 10;, то события формы, такие как КоличествоПриИзменении, не выполнятся. Это происходит потому, что:
&НаКлиенте и не являются экспортными.Элементы.Таблица.ТекущиеДанные), который отсутствует при программной записи объекта.Выясним, какие инструменты позволяют обойти эти ограничения и заставить платформу выполнить весь цикл интерактивной логики.
Разберем самый современный и «чистый» способ — встроенный в платформу 8.3 механизм автоматизированного тестирования. Платформа позволяет запустить один сеанс как Менеджер тестирования, а другой как Клиент тестирования.
Посмотрим на алгоритм действий при использовании Vanessa Automation:
/TestClient.ПриИзменении.Это гарантирует, что все расчеты в форме отработают так же, как если бы их вводил человек. Проанализируем пример шага сценария:
И в таблице "Товары" я перехожу к текущей строке
И в таблице "Товары" я активизирую поле "Количество"
И в таблице "Товары" я ввожу значение "10" в поле "Количество"
Если задача разовая или использование встроенных механизмов тестирования кажется избыточным, рассмотрим вариант применения внешних утилит, таких как AutoIt. Этот инструмент позволяет управлять окнами Windows, имитируя нажатия клавиш и перемещение мыши.
Разберем, как это работает: скрипт AutoIt ищет окно 1С по заголовку, активирует его и посылает последовательность команд, например, {TAB}, {ENTER} или {DOWN}. Однако у этого метода есть существенный минус — он «слепой». Если форма перерисуется или откроется лишнее оповещение, скрипт может сбиться.
Для более глубокой автоматизации можно использовать профессиональные надстройки. Проанализируем возможности некоторых из них:
Иногда программисты пытаются решить задачу «в лоб», делая процедуры формы экспортными. Посмотрим на пример того, как это могло бы выглядеть в коде формы, если бы мы готовили её к автоматизации:
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТоварыКоличествоПриИзмененииСервер();
КонецПроцедуры
&НаСервере
Процедура ТоварыКоличествоПриИзмененииСервер()
// Основная логика пересчета
// ...
КонецПроцедуры
Важно: Если вы имеете доступ к изменению кода конфигурации, лучше всего вынести логику из обработчиков формы в модуль менеджера или модуль объекта. Тогда необходимость в «кликерах» отпадет, так как вы сможете вызвать ту же самую логику простой программной обработкой, передав в неё объект документа.
Подводя итог, если вам нужно «заставить события отрабатывать», лучшим выбором будет связка 1С:Тест-клиент + Vanessa Automation. Это наиболее стабильный метод, который полностью эмулирует программную среду пользователя.