Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > 1c 8.2 вывод формы при проведение документа


Автор: Antey 2.11.2011, 01:02
Добрый день.
Имеется клиент-серверный вариант базы УПП. Создал подписку на событие ПередЗаписью для определенных видов документов. по событию подписки вызывается процедура из некоторого общего модуля,  для которого установлены свойства: клиент упр. приложение, сервер, внешнее соединение и клиент обычное приложение. 
В процедуре выполняются некоторые условия по документам, и если документ не проходит условия проверки, то Отказ = Истина, и на экран должна выводится форма из общих форм, куда пользователь может ввести информацию (форма открывается не модально, чтобы не влиять на транзакции при про проведение документа).

Проблема возникает именно с выводом формы на экран: все условия проверки документов выполняются на сервере, и соответственно на сервере открытие интерактивных форм не возможно.

Процедура СобытиеПодписки(......)
        ...
        Если Не ДокументПрошелПроверку() Тогда
               Отказ = Истина;
               ВывестиДиалогВопроса();
        КонецЕсли;
        ...
КонецПроцедуры

Если процедуру ВывестиДиалогВопроса поместить в условие #Если Клиент, то ничего не происходит, как-будто СобытиеПодписки компилируется только на сервере. Хотя в синтаксис помощнике указано, что "Экземпляры всех общих модулей создаются как на серверной, так и на клиентской стороне", поэтому по идее процедура СобытиеПодписки должно иметь экземпляры как на сервере, так и на клиенте.
Или я не прав?

Автор: Antey 2.11.2011, 03:19
Вопрос снят.
Оказалось, что вызов перед записью в налоговый регистр происходил несколько раз, если в первом вызове процедура была скомпилена как на стороне сервера, так и на стороне клиента, то уже следующие вызовы были сформированы только на стороне сервера.

В качестве проверки, в процедуре подписки разместил кусок для теста:
#Если Клиент Тогда
        сообщить("клиент");
#КонецЕсли
#Если Сервер Тогда
    сообщить("сервер");    
#КонецЕсли
#Если ТолстыйКлиентОбычноеПриложение  Тогда
    сообщить("тол. клиент обычное приложение");
#КонецЕсли
#Если ТолстыйКлиентУправляемоеПриложение Тогда
    сообщить("тол. клиент управляемо приложение");
#КонецЕсли

При выполнение проведения одного из документов получил след. сообщения:

сервер
клиент
тол. клиент обычное приложение
тест

тест

тест

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)