Как нажать кнопку в управляемой форме программно

1. json 3368 02.05.16 23:27 Сейчас в теме
Приветствую, коллеги!

Собственно вопрос, в теме.
Знает ли кто-нибудь способ?

Все решения, предлагаемые на форумах, сводятся к тому, чтобы либо сделать процедуру-обработчик экспортным, либо вызывать обработчик из самой формы.
Очень помог метод от автора tormozit Запись значения в поле ввода со срабатыванием события ПриИзменении , который позволяет вызывать обработчик без доработки форм. Хотелось бы найти подобный метод и для нажатия на кнопки.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3165 03.05.16 12:34 Сейчас в теме
(1) yurii_host, кнопка - это та или иная команда формы. Если это команда по-умолчанию, то зачастую существует аналогичный метод. Например, в отчете на СКД кнопка "Сформировать" является командой по-умолчанию, при этом есть метод "СкомпоноватьРезультат", который может быть вызван при каком-то отдельном событии. С другой стороны, если необходимо открыть отчет и сразу его сформировать, то тут есть и другой метод - чере параметры открываемой формы. А если нужно просто получить данные отчета, то можно создать объект "Отчет.ХХХ" и выполнить его функцию "Сформировать", возвращающую табличный документ.

Т.е. все зависит от задачи. В большей части случаев программное нажатие на кнопку по-умолчанию совершенно не нужно.
3. json 3368 03.05.16 16:34 Сейчас в теме
(2) starik-2005, про то, что некоторые кнопки соответствуют методам из расширения для основного реквизита формы - это я тоже знаю.
Очень хочется решить задачу по нажатию кнопки в общем случае. Так сказать, универсальный способ, который можно будет везде применять.
4. Xershi 1533 03.05.16 16:57 Сейчас в теме
(3) yurii_host, смысла в программном нажатии кнопки нет. Нужно написать код по нажатию кнопка вызывает процедуру, которую и вызывать программно.
5. json 3368 03.05.16 17:51 Сейчас в теме
(4) Xershi, не соглашусь, что нет смысла. Может он не для всех очевиден.
Но вопрос не в смысле, а в том, можно ли нажать на кнопку, не дорабатывая форму?
6. Поручик 4667 03.05.16 20:07 Сейчас в теме
(5) Так вам объяснили уже, что нажатие кнопки это вызов кода обработчика нажатия. Как вы представляете себе нажатие кнопки?
7. json 3368 03.05.16 21:06 Сейчас в теме
(6) Поручик, отличный вопрос! С такой позиции я почему-то не думал.
Под нажатием на кнопку я подразумеваю вызвать процедуру-обработчик, связанный с этой кнопкой. НО не внося изменения в форму через конфигуратор.

После этого вопроса мне пришла идея такого варианта: Можно создать на форме программно поле ввода, привязать к нему в качестве обработчика процедуру, связанную с нужной командой, и дальше вызвать событие ПриИзменении, как в статье, упомянутой в моем первом посте. Таким образом форму можно не дорабатывать без необходимости.
16. NordDron 05.05.16 18:15 Сейчас в теме
(7) yurii_host,
Интересно, как автор хочет "Программно создать на форме поле ввода" не изменяя форму в конфигураторе?

Для типовых конфигураций не изменяя конфигурацию, можно подключить внешнюю обработку заполнения, в которой уже делать с формой и объектом, её вызвавшим некие манипуляции.
17. json 3368 05.05.16 20:22 Сейчас в теме
(16) NordDron, после проведенного испытания выяснилось, что такая идея не работает. Ссылку на другую форму можно получить только на клиенте, а создать поле ввода на этой другой форме можно только на сервере. Но вот передать ссылку другой формы с клиента на сервер - никак нельзя.
22. aldan 22 12.12.23 18:25 Сейчас в теме
(1) Минутка некропостинга. Вдруг кто-то еще наткнется на этот пост.
Столкнулся с такой же проблемой. Отличие только в том, что форма в закрытом модуле, потому к коду доступа нет. Разработчик решил, что пользователю нормально будет несколько десятков раз нажать на кнопку, а мне это не нравилось.

Вышел из положения так: назначил кнопкам на форме горячие клавиши, потом периодически эмулировал нажатия на эти горячие клавиши. До тех пор, пока оно было нужно
8. json 3368 03.05.16 21:10 Сейчас в теме
Вообще программное нажатие на кнопку я не собираюсь публиковать в продуктив, т.к. это ОЧЕНЬ НЕКРАСИВОЕ решение. Но для автотестов очень часто хочется иметь прием, который бы позволил нажимать на кнопку из кода.
9. starik-2005 3165 03.05.16 21:59 Сейчас в теме
(8) yurii_host, для автоматического тестирования Вы просто будете нажимать все кнопки подряд на форме? ))) Это для юнит-тестов веб-страниц еще допустимо, но крайне сомнительно при тестировании функционала 1С. Вот отработает кнопка штатно, ничего не вывалится в плане крестов, но окажется, что результат проведения документа, содержимое печатной формы или пересчитанный в табличной части НДС отличается от правильного, но Вы же это не узнаете - ошибок нет при нажатии.

Есть мнение (Макконнелл, "Совершенный Код"), что тестирование занимает слишком много времени, при этом обнаруживая всего лишь 30% ошибок (достаточно продолжительная статистика по разработкам в крупных софтверных компаниях соединенных штатов). В парном же программировании и в методологии инспекций кода выявляется порядка 70% исходных ошибок. Может стоит по лесенке CMM пройти немножко вперед, чтобы не наступать на грабли, на которые уже наступали? Или у нас это в принципе невозможно и хочется понаступать?
12. json 3368 03.05.16 22:27 Сейчас в теме
(9) starik-2005, ну не знаю как насчет мнения, но я уже практикую месяцев 10. И пока плюсов больше, чем минусов. Основной минус - недостаток инструментов. А так, конечно, каждый волен выбирать то, что ему по душе.
15. json 3368 03.05.16 22:59 Сейчас в теме
(9) starik-2005, кстати у юнит-тестов есть еще одно очень удобное применение, кроме поиска ошибок: генерация тестовых примеров. Когда нужно написать некий функционал, то можно сгенерить в транзакции записи в нужных регистрах и создать документы с ожидаемыми данными. Сразу же можно описать ожидаемый результат (я обычно с него начинаю). Тогда время на разработку уходит минимум. Если создавать объекты привычным способом, то начинаешь напарываться на всякие недочеты, ограничения, что очень сильно отжирает время.
10. spacecraft 03.05.16 22:00 Сейчас в теме
(8) yurii_host, для этого существует сценарное тестирование.
11. Xershi 1533 03.05.16 22:23 Сейчас в теме
(10) spacecraft, видел конфу но не ставил еще. В двух словах это юнит тесты?
14. spacecraft 03.05.16 22:41 Сейчас в теме
(11) Xershi, это сценарные тесты.
Юнит тесты это совсем другое.
Для юнит тестов пробовал xUnitFor1C. Неплохая вещь, только сильно ограниченна в использовании с типовыми. Вот для написания конфы с нуля, очень даже не плохо. Использовал для разработки бизнес логики приложения. Напоминает NUnit в c#. Можно создавать/тестировать бизнес логику без создания форм и обращения к базе, в пределах возможностей.
13. json 3368 03.05.16 22:36 Сейчас в теме
(10) spacecraft, при сценарном тестировании нужно запускать два сеанса. Это очень неудобно. Особенно, если работаешь с ерпи, которая долго запускается. Хотя в режиме сценарного тестирования можно нажимать кнопки (и не только) штатными средствами.
18. R_G_B 05.05.16 22:15 Сейчас в теме
я так понял, что строго запрета модификации формы на самом деле нет.
А значит вполне можно подменять обработчики как элементов управления так и самой формы, применив например методику из http://kb.mista.ru/article.php?id=268.
Ну и автоматизировать вставку на время тестирования и последующее удаление кода подмены обработчиков, путем выгрузки/загрузки текстов модулей конфигурации с помощью параметров запуска /DumpConfigFiles и /LoadConfigFiles.
20. json 3368 05.05.16 23:23 Сейчас в теме
(18) R_G_B, запрета действительно нет. Просто хочется вносить в код только лишь изменения, связанные с функциональностью, требуемой заказчику, и не захламлять код процедурами и функциями, предназначенными для тестирования. В идеале, дорабатываемый объект не должен ничего "знать" про тесты. А тесты должны идти как бы параллельно.
А вариант, когда нужно внести доработку, чтобы протестировать, а потом ее снести - это дополнительные накладные расходы, которых можно избежать.

В итоге мне удалось таки найти вполне подходящее решение, причем довольно простое, правда с использованием ком объекта Wscript.shell
19. R_G_B 05.05.16 22:17 Сейчас в теме
Хотя сценарное тестирование кажется вполне годным вариантом и запуск множества сеансов несет в себе только плюсы для организации нагрузочного тестирования, выявления блокировок, замеров производительности и т.д.
21. json 3368 05.05.16 23:28 Сейчас в теме
(19) R_G_B, лично я использую тесты в основном для разработки и выявления грубых логических ошибок. Поэтому для моих целей использовать не очень удобно. Хотя для описанных вами целей, наверное сценарное тестирование довольно подходящий вариант
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот