Доброго времени суток. Подскажите, пожалуйста, есть ли какая то возможность вызвать ПоказатьВопрос(Новый ОписаниеОповещения.... из Процедура ОбработкаПроведения ? Пробовал создавать экспортную процедуру, но ругается, что метод не обнаружен, в принципе догадываюсь, ошибка возникает из за вызова клиентской процедуры на сервере.
(2) Спасибо, но там вроде нельзя проверить режим записи документа, а у меня есть процедуры и функции в модуле объекта, связанные с обработкой проведения. Поэтому не вариант(
<РежимЗаписи>
Тип: РежимЗаписиДокумента.
В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи. Изменение значения параметра позволяет изменить режим записи.
Форма
ПередЗаписью(<Отказ>, <ПараметрыЗаписи>)
<ПараметрыЗаписи>
Тип: Структура.
Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра - РежимЗаписи и РежимПроведения. Они добавляются автоматически при вызове команд "Провести", "Провести и закрыть", "Отмена проведения".
Параметр РежимПроведения может отсутствовать, если режим проведения в документе не определен.
На крайний случай ПередЗаписьюНаСервере(<Отказ>, <ТекущийОбъект>, <ПараметрыЗаписи>)
(8) я пробовал вопрос вставлять в Процедуру формы ПередЗаписью, но во время вызова вопроса полностью успевает отработать код Процедуры ОбработкаПроведения и Процедуры ПередЗаписью из модуля объекта, то есть все мои процедуры, которые связаны с проведением, отработают еще до того ,как пользователь ответит на вопрос. Или вы имеете ввиду, что еще в процедуре формы ПослеЗаписи повторно записать документ, чтобы повторно вызвать срабатывание процедур из модуля объекта? Но опять же, это сломает логику кода из модуля объекта. Если только создать реквизиты, им присваивать определенные значения в зависимости от условий, и потом уже в зависимости от значений реквизитов вызывать ту или иную процедуру/функцию.
(1) в "ОбработкеПроведения" и в принципе в модуле объекта (УФ) - нельзя, т.к. отрабатывается на сервере. Если вам это необходимо при интерактивном проведении из формы документа, то можно "задать вопрос" в процедуре модуля формы "ПередЗаписью".
Вы уверены, что это стоит делать именно в обработке проведения? Какая цель? Может в процедуре Перед записью? Причем формы документа, т.к. документы могут обработками массово проводиться.
(3) во время проведения создается документ еще и в другой базе, на основании проводимого документа. Цель такая, чтоб спрашивать у пользователя, перезаписать документ в другой базе или нет (например данные в документе поменялись), и завязано это все именно с процедурой обработки проведения.
(12) из процедуры передзаписью так же не вызвать вопрос, если брать модуль объекта, если брать модуль формы - то сначала отрабатывают все процедуры из модуля объекта, а именно (ПередЗапись, ОброботкаПроведения), потом уже задается вопрос, который по сути ничего уже и не решает. Я уже все эти варианты перепробовал.
(13)Ваше желание задавать вопросы при проведении документа - нонсенс, потому что проведение документа может быть вызвано кодом, кому в таком случае задавать вопросы будете?
Все вопросы задаются при интерактивной работе пользователя, т.е. до попытки записи объекта в БД, в его форме.
(15) это я понимаю все, но вот, к примеру, ситуация. При проведении проверяется заполненность определенного реквизита документа, если он заполнен то документ проводится, иначе просто записывается. Если документ проводится, то на его основании должен создаваться документ в другой базе (такое условие поставленной задачи), и вот например ситуация,пользователь не правильно указал , например, количество, изменяет реквизит, пытается провести, а из другой базы приходит ответ что документ уже создан, так как запись со ссылкой на документ основания уже имеется в регистрах, можно, конечно, на модифицированность реквизитов проверку делать, но условие задачи именно спрашивать перед проведением, если данные изменились, пересоздавать документ в другой базе или нет. Как то так. Приношу извинения, если некорректно описал ситуацию.
(17)Да вы поймите, что другая база - это другая вселенная. Лезть в нее и открывать транзакцию при открытой транзакции в какой-то другой БД - это убийство производительности обеих БД.
Ваша задача сводится к тому, чтобы при интерактивной работе пользователя выяснить ВСЕ условия проведения документа, пользователю абсолютно по-барабану, что будет происходить в какой-то не ведомой ему БД.
Вы должны принять условия проведения текущего документа от пользователя и на основании этих условий провести документ в текущей БД и при необходимости зафиксировать, что данный документ должен быть передан в другую(-ие) БД.
Все упоминания, того, что заказчик хочет непременно так можете засунуть куда подальше, т.к. заказчик ВООБЩЕ не представляет технических особенностей реализации его хотелок. БД - это не реал-тайм учет, как многим хочется, это ТРАНЗАКЦИОННОСТЬ прежде всего.
(6) Нет ли возможности, в принципе, отказаться от вопроса пользователю? Зафиксировать все возможные причины для перезаписи документа и система сама будет понимать что перезаписывать, а что нет.
(14) Реквизит документа "Создать в другой базе" типа "Булево"
И создавать не при проведении, растягивая транзакцию на создание COM-объекта и создания и записи документа во второй базе, а регистрации этого документа на узле обмена, с последующим переносом в другую базу регзаданием.
(23) у меня ком объектов не создается, данные передаются через веб сервис, если только большой объем данных улетит на сторону другой базы, тогда да, там долго будет создаваться документ, но на данный момент для пользователя проведение проходит незаметно по времени. Насчет реквизита я думал, но у меня слишком много операций в вебсервисе, придется для каждой свой реквизит или уникальное значение реквизита пилить, что не очень то хочется...
(24) В любом случае вопрос в транзакции плохо.
Был случай с курящим оператором: она нажимала "Провести" и шла курить. У неё не экране 10 минут висел вопрос, а часть остальных операторов бомбила техподдержку: "Почему заказы не проводятся?"
А те не могли найти ошибку: часть проводятся, часть не проводятся, зависимость непонятная.
(22) Спасибо! Вариант действительно отличный, только он будет всегда вопрос задавать, и если новый документ, и если уже есть в инфо базе, так как ЭтаФорма.Параметры.Ключ.Пустая() всегда будет иметь значение Ложь.