|
Разрешить записать документ, но запретить провести по кнопке Οκ? | ☑ | ||
---|---|---|---|---|
0
pvase
22.04.19
✎
12:14
|
Здравствуйте.
Возникла необходимость при проведении документа делать некую проверку и запрещать проводить, но при этом надо чтобы документ сохранялся в базу. Т.е. когда пользователь создает новый документ и жмет кнопку "Οκ", то чтобы при проведении выдавалось сообщение об ошибке, и документ не проводился, но записывался в базу. Сейчас же, ввиду реализации транзакции в 1С: ПередЗаписью - ПриЗаписи - ОбработкаПроведения, если в любом из этих модулей Отказ = Истина - тогда откатывается вся транзакция и документ не сохраняется в базу, даже новый. Подскажите пожалуйста, как можно разрешить записывать, но запретить проводить нового документа по кнопке Οκ? |
|||
1
Nikoss
22.04.19
✎
12:15
|
режим записи поменять
|
|||
2
Ахмадинежад
22.04.19
✎
12:17
|
А если открыть проведённый, изменить и попытаться перепровести ? Пусть сам меняется, а его движения нет ?
|
|||
3
pvase
22.04.19
✎
12:19
|
(1) Как это сделать, на кнопке Οκ висит стандартная команда "Записать и закрыть"?
|
|||
4
Eiffil123
22.04.19
✎
12:20
|
(1) хитро. Раньше не предполагал, что режим записи можно менять программно в процедуре "Перед записью"
|
|||
5
Eiffil123
22.04.19
✎
12:20
|
(3) свою кнопку "Ок" нарисовать, в ее коде вызывать запись в нужном режиме.
|
|||
6
pvase
22.04.19
✎
12:21
|
(2) С проведенными все гуд, надо с новыми. Дело в том, что при записи создается документ на основании, а потом обработка проведения откатывает транзакцию и соответственно откатывается и созданный на основании документ. Получается что Отмена в проведении отменять и запись созданных документов в процедуре "ПередЗаписью".
|
|||
7
Cyberhawk
22.04.19
✎
12:25
|
Создавай связанный документ вне транзакции записи основания
|
|||
8
Eiffil123
22.04.19
✎
12:30
|
(0) вообще варианта 2:
1. Нарисовать свою кнопку "Ок", в ней 2 строки кода (Записать, потом провести) 2. Сказать пользователям, что так работает 1С и если нужно обязательно записать документ, то пусть сначала жмут Записать, потом уже провести. |
|||
9
1Сергей
22.04.19
✎
12:40
|
Семёрка, отпусти автора
|
|||
10
Eiffil123
22.04.19
✎
12:47
|
(9) в семёрке было ПередЗаписью?
|
|||
11
Nikoss
22.04.19
✎
13:03
|
(6) да не надо делать отмену в проведении. В процедуре передзаписью (на форме) просто вставить строку
"ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Запись;" И никакого проведения не будет. |
|||
12
Cyberhawk
22.04.19
✎
13:03
|
(11) Так ему все-таки за одно нажатие надо чтоб и провелось, если все хорошо
|
|||
13
pvase
22.04.19
✎
13:06
|
(11) Таки ДА.
Переделываю на свою процедуру кнопку ОК. |
|||
14
pvase
22.04.19
✎
14:16
|
Что-то не могу понять, написал свою функцию проведения:
Процедура ОсновныеДействияФормыОК(Кнопка) ДополнительныеСвойства.ПрограммноеИзменение = Ложь; Если ЭтоНовый() Тогда Записать(РежимЗаписиДокумента.Запись,РежимПроведенияДокумента.Оперативный); КонецЕсли; ЕстьНарушения = ПроверитьНарушения(); Если ЕстьНарушения Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Обнаружены нарушения при проведении"; Сообщение.КлючДанных = Ссылка; Сообщение.ПутьКДанным = "Объект"; Сообщение.Сообщить(); //Отказ = Истина; КонецЕсли; Если НЕ ЕстьНарушения Тогда Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Оперативный); КонецЕсли; КонецПроцедуры Но в результате документ в отладчике пишет что создан (Новый() = Ложь) но при этом в журнале его нет. Подскажите, что может быть не так? |
|||
15
pvase
22.04.19
✎
14:20
|
Ситуация еще хуже. Если в открытой форме, подправить реквизит и попытаться закрыть, то выдает сообщение о модифицированности и необходимости записать. Если нажать на кнопку "Да" то документ как будто записывается и форма закрывается, но в форме списка нет.
|
|||
16
1Сергей
22.04.19
✎
14:21
|
(10) семерка по умолчанию сохраняет док даже в случае ошибки
|
|||
17
pvase
22.04.19
✎
14:28
|
На всякий случай: Форма - обычная, клиент - толстый.
|
|||
18
pvase
22.04.19
✎
14:31
|
При этом в заголовке формы пишет "Новый", а значение Модифицированность() = Ложь; Ссылка не пустая, но документа физически нет.
|
|||
19
pvase
22.04.19
✎
14:38
|
В общем, что-то непонятное. Документ создается, записывается, а потом как будто все отменяется, документ снова становиться новым и не записанным, при этом и не модифицированным.
|
|||
20
Nikoss
22.04.19
✎
14:44
|
как минимум 2 раза слово "запись" из процедуры убрать нужно
|
|||
21
Nikoss
22.04.19
✎
14:47
|
+(20) ну т.е. делать сначала запись, а потом еще раз запись с проведением - не правильно
|
|||
22
Nikoss
22.04.19
✎
14:50
|
что-то типо того
Процедура ОсновныеДействияФормыОК(Кнопка) ДополнительныеСвойства.ПрограммноеИзменение = Ложь; ЕстьНарушения = ПроверитьНарушения(); Если ЕстьНарушения Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Обнаружены нарушения при проведении"; Сообщение.КлючДанных = Ссылка; Сообщение.ПутьКДанным = "Объект"; Сообщение.Сообщить(); //Отказ = Истина; КонецЕсли; Если ЕстьНарушения Тогда Если ЭтоНовый() Тогда Записать(РежимЗаписиДокумента.Запись); КонецЕсли; Иначе Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Оперативный); КонецЕсли; КонецПроцедуры |
|||
23
Nikoss
22.04.19
✎
14:51
|
Но судя по логике твоего кода, не новые с нарушением записаны не будут.
|
|||
24
Cyberhawk
22.04.19
✎
16:21
|
(22) С таким кодом документ никогда с первого раза проведен не будет
|
|||
25
Nikoss
23.04.19
✎
06:26
|
(24) если нарушений нет, будет с первого раза проведен
|
|||
26
Cyberhawk
23.04.19
✎
07:34
|
(25) Это только если успешно проведется. А если неуспешно, что изначально и наблюдается у автора, то будет отлуп без сохранения "черновика", т.е. твой способ ничем от ситуации в сабже отличается, т.к. нарушение (отлуп) у него только в транзакции проведения вываливается и заранее он не хочет проверять )
|
|||
27
los_hooliganos
23.04.19
✎
08:01
|
ПередЗаписью - ПриЗаписи - ОбработкаПроведения
Заводишь реквизит флЗаписатьНеПроводить; Если в ПередЗаписью - ПриЗаписи Отказа = Истина, то ставишь Отказа = Ложь в расширениях После[ПередЗаписью - ПриЗаписи] при этом реквизит флЗаписатьНеПроводить = Истина; Если в ОбработкаПроведения флЗаписатьНеПроводить = Истина Тогда Отказа = Истина; можно в расширение Перед[ОбработкаПроведения] |
|||
28
los_hooliganos
23.04.19
✎
08:02
|
(27) Если это нетиповая то можно это в саму конфу засунуть
|
|||
29
Nikoss
23.04.19
✎
08:58
|
(26) это я написал еще в (23). Никто не мешает убрать прверку на Новый() и сделать по умолчанию запись.
"и заранее он не хочет проверять" почему не хочет? у него же в коде (14) есть обращение к функции "ЕстьНарушения = ПроверитьНарушения();" |
|||
30
Cyberhawk
23.04.19
✎
13:33
|
(29) А, ясно, не читал просто всю ветку ) Оказывается это сам автор там проверку уже реализовал, Я-то думал это ты ему предлагаешь так делать )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |