Как понять способ проведения из модуля объекта документа?

1. Tedman 10.12.14 11:31 Сейчас в теме
Добрый день, коллеги.
Что-то столкнулся с мелкой, на первый взгляд, проблемой, которую никак не получается решить по-хорошему.
УФ. В модуле документа необходимо понимать, как у нас проводится документ, интерактивно или программно (к примеру для осуществления доп. проверок).
Какие варианты отрыл:
1) Перед записью в модуль формы вставлять в ДополнительныеПараметры какое-то свойство, которое потом проверять в модуле объекта.
Вариант не катит потому, что надо в таком случае менять каждую форму (как самого документа, так и списка), дабы этот параметр всунуть.
2) Идти от обратного: запрещать по-умолчанию проведение, если отсутствует необходимо свойство в указанной выше структуре, и вставлять значение структуры в коде обработки, из которой идёт проведение, но этот вариант не катит, потому что мы автоматически отказываемся от обработок типа "Группового проведения".
3) Решать вопрос через роль + RLS, но тут сложность в сложности реализации + более скудных возможностях контроля, т.е. когда пользователю можно перепроводить из формы, а когда нельзя.
Вопрос в следующем: как можно ещё понять, проводится ли документ интерактивно или нет?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Africa 10.12.14 12:42 Сейчас в теме
(1) Tedman, Если рассматривать именно модуль объекта и его метод "Обработка проведения", то считаю, что крайне неверно делать какие-то действия зависящие от того интерактивно или не интерактивно проводится документ. Если нужны проверки для интерактивного проведения, то имхо, лучше их делать в событиях ПриЗаписи(), тем более, что это событие для формы однозначно определяет интерактивность вызова, либо событием ОбработкаПроверкиЗаполнения(), которое вызывается при проведении документа в форме (если разрешено проведение документа)
7. oldfornit 10.12.14 15:43 Сейчас в теме
(1) полностью согласен с (2).
А расскажите в чем цель задачи?
9. Tedman 10.12.14 17:07 Сейчас в теме
(7) Есть документ, который пользователь вводит руками, или программно из специально обработки.
Если пользователь проводит документ, то должна делаться определенная проверка\выполняться некий код и т.п., в данном случае не важно. Если проведение идёт из обработки (самописной или групповой), то данную проверку делать не надо. Вопрос встал потому, что не хочется:
а) для каждой формы объекта и формы списка, где используется документ, вставлять дополнительные параметры
б) через пол года, когда про это все забудут и сделают ещё один список документов, то про эту проверку, и, как следствие, передачу параметров с формы, все забудут.
(8) Понял. Огромное спасибо!
3. alexpa2005 10.12.14 12:59 Сейчас в теме
Можно создать глобальный параметр сеанса РежимПроведенияПрограммный и в случае программного проведения устанавливать его Истина. В модуле любой формы можно проверить его значение. После окончания транзакции проведения не забывать перевести в Ложь.
5. Tedman 10.12.14 13:02 Сейчас в теме
(3) alexpa2005, так а чего параметр сеанса то? Почему не константу?
4. Tedman 10.12.14 13:01 Сейчас в теме
"ПриЗаписи(), тем более, что это событие для формы однозначно определяет интерактивность вызова"
Если вы имеете ввиду событие в форме, то мне кажется, тут и определять не надо, что оно интерактивное...
Как вы поймете в "ОбработкаПроверкиЗаполнения()" что документ проводится? Тем более интерактивно или программно?
Представьте, что нету формы у документа вообще, т.е. она генирируется "на лету", и мне надо понять в модуле объекта документа (я не говорил, что в обработке проведения) как именно пользователь проводит документ. Из формы\списка, или групповой обработкой\с помощью специальной обработки. Грамотность и красивость решения в данном случае не обсуждается.
8. Africa 10.12.14 16:27 Сейчас в теме
(4) Tedman,
Как вы поймете в "ОбработкаПроверкиЗаполнения()" что документ проводится? Тем более интерактивно или программно?
Представьте, что нету формы у документа вообще, т.е. она генирируется "на лету", и мне надо понять в модуле объекта документа (я не говорил, что в обработке проведения) как именно пользователь проводит документ


Так в том то и дело, что ОбработкаПроверкиЗаполнения вызывается только в том случае, если документ проводится интерактивно (если он вообще проводится) или каждый раз когда его интерактивно записывают, если он не формирует движений. Также принудительно ее можно вызвать методом "ПроверкаЗаполнения", если очень надо.

Код этой обработки вы пишите в модуле нужного объекта - ее вызов и будет определять интерактивно проводится документ или как. Она не должна вызываться если вы программно записываете и проводите документ.
IssakN; Armaggik; Tedman; +3 Ответить
6. Tedman 10.12.14 14:19 Сейчас в теме
Вообще ни у кого нет никаких мыслей?
10. TSSV 1145 12.07.18 10:30 Сейчас в теме
В модуле объекта, в ОбработкаПроверкиЗаполнения (выполняется только при интерактивном проведении), вставить код:

ДополнительныеСвойства.Вставить("ЭтоИнтерактивноеПроведение");

Далее, проверять его (например в ПередЗаписью модуля объекта):
Если Не ДополнительныеСвойства.Свойство("ЭтоИнтерактивноеПроведение") Тогда
...
Учесть последовательность вызовов:
https://its.1c.ru/db/pubdevguide83#content:608:hdoc

Этот подход может быть полезен, когда, например, проверка введенных в форме данных осуществляется в ПередЗаписью модуля формы - то есть на клиенте, тогда, в случае отказа поток не уходит на сервер, что может оказаться полезным. Но, при программном проведении тоже нужно проверять, при этом избежать повторной проверки для случая валидных данных.
mike40; vis_tmp; Toliban; realm; finik1; +5 Ответить
11. TSSV 1145 12.07.18 18:42 Сейчас в теме
(10) p.s. Проведение из формы списка тоже считается интерактивным ...
Оставьте свое сообщение

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