Имя: Пароль:
1C
1С v8
Запуск процедуры формы из расширения.
,
0 Azgerd
 
23.01.20
14:00
Здравствуйте! В ЗУП 3.1 Возникла необходимость пересчитать документы "Разовое начисление" списком. Для этого создал расширение, в расширение добавил форму списка документа "Разовое начисление", в эту форму добавил команду "Пересчитать". В модуле формы вставил код;
&НаКлиенте
Процедура Расш1_ПересчитатьПосле(Команда)
    МассивВыделенныхДокументов = Элементы.Список.ВыделенныеСтроки;    
    Для Каждого ЭлМасДок из МассивВыделенныхДокументов Цикл        
        
        ФормаДокумента = ПолучитьФорму("Документ.РазовоеНачисление.Форма.ФормаДокумента", Новый Структура("Ключ",ЭлМасДок), ЭтаФорма);
        ИмяТаблицы = "Начисления";
        ВедущееПоле = "Сотрудник";
        ТипВедущегоПоля = Тип("СправочникСсылка.Сотрудники");
        ФормаДокумента.ПересчитатьДокументНаКлиенте();
        ФормаДокумента.Записать();        
        
    КонецЦикла;    
        
    Элементы.Список.Обновить();
    ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры

Ругается "Метод объекта не обнаружен ПересчитатьДокументНаКлиенте()"
В модуле типовой формы документа "Разовые начисления" эта процедура есть. Как правильноеё запустить из формы списка ?
Спасибо.
1 Mankubus
 
23.01.20
14:23
у процедуры ПересчитатьДокументНаКлиенте должен быть Экспорт
2 Azgerd
 
23.01.20
14:28
(1) "у процедуры ПересчитатьДокументНаКлиенте должен быть Экспорт." Эта процедура в типовой форме документа "разовые начисления", а вызываю её из расширения формы списка. Менять модуль формы документа не могу, не сняв конфигурацию с поддержки. Может есть какое другое решение ?
3 Sasha_H
 
23.01.20
15:08
ОткрытьФорму() - Вызвать процедуру и закрыть форму ..

При этом придется расширением сделать несколько перехватов чтобы научить. А иначе никак. Либо Экспорт процедуры. Либо то что тебе надо выноси на расширение например в модуль менеджера весь механизм процедуры из формы.

Либо делай ОткрытьФорму, а в расширении формы добавить

ПриОткрытииПосле
//в открытии передаешь како-то параметр наприимер
ВызватьПроцедуруПересчетаПриОткрытии = Истина
Проверяешь если параметр твой вызываешь процедуру пересчета, записываешь текущий документ если такое необходимо по алгоритму я ж не знаю что там у тебя и закрываешь документ
4 pechkin
 
23.01.20
15:09
доавть ту форму в расширение и добавь новый экспортный метод, который будет вызывать твой не экспортный
5 Sasha_H
 
23.01.20
15:11
Но можно столкнуться с кучей дополнительных проблем поэтому следует щательно изучить код. Во-впервых процедура пересчета может иметь асинхронные вызовы. Поэтому тут следует хитро все сделать

Добавить ключевой параметр формы БылПерерасчетПриОткрытии (Булеов) если асинхроники есть то придется в расширении делать методы После где и указывать, что твоя процедура закончила работу и установить значение параметра БылПерерасчетПриОткрытии  и вызвать метод Записи объекта и последующего его закрытия
6 Sasha_H
 
23.01.20
15:11
(4) он хочет Вызвать из формы списка процедуры формы Объекта.
7 НадюшаЯЯ
 
23.01.20
15:11
(4) +
8 Масянька
 
23.01.20
15:13
Все собрались - я спрошу: общие модули реализовали?
9 Sasha_H
 
23.01.20
15:14
(4), действитель сразу не понял. Сделай как написано в (4).
10 Sasha_H
 
23.01.20
15:15
Но.. внимательно изучи, что процедура делает, елси там задются еще вопросы пользователю то работать не будет!
11 НадюшаЯЯ
 
23.01.20
15:19
(10) там вроде бы сразу на сервер без вопросов идет, но форму все равно открывать надо, как я понимаю, чтобы у нее отработало присозданиинасервере и приоткрытии ну и остальные процедуры
12 НадюшаЯЯ
 
23.01.20
15:23
А тут как раз уже асинхронность получим.
13 pechkin
 
23.01.20
15:24
(11) при создании без открытия срабатывает
14 НадюшаЯЯ
 
23.01.20
15:37
(13) Точно, уже закрыла, не смогу посмотреть что там в при открытии
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.