Внешнее заполнение формы на БСП. Вызов метода формы, из общего модуля, завершается ошибкой.

1. bravoasu 01.06.21 15:52 Сейчас в теме
Добрый день.
Прошу помощи разобраться в мистике.
Конфигурация БП для Беларуси (БСП версии 3.1.2.527). При выполнении внешней обработки с типом "Заполнение формы" возникает ошибка. Вызов обработки происходит из формы элемента, справочника "Контрагенты"
Выполнение обработки завершается ошибкой "Метод объекта не обнаружен (Подключаемый_ВыполнитьКомандуНаСервере)"
Вызов метода осуществляется в общем модуле "ПодключаемыеКомандыКлиент", процедура "ПродолжитьВыполнениеКоманды"
Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);


В "форме элемента", справочника "контрагенты" вызываемая процедура присутствует, но не является экспортной.
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры


Вся мистика состоит в том, что аналогичный код работает в других конфигурациях ("Комплексная автоматизация" и "Демо_БСП"). Там вызов не экспортной процедуры проходит успешно.

Вопрос: в чем может быть дело?? Как исправить эту ошибку не снимая конфигурацию с поддержки?
Найденные решения
2. SlavaKron 01.06.21 16:19 Сейчас в теме
С какой-то версии платформы убрали возможность вызывать неэкспотрные серверные процедуры модуля управляемой формы. Вам надо либо добавить "Экспорт" для Подключаемый_ВыполнитьКомандуНаСервере, либо понизить версию платформы (возможно версию совместимости, но это не точно).
bravoasu; +1 Ответить
3. spec8s 831 01.06.21 16:27 Сейчас в теме
(1)
Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);


можно попробовать в расширении заменить кусок кода

ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);
//заменить на
СвойМодульВызовСервера.ВыполнитьКоманду(ПараметрыВыполнения.Форма, СерверныйКонтекст, ПараметрыВыполнения.Форма.Объект, Результат);


Только предварительно нужно создать общий модуль с вызовом сервера и положить туда код
ПодключаемыеКоманды.ВыполнитьКоманду(ПараметрыВыполнения.Форма, СерверныйКонтекст, ПараметрыВыполнения.Форма.Объект, Результат);
bravoasu; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spec8s 831 01.06.21 16:27 Сейчас в теме
(1)
Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);


можно попробовать в расширении заменить кусок кода

ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);
//заменить на
СвойМодульВызовСервера.ВыполнитьКоманду(ПараметрыВыполнения.Форма, СерверныйКонтекст, ПараметрыВыполнения.Форма.Объект, Результат);


Только предварительно нужно создать общий модуль с вызовом сервера и положить туда код
ПодключаемыеКоманды.ВыполнитьКоманду(ПараметрыВыполнения.Форма, СерверныйКонтекст, ПараметрыВыполнения.Форма.Объект, Результат);
bravoasu; +1 Ответить
4. bravoasu 01.06.21 16:34 Сейчас в теме
Спасибо, я поступил также.
6. SlavaKron 01.06.21 16:50 Сейчас в теме
(4) Так могут поломаться подключаемые команды в списках с вызовом серверного метода, так как там основной реквизит Список, а не Объект. Например внешние печатные формы могут не взлететь. Если пошли по этому пути, нужно дополнительно вычислять имя основного реквизита формы.
7. bravoasu 03.06.21 11:12 Сейчас в теме
(6) Спасибо за замечание. Я слишком бегло глянул на (1) и сказал, что поступил также. Поступил я слегка иначе.
Этот участок кода
ПараметрыВыполнения.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);

заменил (в расширении) на
Если Контекст.Форма.ИмяФормы = "Документ.ПоступлениеНаРасчетныйСчет.Форма.ФормаДокумента" Тогда
	Контекст.Форма.Расш_Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);
Иначе 
	Контекст.Форма.Подключаемый_ВыполнитьКомандуНаСервере(СерверныйКонтекст, Результат);				
КонецЕсли;

Заполняемую форму вынес в расширение, и в ней добавил дубль, только экспортный, исходной процедуры.
А, например, внешние печатные формы вызывают другую процедуру. В противном случае они бы перестали работать из-за НЕ экспортной процедуры. Да и решение, надеюсь, временное, так как ошибка должна охватывать все конфигурации, выполненные на БСП, и не может долго оставаться незамеченной разработчиками.
8. SlavaKron 03.06.21 15:04 Сейчас в теме
(7)
не может долго оставаться незамеченной разработчиками.

Уже довольно давно во всех актуальных релизах типовых конфигураций процедура Подключаемый_ВыполнитьКомандуНаСервере сделана экспортной.
9. bravoasu 03.06.21 15:13 Сейчас в теме
(8) Беларусь слегка отстаёт))
2. SlavaKron 01.06.21 16:19 Сейчас в теме
С какой-то версии платформы убрали возможность вызывать неэкспотрные серверные процедуры модуля управляемой формы. Вам надо либо добавить "Экспорт" для Подключаемый_ВыполнитьКомандуНаСервере, либо понизить версию платформы (возможно версию совместимости, но это не точно).
bravoasu; +1 Ответить
5. bravoasu 01.06.21 16:36 Сейчас в теме
Спасибо. И вправду, ошибку выдает при режиме совместимости 8.3.14. В другой базе, где вызов проходит, режим совместимости 8.3.12.
Оставьте свое сообщение

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