|
V8: Нетленка разработать дату запрета редактирования | ☑ | ||
---|---|---|---|---|
0
andrewrocker
26.09.19
✎
19:19
|
Коллеги, привет,
Делаю очень простую нетленку, вопрос возник - есть ли совсем типовой механизм или способ внедрить дату запрета редактирования? Мне нужен максимально простой алгоритм. Сейчас добавил константу, обработка проведения выкидывает, если дата запрета больше даты документа, но документ все еще можно удалить. Что можно сделать, чтобы нельзя бы изменять документ никак, без такой проверки. |
|||
1
Жан Пердежон
26.09.19
✎
19:29
|
ПередУдалением(<Отказ>)
Параметры: <Отказ> Тип: Булево. Признак удаления документа. Если в теле процедуры-обработчика установить данному параметру значение Истина, то удаление документа выполнено не будет. Значение по умолчанию: Ложь. Описание: Возникает в транзакции удаления перед непосредственным удалением объекта из базы данных. |
|||
2
RomanYS
26.09.19
✎
19:32
|
(0) зачем "обработка проведения выкидывает"?
(1) зачем "ПередУдалением"? Есть ПередЗаписью? |
|||
3
rphosts
26.09.19
✎
19:34
|
>есть ли совсем типовой механизм
Нет >или способ Язык 1С в своём составе не имеет ничего имеющего название "способ" >Что можно сделать 1.Способ - внедрить БСП и дальше пошло поехало. Но если не знаешь БСП - придётся его осваивать 2.Способ - подписка на событие ПередЗаписью, источник события - все виды твоих документов. >но документ все еще можно удалить. Что за дичь! Нельзя разрешать в пользовательском режиме кому угодно удалять документы сразу! Только через обработку которая проверит отсутствие ссылок на удаляемый объект!!! |
|||
4
Lexandr
27.09.19
✎
03:37
|
Про уже подписку сказали. При проверке не забудь проверять как дату записываемого объекта, так и дату по ссылке, если объект не новый.
|
|||
5
Chameleon1980
27.09.19
✎
04:21
|
(4) какая разница новый или нет. Не записывать в перед записью если дата не позволяет. Всё.
|
|||
6
Chameleon1980
27.09.19
✎
04:22
|
В перед записью у тебя объект приедет.
|
|||
7
Chameleon1980
27.09.19
✎
04:25
|
Ааа. Дошло.если поменяли дату документа с запретное даты на незапретную.
|
|||
8
вым
27.09.19
✎
05:32
|
(7) тогда тем более нельзя документ менять и записывать. Иначе спокойно меняй дату на будущее и грохай документ - вуаля - изменен удален документ в запрещенном периоде)
|
|||
9
tabarigen
27.09.19
✎
08:24
|
кажется в БСП это уже сделано, проще оттуда взять эту подсистему
|
|||
10
Cyberhawk
27.09.19
✎
09:04
|
(9) Для точечной фичи в самописке - не проще )
|
|||
11
RomanYS
27.09.19
✎
09:20
|
(10) плюс много
|
|||
12
вым
27.09.19
✎
09:25
|
некоторым просто для печати счетов для клиентов проще поставить ЕРП )
|
|||
13
Birmingem
27.09.19
✎
09:33
|
Делал, как уже сказали, подписку на ПриЗаписи, и еще в процедуре ОбъектПриЧтенииНаСервере() Форма.ТолькоПросмотр с проверкой на дату закрытого периода. Чтобы пользователю сразу ничего не было доступно в закрытом периоде.
|
|||
14
Nikoss
27.09.19
✎
09:34
|
(0) Подписка на событие ПередЗаписью, для всех документов:
Если ЗначениеЗаполнено(Ссылка) Тогда Если Ссылка.Дата < ДатаЗапретаИзменения Отказ = Истина; КонецЕсли; Иначе Если Дата < ДатаЗапретаИзменения Тогда Отказ = Истина; КонецЕсли; КонецЕсли; Что-то типо того ---------- Права на непосредственное удаление забрать у всех. |
|||
15
Nikoss
27.09.19
✎
09:37
|
+(14) [Права на непосредственное удаление забрать у всех.]
Ну а если не забарть - подписка ПередУдалением еще, и обработать там отказ |
|||
16
DrLekter
27.09.19
✎
09:48
|
Константа + Подписка, проще уже ничего не придумать.
|
|||
18
banco
27.09.19
✎
11:40
|
(16) Внедрить БСП Базовую функциональность и Дату запрета 30 минут. Зато будет универсально и без ошибок.
|
|||
19
Chameleon1980
27.09.19
✎
12:02
|
(18) :) Внедрить без ошибок
|
|||
20
andrewrocker
28.09.19
✎
11:14
|
Коллеги, благодарю!
Процедура ЗапретИзмененийПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт Если (НачалоДня(Константы.ДатаЗапретаИзменений.Получить()) > НачалоДня(Источник.Дата)) Тогда Сообщить("Дата запрета изменений - " + Формат(НачалоДня(Константы.ДатаЗапретаИзменений.Получить()), "ДЛФ=ДД")); Отказ = Истина; КонецЕсли; КонецПроцедуры |
|||
21
RomanYS
28.09.19
✎
11:30
|
(20) Ага. А дату записанного документа проверить? Источник.Ссылка.Дата
|
|||
22
andrewrocker
28.09.19
✎
11:43
|
Благодаря замечанию о том, что юзер может сменить дату в прошлом закрытом документе, я добавил при открытии каждой формы:
|
|||
23
andrewrocker
28.09.19
✎
11:43
|
&НаСервере
Процедура ПриОткрытииНаСервере() Если (НачалоДня(Константы.ДатаЗапретаИзменений.Получить()) > НачалоДня(Объект.Дата)) Тогда Сообщить("Дата запрета изменений - " + Формат(НачалоДня(Константы.ДатаЗапретаИзменений.Получить()), "ДЛФ=ДД")); Элементы.Дата.Доступность = Ложь; КонецЕсли; КонецПроцедуры |
|||
24
RomanYS
28.09.19
✎
12:18
|
(23) Любишь ты своих пользователей: открыл он такой документ, поредактировал (кроме даты), жмёт "записать" - и тут нате (20).
Почему не всю форму в ТолькоПросмотр? (22) Формы это конечно хорошо. Но есть ещё обработки, обмены... в (20) придется добавить проверку Ссылка.Дата |
|||
25
andrewrocker
29.09.19
✎
11:31
|
(24) Он не сможет записать. Пробовал уже, мешает код из подписки на событие (перед записью).
|
|||
26
RomanYS
29.09.19
✎
12:48
|
(25) Конечно не сможет.
Ещё раз 2 нюанса: -(чистая забота о нервах пользователя) не надо давать пользователю редактировать что-то, если не планируете дать возможность результат сохранить -(защита от продвинутых пользователей с обработками, автоматических обменов и собственных косяков типа "забыл добавить проверку на форму") проверьте на дату запрета ещё и сохраненный документ - это лишь ещё одна строка кода к (20) |
|||
27
Сияющий в темноте
29.09.19
✎
13:19
|
Во-первых,при открытии документа в закрытом периоде должна быть блокирована форма и сообщение пользователю о том,что документ в закрытом периоде.
Во-вторых,желательно вообще запрещать пользователям менять дату проведенного документа-пусть,сначала,распроведут,а потом меняют-тогда смело можно частичное проведение реализовывать,не боясь ходить по граблям. |
|||
28
RomanYS
29.09.19
✎
13:41
|
(27) Второе утверждение спорное для 1С как на уровне методологии типовых , так и на уровне базовой подготовки спецов. Считается нормой, что спец должен уметь обходить типовые грабли и уметь не создавать свои.
Хотя во всяких "взрослых" (не 1С) системах считается нормой вообще запрет редактирования ранее записанных транзакций. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |