|
запрет на проведение документа | ☑ | ||
---|---|---|---|---|
0
palima
29.01.19
✎
10:35
|
Здравствуйте. Подскажите пожалуйста как сделать так, чтобы документ проводился только в том случае, если заполнен определенный реквизит, но при этом его (документ) можно было записать?
И где лучше это делать: в Перед записью() или в Модуле в обработкеПроведения? Если ПустоеЗначение(ДатаВыдачи) Тогда Предупреждение("Документ может быть проведен только с заполненной датой выдачи. Внесите дату или нажмите «Записать»."); Отказ = Истина; КонецЕсли; |
|||
1
palima
29.01.19
✎
10:36
|
пример выше не работает, т.к. даже при попытке записать выдает ошибку о невозможности сделать это...
скорее всего это из-за Отказ=Истина, но я не совсем разобралась как это исправить... |
|||
2
Василий Алибабаевич
29.01.19
✎
10:39
|
(0) Где устанавливается отказ там он и действует.
Если все, указанное в (0) происходит в ПередЗаписью - отменяется запись. |
|||
3
palima
29.01.19
✎
10:42
|
(2) да, сейчас я пытаюсь это сделать в ПередЗаписью()...
|
|||
4
unregistered
29.01.19
✎
10:44
|
ОбработкаПроверкиЗаполнения, если речь идёт о работе формы. Если в ПередЗаписью воткнуть ПроверитьЗаполнение(), вызывающее событие ОбработкаПроверкиЗаполнения, то будет проверяться заполнение перед записью и в случае ошибки запись отменяться.
|
|||
5
Василий Алибабаевич
29.01.19
✎
10:46
|
В УФ можно использовать событие ПередЗаписью. В него передается признак ПараметрыЗаписи. А там указано что пытаемся сделать записать или провести. В зависимости от этого можно отказаться от записи.
Для примера : &НаКлиенте Процедура ПередЗаписью(<Отказ>, <ПараметрыЗаписи>) Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокументаПроведение Тогда Если Объект.РежимЗаписи = Дата(1,1,1) Тогда Отказ = Истина; Сообщение = Новый СообщениеПользователю; ... КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
6
palima
29.01.19
✎
10:50
|
(5) а если это не уф, а самописная 8.1 на обычных формах?
|
|||
7
Галахад
гуру
29.01.19
✎
10:55
|
(6) Да так же. Почти.
|
|||
8
Shrike
29.01.19
✎
10:57
|
В свойствах реквизита поставь "Проверка заполнения" на выдавать ошибку.
|
|||
9
Василий Алибабаевич
29.01.19
✎
10:57
|
(6) В модуле объекта (документа) есть аналогичное событие ПередЗаписью. Туда тоже передаются параметры записи. Их точно также можно анализировать. Не получится попользовать СообщениеПользователю и привязку к реквизитам. Ну так то - бантики. Пользуйте Сообщить().
|
|||
10
Василий Алибабаевич
29.01.19
✎
10:58
|
(8) Оно будет запрещать и просто запись. Не только проведение.
Придется перехватывать проверку заполнения. |
|||
11
palima
29.01.19
✎
11:02
|
(10) Да, вся суть и сводится к тому, что если реквизит заполнен - и записываем и проводим, если не заполнен - имеем возможность только записать без проведения. А предупреждение или сообщение - не имеет значения.
|
|||
12
catena
29.01.19
✎
11:04
|
(11)Ну при проведении и проверяй. Только предупреждение оттуда выкинь.
|
|||
13
palima
29.01.19
✎
11:07
|
(12) О, кажется получилось, спасибо. Не думала, что между предупреждением и сообщением такая принципиальная разница в контексте моей задачи..
|
|||
14
Shrike
29.01.19
✎
11:07
|
(10) Да ладно?
(11) Используй 8 |
|||
15
catena
29.01.19
✎
11:11
|
(13)
Сообщить (Message) Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Предупреждение (DoMessageBox) Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент). |
|||
16
catena
29.01.19
✎
11:13
|
Плюс, Предупреждение открывает модальное окно, блокирующее дальнейшее выполнение. Если пользователь нажмет провести и уйдет пить кофе, проведение начнется, заблокирует все связанные таблицы, а потом зависнет на Предупреждении. И все остальные пользователи начнут звонить программисту.
|
|||
17
palima
29.01.19
✎
11:26
|
(14) и так тоже работает, совсем запуталась(
|
|||
18
singlych
29.01.19
✎
11:31
|
(8) или (4) (ОбработкаПроверкиЗаполнения и в модуле объекта есть). Остальное от лукавого.
|
|||
19
Shrike
29.01.19
✎
11:31
|
(17) Зачем тебе (1) и т.д., если есть типовой механизм, который и проверит и сообщение выдаст. А если нужно проверять будет много реквизитов, на каждый код будешь писать?
|
|||
20
catena
29.01.19
✎
11:37
|
(19)Разве в 8.1 есть проверка заполнения реквизита?
|
|||
21
Василий Алибабаевич
29.01.19
✎
11:37
|
(19)
1. Типовой механизм не проверит комбинацию реквизитов. 2. Типовой механизм не подсветит поле в табличной части документа так как сделает СообщениеПользователю 3. Даже у ТС есть необходимость проверять заполнение при проведении и не проверять при записи. Что ОбработкаПроверкиЗаполнения, что ПередЗаписью программировать ... |
|||
22
Shrike
29.01.19
✎
11:39
|
(20) Судя по (17) либо есть, либо там не 8.1)
|
|||
23
Сияющий в темноте
29.01.19
✎
11:42
|
(16)ПоказатьПредупреждение прекрасно справляется с проблемами модальности.
просто,в обработке проведения нельзя быть уверенным,что проведение инициировал пользователь,а не фоновое задание. |
|||
24
catena
29.01.19
✎
11:44
|
(23)ПоказатьПредупреждение точно не было в 8.1))
(22)Хм, память подводит уже значит |
|||
25
Василий Алибабаевич
29.01.19
✎
11:46
|
(23) Его нельзя пользовать НаСервере
|
|||
26
Василий Алибабаевич
29.01.19
✎
11:48
|
+ (25) В ОбработкаПроведения
|
|||
27
singlych
29.01.19
✎
11:54
|
(21)
1. Есть ОбработкаПроверкиЗаполнения. 2. Подсветит, если форма скомпонована тривиально. 3. ОбработкаПроверкиЗаполнения работает только при проведении или при явном вызове ПроверитьЗаполнение (а ПередЗаписью не отработает при последнем). |
|||
28
singlych
29.01.19
✎
11:55
|
Ну и вообще, проверять заполнение логично в проверке заполнения, не так ли?
|
|||
29
palima
29.01.19
✎
12:57
|
(20) есть :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |