Имя: Пароль:
1C
 
запрет на проведение документа
,
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) есть :)