Имя: Пароль:
1C
1С v8
Как получить доступ к контексту формы на УФ
, ,
0 iva77ru
 
29.11.18
10:38
Добрый день!

1С:Предприятие 8.3 (8.3.10.2667)
Зарплата и управление персоналом, редакция 3.1 (3.1.7.144)

Переношу документы. Создаю, заполняю реквизиты. Нужно рассчитать документ: запустить процедуру расчета документа, например "Отпуск". Есть такая процедура в форме и даже экспортная. Как получить к ней доступ из обработки создания документа?
1 Fragster
 
гуру
29.11.18
10:46
на клиенте создаешь форму, через КопироватьДанныеФормы (ИлиСкопировать, не помню уже, помню, что там порядок источник получатель с ЗаполнитьЗначенияСвойств перепутан)отправляешь в форму твой объект, запускаешь там расчет, потом через КопироавтьДанныеФормы забираешь обратно рассчитанные данные
2 Fragster
 
гуру
29.11.18
10:47
либо есть интересный вариант - с помощью https://github.com/grumagargler/tester делаешь все интерактивно :)
3 Cyberhawk
 
29.11.18
10:54
Если у целевой формы нет точки входа с клиента, то никак
4 mikeA
 
29.11.18
10:56
(2) Пробовали. Много неопределённостей возникает интерфейсных.
Выбрали ещё более... интересный вариант))
https://github.com/xDrivenDevelopment/xUnitFor1C
+ https://jenkins.io/
5 Вафель
 
29.11.18
10:57
(3) если нет, то можно в расширении добавить
6 DrWatson
 
29.11.18
11:04
Твой код скорее всего серверный, а экспортная процедура - клиентская? Нужно искать что-то на сервере
А расчет ведь, наверняка, не на клиенте выполняется. Скорее всего эта процедура вызывает какую-нибудь серверную. Вот её и вызывай напрямую.
7 Fragster
 
гуру
29.11.18
11:24
(4) xunit он не для интерфейсов же. а в (0) именно что надо условную кнопку нажать
8 Вафель
 
29.11.18
11:46
(7) а что тестет умеет кнопки нажимать в ТЕКУЩЕМ сеансе?
9 iva77ru
 
29.11.18
11:47
С клиента идет вызов серверной процедуры, но та везде присутствует параметр Форма. То есть вызов серверный, но в контексте формы. Можно конечно дойти до процедуры расчета, а затем вызывать ее и подпихивать ей нужные данные. Это я даже не знаю сколько копать придется. Неужели нет способа запустить процедуру из модуля формы?
10 Вафель
 
29.11.18
11:48
(9) Форма.ИмяПроцедуры()
11 Fragster
 
гуру
29.11.18
11:51
(8) данные засасываешь в тестере и выплевываешь в клиент тестирования
12 Вафель
 
29.11.18
11:52
(11) так ТС не тест пишет, а заполнялку документа
13 iva77ru
 
29.11.18
11:56
&НаСервере
Док = Документы.Отпуск.СоздатьДокумент();

//заполнили реквизиты
//Нужно расчитать

{ВнешнийОтчет.ПереносДокументов.Форма.Форма.Форма(460)}: Ошибка при вызове метода контекста (ПолучитьФорму)
            Форма = Док.ПолучитьФорму("ФормаДокумента");
по причине:
Интерактивные операции недоступны
14 Fragster
 
гуру
29.11.18
11:58
(12) да, использовать тестер как интерактивную заполнялку документа, что непонятно-то?
15 Fragster
 
гуру
29.11.18
11:58
(13) все правильно
16 Cyberhawk
 
29.11.18
12:04
(14) Так гемор же. Сеанс клиента тестирования может быть только начат новый - нельзя подключиться к произвольному сеансу и использовать его как клиент тестирования
17 mikeA
 
29.11.18
14:28
(7) в (0) надо
>запустить процедуру расчета документа
>Есть такая процедура в форме и даже экспортная

Для запуска процедур формы вариант xUnitFor1C + Jenkins как раз то что надо.

С Тестером поигрался, так то оно вроде ничего, когда пару кнопок нажать по-быстрому, но когда чуть больше возникают неочевидные проблемы. Например вылезет посредине теста какое-нибудь сообщение и всё, привет.

Ну и набирать код для Тестера практически в блокноте)

Плюс если прикрутить к Jenkuins Allure, получится очень удобная система сообщений об ошибках.
18 iva77ru
 
29.11.18
14:36
Спасибо, обязательно попробую xUnitFor1C + Jenkins. Сейчас времени в обрез,  нашел обход: меняем конфигурацию, через процедуру ПриОткрытии() запускаю процедуры модуля формы.