Имя: Пароль:
1C
1С v8
1С 8.3 УФ. Вывести "Вопрос" при записи элемента справочника
, ,
0 mishkerdon
 
24.11.14
06:51
Доброе утро! В модуле объекта справочника есть код проверки в событиях "ПередЗаписью" и "ПриЗаписи", нужно вывести "Вопрос" после этой проверки пользователю до окончательной записи элемента справочника.
Но выходит, если смотреть последовательность событий, то после "ПриЗаписи" в модуле объекта остаются только два события: "ПриЗаписиНаСервере" и "ПослеЗаписи" в модуле формы. В "ПриЗаписиНаСервере" нельзя клиентские функции вставлять, а в "ПослеЗаписи" нельзя отменить запись.
Как можно поступить в этом случае??
1 SergeyKB
 
24.11.14
07:00
>в модуле объекта

исполняется на сервере, забудьте про интерактивную работу с клиентов оттуда

C учётом, что Вопрос модальный диалог, а теперь
1С рекомендует внедрять через механизмы  ассинхронных обработчиков, то лучше вам пересмореть сценарий\интерфейс работы
а объяснить для начала, что будет в данном вопросе ?
2 mishkerdon
 
24.11.14
07:08
(1) в данном вопросе выводится предупреждение об неустановленных реквизитах (с возможность продолжить или нет). Эти реквизиты устанавливаются или снимаются в проверке в модуле объекта.
3 Cube
 
24.11.14
07:16
(2) Что мешает сделать проверку в процедуре формы ПередЗаписью()?
4 mishkerdon
 
24.11.14
07:45
(3) проверка должна выполняться всегда, даже при записи из кода и т.п.
5 Рэйв
 
24.11.14
07:47
(4)Какие могут быть вопросы когда чтото неправильно заполенно?
В ПередЗаписью Отказ=Истина и всех  в сад с сообщением пользователю. Пусть исправляют
6 SeraFim
 
24.11.14
07:49
(4) ага, запускается фоновое задание с обменом. И у кого твой код будет спрашивать?
7 Мимохожий Однако
 
24.11.14
07:51
У нужных реквизитов установи режим выдачи ошибки при пустых значениях. Система сама спросит и пошлёт.
8 Cube
 
24.11.14
07:54
(4) Так ты делай процедуру &НаСервере в которой всё проверяешь и вызывай её в процедурах:
- в форме &НаКлиенте с выводом сообщений
- в модуле объекта без вывода сообщений. Просто Отказ = Истина.
9 Cube
 
24.11.14
07:56
(8) Можно сделать, чтобы функция проверки возвращала текст ошибки. И если текст ошибки не пустой, то не записывать. &НаКлиенте текст ошибки ещё и выводить пользователю в лицо.
10 mishkerdon
 
24.11.14
07:56
(5) (6) Нет подождите, я пишу про разные вещи - есть код проверки в модуле объекта (он проверяет статус реквизитов и устанавливает или снимает их) и есть код проверки заполненности одного реквизита (необязательное заполнение, т.е. "Вопрос" передается как ДаНет, пользователь может продолжить запись и без этого реквизита). Но проблема в том, что этот код правильно сработает только после проверки и установки реквизитов в модуле объекта.
11 mishkerdon
 
24.11.14
07:59
(8) пока так и сделал, т.е. вынес код проверки в модуле объекта из процедуры "ПриЗаписи" в отдельную процедуру, и вызываю ее и в "ПередЗаписью" на форме, и в "ПриЗаписи" в объекте. Но насколько это правильно не знаю, так как в будущем как раз таки этот код может стать рекурсивным.
12 Рэйв
 
24.11.14
08:01
(10)Если идет программная запись, значит все так и надо как есть.Потому что ты сам должен программно заполнить как надо.а если интерактивная запись, то спрашивай в модуле формы. В ПередЗаписью в модуле объекта паровоз уже ушел на сервер и там спрашивать уже не у кого.
13 Рэйв
 
24.11.14
08:04
+(12)>>Эти реквизиты устанавливаются или снимаются в проверке в модуле объекта.

ничего не мешает делать те же проверки в модуле формы.
14 mishkerdon
 
24.11.14
08:07
(13) Вам наверно уже смешно, но дважды запускать эту проверку в одной транзакции нельзя :)
15 Рэйв
 
24.11.14
08:23
(14)Тогда скинь бремя метаний и сомнений и считай, что юзверь умный, и перед записью все заполнил как ему надо. А если не заполнил - то он сам себе злобный буратино:-)
16 Kamas
 
24.11.14
09:22
ВызватьИсключение "Злобный буратино сделай как надо";
17 olegves
 
24.11.14
09:36
(0) зачем коряво программить? При записи активна транзакция, и общение с юзверями не комильфо - длительная блокировка гарантирована.
Все общения с юзверями - вне транзакций - заруби себе на носу...
AdBlock убивает бесплатный контент. 1Сергей